IToTの覚え書き

マイクロビット、アルドゥイーノ、ラズベリーパイなどで楽しい道具を作る趣味のサイトです。 基本的に自分用の覚え書きです。

2019年03月

部屋の電気を電源ではなく赤外線でコントロールしたい。
1.家の外からコントローする。→スマホを使う。
2.室内で音声でコントロールする。→グーグルホームミニを使う。¥3000(ヤフオクで)
今回は安くて小さいNodeMCU(Amica)ボードを使用する。¥500
赤外線LED¥450

AmicaIR

1のためには家のバッファローのルータでNodeMCUのローカルアドレス192.168.11.22を固定した上で、グローバルアドレスのポート50022に変換されるようにする。そうするとスマホからhttp://****.xyz:50022とやるとNodeMCUを外からコントロールできる。

2のためにはIFFTT(イフト)サービスを使う。¥0
ひとつめはトリガーはグーグルアシスタント「電気をつけて」、アクションはウェブリクエストでhttp://****.xyz:50022/on
もうひとつはトリガーが「電気を消して」、アクションがhttp://****.xyz:50022/off

/////////////////////////////////////////// スケッチ例 ////////////////////////////////////////////
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <RremoteESP8266.h>
#include <Rsend.h>

ESP8266WebServer server(80);
IRsend irsend(4);//LEDの長い方+を4番(表記はD2)ピンに、短い方-はGNDに。

void handleRoot() {
server.send(200, "text/html", "<h1><A HREF='/on'>LIGHT ON</A> | <A HREF='/off'>LIGHT OFF</A></h1>");
}

void setup() {

irsend.begin();

WiFi.mode(WIFI_STA);
WiFi.begin("106F3F3C****", "mh1nr5jpc****");

while (WiFi.status() != WL_CONNECTED) {
delay(500);
}

server.on("/", handleRoot);

server.on("/on", []() {
irsend.sendNEC(0x41B6659A, 32);//onにする赤外線コマンド送信
server.send(200, "text/html", "<h1>LIGHT ON | <A HREF='/off'>LIGHT OFF</A></h1>");
});

server.on("/off", []() {
irsend.sendNEC(0x41B67D82, 32);//offにする赤外線コマンド送信
server.send(200, "text/html", "<h1><A HREF='/on'>LIGHT ON</A> | LIGHT OFF</h1>");
});

server.begin();
}

void loop() {
server.handleClient();
delay(10);
}
///////////////////////////////////////////////////////////////////////////////////////////

<注意点>
赤外線のライブラリはIRremoteESP8266-2.5.5.zipをダウンロードしてインストールする。
赤外線のコマンドはスケッチ例のIRrecvDemoを使って前もってコマンダーから調べておく。
このためには赤外線レシーバーが必要。(¥0 既出)
NodeMCUの電源は100均で売ってるスマホ充電用の立方体の白いやつとスマホ充電用のケーブル。¥100x2
居間と寝室が離れていたのでもう一つ作って、寝室のエアコンの横に貼り付けて動かしています。2個目は¥1000でできました。

今まで永らくWindowsXpを使い続けてきましたが、そろそろ限界か・・・。
今回ESP32のコンパイルエラーと戦い続け、Windows10パソコンが欲しくなったので買うことに決定!
でも、お金もないので一番安いのを買います。

今まで使っていたのは、
DELL OPTOPLEX 760 WindowsXp

今回は、アマゾンで
DELL OPTIPLEX 790 (SFF) 第2世代Core i5 3.1GHz/4GB/250GB/DVDスーパーマルチ Windows10Proをベストチャレンジさんから1.5万円で買いました。

OPTIPLEX790

これでESP32用スケッチをコンパイルできます。これから10年は使いましょう。そしたらもしかしたら最後のパソコンかも。

届いたら、まずやるべききは・・・
Windows 10 Homeの自動更新を無効にして止める
これしかないです。

WEMOS wikiの商品スペック表を見ていたらD1ボードはアナログは入力ピンが1個だけだったが、D32ボードはアナログの入力ピンが6、出力ピンが2もある。ややこしい設計変更せずに、D1ボードに変更しましょう。

これで、H2とCH4の2つのアナログ値を同時に計測できます。

1.HiLetgo® ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード

2.KKHMF ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetooth デュアルコアCPU低消費電力

3.WINGONEER UNO R3 D1 R32 ESP32 ESP-32 CH340G開発ボードDual-Mode WiFi Bluetooth Arduino用マイクロUSB搭載の4VDC DC 5V-12V(今回のテストは3.を使いました)

今まで使ってきたWindowsXpはESP32とは、相性が悪いのでWindows10を使います。USBドライバは必要ありません。

Arduino IDEも1.6.5ではD32ボードをインストールできないので、1.8.5を使います。1.6.5に追加でインストールするため1.8.5はZIPダウンロードしました。

環境設定で以下を追加。
https://dl.espressif.com/dl/package_esp32_index.json

ボードマネージャでesp32 と入力. esp32 by Espressif Systems version 1.0.0を選択して Install

ボード: "DOIT ESP32 DEVKIT V1"
Flash Mode: "QIO"
Flash Size: "4MB (32Mb)"
Partition Scheme: "初期値"
Flash Frequency: "80MHz"
PSRAM: “Disabled”
Upload Speed: "115200"
Core Debug Level: なし
シリアルポート: ご自分のUSB(COM)ポート
書込み装置: USBasp

その後、esp8266-google-home-notifierをインストールしました。

////////////////////////////////////////////////////////////////////////////////////////
#include <WiFi.h>
#include <esp8266-google-home-notifier.h>

GoogleHomeNotifier ghn;

void setup() {
WiFi.mode(WIFI_STA);
WiFi.begin("106F3F3C2***", "mh1nr5jpc0***");
delay(5000);
ghn.device("リビングルーム", "ja");
ghn.notify("みなさん、こんにちわ");
}

void loop() {
}
/////////////////////////////////////////////////////////////////////////////

D32ボードでもちゃんと喋ってくれました。

HiLetgo 1602 LCD キーパッド シールド ボード ブルー バックライトを付き Arduinoに対応 Duemilanoveロボット [並行輸入品]はD1ボードで使えるか?

本家はDFROBOTのキーパッドシールドDFR0009です。
Arduinoの上に亀の子状に被せる事で面倒な配線や半田付け不要で動作します。

DFR0009_Web.pdf

/////////////////////////////// ボタン不使用のスケッチ例 /////////////////////////////////
#include <LiquidCrystal.h>
//LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // for original UNO board
LiquidCrystal lcd(0, 2, 4, 14, 12, 13); // for D1 board

void setup(){
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0); // set the LCD cursor position
lcd.print("Push the buttons"); // print a simple message on the LCD
}

void loop(){
}
//////////////////////////////////////////////////////////////////////

D1ボードでも上のスケッチのようにピン番号を変えたら使えます。
ボタンもスケッチを書けば使えます。
しかしこのシールドはボタン操作のためにアナログ端子を1つ使います。
D1ボードに唯一のアナログ端子が使われてしまい、アナログセンサーを1つもつけられなくなります。
なので、D1ボードとDFR0009シールドの相性は悪いと言うことになりました。残念。

ですがD32ボードならアナログピンもいっぱいあるので使えるのではないでしょうか?
waves ESP32 ESPDuino-32 (ESP-WROOM-32) 技適取得品
D32Board
これなら形がUNOなので乗っかります。

ESPduino32s
ピン配列も印刷通りのようです。

/////////////////////////////// ボタン不使用のスケッチ例(失敗例) /////////////////////////////////
#include <LiquidCrystal.h>
//LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // for original UNO board
//LiquidCrystal lcd(0, 2, 4, 14, 12, 13); // for D1 board
LiquidCrystal lcd(12, 13, 17, 16, 27, 14); // for D32 board

void setup(){
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0); // set the LCD cursor position
lcd.print("Push the buttons"); // print a simple message on the LCD
}

void loop(){
}
//////////////////////////////////////////////////////////////////////

あれ~?やってみたけど、うまくいかない。残念。
ESP32系列はWindowsXpと相性が悪いので、Windows10が来たら再度挑戦・・・
ということで勘弁してください。

※この記事の内容は少し古くなっています。最新版はこちらです。

Arduino UNO互換のD1ボードの最大の違いはWiFi機能が搭載されていることです。
WiFi機能は IoT(Internet of Things) には必要な機能です。
IoTの中心となるGoogle HomeやAmazon Alexaなどのスマートスピーカーとの連動をする準備をまとめます。

1.D1ボードを買います。
 Arduino UNO R3互換、ESP8266搭載のWiFi 開発ボード、WeMos D1を入手します。
アマゾンで買えます。明日着くのがありがたい。数日待てるならもう少し安く買えます

2.USBドライバをインストールします。
 D1ボードのUSBドライバをダウンロードしてインストールします。

3.Arduino IDEをインストールします。
 ソフト開発環境(IDE)はArduinoのが使える点が有り難い。
Arduino 1.6.5 WIndows installer をダウンロードしてインストールします。
(esp8266-google-home-notifier 1.0.6はこれ以降のバージョンではコンパイルエラーをおこします)

4.Arduino IDEを設定します。
 1)Arduino IDEを起動して、
ファイル>環境設定>Additional Board Manager URLs で、
http://arduino.esp8266.com/stable/package_esp8266com_index.json と入れてOKをクリックします。
 2)ツール>ボード>Boards manager...で空欄に esp8266 と入れて、
esp8266 by ESP8266 communityのバージョン2.4.1(または2.4.2でも可)をInstall します。
(esp8266-google-home-notifier 1.0.6はこれ以降のバージョンではコンパイルエラーをおこします)
 3)ツールからボード設定します。
ボード>WeMos D1 R1(またはLOLIN(Wemos) D1 R2 & miniでも可)
Flash Size>4M(3M SPIFFS)
CPU Frequency>80MHz
Upload Speed>115200
ポート>COM3(←実際にD1ボードが刺さっているCOMポート)
書込装置>Arduino as ISP

5.スマートスピーカーと連携します。
 1)Google home miniなどGoogle homeユーザは、
スケッチ>Include Library>Manage Libraries...で空欄にgoogleと入れて、
esp8266-google-home-notifier 1.0.6 と esp8266-google-home-tts 1.0.7 を Install します。
(これでD1ボードから自由にGoogle homeをしゃべらせることができます)
 2)Echo DotなどAmazon Alexaユーザは、
https://github.com/witnessmenow/esp8266-alexa-wemo-emulator
サイトのClone or Downloadボタン>Download ZIPクリックでダウンロードします。
スケッチ>Include Library>Add ZIP Libraries...>esp8266-alexa-wemo-emulator-master.zipを選択します。
(これでD1ボードからIFTTTを介さなくても、室内の電源のON/OFFができます)

6.IFTTT(イフト)と連携します。
 1)IoTにはIFTTTが必須ではないでしょうか?例えば室外からのスマホでの遠隔操作などにWebHooks機能をつかいます。まだでしたらIFTTTの登録をおすすめします。
 2)D1ボードとIFTTTとの連動はESP8266IFTTTを使います。
サイトのClone or Downloadボタン>Download ZIPクリックでダウンロードします。
スケッチ>Include Library>Add ZIP Libraries...>ESP8266IFTTT-master.zipを選択します。

///////////////////////////// ESP8266IFTTTスケッチ例 /////////////////////////////////
//スケッチの冒頭に一行入れます。小文字のESP8266Ifttt.hだとコンパイルできません。
#include <ESP8266IFTTT.h>

/*IFTTT_WEBHOOK_NAMEのところにIFTTT Webhook's nameを、IFTTT_KEYに IFTTT Webhook api keyを入れます。
IFTTT Webhook api keyはIFTTT>My Applets>Web Hooks>Web Hooksのロゴマーク>Documentation、またはhttps://ifttt.com/maker_webhooks>Documentationで出てきます。*/

//もしトリガーだけなら・・・
IFTTT.trigger(IFTTT_WEBHOOK_NAME, IFTTT_KEY);

//もしvalueがあれば・・・(但しvalueは文字列に限ります。"~~"でくくってください)
IFTTT.trigger(IFTTT_WEBHOOK_NAME, IFTTT_KEY, value1, value2, value3);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
これで準備完了です。
あとはファイル>スケッチの例>からいろいろ試して見るといいでしょう。
スケッチのコンパイルおよびボードへの転送はメニューバー下の→(右矢印)ボタンでできます。

これでできることは、
1.Google homeやAlexaから、IFTTTを使って家の電気をつけたり消したりできます。
(赤外線を使った家電製品もコントロールできます。家の外からスマホを使ってもできます)
2.Alexaからは、IFTTTを使わずesp8266AlexaWemoEmulaterで、家の電気をつけたり消したりできます。
3.Google homeでesp8266-google-home-notifierを使って、好きな言葉をしゃべらせることができます。
4.Google home(や多分Alexaも)から、IFTTTを使ってGoogle Spredsheetに各種データを保存できます。

【スケッチ作成上の注意】
PinMODEはプリント基板の表面の表示ではなく、裏側の表示に従ってください。
デジタル I/Oピンは11個あり、すべて3.3Vです。
D0以外のすべての IOピンは interrupt/pwm/I2C/one-wire機能があります。
アナログ入力ピンは1つで最大3.2Vです。
内蔵LEDは、GPIO2です。

↑このページのトップヘ