MQTT Publish
Next we will program a microcontroller to publish information for the previous application to consume.
To do so we will connect a second microcontroller board to the Raspberry Pi. In order to reduce confusion later on on which board you are connect to you should open a new terminal emulator now, dedicated to working on the second microcontroller board.
Now connect the microcontroller board to your
Raspberry Pi (disconnect and reconnect if it is
already connected) and run dmesg
like in the
first chapter to find the name to use with
picocom
and nodemcu-uploader
.
[user@computer ~]$ dmesg
…
[100000.000000] cp210x 1-9:1.0: cp210x converter detected
[100000.010000] usb 1-9: cp210x converter now attached to ttyUSB1
Now create a project folder for the publishing side of our application, based on the code written earlier:
cd projects
cp -rv chapter_3_sub/ chapter_3_pub
cd chapter_3_pub
As every client connect to the MQTT broker needs its own
ID you have to edit the credentials.lua
file
in the chapter_3_pub
folder and replace "ESP1"
with
"ESP2"
.
You are now ready to edit the application.lua
in
the chapter_3_pub
folder. You can remove
the mqtt_on_message
function as it will not
be used and replace the mqtt_on_connect
function
with the following code snippet:
function mqtt_on_connect(mc)
print("MQTT connection successful")
local status = gpio.HIGH
function gpio_check(timer)
local level = gpio.read(1)
if level ~= status then
status= level
if level == gpio.HIGH then
mc:publish("/led", "on", 1, 0)
else
mc:publish("/led", "off", 1, 0)
end
end
end
gpio.mode(1, gpio.INPUT, gpio.PULLUP)
print("Install D1 watcher")
local t = tmr.create()
t:register(100, tmr.ALARM_AUTO, gpio_check)
t:start()
end
Upload all .lua
files in the chapter_3_pub
folder
to the second microcontroller board, connect picocom
to the second board and press the reset button on the
second board.
If everything went well the output should look something like this:
[user@computer ~]$ picocom -b 115200 /dev/ttyUSB1
…
init: connected to AP: nota_1
init: got IP address 192.168.94.159 via DHCP
init: startup will continue in 3s
init: handing over to application
MQTT connection successful
Install D1 watcher
Task: find out what the code does and use a piece of wire connected to GND to make the microcontroller publish messages. If everything went well you should be able to controll the LED on the first board by connecting a wire on the second board.