#21 December 2023
"""
MicroPython IoT using ESP32 +HC-SR04
To view the data:
1. Go to http://www.hivemq.com/demos/websocket-client/
2. Click "Connect"
3. Under Subscriptions, click "Add New Topic Subscription"
4. In the Topic field, type "wokwi-distance" then click "Subscribe"
Now click on the HC-SR04 sensor in the simulation,
change the distance, and you should see
the message appear on the MQTT Broker, in the "Messages" pane.
"""
import network
import time
from machine import Pin
from hcsr04 import HCSR04
import ujson
from umqtt.simple import MQTTClient
from time import sleep
# MQTT Server Parameters
MQTT_CLIENT_ID = "micropython-weather-demo"
MQTT_BROKER = "broker.mqttdashboard.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC = "wokwi-distance"
# ESP32
sensor1 = HCSR04(trigger_pin=5, echo_pin=18, echo_timeout_us=100000)
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect()
print("Connected!")
prev_weather = ""
while True:
print("Measuring distances... ", end="")
distance = sensor1.distance_cm()
message = ujson.dumps({
"distance": distance,
})
if message != prev_weather:
print("Updated!")
print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC, message))
client.publish(MQTT_TOPIC, message)
prev_weather = message
else:
print("No change")
time.sleep(1)