Session 3: MQTT and Cayenne
Uli Raich
Formally CERN, Geneva, Switzerland
COPYRIGHT © 2024 by the contributing authors
Slide 1 of 55
The WeMos D1 mini has a built-in WiFi interface
In order to communicate with other IoT nodes we must therefore
connect to the WiFi network first
On top of WiFi we will run a TCP session
On top of TCP we will run the MQTT protocol
On top of MQTT we have dedicated topics and payloads imposed by Cayenne
COPYRIGHT © 2024 by the contributing authors
Slide 2 of 55
Accessing the WiFi network
COPYRIGHT © 2024 by the contributing authors
Slide 3 of 55
Accessing the WiFi network from Micropython
COPYRIGHT © 2024 by the contributing authors
Slide 4 of 55
MQTT (Message Queuing Telemetry Transport: a publish-subscribe based
message protocol running of top of TCP.
A processor can subscribe to messages of a certain “topic” and/or it can push its
results on a certain topic
COPYRIGHT © 2024 by the contributing authors
Slide 5 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 6 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 7 of 55
A MQTT example using umqtt.simple
COPYRIGHT © 2024 by the contributing authors
Slide 8 of 55
Sending dummy temperature data
COPYRIGHT © 2024 by the contributing authors
Slide 9 of 55
Receiving commands is a bit more tricky! We must:
- Write a callback function and register it with the MQTT client
- This function takes 2 arguments:
- The topic
- The payload
- Subscribe to the topic
- Wait forever. The callback function will be executed when a message with the
topic we subscribed to, will arrive
COPYRIGHT © 2024 by the contributing authors
Slide 10 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 11 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 12 of 55
In order to control a LED through MQTT we now simply interpret the payload:
- Message “LED on”
- Message “LED off”
COPYRIGHT © 2024 by the contributing authors
Slide 13 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 14 of 55
- MQTT broker should be globally reachable
- GUI to easily visualize sensor measurements
- GUI elements to easily control actuators
- GUI should be accessible through a WEB interface
- GUI should be accessible through smart phone app
This is what Cayenne supplies
COPYRIGHT © 2024 by the contributing authors
Slide 15 of 55
- MQTT broker is accessible at mqtt.mydevices.com
- Supplies GUI
COPYRIGHT © 2024 by the contributing authors
Slide 16 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 17 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 18 of 55
You find the documentation at
https://mydevices.com/cayenne/docs/intro
Contains short introductory video clips, information of Cayenne on Raspberry Pi and Arduino but also how to use Cayenne on any device.
Pointers to the Cayenne MQTT Libraries and their API
COPYRIGHT © 2024 by the contributing authors
Slide 19 of 55
Installing Cayenne on the Raspberry PI
COPYRIGHT © 2024 by the contributing authors
Slide 20 of 55
Installing Cayenne on the Raspberry Pi manually
COPYRIGHT © 2024 by the contributing authors
Slide 21 of 55
Register your Controller Single Board Computers
COPYRIGHT © 2024 by the contributing authors
Slide 22 of 55
Run Cayenne on the Arduino
COPYRIGHT © 2024 by the contributing authors
Slide 23 of 55
Basic Arduino Sketch for the Arduino
COPYRIGHT © 2024 by the contributing authors
Slide 24 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 25 of 55
The Cayenne credentials are integrated into the MQTT topic string
Value and units are integrated into the payload string
COPYRIGHT © 2024 by the contributing authors
Slide 26 of 55
This falls under “bring your own thing” !
Having a look at the Arduino sketch you can see that it uses the
Arduino Cayenne C++ library.
Cayenne MQTT libraries are available in
and probably a few other languages
COPYRIGHT © 2024 by the contributing authors
Slide 27 of 55
The Python Cayenne Client library depends on the Eclipse Paho MQTT library
Micropython uses its own, stripped down “umqtt” (micro mqtt) library
such that the standard Cayenne Client does not work on Micropython
but …
The Python Cayenne Client is Open Source and can be adapted to umqtt, which is what I did for you.
The adapted Client library uses the same API as the original one,
which means that the example programs work unchanged.
COPYRIGHT © 2024 by the contributing authors
Slide 28 of 55
When creating a Cayenne Client Class it
- Initializes its internal variables
- Checks if the OLED display is connected and if yes, initializes it
- The Cayenne Client has has a begin method which
- Connects to WiFi
- Connects to the Cayenne MQTT broker at mqtt.mydevices.com
- Subscribes to commands send by Cayenne
- Displays its internal state on the OLED display
COPYRIGHT © 2024 by the contributing authors
Slide 29 of 55
The code to connect to Cayenne
COPYRIGHT © 2024 by the contributing authors
Slide 30 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 31 of 55
The empty Cayenne dashboard
COPYRIGHT © 2024 by the contributing authors
Slide 32 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 33 of 55
Dummy temperature in Cayenne
COPYRIGHT © 2024 by the contributing authors
Slide 34 of 55
Dummy temperature parameters
COPYRIGHT © 2024 by the contributing authors
Slide 35 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 36 of 55
Dummy temperature history
Cayenne keeps measurement values which can be plotted as a history plot
or downloaded for further evaluation
COPYRIGHT © 2024 by the contributing authors
Slide 37 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 38 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 39 of 55
Dummy temperature gauge on the dashboard
COPYRIGHT © 2024 by the contributing authors
Slide 40 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 41 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 42 of 55
Several dummy measurements
Now we want to send a dummy temperature and a dummy humidity value.
How do we distinguish?
They use different communication
channels!
COPYRIGHT © 2024 by the contributing authors
Slide 43 of 55
Sending temperature and humidity: the code
COPYRIGHT © 2024 by the contributing authors
Slide 44 of 55
Dashboard with temperature and humidity
COPYRIGHT © 2024 by the contributing authors
Slide 45 of 55
We have seen that we can send temperature with
- client.celsiusWrite(channel,temp)
And relative humidity with
- Client.humidityWrite(channel,hum)
Which other types of measurements can we send?
COPYRIGHT © 2024 by the contributing authors
Slide 46 of 55
Measurements implemented in the Cayenne Client
COPYRIGHT © 2024 by the contributing authors
Slide 47 of 55
Cayenne supplies only 2 control widgets:
COPYRIGHT © 2024 by the contributing authors
Slide 48 of 55
We can define the range for the slider in the above case: 0..255
COPYRIGHT © 2024 by the contributing authors
Slide 49 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 50 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 51 of 55
COPYRIGHT © 2024 by the contributing authors
Slide 52 of 55
We must define a callback function, which is called
whenever the user of the Cayenne dashboard
changes a setting on the push button or slider
The callback takes a message parameter which is a tuple of
- Cayenne topic
- Cayenne payload
COPYRIGHT © 2024 by the contributing authors
Slide 53 of 55
Please compare the command message with our credentials and try to find out
to which channel this command has been addressed. Can you find the values as well?
Remember: we defined the push button on channel 3 and the slider in channel 2!
COPYRIGHT © 2024 by the contributing authors
Slide 54 of 55
More on how to interpret this message in the next session
COPYRIGHT © 2024 by the contributing authors
Slide 55 of 55
--
Uli Raich - 2019-05-14
Comments
This topic: AFNOG
> WebHome >
AFNOGWorkshop2019 >
AFNOG-2019Slides >
WorkshopSlides > MQTTAndCayenne
Topic revision: r9 - 2019-05-22 - UliRaich
Copyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback