SiPy, Micropython and Google IoT Core MQTT
jonnyboy last edited by
Hi, new to pycom but do have experience with MQTT and Google IoT Core.
Has anyone managed to connect a device running micropython to the Google MQTT IoT Core broker service?
If so could they please help me with the initial connection code.
#example here: https://docs.pycom.io/chapter/tutorials/all/mqtt.html from umqtt import MQTTClient from network import WLAN import machine import time def sub_cb(topic, msg): print(msg) wlan = WLAN(mode=WLAN.STA) wlan.connect("SSID", auth=(WLAN.WPA2, "WIFIPWD"), timeout=5000) while not wlan.isconnected(): machine.idle() print("Connected to Wifi\n") client = MQTTClient("device_id", "mqtt.googleapis.com", user="USERNAME", password="APIKEY", port=8883) client.set_callback(sub_cb) client.connect() client.subscribe(topic="projects/mongoose-iota/topics/telemetry-topic") while True: print("Sending ON") client.publish(topic="projects/mongoose-iota/topics/telemetry-topic", msg="ON") time.sleep(1) print("Sending OFF") client.publish(topic="projects/mongoose-iota/topics/telemetry-topic", msg="OFF") client.check_msg() time.sleep(1)
I keep getting this error:
Traceback (most recent call last):
File "main.py", line 22, in <module>
File "/flash/lib/umqtt.py", line 97, in connect
MicroPython v1.8.6-849-86da809 on 2018-01-17; SiPy with ESP32
Line 97 is this, mqtt taken from this source https://pypi.python.org/pypi/micropython-umqtt.simple/1.3.4
assert resp == 0x20 and resp == 0x02
Any help would be very much appreciated.
Thank you in advance!
joelrobert last edited by
@johanbrichau thanks for your example project! I am having trouble getting this to work based on your project. are you able to share an example of you config.py file? How do you load the rsa file and generate it?
johanbrichau last edited by
I started to get it working but with the http bridge and not with MQTT (for now).
On https://github.com/jbrichau/TrackingPrototype I am hacking together a gps tracker prototype that sends location info to a google iot project.
First off, you need RSA instead of HMAC, as Google requires signing with a private key in the JWT instead of a hash. I hacked some changes into an existing RSA library to make it work on micropython.
Next, I had to divert to using http because the umqtt library did not work with Google iot server. It did work well with the adafruit server though.
This is very much work in progress and a lot of hacking, but at least it shows there is a path.
Simon90 last edited by
@jonnyboy I've been trying to get our pycom device talking to google IoT Core as well. Did you have any luck making it work or finding a micro-python compatible JWT Library?
livius last edited by
JWT tokens use HMAC
and this lib can be used for it
seb last edited by
It is my understanding that google's mqtt requires you to use JWT to authenticate, unfortunately the cryptography necessary to create JWT tokens is not something our modules can support with the current firmware. You would have to use an external server to generate the JWT tokens which when using MQTT are valid for 1h.
jonnyboy last edited by
Hi, bumping this on.....anyone please.