LoginSignup
7
7

More than 5 years have passed since last update.

micropythonでAWS IoTにデータ転送

Last updated at Posted at 2017-12-18

MicroPython Advent Calendar 19日目です。

今日は昨日に引き続きWipyのファームを書き込んだESP32-DevkitでAWS IoTにデータを飛ばしてみたいと思います。
公式で公開されているESP32のファームウェアではAWS IoTに接続することが
できませんでした。
SSL部分の実装具合に差があるのだと思います。

事前準備

あらかじめAWS IoT側で設定をしておきます。
手順の詳細ここでは省かせていただきます。公式ページや他の方の記事を参考にしてください。

モノ、証明書の作成とダウンロード、証明書とモノの紐づけ、ポリシーの作成と証明書の紐づけが済んでいればおkです。。

2017-12-19_00h30_21.png

実行

AWS側の設定ができたらダウンロードした証明書をampyツールでESP32に転送しておきます。
証明書を転送したら以下のコードをESP32に転送して実行してみます。
LM35で読み取った温度をAWS IoTに送るコードです。


import socket
import ssl
import json
from machine import ADC

def lm35():
    adc = ADC()
    apin = adc.channel(pin='P18', attn=ADC.ATTN_0DB)
    return (apin() * 0.000235+0.075) / 0.01

def send():
    s = socket.socket()

    ai = socket.getaddrinfo("xxxxxxxxxx.amazonaws.com", 8443)
    print("Address infos:", ai)
    addr = ai[0][-1]

    s = ssl.wrap_socket(s, certfile='xxxxxxxxxx-certificate.pem.crt',
            keyfile='xxxxxxxxxx-private.pem.key',
            ca_certs='xxxxxxxxxx.pem', 
            cert_reqs=ssl.CERT_REQUIRED)

    s.connect(addr)
    print('Connected to Server')
    temp = lm35()
    json_data = {'state':{'reported':{'Temperature': temp}}}
    send_data=json.dumps(json_data)

    s.write(b"POST /things/ESP32/shadow HTTP/1.1\r\n")
    s.write(b"Host: xxxxxxxxxx.amazonaws.com\r\n")
    s.write(b"Content-Length: %d\r\n" % len(send_data))
    s.write(b"Connection: close\r\n")
    s.write(b"\r\n")
    s.write(send_data)
    print('Send Data to Server')

    recv_data = s.recv(4096)
    print(str(recv_data, 'utf8'))
    s.close()

2017-12-19_01h53_29.png

2017-12-19_01h54_14.png

シャドウステータスの値が更新されました。
今回はHTTPS接続で行いましたがMQTTでも同じようにAWS IoTに接続可能でしょう(要検証)

AWS IoTへの接続はTLS1.2が必要となるため、ESP32を用いました。
必要でないIoTプラットフォームへはESP8266でもよいでしょう。

TCP/IPのスタックを搭載したESP8266/ESP32とmicropythonの組み合わせは
IoTで活躍できるポテンシャルを十分感じますね。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7