# =============================
# IMPORTS
# =============================
import network
import time
from machine import Pin, ADC
import dht
import onewire, ds18x20
from umqtt.simple import MQTTClient
print("DEBUT DU PROGRAMME")
# =============================
# WIFI
# =============================
SSID = "laptop 123"
PASSWORD = "12345678"
def connect_wifi():
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD)
print("Connexion WiFi...")
while not wifi.isconnected():
time.sleep(0.5)
print("...")
print("Connecté :", wifi.ifconfig())
# =============================
# MQTT
# =============================
MQTT_BROKER = "broker.hivemq.com"
CLIENT_ID = "esp32-ruche"
client = MQTTClient(CLIENT_ID, MQTT_BROKER)
def connect_mqtt():
try:
print("Connexion MQTT...")
client.connect()
print("MQTT connecté")
except Exception as e:
print("Erreur MQTT:", e)
# =============================
# CAPTEURS
# =============================
# DHT22
dht_sensor = dht.DHT22(Pin(4))
# DS18B20
ow = onewire.OneWire(Pin(5))
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
# Potentiomètres (ADC)
pot_poids = ADC(Pin(34))
pot_son = ADC(Pin(35))
# Configuration ADC (important ESP32)
pot_poids.atten(ADC.ATTN_11DB)
pot_son.atten(ADC.ATTN_11DB)
# =============================
# LOOP
# =============================
def read_and_send():
# ---- DHT22 ----
try:
time.sleep(1)
dht_sensor.measure()
temp = dht_sensor.temperature()
hum = dht_sensor.humidity()
except:
print("Erreur DHT22")
temp = 0
hum = 0
# ---- DS18B20 ----
try:
ds.convert_temp()
time.sleep(1)
if not roms:
print("DS18B20 non détecté")
temp_ruche = 0
else:
temp_ruche = ds.read_temp(roms[0])
except:
print("Erreur DS18B20")
temp_ruche = 0
# ---- Poids ----
raw_poids = pot_poids.read()
poids = (raw_poids / 4095) * 50 # max 50kg (simulation)
# ---- Son ----
son = pot_son.read()
# ---- Affichage ----
print("----------------------")
print("Temp air:", temp)
print("Humidité:", hum)
print("Temp ruche:", temp_ruche)
print("Poids:", poids)
print("Son:", son)
# ---- MQTT ----
try:
client.publish(b"ruche/temperature", str(temp).encode())
client.publish(b"ruche/humidite", str(hum).encode())
client.publish(b"ruche/temp_ruche", str(temp_ruche).encode())
client.publish(b"ruche/poids", str(poids).encode())
client.publish(b"ruche/son", str(son).encode())
except:
print("Erreur envoi MQTT")
# =============================
# MAIN
# =============================
connect_wifi()
connect_mqtt()
while True:
read_and_send()
time.sleep(5)