2020年01月05日記載
ESP32を使ったIoT端末、ファーストステップ完了
年末に書いたESP32を使ったIoT端末の制作。第1弾の動作確認まで予定より早く達成した。細かい調整への課題は多いが一番の壁だったBuletoothを使ってセンサデータを飛ばす課題のクリアできたのは今後の収穫となった。



手書きの汚くて申し訳ないが、具体的な構成を図を書いてみた。



前回と異なるのはラズパイに直接人感センサ(PIRセンサ)を接続するのではなく、コンパクトで低消費電力で且つセンサの誤検知の可能性が低いBluetooth Low Profile(BLE)でセンサデータを飛ばすことにある。



現時点、ESP-WROOM-32(ESP32)への電源はUSB電源に頼っているが、送信タイミングなどの調整やスイープ機能を使って、今後乾電池3本での稼働を目指したい。

ただ人感センサの場合、常時センサに通電し続ける必要があるため電池での運用は消耗が大きすぎて実用的ではない。電池稼働を想定する場合、センサへの給電を1分に1回以下のタイミングのみセンサデータを取得するなどの運用面での検討もしなければならない。

ESP-WROOM-32(ESP32)で実行中のスケッチはこちら。

#include "BluetoothSerial.h"
BluetoothSerial SerialBT;

int pir = 12;
int result_m;

void setup() {
 Serial.begin(9600);
 SerialBT.begin("ESP32_serial");
}

void loop() {
 result_m = 0;
 if(digitalRead(pir)) {
  result_m = 1;
 }else{
  result_m = 0;
 }
 SerialBT.print(result_m);
 delay(1000);
}

スケッチ例(ESP32 BLE Arduino→BLE_server)から部分的に買い替えて対応したので、スケッチの書く技量がない私でもすぐに動作させることができた。

またbluetooth接続したシリアル通信データをラズパイで取得するプログラムはPythonではなく自分が唯一書くことのできるPHPで取得している。

使用した外部ライブラリは「php_serial.class.php」。これを使うと簡単にシリアル通信のデータを取得することができる。

require('php_serial.class.php');
$device_set = '/dev/rfcomm0';
$serial = new phpSerial();
$serial->deviceSet($device_set);
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->deviceOpen();
$value = $serial->readPort();
$serial->deviceClose();

このように指定されたとおりに書くだけで$valueにセンサデータを代入することができるようになった。これをwhile(true)しても良いし、cronで定期的に実行しても良いだろう。

センサデータの中に検知情報が含まれている時だけWeb上のDBサーバにPOSTする処理を加えればIoT端末Bluetooth化を実現することができるようになる。

今後解決すべく課題を整理する
・ラズパイを起動しただけで自動的にESP32とペアリングを確立させる
・ラズパイを起動しただけで自動的にシリアル通信を開始させる
・複数のESP32設置をして1台のラズパイに同時接続を実現させる
・人感センサ以外のセンサ端末でのBLE伝送をテストを行う
・人感センサ以外のセンサ端末を使って電池稼働させる
・ESP32からBLE経由でラズパイにプッシュ通知を行う
・センサとESP32をスマートな筐体収納を目指す


コラムワード検索
表示件数
ワード検索
本コラムに関する意見
Twitterにて受け付けます @megahit_jp