Espressif Systems社の IoTモジュール ESP-WROOM-02 ESP32-WROOM-32 を使用し、さまざまな IoT 機器や応用システムの製作を行うためのサンプル・スケッチ集です。
5_learn32 フォルダ内のプログラムの解説書は、下記から無料でダウンロードできます。
- PDF解説書ダウンロード(「5_learn32」フォルダのみ対応)
https://bokunimo.net/esp32/esp32 (PDF)
その他のプログラムの解説は、書籍として販売しています。 書籍ではArduino言語の説明や様々な機器をブレッドボードで製作する方法、プログラムの動作内容などについて詳しく解説しています(一部のサンプル・プログラムを除く)。 前記の無料PDFをお読みいただいてから購入していただけると理解が深まると思います。
-
書籍「超特急Web接続!ESP マイコン・プログラム全集」サポートページ
https://bokunimo.net/esp/ -
書籍販売(CQ出版社)
https://shop.cqpub.co.jp/detail/2276/ -
書籍販売(Amazon)
https://www.amazon.co.jp/dp/4789847047
マイコン練習用サンプル・プログラムが含まれているフォルダです。
IoT機器用のサンプル・プログラムが含まれているフォルダです。
LEDをWi-Fi経由で制御するワイヤレスLチカ実験を行います。
ESP-WROOM-02用 :example01_led
ESP32-WROOM-32用:example33_led
a:TELNET版
b:HTTP版
d:ソフトウェア無線AP版
s:IPアドレス固定版
スイッチ状態をWi-Fi送信します。後述のWi-Fi LCDなどで受信することが出来ます。
ESP-WROOM-02用 :example02_sw
ESP32-WROOM-32用:example34_sw
アナログ入力値をWi-Fi送信します。
ESP-WROOM-02用 :example03_adc
ESP32-WROOM-32用:example35_adc
乾電池などで動作するIoTセンサ用の基本形です。応用しやすいように機能を絞り込みました。
ESP-WROOM-02用 :example04_le
ESP32-WROOM-32用:example36_le
a:Wi-Fi接続タイムアウト機能つき
c:クラウドサービスAmbientへの送信機能つき
m:取得値が近いときは送信しない節約機能つき
Wi-Fi スイッチャや各種IoTセンサが送信したデータを液晶ディスプレイ(LCD)へ表示する基本形です。後述の応用例「Wi-Fi コンシェルジェ 掲示板担当」の基本動作を理解することが出来るでしょう。
ESP-WROOM-02用 :example05_lcd
ESP32-WROOM-32用:example37_lcd
-:UDP版
a:TCP版(aの無いものが通常のUDP版)
IoTセンサは、システムの中でさまざまな物理量データを集める役割を担います。
Wi-Fi 照度計は照度値を送信するIoTセンサです。時間帯や照明機器、人影などによって照度が変化するので、室内環境を把握する基本的な機器のひとつです。また、センサを手で遮るなど、簡単にセンサ値を変化させることが出来るので、センサの初期実験に便利です。
ESP-WROOM-02用 :example06_lum
ESP32-WROOM-32用:example38_lum
温度値を送信するIoTセンサです。同じ建物内でも、部屋や測定箇所(足元と空調機の近く、窓付近など)によって温度差が生じることがあるので、複数のIoTセンサによるセンサネットワークを構築するときの代表的な応用例の一つになります。
ESP-WROOM-02用 :example07_temp
ESP32-WROOM-32用:example39_temp
ドアや窓が開いたとき(または閉まったとき)に開閉状態を送信するIoTセンサです。防犯や人の出入りなどを把握するときに使用できるでしょう。
ESP-WROOM-02用 :example08_sw
ESP32-WROOM-32用:example40_sw
温湿度を送信するIoTセンサです。デジタルのI2Cインタフェースをもつセンサを使用することで、アナログ回路やセンサ値の補正が不要となり、正確な値を手軽に得ることが出来ます。
ESP-WROOM-02用 :example09_hum_sht31
ESP32-WROOM-32用:example41_hum_sht31
表示なし:TI製 HDC1000 版
sht31 :SENSIRION製 SHT31 版
si7021 :SILICON LABS製 Si7021 版
気圧と温度を送信するIoTセンサです。気圧高いと晴れ、低いと天気が崩れる傾向や、海水面からの標高によっても変化します。天候を予想したり、換気扇や窓の開け閉めなどによる室内の圧力変化を検知することも出来るでしょう。
ESP-WROOM-02用 :example10_hpa
ESP32-WROOM-32用:example42_hpa
表示なし:STマイクロ製 LPS25H 版
bme280 :Bosch製 BMP280/BME280 版
c:クラウドサービスAmbientへの送信機能つき
人体などの動きを検出したときに送信するIoTセンサです。在室情報などを把握することが出来るでしょう。
ESP-WROOM-02用 :example11_pir
ESP32-WROOM-32用:example43_pir
加速度の変化を検出したときに送信するIoTセンサです。ドアや窓の開閉や傾きの変化などを検出することが出来ます。
ESP-WROOM-02用 :example12_acm
ESP32-WROOM-32用:example44_acm
現在時刻をインターネットから取得してWi-Fi送信する機器です。あたかも「時刻センサ」のような動作を行います。センサネットワークではセンサ値と時刻情報を紐づけて取り扱うことが多いので、インターネットから時刻を取得するプロトコルNTPを利用することも多いでしょう。
ESP-WROOM-02用 :example13_ntp
ESP32-WROOM-32用:example45_ntp
c:クラウドサービスAmbientへの送信機能つき
- 初回起動時は重力加速度の測定結果を送信します。
- その後は、重力加速度を減算した値(相対加速値)を送信します。
赤外線リモコン信号を受信し、受信データをWi-Fi送信します。家電などの操作情報を収集します。収集した情報の集計を行うことで、よく見るテレビのチャンネルやエアコンの使用時間などを把握することも出来るでしょう。
ESP-WROOM-02用 :example14_ir_in
ESP32-WROOM-32用:example46_ir_in
定期的にカメラ撮影を行い、撮影後に通知を送信する監視カメラです。撮影した写真はHTTPで取得することが出来ます。HTTP版に加え、FTPで送信するFTP版も収録しました。
ESP-WROOM-02用 :example15_camG
ESP32-WROOM-32用:example47_camG
camG:SeeedStudio Grove Serial Camera Kit用
camL:SparkFun SEN-11610・LynkSprite JPEG Color Camera TTL用
f:FTP版
各種Wi-Fi コンシェルジェ機器には、HTTPによるWebサーバ機能が装備されています。インターネットブラウザから手動制御を行ったり、Raspberry Piなどのサーバーからの自動制御を行ったりすることが出来ます。
Wi-Fi コンシェルジェ 照明担当が制御するLEDは、状態や情報を、さりげなくユーザへ通知するときに使われます。天気予報情報に応じて、LEDの点滅方法を変化させたり、トイレに設置した人感センサが検知後の経過時間を通知するといった応用が出来るでしょう。
なお、AC 100Vの照明機器を制御するには、後述の Wi-Fi コンシェルジェ 電源設備担当を使用します。
ESP-WROOM-02用 :example16_led
ESP32-WROOM-32用:example48_led
f:フルカラーLED版
w:WebServer版(Webサーバ機能にライブラリを使用)
ユーザへ気づきを通知するときには、室内のどこにいても認識できるようにチャイム音などが用いられます。来客時やドア開閉、窓開閉といった変化を通知する応用が出来るでしょう。
ESP-WROOM-02用 :example17_bell
ESP32-WROOM-32用:example49_bell
液晶ディスプレイ(LCD)を用いることで、より多くの情報をユーザへ通知することができるようになります。
ESP-WROOM-02用 :example18_lcd
ESP32-WROOM-32用:example50_lcd
t :時刻表示対応版(NTP時刻データ転送機対応)
t_ntp:NTP機能つき
テレビやエアコン、オーディオ、照明機器など、赤外線リモコンに対応した家電機器を制御します。
赤外線リモコン信号コードはインターネットブラウザから HTTP GET リクエストで取得することが出来ます。ブラウザ上に表示された赤外線リモコン信号を HTTP POST リクエストで送信することで、赤外線リモコン信号を発信することが出来ます。
ESP-WROOM-02用 :example19_ir_rc
ESP32-WROOM-32用:example51_ir_rc
カメラのシャッターを制御し、撮影した写真をブラウザで確認したり、Wi-Fi 人感センサで検出した人物を撮影するといった防犯システムへ応用が可能なIoT対応カメラです。撮影した写真データをESPモジュール内のメモリに保持し、撮影写真の一覧表示を行うこともできます。
ESP-WROOM-02用 :example20_camG
ESP32-WROOM-32用:example52_camG
camG:SeeedStudio Grove Serial Camera Kit用
camL:SparkFun SEN-11610 LynkSprite JPEG Color Camera TTL用
t:写真の一覧表示対応版
音声でユーザへ気づきを通知することが可能なIoT機器です。気づきだけであればチャイム音で通知できますが、「玄関に来客」「寝室のドアが閉まりました」「起床時間です」といった音声でアナウンスすることにより、具体的な内容を含めて通知することが出来るようになります。外出先から VPN 接続すれば、「もうすぐ帰るよ」と音声メッセージを自宅にいる家族へ伝えることもできるでしょう。
ESP-WROOM-02用 :example21_talk
ESP32-WROOM-32用:example53_talk
IoTセンサ機器が送信するセンサ値情報を、テレビへ表示することが可能なIoT機器です。テレビへの出力(NTSC)には BASIC マイコンIchigoJam を使用します。BASIC言語 で作成した簡単なプログラムを転送してマイコン上で実行することも可能です。
ESP-WROOM-02用 :example22_jam
ESP32-WROOM-32用:example54_jam
a:FTPサーバ対応版(1ファイルあたり100kB以下を推奨)
Raspberry Piの電源が入っていないときに電源投入の制御を行うことが可能なIoT機器です。外出先から VPN 接続してRaspberry Piの電源を投入することも出来ます。
また、インターネットブラウザを使って簡単なコマンドをRaspberry Piへ送ったり、応答結果を確認することも出来ます。
ESP-WROOM-02用 :example23_raspi
ESP32-WROOM-32用:example55_raspi
AC100V 制御が可能なリレー・モジュールを用いることで、ACコンセント用タイマに対応したオーディオ機器や電気スタンドなどの家電機器を制御することが出来ます。たとえ無人で動作させても事故が発生しないように、十分な配慮と安全対策を行ってください。
ESP-WROOM-02用 :example24_ac
ESP32-WROOM-32用:example56_ac
各種 Wi-Fi 対応IoT センサ機器から送られてきたセンサ値データを、受信した時刻情報とともに ESPモジュール内に保持します。2Mバイトのフラッシュメモリが実装されているESPモジュールの場合、最大1Mバイトのデータを保持することができます。
ESP-WROOM-02用 :example25_fs
ESP32-WROOM-32用:example57_fs
a:FTPサーバ対応版(1ファイルあたり100kB以下を推奨)
FTPサーバ対応版では、Windowsのエクスプローラ(ファイル表示機能)へ以下を入力すると、本機内のファイルの一覧を表示することが出来ます。
ftp://cqpub:bokunimowakaru@192.168.0.XXX/
(192.168.0.XXXの部分はLCDへ表示される本機のIPアドレス)
ダブルクリックで内容を表示したり、ファイルをデスクトップなどにコピーすることも可能です。ファイルサイズは100kB以下を推奨します。ファイル転送中は他の処理が出来なくなります。また、ファイル転送中にハングアップする場合があります。
TFTPサーバ上から設定ファイルをダウンロードし、モジュール内の設定を変更します。 本サンプルではディープスリープ時間を設定することが出来ます。
ESP-WROOM-02用 :example26_tftp
ESP32-WROOM-32用:example58_tftp
※書籍内に説明はありません。2_example/example26_tftp/README.md をご覧ください。
二酸化炭素や有機ガスなどによる室内の空気環境状態を測定するガスセンサams製CCS811と温度・湿度・気圧を測定する環境センサ Bosch製 BME280を使った、乾電池駆動が可能なワイヤレスCO2センサです。
ESP-WROOM-02用 :example27_env
※書籍内に説明はありません。<2_example/example27_env/README.md>をご覧ください。
ESP-WROOM-02を搭載した ESPduino または WEMOS D1 、ESP32-WROOM-32を搭載した IoT Express 、DOIT ESPduino 32、 WEMOS D1 R3へ、DF Robot製または、SainSmart製、D1 ROBOT製のArduino 用 LCD Keypadを接続した液晶表示付きIoT端末の製作例です。
対応マイコンボード
ESPduino (ESP-WROOM-02)
WEMOS D1 (ESP-WROOM-02)
IoT Express (ESP32-WROOM-32)
DOIT ESPduino 32 (ESP32-WROOM-32)
WEMOS D1 R3 (ESP32-WROOM-32) IO12にプルダウン抵抗10kΩを追加する
対応シールド
DF Robot製 Arduino 用 LCD Keypad Shield V1.1
SainSmart製 LCD Keypad Shield
D1 ROBOT製 LCD Keypad Shield など
ESP-WROOM-02用 :example28_lcdkey
ESP32-WROOM-32用:example60_lcdkey
※書籍内に説明はありません。2_example/example28_lcdkey/README.md をご覧ください。
スマートフォンやPCが自宅の無線LANへ自動接続したときや、Amazon Dashボタンが押下されたときなどに、送信するMACブロードキャストを検出します。検出時にWi-Fi送信を行うWi-Fi送信版とシリアルUART出力を行うUART出力版を作成しました。
ESP-WROOM-02用 :example29_dash
u:UART出力版
※書籍内に説明はありません。2_example/example29_dash/README.md をご覧ください。
ESP32 デモ用のスケッチです。ESP32内に内蔵されているホール効果素子センサと、タッチセンサの検出値をスマホのウェブブラウザへ表示します。
ESP32-WROOM-32用:example31_demo
2016年11月時点では、 Arduino core for ESP32 WiFi Chip のWi-Fi機能が限られていました。その範囲内で作成したWi-Fi動作検証用のサンプルです。開発環境の更新時に発生するデグレ状態でも実行できる場合が多いので、動作確認用として利用できるでしょう。
起動後、ボタン(BOOT GPIO2)を2回押したときの速度をAmbientへ送信します。
ESP32-WROOM-32用:example32_test
国土交通省「川の防災情報」から河川の水位を取得し、液晶シールド(LCD Keypad)へ表示します。
ESP32-WROOM-32用:example62_river
※書籍内に説明はありません。スケッチ内の説明をご覧ください。
Yahoo!天気・災害から天気情報を取得し、液晶シールド(LCD Keypad)へ表示します。
ESP32-WROOM-32用:example62_weather
※書籍内に説明はありません。スケッチ内の説明をご覧ください。
Google カレンダー(予定表) に登録した予定を取得し、液晶シールド(LCD Keypad)へ表示します。
ESP32-WROOM-32用:example63_google
※書籍内に説明はありません。スケッチ内の説明をご覧ください。
有機ELディスプレイ(SSD1331ドライバ搭載品)または、M5 Stackの液晶ディスプレイをフォトフレーム端末として使用しつつ、Wi-Fi カメラ(2-10)が撮影した写真を表示します。
ESP32-WROOM-32用:example64_photo
m5: M5 Stack用
※書籍内に説明はありません。スケッチ内の説明をご覧ください。
アナログ入力ポートから録音した音声を送信します。
ESP32-WROOM-32用:example65_mic
※書籍内に説明はありません。スケッチ内の説明をご覧ください。
本書の実験に関連するファイルです。
各IoT機器をRaspberry Piで制御するためのサンプル・スクリプトです。
Wi-Fi スイッチャ(1-2)、Wi-Fi ドア開閉モニタ(2-3)、Wi-Fi 人感センサ(2-6)のいずれかと、Wi-Fi コンシェルジェ チャイム担当(3-2)に対応した呼鈴システムのサンプルスクリプトです。
server01_bellに加え、Wi-Fi コンシェルジェ アナウンス担当(3-6)から音声を出力する呼鈴システムのサンプルスクリプトです。
server02_talkに、メール送信機能を追加した呼鈴システムのサンプルスクリプトです。Raspberry PiへsSMTPとMuttをインストールし、Gmailのアカウントを使用してメール送信します。
「tools」フォルダ内の「gmail_setup.sh」を使えば、簡単にセットアップすることができます。
Wi-Fi スイッチャ(1-2)、Wi-Fi ドア開閉モニタ(2-3)、Wi-Fi 人感センサ(2-6)のいずれかと、Wi-Fi コンシェルジェ カメラ担当(3-5)に対応した防犯カメラシステムのサンプルスクリプトです。
各IoTセンサの反応通知を受けると、カメラ撮影を行い、写真をRaspberry Pi内に蓄積します。
server04_camにメール送信機能を追加した24時間防犯カメラマンです。
IoTセンサ機器から得られた在室情報と温度情報を基に、エアコンの運転を制御するIoT応用システムです。在室中にも関わらず室温が高くなりすぎた場合や低くなりすぎた場合に、エアコンの運転を開始します。
server06_hvacにメール送信機能とAmbientへのデータ送信機能を追加したホーム・オートメーション・システムです。インターネットとの連携でシステム拡張した一例です。
server01_bell と server06_hvac.shserver06_hvac を組み合わせたホーム・オートメーション・システムです。自分専用のホーム・オートメーション・システムへ展開した一例です。
クラウド連携サービスIFTTTへ通知を送信するスクリプトの例です。
server01_bell と server06_hvac.sh と server09_ifttt.sh を組み合わせたホーム・オートメーション・システムです。本書で製作するホーム・オートメーション・システムの完成例です。
Node-RED 用のサンプル・フローです。
各種IoT機器用のゲートウェイを簡単に製作することができます。
使用方法は下記のブログを参考にしてください。
https://bokunimo.net/blog/esp/40/
各IoTセンサのデータを収集することができるudp_logger.shなどの関連ツールです。
ラズベリー・パイやCygwinから下記のコマンドを入力することで、最新版のサンプル・プログラムをダウンロードすることが出来ます。
$ cd
$ git clone http://github.com/bokunimowakaru/esp.git
$ git clone http://github.com/bokunimowakaru/RaspberryPi.git
上記のgitコマンドでダウンロードした場合、今後は下記のコマンドで差分だけをダウンロードすることが出来ます。
$ cd ~/esp
$ git pull
$ cd ~/RaspberryPi
$ git pull
差分と同じ場所を変更していた場合、競合が発生します。競合を自分で解決できない場合は、フォルダ名「esp」を他の名前に書き換えて、git clone で新たにダウンロードする方法が簡単です。
ライセンスについては各ソースリストならびに各フォルダ内のファイルに記載の通りです。
使用・変更・配布は可能ですが、権利表示を残してください。
また、提供情報や配布ソフトによって生じたいかなる被害についても,一切,補償いたしません。
Copyright (c) 2016-2023 Wataru KUNINO
https://bokunimo.net/