2022年6月26日日曜日

micropython(esp8266,esp32-dht,sdc,neoxiel etc,esp32-ap-deepsleep,esptool, cf xiao rp2040)

https://micropython-docs-ja.readthedocs.io/ja/latest/esp8266/tutorial/intro.html

にてespr developperにもまずerase-flashしてインスト成功 しかもhttps getもでけた!

https://blog.goediy.com/?p=262 でwifiコネクト

https://blog.boochow.com/article/454341667.html でhttp get of json なども参考に

以下のコードが成功した!!esp32と一緒のはず、たぶん

(arduino言語でhttp getできるので試す必要がほとんどないので。。。。)

import network

import urequests

sta_if = network.WLAN(network.STA_IF)

if not sta_if.isconnected():

        print('connecting to network...')

        sta_if.active(True)

        sta_if.connect(ssid,pswd)

        while not sta_if.isconnected():

            pass

print('network config:', sta_if.ifconfig())

r = urequests.get('https://fseigojp.web.fc2.com/')

print(r.text)



-----------------esp32-------------------------------

MicroPython: ESP32/ESP8266 with DHT11/DHT22 Temperature and Humidity Sensor | Random Nerd Tutorials どうもesp32にはdhtライブラリがビルトインされてるらしい

neopixel,rtc,timer,deeepsleepも同様にビルトインだった

(ESP32 用クイックリファレンス — MicroPython 1.19.1 ドキュメント (micropython-docs-ja.readthedocs.io) によるとsdcもあるげなが、defaultのそれではだめだった!

ESP32 – Micro SD Card Interface : 7 Steps - Instructablesにでてくるsdcard.pyを

いれてやっと成功した! 

上記の英語サイトにssd1306,US,BME280,lcd1602もあったが未体験、今後の課題 

[備忘録]ESP32 MicroPythonサンプルコード - Qiita 

filenameはSETTING_TXTと大文字! fileがesp32内にできる!

------------------access-point/deep sleep---------------------

MicroPython: ESP32/ESP8266 Access Point (AP) | Random Nerd Tutorials

MicroPython: ESP32 Deep Sleep and Wake Up Sources | Random Nerd Tutorials

--------------------------esp32----------------------------

https://qiita.com/sirius1000/items/4b4e6380c4942f347dd9 を参考に

 esptool.py --port /dev/ttyUSB0 erase_flash

esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash -z 0x1000 esp32-idf3-20210202-v1.14.bin    でインスト

https://zenn.dev/kotaproj/articles/d969fb39100da443f41f で実施のあれこれ


であれこれする
----------------------------------------------------------------------------------------------

以下はxiao rp2040の詳述である

XIAO RP2040 x Expansion boardのMicroPythonサンプル - Seeed K.K. エンジニアブログ  dht11.pyはうまくいかんかったので、ラズピコの該当品dht.pyを流用した!

xiao rp2040でuartする場合,arduinoIDEの場合とことなりuart1などとせんでよい!

当該ライブラリのservo.py,ssd1306.py,dht.py,ws2811.pyも普通につかえたが

lcd1602はgrove仕様にて難儀した、esp8266_i2c_lcd.py,lcd_api.pyをラズピコより導入

以下のように成功! ちなみに、i2c定義で0をつかうとBadPinとなる!

ssd1306の例のように1をつかうと成功した!

import machine

form esp8266_i2c_ld import I2cLcd

I2C_ADDR=0x27

i2c=machine.I2C(1,scl=machine.Pin(7),sda=machine.Pin(6),freq=400000)

lcd=I2cLcd(i2c,I2C_ADDR,2,16)

lcd.putstr("it works\nsecond line")

---------------------------------------------------------------------

ラズピコ用のds1307.pyを流用できた! やはりi2cはチャンネル1!

from machine import I2C,Pin

from ds1307 import DS1307

i2c=machine.I2C(1,scl=machine.Pin(7),sda=machine.Pin(6),freq=400000)

rtc=ds1307(i2c)

print(rtc.datetime()) 

ただ、ラズピコと違い、i2cは1チャンネルだけみたいなのでlcd/oledと併用は難儀そう

将来の宿題とする、当面はsdcard(spi)に書き込めればよい。。。。。

bleでuartして時間などを表示させる手もあると思う

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ラズピコ用のbme280.pyを流用して成功!やはりi2cはチャンネル1! !!3V仕様!!

import machine

form bme280 import BME280

i2c=machine.I2C(1,scl=machine.Pin(7),sda=machine.Pin(6),freq=200000)

bme=BME280(i2c=i2c)

print(bme.temperature or bme.humidtiy or bme.pressure).....

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

sdcard.py::カードの相性があるげな、エレコムで失敗、キオクシアで成功!5v使用!

https://github.com/StereoRocker/micropython/tree/rp2-sdcard/drivers 

ラズピコ用だが流用できた すばらしい! 注:最後にos.umount('sd')を忘れずに!

from machine import Pin, SPI
import os, sdcard

spi = SPI(0, sck=Pin(2), mosi=Pin(3), miso=Pin(4))
sd = sdcard.SDCard(spi, Pin(28))

os.mount(sd, '/sd')
os.chdir('sd')
print(os.listdir())
print()
print(open('README.txt').read()) 

ーーーー ws2811 ラズピコはインラインアセンブリをもちいるのでむしろ難儀ーーーーーー

builitinのuser-3color-ledsはやはり変則!  ネオピクセルはピンの11,12が関係!

switch=Pin(11,Pin.OUT)

switch.value(1) 

led=WS2811(12,1) # (pin_num,led_count)  これでneoxielが光りだす

ビルトインled(3kind)は以下の通りで、

ledr=Pin(17,Pin.OUT) # led-r はつかえないledrはつかえる要注意

ledr.value(1)  #  全部1で消灯 全部0で点灯

ledg=Pin(16,Pin.OUT) # led-g はつかえないledgはつかえる要注意

ledg.value(1)  #  全部1で消灯 全部0で点灯

ledb=Pin(25,Pin.OUT) # led-b はつかえないledbはつかえる要注意

ledb.value(1)  #  全部1で消灯 全部0で点灯


from machine import Pin,UART  # this code is for xiao rp2040
import time

uart=UART(0,9600,tx=Pin(0),rx=Pin(1))
led = machine.Pin(3,Pin.OUT)
led.value(1) 
IN1=Pin(6,Pin.OUT)
IN2=Pin(28,Pin.OUT)

while True:
      c = uart.readline()
      if c == b'f':
            print("foward")
            IN1.value(1)
            IN2.value(0)
            time.sleep(0.5)
       
            print("stop")
            IN1.value(0)
            IN2.value(0)
            time.sleep(0.5)
          
      else:
          if c == b'b':
            print("back")
            IN1.value(0)
            IN2.value(1)
            time.sleep(0.5)
           
            print("stop")        
            IN1.value(0)
            IN2.value(0)
            time.sleep(0.5)


--------builtin neopixel led--------------------------------------------------------

from machine import Pin from ws2812 import WS2812 import time switch = Pin(11, Pin.OUT) switch.value(1) #これでまず消える BLACK = (0, 0, 0) RED = (255, 0, 0) YELLOW = (255, 150, 0) GREEN = (0, 255, 0) CYAN = (0, 255, 255) BLUE = (0, 0, 255) PURPLE = (180, 0, 255) WHITE = (255, 255, 255) COLORS = (BLACK, RED, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE) #WS2812(pin_num,led_count) led = WS2812(12,1) print("fills") for color in COLORS: led.pixels_fill(color) led.pixels_show() time.sleep(1)

--------builtin neopixel-----------------------------------------------------------------------
from ws2812 import WS2812
from machine import Pin
import time

switch = Pin(11, Pin.OUT, value=1) #pin11がneopixelのpwr制御しているようだ
led = WS2812(12, 1) #pin12がneopixelそのものみたい

while True:
    colors = ((255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 255))
    for color in colors:
        led.pixels_set(0, color)
        led.pixels_show()
        time.sleep(1.0)

------------------builtin neopixel and dcmotor-----------------
# bluetooth module のvccも、DC用の電池でなく、xiaoの5vからとったほうが安定動作した
from machine import Pin,UART
import time
from ws2812 import WS2812

uart=UART(0,9600,tx=Pin(0),rx=Pin(1))
IN1=Pin(26,Pin.OUT)
IN2=Pin(27,Pin.OUT)
switch = Pin(11, Pin.OUT, value=1)
led = WS2812(12, 1)
colors = ((255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 255))
for color in colors:
    led.pixels_set(0, color)
    led.pixels_show()
    time.sleep(1.0)
led.pixels_set(0, (0,0,0))
led.pixels_show()
while True:
      c = uart.readline()
      if c == b'f':
            print("foward")
            IN1.value(1)
            IN2.value(0)
            time.sleep(0.5)
       
            print("stop")
            IN1.value(0)
            IN2.value(0)
            time.sleep(0.5)
           
      else:
          if c == b'b':
            print("back")
            IN1.value(0)
            IN2.value(1)
            time.sleep(0.5)
           
            print("stop")
           
            IN1.value(0)
            IN2.value(0)
            time.sleep(0.5)

0 件のコメント:

コメントを投稿