IoT parking sensor - MQTT version
source link: https://www.bytebang.at/Blog/IoT+parking+sensor+-+MQTT+version?language=de
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
The Problem
In part 1 of this series we have covered the schematics and hardware for a IoT parking sensor. Now we are gonna have a look into the software which is able to transmit the state of the device to an arbitrary MQTT broker.
The Solution
The software is straight forward:
- Set up the display
- Connect to the WiFi
- Connect to the MQTT broker
- Read and transmit the sensor reading continuously
Here is my implementation:
WLAN_PASS = "iot12345"
MQTT_BROKER = "iot.eclipse.org"
MQTT_TOPIC = "bytebang/pps/a"
-- setup the display
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.LANDSCAPE, false, 0x3c)
gdisplay.clear()
gdisplay.setfont(gdisplay.UBUNTU16_FONT)
-- Configure wifi in Station Mode with SSID
gdisplay.write({gdisplay.CENTER,gdisplay.CENTER},"cnnct: " .. WLAN_SSID)
net.wf.setup(net.wf.mode.STA, WLAN_SSID, WLAN_PASS)
net.wf.start()
tmr.sleepms(10000)
-- Get current time from sntp server
net.service.sntp.start()
net.service.sntp.stop()
-- connect to mqtt broker
server = MQTT_BROKER
print(MQTT_BROKER .. ": "..net.lookup(MQTT_BROKER))
gdisplay.write({gdisplay.CENTER,20},MQTT_BROKER)
-- Connect to the MQTT Broker
client = mqtt.client("myuniqueclientid",MQTT_BROKER, 1883, false)
client:connect("","")
-- READ THE SENSOR - GPIO13 (TRIG) and GPIO14 (ECHO)
s = sensor.attach("US015", pio.GPIO13, pio.GPIO15)
s:set("temperature", 25)
-- inifinte loop
while true do
dist = 999
-- read the distance
try(function() dist = s:read("distance") end)
-- display it on the screen
gdisplay.clear()
gdisplay.write({gdisplay.CENTER,gdisplay.CENTER},tostring(dist))
-- transmit the value, and reconnect on error
try(function() client:publish(MQTT_TOPIC,1 - (dist/100) ,mqtt.QOS0) end,
function() client:connect("","")end)
-- wait for a second
tmr.sleepms(1000)
end
Just save this snippet into a *.lua file and execute it from the shell. If you want to run it as soon as the ESP32 is powered up, then place it into the autorun.lua
OK - it is just a prototype, the following problems are not addressed within this snippet:
- Initial configuration of the MQTT and WIFI settings via shell or a commandline
- Reconnect if the WiFi becomes unavailable
- Consistent logging to the screen
- Usage of the secret reed sensor
- <Insert any other cool feature here>
If you need help, don't hesitate to contact our professional services.
Happy coding !
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK