RaspberryPi Picoと、ESP32を搭載したATOM Lite(M5stackシリーズ)で、どちらもMicroPythonを使って、シリアル通信(UART)を行いました。
あるシステムを作ろうとしたとき、ATOM LiteだとGPIO端子が足りない、RaspberryPi Picoだと無線通信ができないっとなることもあると思いますが、その際、一方にGPIO増設モジュールあるいは無線モジュールを取り付けるより、この2つを通信させた方が安価だなって思いまして。
■ ループバックテスト
(1)RaspberryPi Pico
【GPIO配線】
今回はTXにGP4に、RXにGP5を使うので、GP4とGP5を直結します。
【スクリプト】
import utime from machine import UART, Pin uart1 = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5)) uart1.write('hello') utime.sleep_ms(4) print(uart1.read().decode('utf-8'))
実施バージョン:MicroPython v1.16 on 2021-06-18; Raspberry Pi Pico with RP2040
最初、データがバッファリングされるまでのタイムラグがあるので、少し待たないといけないことを認識していなくて、なんでできないんだろうと悩みました^^;
(2)ATOM Lite
【GPIO配線】
今回はTXにG21に、RXにG25を使うので、GP21とGP25を直結します。
ピンはどれでも指定できるようです(ただし、G33は入力専用で出力はできません)
【スクリプト】
import utime from machine import UART uart1 = UART(1, baudrate=9600, tx=21, rx=25) uart1.write('hello') utime.sleep_ms(16) print(uart1.read().decode('utf-8'))
実施バージョン:MicroPython v1.17 on 2021-09-02; ESP32 module with ESP32
ラズパイPicoでは、tx・rxをPin(21)などと指定するのですが、若干作法が違いました。
(その他、NoneTypeのデコードでエラーを吐かないあたりの処理も違いました)
また、同じボーレートですが、ラグタイムには少し違いがあるみたいです(ハードウェアの違い?)。
■ ラズパイPico→ATOM Liteへ送信
【GPIO配線】
RPi Pico ATOM Lite GP4(TX) --- G25(RX) GP5(RX) --- G21(TX) GND --- GND
ラズパイPicoからATOM Liteに送るだけなら、GP5とG21の接続は無くても大丈夫。
【スクリプト:ラズパイPicoから送信】
import utime from machine import UART, Pin led = Pin(25, Pin.OUT) uart1 = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5)) while True: led.on() uart1.write(b'Hello! Im Pico.') utime.sleep(0.5) led.off() utime.sleep(0.5)
1秒おきに送信。LEDを点滅させているのは、稼働確認のためで特に意味はありません。
なお送信テキストはバイト変換しなくても(bがなくても)、自動で変換されるみたいです。
【スクリプト:ATOM Liteで受信】
import utime from machine import UART uart1 = UART(1, baudrate=9600, tx=21, rx=25) while True: rxData = bytes() while uart1.any() > 0: rxData += uart1.read(1) if len(rxData) > 0: print(rxData.decode('utf-8')) utime.sleep(0.2)
ピンの指定のところの作法を変えれば、上記スクリプトを入れ替えて、ラズパイPico→ATOM Liteへの通信もできました。
また、ATOM Lite側はピンを変更して試しましたが、任意のピンに使えました(ただしG33は入力専用)。
■ 参考サイト
MicroPython的午睡(21) ラズパイPico、M5AtomLiteとUART通信
https://jhalfmoon.com/dbc/2021/05/13/micropython的午睡21-ラズパイpico、m5atomliteとuart通信/