IToTの覚え書き

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

2019年03月

ガスセンサーに1602LCDモニターを付けるところから始めた。
1602LCDは1個200円くらいで売っていて安いが、多くのピンを使ってしまう。D1ボードはArduino互換だけれどWiFiがある分、使えるピン数が少ないのにもったいない。これからはI2C付きの1602LCDを使おう。値段は2倍するがピン数は半分節約できる。
次にアナログガスセンサーを取り付けた。ガス値の測定を始め、モニターに表示し始めた。
・・・とここまでは良かったが、Arduino Unoとちがい、D1ボードにはアナログピンが1個しかない。
今回は2個のガスセンサーを使う予定だったのに・・・

1つのアナログピンで2つのセンサーを使う方法はないか?
デジタル出力ピンから5V電源を取ればセンサーそのものの電源をON/OFFして別々に計れるのではないか?
電源を入れていない状態ではガスセンサー値は1だった。いける!
そう思ってやってみたが上手くいかなかった。
電流計で計ってみると電源を入れてた状態ではガスセンサーには100mA流れていたので、20mAが限界のデジタルピンでは無理らしい。←違いました。D1ボードはデジタルピンの電圧3Vなので5Vのガスセンサーはだめなのでした。
こんなところでリレーを使うわけにもいかない。仕方がないのでアマゾンでMOSFETを注文した。2~3日で来るらしいが、今日はここまで。
ついでにI2C付きの1602LCDとI2Cだけのと注文した。

D1ボードは安くて面白いのだけれど、アナログ1個だったり、デジタル3Vだったり、本格的に使おうとするといろいろ使えない。初めからUNOにWiFi付けた方が早かったかも。


//////////////////////////////////////////////////途中のスケッチ///////////////////////////////////////////////

#include <LiquidCrystal.h>

const int rs = 14, en = 12, d4 = 5, d5 = 16, d6 = 1, d7 =3;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

//テスト出力で4番のMOSFETをオンに
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);

lcd.begin(16, 2);

//センサー加温
for (int t = 9; t > 0; t--) {
lcd.begin(16, 2);
lcd.print("wait ");
lcd.print(t);
lcd.print("sec");
delay(1000);
}

delay(3000);

int val;
val=analogRead(0);
lcd.begin(16, 2);
lcd.print("H2:");
lcd.print(val);


delay(3000);
lcd.begin(16, 2);
}

void loop() {

}

////////////////////////////////////////////////////////////////////////////////////////////////////////

友人の依頼をうけて試薬を飲んだ後、30分おきに2時間、水素とメタンの値を計る装置を作ることになりました。
仕様を考えたいと思います。

最初、UNOにクロックを付けた上で、マイクロSDカードに日付、時間とデータを書き込むことを考えましたが、それに代わるもっといい方法を思いつきました。

D1ボードを使い、グーグルスプレッドシートに2つの計測値を行で追加していきます。グーグルスプレッドシートならクロックを設置しなくても日付と時間は自動的に追加されます。
トリガーはD1カードからのウェブリクエスト、アクションはグーグルスプレッドシートでIFTTTを設定すれば、あとはGASなど面倒な設定は必要ありません。

30分ごとの5分前にグーグルホームに予告させます。時間計測はボード内部の時計でやろうと思います。
"すべての計測は5回です。" ”あと5分で第~回目の計測をします。” "~回目を計測します。大きく息を吸って、ゆっくり息を吹きかけてください。" ”ごくろうさまでした。これで終了です。” などです。
これはesp8266-google-home-notifierを使ってD1ボードがグーグルホームにしゃべらせます。

ガスセンサーはセンサーの電源を入れて10秒後に10秒間息を吹きかけてもらい、5秒後の値をデータとして取るようにします。計測後はいったんセンサーの電源を切るようにしておきます。

きちんと作動しているか心配なので一応モニターはつけておきます。
仕様が変わる可能性が高いのでハンダ付けは極力避け、ワイヤーでつなぎます。
箱はダンボールにカッターやドリルで穴を開けて、ボード類はタイラップで止めます。
ここら辺は仕様が固まったらちゃんとしようと思います。

D1ボード600円、グーグルホームミニ3000円、2つのガスセンサー700円、LCDモニタ300円、AC電源400円、ダンボールで総費用5000円くらいです。

D1ボードからグーグルスプレッドシートに書き込むテストに成功した。

///////////////////////////////////////////////////////////
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266IFTTT.h>

void setup() {

WiFi.mode(WIFI_STA);
WiFi.begin("tgoto's iPhone", "zxhkl***12345");

delay(3000);

IFTTT.trigger("gasdata", "dwFzglPyeOQI9I4FAjo***", "888", "888", "888");
}

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

Arduino IDE 1.6.5
ESP8266 2.4.1(追記2.4.2OK)
ESP8266IFTTT

D1ボードはESP8266を搭載しているのでesp8266-google-home-notifierを使ってgoogle homeに何かをしゃべらせることができるはず。
台所にガスセンサーを置いておいて、ガス濃度が高ければ警告を出すとか、いろいろ使えそう。
この時、アルドゥイノIDEは1.6.5、ボードマネージャでESP8266のバージョン2.4.1を使いました。
notifierとttsは最新版を使います。

アルドゥイノIDE>スケッチ>ライブラリをインクルード>ライブラリを管理>空欄に"esp8266-google"をタイプ>esp8266-google-home-notifierをインストール>esp8266-google-ttsをインストール>閉じる


//////////////////////////////////// スケッチ例 ////////////////////////////////

#include <ESP8266WiFi.h>
#include <esp8266-google-home-notifier.h>
#include <google-tts.h>

GoogleHomeNotifier ghn;

void setup() {

WiFi.mode(WIFI_STA);
WiFi.begin("106F3F3C2***", "mh1nr5jpc0***");

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

ghn.device("リビングルーム", "ja");
ghn.notify("こんにちわ。私はグーグルホームです。");

}

void loop() {

}

////////////////////////////////////////////////////////////////////////////////

参考記事
https://qiita.com/horihiro/items/4ab0edf415916a2cd542
ESP8266 から Google Home に喋らせるライブラリ

ESP8266はArduino互換でWiFiが使えるからIoTには便利だということはわかった。
実際にモノに付けるとなると大きさも小さければ目立たなくてなおさらよい。
ということでまずはLEDを点滅させる実験を行います。

1.AmazonでHiLetgo® 2個セット ESP8266 NodeMCU LUA CP2102 ESP-12E モノのインターネット開発ボード ESP8266 無線受信発信モジュール WIFIモジュール Arduinoに適用 [並行輸入品]を買った。
2.USBドライバはCP210x USB - UART ブリッジ VCP ドライバ - Silicon Labsからダウンロードして、インストールした。
3.アルドゥイノIDEはArduino IDEから1.6.5(1.8.8でもOK)をダウンロードして、インストールした。
4.アルドゥイノIDEを起動してファイル>環境設定>追加のボードマネージャのURLにhttp://arduino.esp8266.com/stable/package_esp8266com_index.json を入れてOK。
5.ツール>ボード>ボードマネージャ>空欄に"esp8266"とタイプしてEnter>esp8266 by ESP8266 Communityをインストール。
6.ツール>ボード>NodeMCU 1.0 (ESP-12E Module)
ツール>Flash Size>4M (3M SPIFFS)
ツール>CPU Frequency>80 Mhz
ツール>Upload Speed>115200
ツール>Port->ポートxxにチェックを入れる
7.ファイル>スケッチ例>> EXAMPLES> ESP8266> Blinkを開き左上の右矢印ボタンをクリックするとコンパイル後ボードに転送し、赤色の点滅を開始したら成功です。
【感想】
ESP8266ボードとしては、UNOと同じ形のD1ボードよりもこっちのほうが小さくて安いので、開発はD1ボードでして、実際に配置するのはこれを使う手があります。
<注意>
表に書いてあるピン番号とArduinoIDEとのピン番号にずれがあります。ピン配列はこちら。
esp8266-V10
参考
ウェブサイトへのデータダウンロードアクセス:
http://www.nodemcu.com/index_en.html
ファームウェアリンク:
https://github.com/nodemcu/nodemcu-firmware
マニュアルはこちらにあります。
https://www.handsontec.com/pdf_learn/esp8266-V10.pdf

↑このページのトップヘ