前回のBBC Micro:bitのUARTの記事で、BBC Micro:bitのUARTの送受信に触れた。

microbitで取得した温度等のデータをWiFi経由で送信するという目標に対して、



次はWiFiモジュールであるESP8266の方のUARTを見ることにする。

ESP8266とRaspberry Piでソケット通信を試す



目標はUARTの受信だけれども、今回はUARTの送信の方を試してみる。

main.py

from machine import UART

uart = UART(0, 9600)                         # 与えたボーレートで初期化
uart.init(9600, bits=8, parity=None, stop=1) # 与えたパラメータで初期化
msg = 'esp8266 to raspberry pi'
uart.write(msg.encode())

thonny経由でEPS8266のモジュールにフラッシングして、PCからUSBケーブルを外す。


UARTの受信側はRaspberry Piにする。

コードはBBC Micro:bitのUARTの記事の/path/to/dir/uart_pi_receiver.pyを流用し、実行しておく。

$ python3 /path/to/dir/uart_pi_receiver.py
uart:receiver

ESP8266モジュールをUSBケーブル経由で直接電力を供給してみると、

$ python3 /path/to/dir/uart_pi_receiver.py
uart:receiver��������4d�Y��ؓ��P���tx�h

i

���p۶��#�雊��esp8266 to raspberry pi

MicroPython v1.17 on 2021-09-02; ESP module with ESP8266

Type "help()" for more information.

>>>

main.pyで送信したメッセージの前に文字化けした箇所があり、メッセージの後にはREPLらしき出力がある。

REPL - Wikipedia


何だこれは?




ESP8266 用クイックリファレンス — MicroPython 1.18 ドキュメント#UART(シリアルバス)を確認してみたら、ESP8266のUARTにはUART0とUART1のふたつがあり、UART0は双方向であり、デフォルトではREPLで使用されると記載されていた。


uart = UART(0, 9600)

main.pyの上記のコードで、今回はUART0であり、特別な操作をしていないのでREPLとして実行された。


上記のページを再度確認をすると、UART1は送信のみらしく、冒頭の目標からESP8266ではmicrobitからの値を受け取らなければならないので、UART0一択となる。

であれば、ESP8266のREPLについての理解を深める必要があるみたいだ。

2. MicroPython REPL プロンプトの始め方 — MicroPython 1.18 ドキュメント