ESP-NOWでリモートI/Oを作る 2022/2/24 マイコンハードウェア 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ができる。 } 作例を公開している方々に感謝します。