WeMosを使ってみる
UART-MQTT Converter
ESP8266を使って、ArduinoのUART出力をMQTTでPublishして、他のマシンで見れるようにしたいと考えていました。

こちらにUART-
MQTTのブリッジが公開されていますが、双方向通信に対応した立派なものです。
欲しいのはUART→MQTTの一方通行だけでいいので新しく作りました。
こちらで
公開しています。
ESP8266のUART1をデバッグポートとして使っていますので、このポートを使ってデバッグ表示を行うことができます。
デバッグ表示を行うには、TTL-USB変換アダプタを以下のように接続します。
TTL-USB変換アダプタをWindowsPCのUSBポートに入れて、TeraTermでCOMポートを開きます。
COMポートのボーレートは115200bpsです。
ESP8266 |
TTL-USB変換アダプター |
GPIO2 |
RX |
GND |
GND |
UARTからLFコード(0x0A)を受信したら、それまでの受信データをMQTTでPublishします。
MQTTでSubscribeしたデータをUARTに出力するブリッジを作りました。
ソースは同
じ場所で公開しています。
こちらも、ESP8266のUART1をデバッグポートとして使っていますので、このポートを使ってデバッグ表示を行うことができます。

ESP8266は起動時にシリアル(GPIO1)にハードウェアBootメッセージを出力します。
これが相手側に届くのを防ぐ方法は2つあります。
・シリアルポートをSWAPする
ESP8266のシリアルポートをSWAPすると、TXとRXはGPIO15とGPIO13に変わります。
ESP8266起動時のハードウェアBootメッセージはGPIO1に出力されますが、GPIO1は何処にも繋がっていないので、
相手側にはハードウェアBootメッセージが届くことは有りません。
ただし、GPIO15はブートモードを決定するピンで、相手がArduinoの場合、ESP8266が起動できなくなります。
・OR回路を追加する
この様なOR回路を追加すると、UNO_RXのレベルは常にHIGHとなり、全ての送信メッセージは相手に届かなくなります。
Setup()関数の中でGPIOのモードをOUTPUTに設定し、レベルをLOWにすると、送信メッセージが相手に届きます。
おそらくこれが一番確実な方法です。

次回はmNDSによる名前解決の方法を紹介ます。
mNDSを使うと、IPアドレスではなくローカルホスト名でWeMosにアクセスできるようになります。
続く....