import network
from machine import Pin
import time
from umqtt.simple import MQTTClient
# WIFI Connection
SSID = "Wokwi-GUEST"
PASSWORD = ""
# MQTT Broker Details
BROKER_ADDRESS = "broker.hivemq.com"
TOPIC = "your_topic"
# HC-SR04 Pins
TRIGGER_PIN = 12
ECHO_PIN = 14
# Constants
MAX_DISTANCE_CM = 400 # Maximum distance in cm for the sensor
NUM_MEASUREMENTS = 5 # Number of measurements to take for averaging
TIMEOUT_US = 1000000 # Timeout in microseconds for sensor response
# Connect to WIFI
def connect_wifi():
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
if not wifi.isconnected():
print("Connecting to WiFi...")
wifi.connect(SSID, PASSWORD)
while not wifi.isconnected():
pass
print("Connected to WiFi:", SSID)
# Get distance from HC-SR04
def get_distance():
trigger = Pin(TRIGGER_PIN, Pin.OUT)
echo = Pin(ECHO_PIN, Pin.IN)
distances = []
for _ in range(NUM_MEASUREMENTS):
trigger.value(0)
time.sleep_us(5)
trigger.value(1)
time.sleep_us(10)
trigger.value(0)
pulse_start = pulse_end = time.ticks_us()
timeout = time.ticks_us() + TIMEOUT_US
while echo.value() == 0 and time.ticks_us() < timeout:
pulse_start = time.ticks_us()
while echo.value() == 1 and time.ticks_us() < timeout:
pulse_end = time.ticks_us()
if pulse_end > pulse_start:
pulse_duration = pulse_end - pulse_start
distance = (pulse_duration * 0.0343) / 2
if 0 < distance < MAX_DISTANCE_CM:
distances.append(distance)
if distances:
return sum(distances) / len(distances)
else:
return None
# MQTT Client
def send_to_mqtt(data):
client = MQTTClient("esp32", BROKER_ADDRESS)
client.connect()
client.publish(TOPIC, str(data))
client.disconnect()
# Main function
def main():
connect_wifi()
while True:
try:
distance = get_distance()
if distance is not None:
print("Distance:", distance, "cm")
send_to_mqtt(distance)
else:
print("Distance measurement failed")
except Exception as e:
print("Error:", e)
time.sleep(1)
if __name__ == "__main__":
main()