Connecting to Cayenne
A Micropython class connecting to WiFi and subscribing to the myDevices MQTT broker
Since every sensor node needs to first connect to WiFi and later subscribe to the MQTT broker at mqtt.mydevices.com. Unfortunately the
Cayenne-MQTT-Python library depends on the Eclipse Paho MQTT Python client library, which is not available in Micropython.
I therefore ported the code to the umqtt.simple MQTT client available in Micropython. The API is the same as in the standard Cayenne MQTT client, which means that the example programs provided in this library will work without modification.
In order to connect to myDevices Cayenne you need:
- your WiFi SSID
- your WiFi password
- the Cayenne credentials:
- client name
- user name
- password
The CayenneMQTTClient class has a
begin method taking Cayenne username, password and client id as parameters. The
ssid and
wifiPassword have default values but can be specified as well. The
begin method will first connect to WiFi and then connect to the MQTT broker at mqtt.mydevices.com. It then subscribes to the command topic such that cmd messages from Cayenne can be passed on to a callback routine registered by the user of the CayenneMQTTClient class. In case of a cmd message, the required response message is sent automatically.
If the OLED display is connected, the state of network connection will be shown.
The CayenneMQTTClient provides the following methods to publish measurement results:
For temperature:
- celsiusWrite(channel,value)
- fahrenheitWrite(channel,value)
- kelvinWrite(channel,value)
For other measurements, I think that from the name of the method it is clear which type of measurement is treated:
- humidityWrite(channel,vakue)
- luxWrite(channel,value)
- pascalWrite(channel,value)
- hectoPascalWrite(channel,value)
- voltageWrite(channel,value), the value must be given in mV
- digitalWrite(channel,value), value must be 0 or 1
Parsing of command messages
The callback function gets a message, a tuple consisting of the topic and the payload, as parameter. This message must be parsed to extract the channel number and the value. The CayenneMessage class helps with this. Create a CayenneMessage object
cayenneMsg with topic and payload (message[0] and message[1]) as corresponding parameters.
cayenneMsg.channel will then contain the channel number on which the command must be executed, cayenneMsg.value contains the value.
You can also get hold of
- cayenneMsg.client_id
- cayenneMsg.msg_id
should these be needed.
The code of the CayenneMQTTClient class can be found here:
https://github.com/uraich/MicropythonCayenneMQTTClient/tree/master/cayenne
Comments