最近IoT開発をやっているのですが、サーバーサイドの開発はやっぱり大変です。PHPやらSQLやら
なかなかハマるポイントが多いです。
先日FIWAREというサーバーサイドのデータ連携基盤があるというのを知ったので使ってみることにしました。データベースなどを構築しなくてもいいのでメイカー的にはちょっと開発が楽かもしれないです。
まず用意するものです。
・サーバー EC2 OSはubuntu 20.04
・m5stack
・気圧、温湿度センサー ENV.ⅡSENSOR(M5stack用環境センサユニット)
AWSでサーバーを立てるところは割愛します。
かなりポートを開かないといけません、22のほかに1026,8000,4041,7896って具合です。
まずはdockerとdocker-composeの準備をします。
ここと
ここを参考にしました。
githubでdockerの準備をします。
git clone https://github.com/lets-fiware/lets-fiware.tutorials
cd lets-fiware.tutorials/esp32/05.ul20-http/
ls -s docker-compose.yml
docker-compose up -d
esp32で実績があるみたいなので、M5stackだったら大丈夫そうですね。
インストールが完了したら下記コマンドで確認します
curl -X GET 'http://<EC2のIP>:4041/iot/about'
{"libVersion":"2.7.0","port":"4041","baseRoot":"/","version":"1.7.0"} ←こんな具合でかえってきたらorion Context Broker というFIWAREのメインのサーバーとIoT Agentっていうデータを受け取るサーバーが機能している証拠です。
ちなみにorion Context Brokerは
curl -X GET 'http://<EC2のIP>:1026/version'
で確認できます。
続いてコンテキストっていうデータの型?みたいなものを設定します。
curl -iX POST \
'http://<EC2のIP>:4041/iot/services' \
-H 'Content-Type: application/json' \
-H 'fiware-service: openiot' \
-H 'fiware-servicepath: /' \
-d '{
"services": [
{
"apikey": "任意の英数字",
"cbroker": "http://<EC2のIP>:1026",
"entity_type": "Thing",
"resource": "/iot/d"
}
]
}'
続いてM5stackでpostしたいデータを設定していきます。
api keyは任意で設定しますがm5stackでも同じ値を使ってください。
curl -iX POST \
'http://<EC2のIP>:4041/iot/devices' \
-H 'Content-Type: application/json' \
-H 'fiware-service: openiot' \
-H 'fiware-servicepath: /' \
-d '{
"devices": [
{
"device_id": "sensor001",
"entity_name": "urn:ngsd-ld:Sensor:001",
"entity_type": "Sensor",
"timezone": "Asia/Tokyo",
"attributes": [
{ "object_id": "d", "name": "dateObserved", "type": "DateTime" },
{ "object_id": "t", "name": "temperature", "type": "Number" },
{ "object_id": "h", "name": "relativeHumidity", "type": "Number" },
{ "object_id": "p", "name": "atmosphericPressure", "type": "Number" }
],
"static_attributes": [
{ "name":"location", "type": "geo:json", "value" : { "type": "Point", "coordinates" : [ 139.7671, 35.68117 ] } }
]
}
]
}
'
座標も入ってますが、日付と温湿度、気圧しか使いません。IPアドレスをかならず立てたEC2のものへ変更してください。
ここからはm5stackのスケッチになります。arduinoIDEで作成しました。さきほど設定したapi keyとssid、passは変更してください。これで問題なければarduinoIDEシリアルモニタで下記のようにpostできます。
POST http://<EC2のIP>:7896/iot/d?k=<api key>&i=sensor001
d|2022-01-29T21:40:40+0900|t|21.14|h|33.03|p|1004.39
httpCode: 200
あとはちゃんとPOSTできているかの確認は下記コマンドとなります。
curl -X GET 'http://<EC2のIP>:1026/v2/entities/urn:ngsd-ld:Sensor:001?type=Sensor'
-H 'fiware-service: openiot'
-H 'fiware-servicepath: /'
温湿度を吐き出すjsonが出てきたらOKです。 …ちょっと実感が薄いですが、FIWARE特有のコンテキスト処理が完了しています。 次回はこれをブラウザで見るwirecloudと連携させていきたいと思います。 →
その2へ