2018年5月5日土曜日

[ESP32][AWS][IoT][Micropython]MQTT接続してPublish/Subscribeしてみる

Micropythonの公式v1.9.3のままだと証明書ありのSSL接続が未実装状態だったというオチがあって、3日ほど格闘してようやく解決。。

コミュニティのやり取りを見てると、ここの認証回りの修正は当分先な気がするので、自前パッチをあてるのがよさそうです。
(ESP-IDFのバージョンも最新のを使いたいとかもあるし、いっそのことまとめてやっちゃえ!w)


ってことで修正して動作確認。


#SSL接続import socket, ssl
s=socket.socket()
addr=socket.getaddrinfo("www.yahoo.com", 443)[0][-1]
s.connect(addr)
client=ssl.wrap_socket(s)


#MosquitoのブローカーにPublish(証明書なし)
import ssl
import socket
from mqtt import MQTTClient
MQTT_CLIENT_ID = "12341234"
MQTT_HOST      = "192.168.1.2"
MQTT_PORT      = 1883
client = MQTTClient(client_id=MQTT_CLIENT_ID, server=MQTT_HOST, port=MQTT_PORT, keepalive=10000, ssl=False)
client.connect()
client.publish("test", "ok")
client.disconnect()

#MosquitoのブローカーにPublish(証明書あり)
kw = {}
kw["cacert"]          = cacertdata
kw["cert"]            = certdata
kw["key"]             = keydata
kw["cert_reqs"]       = ssl.CERT_REQUIRED
kw["server_hostname"] = MQTT_HOST
kw["server_side"]     = False
client = MQTTClient(client_id=MQTT_CLIENT_ID, server=MQTT_HOST, port=MQTT_PORT, keepalive=10000, ssl=True, ssl_params=kw)
client.connect()
client.publish("test", "ok")
client.disconnect()


#Subsctibeしてみる


def sub_cb(topic, msg):
    print((topic, msg))

client = MQTTClient(client_id=MQTT_CLIENT_ID, server=MQTT_HOST, port=MQTT_PORT, keepalive=10000, ssl=True, ssl_params=kw)
client.connect()

client.set_callback(sub_cb)
client.subscribe("foo_topic")

client.wait_msg()
又は
client.check_msg()



これらが上手く実行できていれば問題ないと思います。

2018年5月2日水曜日

[Mycropython][ESP32]HTTPのSSL接続を行う

証明書を使ったSSL接続はエラーが出て出来てないけど
MicropythonでHTTPS接続は出来たのでメモ


import ussl as ssl
import usocket as socket
s=socket.socket()
ai=socket.getaddrinfo("google.com", 443)
addr=ai[0][-1]
s.connect(addr)
s=ssl.wrap_socket(s)
s.write(b"GET / HTTP/1.0\r\n\r\n")
print(s.read(4096))
s.close()

Androider