M5StackとESP-NOW連携による分散型IoT菜園システム構築:無線センシングと自動制御の実践
はじめに:次世代IoT菜園へのステップ
家庭菜園におけるIoT技術の導入は、栽培プロセスの効率化と最適化を大きく進めます。特に、市販の単機能デバイスでは実現が難しい、複数のセンサーデータに基づいた統合的な環境制御や、広範囲にわたる菜園のモニタリングは、自作のIoTシステムによってその可能性を広げることができます。
本稿では、M5StackシリーズとESP-NOWプロトコルを活用し、分散型IoT菜園システムを構築する具体的な手法について解説いたします。このシステムは、無線による柔軟なセンシングノード配置と、セントラルノードでのデータ集約・自動制御を可能にし、より高度な菜園管理を実現します。
M5StackとESP-NOWによる分散型システムの利点
従来のIoT菜園システムでは、Wi-Fiを介してクラウドにデータを送信し、クラウド側で制御判断を行う、あるいは単一のコントローラーで全てのセンサーとアクチュエーターを管理する形式が一般的でした。しかし、これらの方式には以下のような課題も存在します。
- Wi-Fi接続の制約: 菜園の広さや物理的な障害物により、すべてのセンサーをWi-Fiアクセスポイントの範囲内に収めることが困難な場合があります。
- 配線の複雑化: 多数のセンサーやアクチュエーターを単一のコントローラーに集約すると、配線が複雑になり、設置の自由度が低下します。
- バッテリー消費: Wi-Fi接続は、特にバッテリー駆動のデバイスにおいて消費電力が大きくなる傾向があります。
これらの課題に対し、ESP-NOWプロトコルとM5Stackの組み合わせは有効な解決策を提供します。
M5Stackシリーズの特性
M5Stackは、ESP32をベースとしたモジュール型開発ボードです。小型でありながら、ディスプレイ、ボタン、Wi-Fi、Bluetooth、そして多数のGroveコネクタを標準搭載しており、プロトタイピングから実運用まで幅広く対応できます。シリーズには、ディスプレイ付きのM5Stack Core、極小サイズのM5Stack Atom、様々な機能を持つM5Stack Unitなどがあり、用途に応じた選択が可能です。
ESP-NOWプロトコルの概要
ESP-NOWは、Espressif Systemsが提供するステートレスなコネクションレス通信プロトコルです。Wi-FiのMAC層上で動作し、アクセスポイントを介さずにデバイス間で直接データを送受信できます。このプロトコルの主な利点は以下の通りです。
- 低遅延・高効率: 接続確立のオーバーヘッドがないため、高速かつ低遅延での通信が可能です。
- 低消費電力: 短時間で通信が完了するため、スリープモードからの復帰頻度を抑え、バッテリー駆動のデバイスに適しています。
- シンプルさ: TCP/IPスタックを使用しないため、ファームウェアの実装が比較的容易です。
- P2P/ブロードキャスト: 1対1のユニキャスト、あるいは1対多のブロードキャスト通信をサポートします。
ESP-NOWを用いることで、各センシングノードは必要な時にのみデータを送信し、セントラルノードがそれらを受信・集約する、効率的な分散型システムを構築できます。
システムアーキテクチャの設計
本システムは、主に以下の2種類のノードで構成されます。
-
センシングノード(リモートノード):
- M5Stack Atom LiteまたはM5Stack Unitシリーズをベースとします。
- 土壌水分センサー、温度湿度センサー、照度センサーなどを接続します。
- 定期的にセンサーデータを取得し、ESP-NOWを介してセントラルノードへ送信します。
- 可能な限りスリープモードを活用し、バッテリー寿命の最大化を図ります。
-
セントラルノード(コントローラー):
- M5Stack Core(Core2など)をベースとします。
- 複数のセンシングノードからESP-NOWでデータを受信し、処理します。
- 受信したデータに基づいて、自動給水ポンプや換気ファンなどのアクチュエーターを制御します。
- ディスプレイに現在の環境情報やシステムの稼働状況を表示します。
- (オプションで、ローカルネットワーク内のWebサーバー機能や、簡易的なデータロギング機能を実装することも可能です。)
graph LR
subgraph 菜園エリア
SN1[センシングノード1 (M5Stack Atom + センサー)] -- ESP-NOW --> CN(セントラルノード M5Stack Core)
SN2[センシングノード2 (M5Stack Atom + センサー)] -- ESP-NOW --> CN
SN3[センシングノード3 (M5Stack Unit + センサー)] -- ESP-NOW --> CN
end
CN -- 制御信号 --> AP1[アクチュエーター1 (例: 給水ポンプ)]
CN -- 制御信号 --> AP2[アクチュエーター2 (例: 換気ファン)]
CN -- ディスプレイ --> User[ユーザー]
センシングノードの構築
部品選定例
- マイコンモジュール: M5Stack Atom Lite (小型でGPIOが扱いやすい)
- 土壌水分センサー: 静電容量式土壌水分センサー (腐食しにくい)
- 温度湿度センサー: DHT11/DHT22またはSHT30 (高精度)
- 照度センサー: BH1750 (I2C通信)
- 電源: 小型リチウムイオンバッテリー、充電モジュール (TP4056など)
- ケース: 防滴・防水ケース (屋外設置の場合)
回路設計の考え方
M5Stack Atom LiteはGroveコネクタを搭載しているため、対応するセンサーは基本的にプラグアンドプレイで接続できます。 静電容量式土壌水分センサーはアナログ入力、DHTシリーズはGPIO、BH1750はI2Cバスに接続します。
M5Stack Atom Lite
- Groveポート (G26/G32, G33/G27など)
- 土壌水分センサー (ADC入力)
- DHTxx (GPIO)
- BH1750 (I2C)
- USB-Cポート (給電、書き込み)
ファームウェア開発:ESP-NOWによるデータ送信
Arduino IDEまたはESP-IDF環境を用いて開発します。ESP-NOWを使用するには、esp_now.h
をインクルードし、初期化、送信先MACアドレスの登録、コールバック関数の設定が必要です。
センシングノードの基本的な処理フローは以下の通りです。
- M5Stackの初期化とセンサーのセットアップ。
- ESP-NOWの初期化と送信先(セントラルノード)MACアドレスの登録。
- 定期的に(例:5分ごと)センサーからデータを読み込む。
- 読み込んだデータを構造体に格納。
esp_now_send()
関数を用いてデータをセントラルノードへ送信。- 指定時間スリープモードに入り、消費電力を抑える。
データ構造体例:
typedef struct struct_message {
uint8_t sensorId;
float temperature;
float humidity;
int soilMoisture;
int lux;
} struct_message;
送信処理の概念:
// ESP-NOW初期化
esp_now_init();
esp_now_register_send_cb(OnDataSent); // 送信結果コールバック
// ピア登録(セントラルノードのMACアドレス)
uint8_t broadcastAddress[] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX}; // セントラルノードのMACアドレス
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 0, NULL, 0);
// センサーデータ取得と送信
void sendSensorData() {
// センサーからデータ読み込み
// ...
myData.sensorId = 1; // このノードのID
// ... データをmyDataに格納
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
}
// 送信後コールバック
void OnDataSent(uint8_t *mac_addr, esp_now_send_status_t status) {
// 送信結果のログ出力など
}
// ループ内で定期的にsendSensorData()を呼び出し、その後スリープ
セントラルノード(コントローラー)の構築
部品選定例
- マイコンモジュール: M5Stack Core2 (高機能ディスプレイ、豊富なGPIO、バッテリー内蔵)
- アクチュエーター:
- 給水ポンプ: 小型DCポンプ(DC 5V/12V)
- リレーモジュール: 1チャンネルまたは多チャンネルリレー (M5StackのGPIOでポンプの電源を制御)
- 換気ファン: 小型DCファン(DC 5V/12V)
- 電源: M5Stack Core2はUSB-C給電または内蔵バッテリー。アクチュエーターには別途電源が必要な場合がある。
回路設計の考え方
M5Stack Core2は、内蔵バッテリーと電源管理チップを搭載しており、安定した運用が可能です。アクチュエーターの制御には、リレーモジュールを介してM5StackのGPIOピンを利用します。
M5Stack Core2
- GPIOピン (例: G26, G32, G33など)
- リレーモジュール (信号線) --> DCポンプ電源
- リレーモジュール (信号線) --> DCファン電源
- ディスプレイ
- USB-Cポート (給電、書き込み)
ファームウェア開発:ESP-NOW受信と自動制御ロジック
セントラルノードのファームウェアは、複数のセンシングノードからのデータ受信、データの解析、閾値に基づく制御判断、そしてアクチュエーターへの出力が主な役割です。
受信処理の概念:
// ESP-NOW初期化
esp_now_init();
esp_now_register_recv_cb(OnDataRecv); // 受信データコールバック
// 受信データコールバック
void OnDataRecv(uint8_t *mac_addr, uint8_t *incomingData, int len) {
memcpy(&receivedData, incomingData, sizeof(receivedData));
// 受信したデータを処理 (例: LCD表示、制御ロジックへの入力)
processSensorData(receivedData);
}
// 受信データ処理と制御ロジック
void processSensorData(struct_message data) {
// センサーIDごとにデータを管理 (配列やマップなど)
// 例えば、soilMoistureが閾値以下なら給水
if (data.sensorId == 1 && data.soilMoisture < 300) {
controlWaterPump(true); // 給水開始
} else {
controlWaterPump(false); // 給水停止
}
// 温度や湿度に基づいて換気ファンを制御
if (data.temperature > 28.0 || data.humidity > 80.0) {
controlFan(true); // 換気開始
} else {
controlFan(false); // 換気停止
}
// LCDに表示更新
M5.Lcd.setCursor(0, 0);
M5.Lcd.printf("ID:%d Temp:%.1f Hum:%.1f Soil:%d Lux:%d\n",
data.sensorId, data.temperature, data.humidity, data.soilMoisture, data.lux);
}
// アクチュエーター制御関数
void controlWaterPump(bool state) {
digitalWrite(PUMP_RELAY_PIN, state ? HIGH : LOW);
}
void controlFan(bool state) {
digitalWrite(FAN_RELAY_PIN, state ? HIGH : LOW);
}
具体的な応用事例とデータ活用の深化
1. トマト栽培における水分管理の最適化
- 課題: トマトの栽培では、生育段階に応じた適切な水分管理が収穫量と品質に直結します。手動での水やりは経験に依存し、過不足が生じやすいです。
- IoT活用: 複数のトマト株それぞれにセンシングノードを配置し、土壌水分データをリアルタイムで収集します。セントラルノードは各株の土壌水分レベルを監視し、設定した閾値に基づいて個別に自動給水を行います。これにより、株ごとの生育状況に合わせたきめ細やかな水分供給が可能になります。
- データ活用: 取得した土壌水分データの経時変化をM5Stackのディスプレイにグラフ表示したり、SDカードにロギングしたりすることで、特定の生育段階における最適な水分量や、水やり後の土壌の乾燥速度などを分析し、今後の栽培計画に役立てます。
2. 小規模ビニールハウス内の環境制御
- 課題: ビニールハウス内の温度・湿度は、日射や外気温の影響を大きく受け変動しやすく、適切な環境維持が困難です。
- IoT活用: ハウス内に複数のセンシングノードを配置し、温度、湿度、照度データを収集します。セントラルノードはこれらのデータに基づき、設定した閾値に応じて換気ファンや遮光シート、さらには加湿器などを自動制御します。夜間の冷え込みが予想される場合は、M5Stackに接続したヒーターを稼働させることも可能です。
- データ活用: 各ノードから収集された環境データを組み合わせることで、ハウス内のホットスポットやコールドスポットを特定し、換気経路や設備配置の最適化を図ることができます。日ごとの温度・湿度変動パターンを分析し、植物の生育サイクルに合わせた環境制御プロファイルを動的に調整することも、高度な応用例として考えられます。
システム構築における課題と解決策
1. ESP-NOWの通信安定性
- 課題: ESP-NOWはP2P通信ですが、物理的な障害物や他の2.4GHz帯の電波干渉により、通信が不安定になることがあります。
- 解決策:
- アンテナの最適化: 外部アンテナポートを持つM5Stackを利用し、より高利得なアンテナを使用することで通信距離を伸ばします。
- リトライ機構: 送信失敗時に複数回リトライする仕組みをファームウェアに実装します。
- 中継ノード: 広大な菜園の場合、ESP-NOWの中継ノードを設置することも検討できます。
2. 電源管理
- 課題: 特にセンシングノードは屋外に設置されることが多く、バッテリー駆動の長期運用が求められます。
- 解決策:
- スリープモードの活用: データを送信しない期間はディープスリープモードに入ることで、消費電力を大幅に削減します。
- 低消費電力センサーの選定: センサー自体も消費電力が少ないものを選定します。
- ソーラー充電システム: 小型ソーラーパネルと充電コントローラーを組み合わせ、バッテリーを常時充電するシステムを構築します。
3. センサーのキャリブレーション
- 課題: 土壌水分センサーなどは、土の種類やセンサーの設置深さによって値が変動し、正確な測定にはキャリブレーションが必要です。
- 解決策:
- ゼロ点・飽和点の把握: 乾燥した土壌と完全に水浸しにした土壌でのセンサー値を測定し、それぞれを「0%」と「100%」としてキャリブレーションデータとします。
- 定期的な確認: 運用中も定期的に手動で土壌水分を測定し、センサー値との乖離がないかを確認します。
まとめと今後の展望
M5StackとESP-NOWを組み合わせた分散型IoT菜園システムの構築は、市販のソリューションでは得られない柔軟性と制御精度を家庭菜園にもたらします。各ノードが独立して機能し、無線でデータをやり取りすることで、設置場所の制約が少なく、大規模な菜園にも対応可能です。
本システムを基盤として、以下のようなさらなる発展が考えられます。
- 機械学習による生育予測: 収集した環境データと生育データを組み合わせ、機械学習モデルを構築することで、病害虫の早期発見や収穫量の予測、最適な施肥タイミングの提案などが可能になります。
- 動的閾値調整: 植物の成長ステージや季節変化に応じて、自動制御の閾値を動的に調整する機能の実装。
- クラウド連携のハイブリッド化: ESP-NOWでデータを集約し、セントラルノードからのみWi-Fi経由でクラウドにデータを送信することで、バッテリー消費を抑えつつ広域からのデータアクセスを可能にする。
これらの技術的な探求は、家庭菜園を単なる趣味の領域を超え、データに基づいた科学的なアプローチへと進化させる契機となるでしょう。