import network
import time
import ujson
from machine import Pin, PWM
from umqtt.simple import MQTTClient
from hcsr04 import HCSR04
from dht import DHT22
from time import sleep
from onewire import OneWire
from ds18x20 import DS18X20
# MQTT Server Parameters
MQTT_CLIENT_ID = ""
MQTT_BROKER = "broker.mqttdashboard.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC_DISTANCE = "Ultrasonic-distance"
MQTT_TOPIC_TEMP = "Temp"
MQTT_TOPIC_HUM = "Hum"
MQTT_TOPIC_DS18B20 = "DS18B20"
# HC-SR04 Ultrasonic Distance Sensor pins
ultrasonic = HCSR04(trigger_pin=Pin(25), echo_pin=Pin(26))
# DHT22 sensor pin
dht_pin = 15 # Assuming this is the pin connected to the DHT22 sensor
ds_pin = Pin(4)
# Servo parameters
servo_pin = 2 # Assuming this is the pin connected to the servo motor
servo_freq = 50
def read_DS18B20_sensor():
ds_sensor = DS18X20(OneWire(ds_pin))
roms = ds_sensor.scan()
print('Found DS18B20 devices:', roms)
print('Temperature: ')
ds_sensor.convert_temp()
for rom in roms:
temp = ds_sensor.read_temp(rom)
if isinstance(temp, float):
msg = round(temp, 2)
print(temp, end='')
print('DS18B20 Temperature is valid')
return msg
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '') # Modify the SSID and password as needed
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!")
# Initialize servo
servo = PWM(Pin(servo_pin), freq=servo_freq)
# Initialize DHT22 sensor
dht22 = DHT22(Pin(dht_pin))
# Function to move servo to a specified angle
def move_servo(angle):
duty_cycle = int(50 + angle / 180 * 75)
servo.duty(duty_cycle)
try:
while True:
# Measure distance
distance = ultrasonic.distance_cm()
print("Distance:", distance, "cm")
# Measure temperature and humidity using DHT22
dht22.measure()
temperature_dht = dht22.temperature()
humidity = dht22.humidity()
print("Temperature (DHT22):", temperature_dht, "°C")
print("Humidity:", humidity, "%")
print("Measuring weather conditions... ", end="")
temp = read_DS18B20_sensor()
print("Temp:", temp)
# Move servo based on distance
if distance < 100:
move_servo(180) # Move servo to 0 degrees
else:
move_servo(60) # Move servo to 90 degrees
sleep(1)
# Publish data to MQTT topics
message_distance = ujson.dumps({"distance": distance})
message_temp_dht = ujson.dumps(temperature_dht)
message_hum = ujson.dumps(humidity)
message_temp_ds18b20 = ujson.dumps(temp)
if message_distance:
print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC_DISTANCE, message_distance))
client.publish(MQTT_TOPIC_DISTANCE, message_distance)
if message_temp_dht:
print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC_TEMP, message_temp_dht))
client.publish(MQTT_TOPIC_TEMP, message_temp_dht)
if message_hum:
print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC_HUM, message_hum))
client.publish(MQTT_TOPIC_HUM, message_hum)
if message_temp_ds18b20:
print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC_DS18B20, message_temp_ds18b20))
client.publish(MQTT_TOPIC_DS18B20, message_temp_ds18b20)
except Exception as e:
print("Error:", e)