スマートホームに向けて45:ESP赤外線モジュールの作成、送信ユニット

ESP赤外線モジュールの作成、信号解析が終了したので
送信モジュールを作成してみた。
これが非常に難しかった (´・ω・`)>
アレクサ、グーグルホームも結局のところ仕様変更が著しいようで
サクッとサンプルがほぼ動作しなかった。

結局一番安定しているソースはこれでした。

https://github.com/simap/fauxmoesp

必要なものは
テストESP32モジュール。
注意ですが、D1の電力5V 3.3Vも安定的に供給されないので
モジュールに、Vin等記載は、電力スルーですね。
それ以外は、チップから分岐しているのでモータのような持続電流には不向きですね。
きっと

ac dc モジュール

What to prepare is ESP 32, which is everywhere
I’m a temporary product to see if it works for the time being

Test ESP32 module.
Please note that the power of D1 5V 3.3V is not supplied stably.
The description of Vin etc. on the module is power through.
Other than that, it is not suitable for continuous current like a motor because it is branched from the chip.
surely

これととりあえず多いに越したことは無く
(´・ω・`)>

秋月電子通商さんの5mm赤外線LED
https://akizukidenshi.com/catalog/g/gI-04779/

秋月電子通商さんの金属皮膜抵抗 1/4W220Ω (100本入)
多すぎ
https://akizukidenshi.com/catalog/g/gR-03359/

実際あって困らないので複数入っている抵抗をに購入した

最終的にソースはこれ

まず赤外線の受信を解析したものが必要。
前回のモジュールのログに記載している
基本的に、貧乏なのでベンダーチップじゃない事を想定
といってもrawdataなので動作が一番安定している。
しかし、ロムのリソースを使うので注意。
自分は、このソースに、SDカードモジュールを追加、リセットか電力投入のみ、ファイルからデバイス名とrowdata情報を利用できるように変更した。

// note:
// use Arduino 1.8.5
// Arduino board manager
// https://dl.espressif.com/dl/package_esp32_index.json
// ボード ESP32 Dev Module
// Flash Mode QIO
// Flash Frequency 80MHz
// Flash Size 4M (32Mb)
// Partition Scheme No OTA (2MB APP/2MB FATFS) // Upload Speed 115200
// Core Debug Level なし

#include
#include
#include
#include

static const char* DVNAME1 = “おくでんき”;
static const char* DVNAME2 = “てまえでんき”;
#include “fauxmoESP.h”
#define LIGHT_PIN 4

typedef enum {
NO_EVENT = 0,
LIGHT1_ON,
LIGHT1_OFF,
LIGHT2_ON,
LIGHT2_OFF
} ALEXA_EVENT;

IRsend irsend(LIGHT_PIN);
//赤外線受信のそのままを張り付け
uint16_t onrawData1[257] = {2016,
…, 494};
//
uint16_t ofrawData1[257] = {1992,
…, 470};
//
uint16_t onrawData2[257] = {1990,
…, 494};
//
uint16_t ofrawData2[333] = {1992
…, 470};

fauxmoESP fauxmo;

char ssid[] = “st-home7g”;
char password[] = “asdfghjk78945”;

volatile ALEXA_EVENT alexa_event = NO_EVENT;

void WifiSetup()
{
WiFi.mode(WIFI_STA);
Serial.printf(“connecting to %s¥n”, ssid);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED)
{
Serial.print(“.”);
delay(100);
}

irsend.begin();
Serial.println();
Serial.print(“WiFi connected: “);
Serial.println(WiFi.localIP());
}

void setup()
{
Serial.begin(115200);
// irsend.begin();
// Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);
WifiSetup();
fauxmo.createServer(true);
fauxmo.setPort(80);
fauxmo.enable(true);
//デバイスの名前を設定
fauxmo.addDevice(DVNAME1);
fauxmo.addDevice(DVNAME2);
// irsend.begin();
// Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);

fauxmo.onSetState([](unsigned char device_id, const char *device_name, bool state, unsigned char value)
{
// If you have to do something more involved here set a flag and process it in your main loop
Serial.printf(“Device #%d (%s) state: %s value: %d\n”, device_id, device_name, state ? “ON” : “OFF”, value);
//
if (strcmp(device_name, DVNAME1) == 0)
{
if(state) {
alexa_event = LIGHT1_ON;
}
else {
alexa_event = LIGHT1_OFF;
}
}
if (strcmp(device_name, DVNAME2) == 0)
{
if(state) {
alexa_event = LIGHT2_ON;
}
else {
alexa_event = LIGHT2_OFF;
}
}
});

}

void loop() {
switch (alexa_event) {
case LIGHT1_ON:
Serial.println(“LIGHT1 ON”);
Serial.println(“rawData capture from IRrecvDumpV2”);
irsend.sendRaw(onrawData1, 257, 38); // Send a raw data capture at 38kHz.
alexa_event = NO_EVENT;
break;
case LIGHT1_OFF:
Serial.println(“LIGHT1 OFF”);
Serial.println(“rawData capture from IRrecvDumpV2”);
irsend.sendRaw(ofrawData1, 257, 38); // Send a raw data capture at 38kHz.
alexa_event = NO_EVENT;
break;
case LIGHT2_ON:
Serial.println(“LIGHT2 ON”);
Serial.println(“rawData capture from IRrecvDumpV2”);
irsend.sendRaw(onrawData2, 257, 38); // Send a raw data capture at 38kHz.
alexa_event = NO_EVENT;
break;
case LIGHT2_OFF:
Serial.println(“LIGHT2 OFF”);
Serial.println(“rawData capture from IRrecvDumpV2”);
irsend.sendRaw(ofrawData2, 333, 38); // Send a raw data capture at 38kHz.
alexa_event = NO_EVENT;
break;
default:
break;
}
fauxmo.handle();
}

問題無く動作した
ESP8266とD1とテストで作成した
こちらは、赤外線の出力をあまり考慮せず動作は安定した。
IMG_4286

結局文字化けするので修正
Screenshot_20201228-022708

Screenshot_20201228-022717

1個のモジュールで複数登録できるが、デバイスが応答しませんと出てしまう。
理由は、アクセスが無い場合に、常に動作しないように設定しているので、DECoのECOシステムをふんだんに使えばできる事。
本当に快適ですね。
クラウドを使わないので超エコかも・・
だからといって、アクセスから起動まで0.5秒ほどで動作する。
それじゃ、生きているのかを確認する場合は簡単!
DEcoのマネージャには、出ているので問題はない。

完成してみて他のクラウドスマートデバイスの家電リモコンで2台目以降の音声認識が
動作しないのがこのユニットはすこぶる良い。
動作しない事は無い。
(^^)/
照明はすべてこれにするように、換装中。

注意!
この方法では、1m以上の赤外線送信ができなかったので、
C1815を利用した通信に変更出力を、トランジスタで倍増で対応できた。

IMG_4300

今度は、出力がまだ弱いらしく指向性を現在考慮して赤外線LEDとケースと思案中。
送信部分で少々テストをやり直し。
ただし、クラウドを利用しないために、個人情報の漏洩防止及びレスポンス共に向上っす。
IFFFTも介在していないので費用は電力のみ。
これだと、各部屋に設置しているモジュールを、マルチ化するか別途おいても非常に使いやすい。
マルチ化とSDは、電力の関係で少々保留