ESP32からmqttしてin the dynamodb する。
このあたりの記事の続きとなります。
リクガメのおウチの温度/湿度をモニターしてawsに投げるのを1000円くらいでやる(予定)
温度/湿度をモニターしてaws IOTを介して…
とりえあず、温度や湿度をaws iotにmqttする所まではやってます。
mqtt
あらためてmqtt。
送信をpublish、受信をsubscribeとざっくり考えていいんだろうか。
その送信側をesp32+micropythonにて実装しました。で、受信側がまだできてない。
試しに拾ってsnsに投げるのはやってみて無事出来てたけど。
今回は特定のTOPIC(kamekusa/DHT22)に投げたメッセージをin the dynamodbする。
dynamodbにsubscribe
まんまコレかな。
DynamoDB ルールの作成
なお、これはやっておきたい。
DynamoDB の TTL (Time To Live) 機能を使って古いレコードを自動的に削除
古いデータいらんですしね。
まず投げるjson決めときましょう。
idはUUID的なの入れたいけどuuidのライブラリが標準でなさそうだしユニークになるtimeをそのまま入れておきます。ハッシュキーがidでソートキーがexpire。expireはtime+48時間にしておいてTTLの制御に使います。
{
"id": "id1545826432",
"expire": 1545826432,
"d1": "22.2",
"d2": "33.3"
}
現在時刻の取得
しかし、、microPythonで現在時刻どうとるねん。
ためしにmachine.RTC().datetime()
実行してみたらこうなるし。。
>>> print (machine.RTC().datetime())
(2000, 1, 1, 5, 0, 8, 16, 409726)
時刻合わせがわからんし、なんか時刻の起点も2000/1/1になってるし。
なんか余計な仕事っぽくて嫌やですけど、そういうの作ってくれてる方もおられますし、ntpから時間を取る処理を入れておきます。
micropython on ESP32 でNTPサーバから時刻取得
ありがたく使わせいただきます。
で、無事取れたけどなんかちょっと値が違う気も。。まあいっか後でoffset分調整しよう。
>>> print("localtime=%s" % ntptime.time())
localtime=599141370
publish側修正
def mqttpub(tem,hum)
をこうしました。
def mqttpub(tem,hum):
a=usocket.getaddrinfo(mqtt_endpoint,8883)
addr = a[0][-1][0]
time = ntptime.time()
msg = {
"id": "id{}".format(time),
"expire": time + 48 * 60 * 60,
"d1": "{}".format(tem),
"d2": "{}".format(hum)
}
msg = json.dumps(msg)
client = MQTTClient(client_id="ESP2866DHT22", server=addr, port=8883, keepalive=5000, ssl=True, ssl_params={ "key":key, "cert":cert, "server_side":False })
client.connect()
print(str(client))
loop = 10
while loop > 1:
print (".")
try:
res = client.publish(topic=mqtt_topic, msg=msg, qos=0)
print('Sending: ' + msg)
print(str(res))
loop = 0
except Exception as e:
print('Could not establish MQTT connection')
print (str(e))
time.sleep(1)
loop -= 1
DynamoDB側とaws iot側
このへんは直感でイケると思うのでスクショだけで失礼します。
お。データ入ってきた。
(timeってなってるとこはこのあとexpireに変えました)
ソース
sleepのやつはちょっと宿題です
今後の予定
- フロントからJSで値拾って表示
- フロントからmqttをpublish -> esp32でサーボ動かして給餌
2018/12/28追記
あまり深く考えずにこれだけでdeepsleepはできました。
machine.deepsleep(60000*5)
Author And Source
この問題について(ESP32からmqttしてin the dynamodb する。), 我々は、より多くの情報をここで見つけました https://qiita.com/ikegam1/items/ea36ac6051ef66946420著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .