from machine import Pin
from utime import sleep
from hx711 import HX711
from dht import DHT22
from umqtt.simple import MQTTClient
import network
import time
import ujson
# Parâmetros MQTT
MQTT_CLIENT_ID = "micropython-sensors-demo"
MQTT_BROKER = "44.202.229.162" #mosquitto
MQTT_PORT = 1883
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC_TEMP = "sensors/temp"
MQTT_TOPIC_HUM = "sensors/humidity"
MQTT_TOPIC_WEIGHT = "sensors/weight"
MQTT_TOPIC_MOTION = "sensors/motion"
# Configurações do HX711 (Sensor de peso)
DOUT_PIN = 25 # Pino de dados (DOUT)
PD_SCK_PIN = 26 # Pino de clock (PD_SCK)
CALIBRATION_FACTOR = 420 # Fator de calibração ajustável após testes
zero_offset = 0 # Ajuste conforme necessário
# Configurações do DHT22 (Sensor de temperatura e umidade)
DHT_PIN = 15 # Pino conectado ao DHT22
# Configurações do PIR (Sensor de movimento)
PIR_PIN = 27 # Pino conectado ao PIR
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
# Inicialização do MQTT
print("Conectando ao servidor MQTT...")
mqtt_client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, port = MQTT_PORT, user=MQTT_USER, password=MQTT_PASSWORD)
mqtt_client.connect()
print("Conectado ao servidor MQTT!")
# Inicialização dos sensores
hx711 = HX711(d_out=DOUT_PIN, pd_sck=PD_SCK_PIN, channel=HX711.CHANNEL_A_128)
dht_sensor = DHT22(Pin(DHT_PIN))
pir_sensor = Pin(PIR_PIN, Pin.IN)
def send_mqtt_data(topic, data):
"""Envia dados para o tópico MQTT especificado."""
try:
mqtt_client.publish(topic, data)
print(f"Dados enviados para {topic}: {data}")
except Exception as e:
print(f"Erro ao enviar dados para {topic}: {e}")
try:
print("Iniciando leitura dos sensores. Pressione Ctrl+C para interromper.")
while True:
# Leitura do DHT22 (temperatura e umidade)
try:
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
temp_data = f'{{"id":{11}, "value": {temperature:.2f}}}'#-12 e 5
send_mqtt_data(MQTT_TOPIC_TEMP, temp_data)
hum_data = f'{{"id":{5}, "value": {humidity:.2f}}}' #70 a 90
send_mqtt_data(MQTT_TOPIC_HUM, hum_data)
except Exception as e:
print(f"Erro na leitura do DHT22: {e}")
# Leitura do HX711 (peso)
try:
raw_value = hx711.read()
weight = (raw_value - zero_offset) / CALIBRATION_FACTOR
weight_data = f'{{"id":{14}, "value": {weight:.2f}}}' #3kg a 30kg
send_mqtt_data(MQTT_TOPIC_WEIGHT, weight_data)
except Exception as e:
print(f"Erro na leitura do HX711: {e}")
# Leitura do PIR (movimento)
try:
motion_detected = pir_sensor.value()
motion_data = '{{"id":{14}, "value": ' + ('1' if motion_detected else '0') + '}}'
send_mqtt_data(MQTT_TOPIC_MOTION, motion_data)
except Exception as e:
print(f"Erro na leitura do sensor PIR: {e}")
# Intervalo entre leituras
sleep(2)
except KeyboardInterrupt:
print("Interrompido pelo usuário.")
finally:
print("Desligando o HX711...")
hx711.power_off()
mqtt_client.disconnect()
print("Desconectado do servidor MQTT.")