MicroPythonを使ってRaspberryPi PicoとESP32のシリアル通信(UART)

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を直結します。

下図のUARTが割り振られてるピンならOK。

 

【スクリプト】

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通信/

コメントを残す

メールアドレスが公開されることはありません。