import time
from umqtt_simple import MQTTClient
import network
from machine import Pin
import onewire
import ds18x20
mqtt_server = "broker.emqx.io"
mqtt_port = 1883
mqtt_topic = "topic/motion"
LED_GREEN_PIN = 20
LED_BLUE_PIN = 22
LED_RED_PIN = 26
SERVO_PIN = 27
PIR_PIN = 28 # Exemple de broche pour le capteur de mouvement
TEMP_PIN = 21 # Pin pour le capteur de température
led_green = Pin(LED_GREEN_PIN, Pin.OUT)
led_blue = Pin(LED_BLUE_PIN, Pin.OUT)
led_red = Pin(LED_RED_PIN, Pin.OUT)
servo = Pin(SERVO_PIN, Pin.OUT)
pir_sensor = Pin(PIR_PIN, Pin.IN)
# Configure le bus OneWire pour le pin 21
ow = onewire.OneWire(Pin(TEMP_PIN))
# Crée une instance du capteur DS18B20
temp_sensor = ds18x20.DS18X20(ow)
# Recherche les capteurs de température
roms = temp_sensor.scan()
def connect_to_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("Wokwi-GUEST", "")
print("Connecting to Wi-Fi...")
while not wlan.isconnected():
time.sleep(1)
print("Wi-Fi connected")
def read_temperature():
temp_sensor.convert_temp()
time.sleep_ms(750) # Attend que la conversion soit terminée
for rom in roms:
temp = temp_sensor.read_temp(rom)
print("Temperature:", temp, "°C")
return temp
# Ajoute une variable pour suivre le moment où le mouvement a été détecté
motion_detected_time = 0
def on_message(topic, msg):
try:
# Convert bytes to string
topic = topic.decode()
msg = msg.decode()
# Display received message
print("Message received on topic:", mqtt_topic)
print("Message:", msg)
# Affiche un message sur la console indiquant la réception du message MQTT
print("MQTT Message received:", msg)
if msg == "motion_detected":
print("motion_detected")
# Allumez la LED verte
led_green.on()
elif msg == "motion_detected":
print("motion_detected")
# Tournez le servo moteur
servo.on()
# Allumez la LED bleue
led_blue.on()
elif msg == "Pas de piece detectee":
print("Pas de piece detectee")
# Arrêtez le servo moteur
servo.off()
# Éteignez la LED bleue
led_blue.off()
except Exception as e:
print("Error parsing message:", e)
connect_to_wifi()
client = MQTTClient("raspberry-pi", mqtt_server, port=mqtt_port)
def connect_to_mqtt():
print("Connecting to MQTT...")
while client.connect() != 0:
print("MQTT connection failed. Retrying in 5 seconds...")
time.sleep(5)
print("MQTT connection successful")
client.set_callback(on_message)
connect_to_mqtt()
client.subscribe(mqtt_topic)
try:
while True:
client.wait_msg()
temperature = read_temperature()
client.publish("topic/temperature", str(temperature))
# Vérifiez si la température est supérieure à 20°C
if temperature > 20:
# Faites clignoter la LED rouge
led_red.on()
time.sleep(0.5)
led_red.off()
time.sleep(0.5)
# Vérifiez la détection de mouvement
if pir_sensor.value() == 1:
print("Motion Detected")
# Allumez la LED bleue
led_blue.on()
# Enregistrez le moment où le mouvement a été détecté
motion_detected_time = time.time()
# Tournez le servo moteur
servo.on()
time.sleep(2) # Attendez 2 secondes
# Vérifiez si suffisamment de temps s'est écoulé depuis la détection du mouvement
if time.time() - motion_detected_time > 2:
# Éteignez la LED bleue si aucun mouvement n'a été détecté pendant 2 secondes
led_blue.off()
# Arrêtez le servo moteur
servo.off()
except KeyboardInterrupt:
client.disconnect()