from time import sleep
from machine import Pin
import dht
import network
from simple import MQTTClient
# Definir las credenciales de la red Wi-Fi
WIFI_SSID = 'Wokwi-GUEST'
WIFI_PASSWORD = ''
# Definir las credenciales del servidor MQTT
MQTT_HOST = 'broker.emqx.io'
MQTT_USER = 'alex'
MQTT_PASSWORD = 'alex'
MQTT_TOPIC = 'temperatura'
# Configurar el pin del sensor DHT11
DHT_PIN = 4 # GPIO4 en el ESP32
# Definir la función para crear el mensaje HL7
def create_hl7_message(temperature, humidity):
return (
"MSH|^~\&|SENDER|SENDER_APPLICATION|RECEIVER|RECEIVER_APPLICATION|"
"12345||ORU^R01|MSGID12345|P|2.5\n"
"PID||Andrea^Garcia^^^Srt.||age_24|||M\n"
"PV1||I|ICU^1^1|U|||A0E|A0E|||\n"
"OBX|1|NM|TMP^Temperature_A||{}|Temp_C||{}^Cel^^|||R|||\n"
"OBX|2|NM|HUM^Humidity||{}|Humidity_Percent||{}^%^^|||R|||"
).format(temperature, temperature, humidity, humidity)
# Definir la función para medir la temperatura y la humedad
def read_dht11():
dht_sensor = dht.DHT11(Pin(DHT_PIN))
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
return temperature, humidity
# Definir la función de callback para el cliente MQTT
def on_message(topic, message):
print("Mensaje recibido en el topic '{}': {}".format(topic, message.decode()))
# Conectar y suscribirse al servidor MQTT
def connect_and_subscribe():
client = MQTTClient("esp32", MQTT_HOST, user=MQTT_USER, password=MQTT_PASSWORD)
client.set_callback(on_message)
client.connect()
client.subscribe(MQTT_TOPIC)
print("Conectado a {}, suscrito al topic '{}'".format(MQTT_HOST, MQTT_TOPIC))
return client
# Función principal
def main():
# Conectar a la red Wi-Fi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
print('Conectando a la red Wi-Fi...')
sleep(1)
print('Conectado a la red Wi-Fi:', wlan.ifconfig())
# Conectar y suscribirse al servidor MQTT
mqtt_client = connect_and_subscribe()
try:
while True:
# Medir la temperatura y la humedad
temperature, humidity = read_dht11()
# Crear el mensaje HL7 con la temperatura
hl7_message = create_hl7_message(temperature, humidity)
# Publicar el mensaje HL7 en el servidor MQTT
mqtt_client.publish(MQTT_TOPIC, hl7_message)
print("Mensaje HL7 publicado en el topic '{}'".format(MQTT_TOPIC))
# Esperar un intervalo de tiempo antes de tomar otra lectura
sleep(10) # Por ejemplo, esperar 10 segundos
finally:
# Desconectar del servidor MQTT antes de salir
mqtt_client.disconnect()
# Ejecutar la función principal al iniciar el programa
if __name__ == '__main__':
main()