ESP32チュートリアル 48/55 - リモート温度監視とLED制御 MQTT | SunFounderのESP32 IoTキット
このチュートリアルでは、Adafruit IOプラットフォームを使用して、温度と湿度をリモートで監視するために、SunFounderのESP32拡張ボードとESP32モジュールをどのように活用するかを探ります。さらに、ウェブインターフェースを通じてLEDを制御する機能も実装します。このプロジェクトの終わりには、リアルタイムで温度と湿度のデータを表示し、ブラウザからLEDをオンとオフに切り替えることができるようになります。
このプロジェクトは、ESP32とAdafruit IOサービス間の効率的な通信のためにMQTTプロトコルを利用しています。MQTTは軽量でIoTアプリケーションに適しており、センサーデータを簡単に公開し、LED制御のためのコマンドに登録できます。コードと配線のさらなる説明については、このチュートリアルに付随するビデオ(ビデオは:00で)を必ず確認してください。
ハードウェアの説明
このプロジェクトの主なコンポーネントには、ESP32マイクロコントローラー、DHT11温湿度センサー、LEDが含まれます。ESP32は、内蔵のWi-FiおよびBluetooth機能を備えた強力なマイクロコントローラーで、IoTプロジェクトに最適な選択肢です。複数のタスクを処理し、シームレスにインターネットに接続できます。
DHT11センサーは、温度と湿度を測定する役割を担っています。デジタル信号を出力し、ESP32によって読み取ることができます。LEDはインジケーターとして機能し、インターネット上でデバイスを管理するMQTTプロトコルの有効性を示すためにリモートで制御することができます。
データシートの詳細
| メーカー | アダフルート |
|---|---|
| 部品番号 | DHT11 |
| ロジック/IO電圧 | 3.3 V |
| 供給電圧 | 3.3 V |
| 出力電流(チャネルごと) | 20 mA |
| ピーク電流(チャンネルごと) | 50 mA |
| PWM周波数ガイダンス | N/A |
| 入力論理閾値 | 0.3 V(低)、0.7 V(高) |
| 電圧降下 / RDS(on)/ 飽和 | N/A |
| 熱的限界 | 0〜50 °C |
| パッケージ | 3ピン |
| ノート / バリアント | 高精度のためにDHT22を使用してください。 |
- 正しい配線を確認して損傷を防いでください。
- LEDに対して、電流制限のために220オームの抵抗を使用してください。
- 必要に応じて、DHT11のデータピンにプルアップ抵抗を使用してください。
- Wi-Fiの認証情報の大文字と小文字を確認してください。
- 接続問題のデバッグのためにシリアル出力を監視してください。
- MQTTトピックは競合を避けるために一意に保ってください。
- センサーの読み取りをテストして、それらが有効であることを確認してください。
- DHT11の応答時間に注意してください。読み取りが安定するまでに時間がかかる場合があります。
LED= コントロールLED;temperature温度データを公開する;humidity湿度データを公開する。
配線手順
コンポーネントを配線するには、まずDHT11センサーを接続します。DHT11の左ピンを赤いワイヤーを使ってブレッドボードの3.3V電源レールに接続します。DHT11の中央ピンは、黄色いワイヤーを使ってESP32のピン13に接続する必要があります。最後に、DHT11の右ピンを青いワイヤーを使ってグラウンドレールに接続します。
次に、LEDのアノード(長い脚)を220オームの抵抗を介してESP32のピン15に接続します。カソード(短い脚)はブレッドボードのグラウンドレールに直接接続します。すべての接続が確実であることを確認し、緩んでいるワイヤーがないか再確認してください。
ダッシュボードの設定
-
訪問アダフルート IO、その後クリックしてください無料で始める無料アカウントを作成する。

-
アカウントを作成するにはフォームに記入してください。

-
Adafruitアカウントを作成したら、Adafruit ioを再度開く必要があります。クリックしてください。ダッシュボード、その後クリックします新しいダッシュボード.

-
作成する新しいダッシュボード.

-
新しく作成されたものを入力してくださいダッシュボード新しいブロックを作成します。

-
作成する1切り替えブロック。

-
次に、ここで新しいフィードを作成する必要があります。このトグルはLEDを制御するために使用され、私たちはこのフィードに「LED」という名前を付けます。

-
チェックしてくださいLEDフィードしたら、次のステップに進んでください。

-
ブロックの設定を完了してください(主にブロックタイトル、オンテキスト、オフテキスト)、その後クリックしてください。ブロックを作成する右下のボタンを押して完了してください。

-
私たちはまた、2つを作成する必要があります。テキストブロック次に。それらは温度と湿度を表示するために使用されます。したがって、名前付きのフィードを二つ作成します。温度と湿度.

-
作成後、あなたのダッシュボードは次のような感じになるはずです:

-
レイアウトは、使用することで調整できます。レイアウトを編集ダッシュボードのオプション。

-
クリックしてAPIキー、そしてあなたのユーザー名が表示されます。APIキー表示されました。これをメモしておいてください。コードに必要になります。

コードの例と手順解説
コードは必要なライブラリを含め、Wi-Fiの資格情報を設定し、MQTTのパラメータを定義することから始まります。主要な識別子としてAIO_USERNAMEとAIO_KEYAdafruit IOサービスでの認証に使用されます。
#define AIO_USERNAME "YourUsername"
#define AIO_KEY "YourKey"これらの行は、MQTTブローカーに接続するために不可欠なAdafruit IOのユーザー名とキーを定義しています。成功した接続を確立するために、これらの値が正確であることを確認してください。
中でsetup()機能として、Wi-Fi接続が初期化され、MQTTクライアントが安全な通信のためにルートCA証明書で設定されます。
WiFi.begin(WLAN_SSID, WLAN_PASS);
client.setCACert(adafruitio_root_ca);このコードはESP32を指定されたWi-Fiネットワークに接続し、セキュアなMQTT接続のためのルートCAを設定します。これらの接続を適切に処理することは、信頼性の高いデータ伝送にとって重要です。
最後に、loop()関数はMQTT接続を管理し、定期的に温度と湿度の測定値を公開します。
mqtt.processPackets(5000);このラインは、ESP32が購読されたトピックの受信メッセージを処理できるようにし、デバイスがウェブインターフェースから送信されたコマンドに応じる状態を維持します。
記事の下に読み込まれている完全なプログラムを参照してください。
デモンストレーション / 期待されること
セットアップが成功すると、Adafruit IO ダッシュボードで温度と湿度のリアルタイム更新が表示されます。また、ウェブインターフェースを通じて LED のオン・オフを切り替えることもできます。LED が期待通りに応答しない場合は、配線を確認し、MQTT トピック名がコードで定義されたものと一致していることを確認してください。
特定のMQTT接続エラーは、証明書の有効期限切れにより発生する可能性があることに注意してください。これらの問題を回避するために、コードに最新のルートCA証明書が含まれていることを確認してください(ビデオの15:30で)。
ビデオタイムスタンプ
- 00:00 開始
- 1:50 プロジェクトの紹介
- 3:16 MQTTとは何か
- 6:36 Adafruit IO セットアップ
- 11:13 配線
- 13:38 Arduinoコードの説明
- 22:03 ESP32ボードとCOMポートの選択
- 23:44 プロジェクトデモ
- 27:05 ダッシュボードを更新中
/*
* Adafruit MQTTライブラリ ESP32 Adafruit IO SSL/TLSサンプル
*
* ESP32 Arduinoコアの最新バージョンを使用してください:
* https://github.com/espressif/arduino-esp32
*
* Adafruit Huzzah32 Featherとブレークアウトボードで非常にうまく動作します:
* https://www.adafruit.com/product/3405
* https://www.adafruit.com/products/4172
*
* Adafruitはこのオープンソースコードを提供するために時間とリソースを投資しています。
* Adafruitの製品を購入することで、Adafruitとオープンソースハードウェアをサポートしてください!
*
* Adafruit IndustriesのためにTony DiColaが執筆。
* Adafruit IndustriesのためにBrent Rubellが修正。
* MITライセンス、上記の全てのテキストは再配布の際に含める必要があります。
*/
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/*
* WiFiアクセスポイント*********************************/
*
* #define WLAN_SSID "SSID"
* #define WLAN_PASS "PASSWORD"
*
* /************************* Adafruit.io セットアップ
*/
#define AIO_SERVER "io.adafruit.com"
// MQTTSにはポート8883を使用しています。
#define AIO_SERVERPORT 8883
// Adafruit IOアカウント設定
// (これらの値を取得するには、https://io.adafruit.com にアクセスして、Active Keyをクリックしてください)
// #define AIO_USERNAME "あなたのAdafruit IOユーザー名"
// #define AIO_KEY "YOUR_ADAFRUIT_IO_KEY"
#define AIO_USERNAME "JimmyKernel"
#define AIO_KEY "aio_Mxiv12i74b5jKfKNSKLYjlhPmoHC"
/*
* グローバルステート(これを変更する必要はありません!)******************/
*
* // SSL/TLS サポート用の WiFiFlientSecure
* WiFiClientSecure client;
*
* // WiFi クライアントと MQTT サーバー、およびログイン情報を渡して MQTT クライアントクラスをセットアップします。
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // io.adafruit.com ルート CA
* const char* adafruitio_root_ca = \
* "-----BEGIN CERTIFICATE-----\n"
* "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
* "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
* "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
* "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
* "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
* "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
* "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
* "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
* "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
* "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
* "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
* "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
* "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
* "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
* "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
* "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
* "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
* "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
* "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
* "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
* "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
* "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
* "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
* "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
* "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
* "-----END CERTIFICATE-----\n";
*/
// 'テスト'という名前のフィードを公開用に、'テスト2'を購読用に設定します。
// AIOのMQTTパスは次の形式に従います: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
Adafruit_MQTT_Publish humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");
/*
* Adafruit MQTT 基本レッスン 1
* このコードの動画指示を YouTube で見る https://youtu.be/M9BQweAsHJM
* このレッスンとコードのリソースページ:
* 📚⬇️ ダウンロードおよびリソースページ https://robojax.com/RJT670
* チュートリアル by https://youTube.com/@robojax
*
* Adafruit MQTT ライブラリ ESP32 Adafruit IO SSL/TLS の例
*
* ESP32 Arduino Core の最新バージョンを使用してください:
* https://github.com/espressif/arduino-esp32
*
* Adafruit Huzzah32 Feather およびブレイクアウトボードでうまく動作します:
* https://www.adafruit.com/product/3405
* https://www.adafruit.com/products/4172
*
* Adafruit は、このオープンソースコードを提供するために時間とリソースを投資しています。
* Adafruit とオープンソースハードウェアをサポートするために
* Adafruit の製品を購入してください!
*
* トニー・ディコラによって Adafruit Industries のために書かれました。
* ブレント・ルベルによって Adafruit Industries のために修正されました。
* MIT ライセンス、上記のすべてのテキストは再配布の際に含める必要があります
* /
*
* /// 参照: https://www.electronicwings.com/esp32/esp32-mqtt-client
*/
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/*
* WiFiアクセスポイント *********************************/
*
* #define WLAN_SSID "dars"
* #define WLAN_PASS "5152535455"
*
* /************************* Adafruit.io セットアップ
*/
#define AIO_SERVER "io.adafruit.com"
// MQTTSにポート8883を使用しています。
#define AIO_SERVERPORT 8883
// Adafruit IOアカウント設定
// (これらの値を取得するには、https://io.adafruit.comを訪れて、アクティブキーをクリックしてください)
// #define AIO_USERNAME "YOUR_ADAFRUIT_IO_USERNAME"
// #define AIO_KEY "YOUR_ADAFRUIT_IO_KEY"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_wCyL33EVKLcGoAotGNEQ4dGQYOLZ"
/*
* グローバルステート(これを変更する必要はありません!) ******************/
*
* // SSL/TLS サポートのための WiFiFlientSecure
* WiFiClientSecure client;
*
* // WiFi クライアント、MQTT サーバー、ログイン詳細を渡して MQTT クライアントクラスをセットアップします。
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // io.adafruit.com ルート CA
* const char* adafruitio_root_ca =
* "-----BEGIN CERTIFICATE-----\n"
* "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"
* "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
* "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n"
* "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n"
* "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
* "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n"
* "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n"
* "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n"
* "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n"
* "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n"
* "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n"
* "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n"
* "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n"
* "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n"
* "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n"
* "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n"
* "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n"
* "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"
* "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"
* "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"
* "-----END CERTIFICATE-----\n";
*/
// 「test」という名前のフィードを公開用にセットアップし、「test2」という名前のフィードを購読用にセットアップします。
// AIOのMQTTパスは次の形式に従います: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
// Adafruit_MQTT_Publish 湿度 = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
// Adafruit_MQTT_Publish温度 = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");
Common Course Links
Common Course Files
リソースと参考文献
-
ドキュメンテーションESP32 チュートリアル 48/55 - Adafruit IOを用いた温度および湿度モニタリングのための SunFounder ドキュメントページdocs.sunfounder.com
ファイル📁
ファイルは利用できません。