SJK が 2022年05月18日13時31分17秒 に編集
コメント無し
本文の変更
# 概要 M5シリーズのgrove端子に接続することで、はんだ付なしに簡単に赤外線の送受信ができるユニットを用いて、部屋の照明を操作できるリモコン信号を解析し、それを用いてAmazon Alexaと連携するリモコンシステムを作りました。 # 使用したモジュール - M5Atom lite https://www.marutsu.co.jp/pc/i/1634275/ ![キャプションを入力できます](https://camo.elchika.com/e2d9d253cda78298ded9d7902665e30a3c676880/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f61386333663664392d373632642d343039642d396461342d653435636465363336386138/) - M5Stack用赤外線送受信ユニット https://www.marutsu.co.jp/pc/i/1556080/ ![キャプションを入力できます](https://camo.elchika.com/d7c2cf51ffbf7a9a0b1234feb248f5304dd6cfe3/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f66613137613738352d323362312d343164642d626436652d653834636166326664373731/) - 接続 モジュールの接続はM5Atomliteのgrove端子と赤外線送受信ユニットのgrove端子を付属のgroveコネクタケーブルで接続するだけです。 # 開発環境 開発環境は、赤外線送受信ユニットのサンプルスケッチ及び連携するAmazon Alexa接続用のライブラリのあるArduino IDEで行いました。 # ライブラリの追加 - IRremoteESP8266ライブラリ https://github.com/crankyoldgit/IRremoteESP8266 ![キャプションを入力できます](https://camo.elchika.com/0091131d6ee89f7d024133ccd25a130432affc7e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f64343439643262312d313264392d343435372d613132322d316334393337383661373539/) - Espalexaライブラリ https://github.com/Aircoookie/Espalexa ![キャプションを入力できます](https://camo.elchika.com/f247fe8eb7852ef7459568639bd8719b81ee62f5/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f39333931613733322d663063322d346661332d613834312d616566643139363765363237/) # リモコン信号解析 リモコン信号解析のスケッチは IRremoteESP8266ライブラリを追加すると一緒に追加されるスケッチ例> IRremoteESP8266> IRrecDumpV2 を開きほぼそのまま使用します。M5Atomのライブラリを追加して`#include <M5Atom.h>`、赤外線受信のピンを32番に変更`const uint16_t kRecvPin = 32`します。 スケッチを書き込んでシリアルモニタを開きリモコンのボタンを赤外線送受信ユニットの受信部(黒いほう)に向けて押します。すると、以下のような結果が得られます。 ```arduino:リモコンの全灯ボタンを押したときの出力例 Timestamp : 000069.001 Library : v2.7.14 Protocol : UNKNOWN Code : 0xF6B92168 (42 Bits) uint16_t rawData[83] = {3506, 1714, 428, 440, 434, 434, 458, 1276, 432, 1308, 432, 436, 460, 1274, 428, 442, 456, 410, 426, 438, 430, 1308, 434, 434, 458, 410, 426, 1310, 434, 436, 428, 1308, 428, 438, 434, 1302, 426, 440, 428, 440, 432, 1300, 462, 410, 424, 440, 434, 458, 406, 438, 428, 1306, 462, 432, 426, 1284, 430, 1308, 462, 408, 422, 1312, 456, 410, 432, 432, 430, 462, 434, 408, 424, 1312, 430, 436, 434, 458, 436, 1274, 430, 442, 456, 410, 432}; // UNKNOWN F6B92168 Timestamp : 000069.128 Library : v2.7.14 Protocol : UNKNOWN Code : 0xF6B92168 (42 Bits) uint16_t rawData[83] = {3480, 1738, 430, 442, 452, 414, 436, 1302, 428, 1310, 400, 468, 436, 1304, 464, 428, 402, 440, 428, 438, 464, 1274, 398, 468, 432, 438, 458, 1278, 462, 406, 428, 1310, 426, 442, 436, 1302, 398, 468, 432, 438, 456, 1278, 460, 410, 396, 468, 434, 434, 458, 432, 400, 1310, 456, 414, 460, 1274, 400, 1338, 400, 468, 460, 1278, 464, 406, 428, 438, 400, 466, 436, 432, 460, 1278, 430, 462, 430, 414, 430, 1304, 400, 466, 434, 436, 456}; // UNKNOWN F6B92168 ``` 使用したリモコンはPanasonicのHK9494だったのですが、ProtocolはUNKNOWNでしたので、送信スケッチにはrawDataを書き込むことにしました。 # スケッチ ```arduino:シーリングライトのON・OFF信号を送るAlexa対応リモコンのスケッチ #include <M5Atom.h> #include <IRremoteESP8266.h> #include <IRsend.h> #include <Espalexa.h> #include <WiFi.h> const char* SSID = "YOUR SSID"; //Amazon Echoが繋がっているwifiのSSID const char* PASSWORD = "YOUR PASSWORD"; const int IR_SEND_PIN = 26; //M5Atomのgroveコネクタの赤外線送信用ピンは26 // PanasonicHK9494_FULL(全灯) uint16_t rawDataFull[83] = {3484, 1736, 434, 460, 436, 406, 428, 1308, 460, 1276, 460, 408, 424, 1312, 456, 412, 430, 436, 428, 442, 456, 1276, 428, 440, 428, 438, 432, 1304, 430, 436, 428, 1308, 434, 434, 426, 1308, 432, 436, 456, 410, 424, 1310, 430, 438, 430, 436, 428, 440, 428, 438, 432, 432, 428, 440, 430, 1304, 434, 1304, 430, 464, 406, 1306, 460, 408, 398, 468, 430, 1308, 430, 436, 426, 1310, 434, 434, 430, 436, 426, 1310, 432, 436, 428, 436, 426}; // UNKNOWN CA21A230 // PanasonicHK9494_OFF(消灯) uint16_t rawDataOff[83] = {3480, 1738, 432, 436, 426, 440, 428, 1308, 432, 1308, 428, 438, 426, 1310, 434, 434, 428, 440, 424, 440, 434, 1304, 428, 438, 428, 440, 426, 1308, 426, 442, 398, 1338, 430, 438, 424, 1312, 400, 466, 432, 434, 398, 1338, 430, 464, 404, 438, 396, 468, 430, 462, 432, 1280, 426, 1312, 434, 1304, 432, 1306, 398, 468, 430, 1308, 430, 436, 426, 442, 454, 410, 398, 1338, 426, 1312, 456, 412, 426, 438, 426, 1308, 434, 436, 424, 442, 398}; // UNKNOWN 1B9C2A92 IRsend irsend(IR_SEND_PIN); void bedledChanged(EspalexaDevice* dev); Espalexa espalexa; void setup() { M5.begin(true, false, true); irsend.begin(); Serial.begin(115200); // wifi connection WiFi.begin(SSID, PASSWORD); while (WiFi.status() != WL_CONNECTED) { M5.dis.setBrightness(1); M5.dis.drawpix(0, CRGB::Red); // actually Green delay(500); Serial.print('.'); M5.dis.setBrightness(0); delay(500); } // espalexaでデバイスを認識させる espalexa.addDevice("BedLED", bedledChanged, EspalexaDeviceType::onoff); espalexa.begin(); } void loop() { espalexa.loop(); } void bedledChanged(EspalexaDevice *d) { if (d == nullptr) return; Serial.println(d->getValue()); bool request_flag = d->getValue() ? true : false; bedledPowerSwitch(request_flag); } void bedledPowerSwitch(bool request_flag) { if (request_flag) { Serial.println("bed ceiling on"); irsend.sendRaw(rawDataFull, 83, 38); M5.dis.setBrightness(1); M5.dis.drawpix(0, 0xf00000); } else { Serial.println("bed ceiling off"); irsend.sendRaw(rawDataOff, 83, 38); M5.dis.setBrightness(1); M5.dis.drawpix(0, 0x00ff00); } delay(500); M5.dis.setBrightness(0); } ``` # 実際に使ってみて スマホのAlexaアプリで、デバイスの追加(デバイス画面の右上の "+" マークを押す)でデバイスの検出が始まります。うまくみつかれば「新しいデバイスが見つかりました」となります。(何回か繰り返さないと見つけられないときもありました)また、スケッチを書き換えたらAlexaアプリからデバイスを消去して、再登録が必要でした。 その後、Alexaアプリの "照明" に "BedLED" という名前のデバイスが追加されます。追加されたあとはAlexaアプリ側で好みの名前に変更可能(例えば "寝室")です。 ON/OFFだけでなく、定型アクションを登録することで、朝アラームと一緒に部屋の照明をつけるようなこともできるので、重宝してます。 ![キャプションを入力できます](https://camo.elchika.com/05fd5739514288f9fd9b7c423ccb17fdc269a413/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f61356130646165342d313463322d343262342d393235392d653066656361393262386264/)
# 後日談 赤外線送受信ユニットの送信用LEDは出力が弱かったので、出力を上げた送信モジュールを自作しました。 https://twitter.com/SJKoffee/status/1369632779508453378 ![キャプションを入力できます](https://camo.elchika.com/ab9fbb0f547eaf5102e9c2bc63623c0b6a3ee272/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f61306365313736632d306639302d343566352d396530632d636365626338373238643439/)