ESP-NOWでリモートI/Oを作る

ESP-NOWでリモートI/Oを作る

マイコンハードウェア No.265
伝送接点数16 単方向(送信側→受信側への伝送のみ)

離れたところにある機器の信号を、電波が届く範囲で
配線無しで受け取ることができる。
ESP32同士で直接通信するのでアクセスポイントは不要

主な部品 ESP32開発ボード、I/OエキスパンダMCP23017

テストの様子


右側が送信、左側が受信となっています。
Arduino-UNOで送信側のテスト信号を作ってMCP23017へ
入力しています。

MCP23017のデジタル入力を読み込み、16進数を文字配列
としてESP-NOWで送信
受信した文字配列を16進数へ変換してMCP23017のデジタル
出力へ出力する。

まだ十分理解できていませんのでおかしな点があると思います
がスケッチを紹介しておきます。

送信側 スケッチ抜粋
String data = String (mcp.readGPIOAB(), HEX);
//16ピンすべて(ポートAおよびB)を単一の16ビット変数に読み込みます。
//16ピンすべてを表す16ビット変数を返します
esp_err_t outcome = esp_now_send(broadcastAddress, (uint8_t *) &data, sizeof(data));

受信側 スケッチ抜粋
char intData[12];
unsigned int GPIO_BA;
void data_receive(const uint8_t * mac, const uint8_t *rcvData, int len) {
memcpy(&intData, rcvData, 5);
long Data = strtol(intData, NULL, 16);
//16進数表示で送られてきた文字配列を16進数数値に変換する
GPIO_BA = Data;
mcp.writeGPIOAB(GPIO_BA);
//すべてのピンを一度に書き込みます。
//引数へ16進数を与えると対応する出力のON/OFFができる。
}



作例を公開している方々に感謝します。

コメント

このブログの人気の投稿

ESP32pcntカウンタをテストしてみた

データロガーで温湿度記録計を作る。