from senstemp_class import TemperatureSensor
from servo_class import Servo
from pir_class import PirSensor
from machine import Pin, PWM
from oled_class import OLED
from ultrasuoni_class import UltrasonicSensor
from umqtt.simple import MQTTClient
from semaforo_class import Semaforo
from sirena_class import Sirena
import time
import network
# Configurazione del beeper
sir=Sirena(27)
# Configurazione dispositivi
sensor_temp = TemperatureSensor(14)
temp_threshold = 25
pir = PirSensor(4)
display = OLED(22, 21)
sbarra = Servo(18)
us = UltrasonicSensor(26, 25)
sem=Semaforo(8,16,17)
sbarra.close()
sem.accendi('rosso')
# Configura la connessione WiFi
WIFI_SSID = 'Xiaomi 12'
WIFI_PASSWORD = 'sonomatteo'
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(WIFI_SSID, WIFI_PASSWORD)
while not station.isconnected():
time.sleep(1)
print('Connessione WiFi stabilita')
print('Indirizzo IP:', station.ifconfig()[0])
# Configurazione MQTT
mqtt_broker = "test.mosquitto.org"
mqtt_port = 1883
mqtt_topic1 = "gruppo40/garage/servo"
mqtt_topic2 = "gruppo40/garage/notifiche"
def on_message(topic, msg):
if msg == b'open':
sbarra.open() # esegui la funzione open della sbarra
client = MQTTClient("esp32_dbvdhvjhdjhj", mqtt_broker, port=mqtt_port)
client.set_callback(on_message)
client.connect()
client.subscribe([mqtt_topic1, mqtt_topic2])
notifica_inviata = False
#controllo eventi
while True:
client.check_msg()
# Leggi la temperatura
celsius = sensor_temp.read_temperature()
# Verifica se la temperatura supera il valore soglia
if celsius > temp_threshold and not notifica_inviata:
# Pubblica un messaggio sulla MQTT Dashboard
message = "La temperatura è troppo alta: {}°C".format(celsius)
client.publish("gruppo40/garage/notifiche", message)
# Disattiva la sirena
sir.spegni()
# Imposta la variabile di stato della notifica a True
notifica_inviata = True
elif celsius <= temp_threshold and notifica_inviata:
# Riattiva la sirena se necessario
sir.accendi()
# Imposta la variabile di stato della notifica a False
notifica_inviata = False
if sbarra.is_open():
sem.accendi('verde')
elif sbarra.is_closed():
sem.accendi('rosso')
else:
sem.accendi('giallo')
if pir.is_garage_pieno():
display.show_message("OCCUPATO")
else:
display.show_message("LIBERO")
time.sleep(0.5)