from umqtt.robust import MQTTClient
import time
import network
import machine
from time import sleep
import machine
import time
from machine import Pin
from time import sleep
import ujson
import dht
from time import sleep_ms, ticks_ms
from machine import I2C, Pin
from i2c_lcd import I2cLcd
import network
import urequests
import json
#import usocket as socket
led=machine.Pin(2, machine.Pin.OUT)
sensor=dht.DHT22(Pin(15))
AddressOfLcd = 0x27
i2c = I2C(scl=Pin(22), sda=Pin(21), freq=400000)
lcd = I2cLcd(i2c, AddressOfLcd, 2, 16)
status = ""
sensorCode = "00829022"
today = "09/2022"
temp = 0.0
hum = 0.0
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("Wokwi-GUEST", "")
while not wlan.isconnected():
pass
URL = "https://trc2022-95303-default-rtdb.firebaseio.com/Sensores/.json"
while True:
try:
sleep(2)
sensor.measure()
temp=sensor.temperature()
hum=sensor.humidity()
temp_f=temp*(9/5)+32.0
print('Temperatura: %3.1f C' %temp)
print('Temperatura: %3.1f F' %temp_f)
print('Humedad: %3.1f %%' %hum)
if temp < 20:
status = "Frio"
elif temp >= 20 and temp <= 35:
status = "Agradable"
else:
status = "Caliente"
data = ujson.dumps({'Codigo':sensorCode, 'Estatus':status, 'Fecha':today, 'Humedad': hum, 'Temperatura':temp})
r = urequests.patch(URL, data=data)
results = r.json()
print(results)
strTemp = str(temp)
strHum = str(hum)
strStatus = str(status)
#Certs for ESP8266
CERT_FILE = "./01_AWS_DeviceCertificate.txt"
#CERT_FILE = "./04_AWS_CA.txt"
KEY_FILE = "./03_AWS_PrivateKey.txt"
#if you change the ClientId make sure update AWS policy
MQTT_CLIENT_ID = "my-esp32"
MQTT_PORT = 8883
MQTT_KEEPALIVE_INTERVAL = 15000
THING_NAME = "my-esp32"
RESPONSE_RECEIVED = False
#if you change the topic make sure update AWS policy
MQTT_TOPIC = "esp32/pub"
#Change the following three settings to match your environment
MQTT_HOST = "a3a1xosm5h49b0-ats.iot.us-east-1.amazonaws.com"
WIFI_SSID = "Wokwi-GUEST"
WIFI_PW = ""
mqtt_client = None
def pub_msg():
global mqtt_client
while True:
try:
#mqtt_client.publish(SHADOW_GET_TOPIC, str(read_sensor_value()))
#mqtt_client.publish(SHADOW_GET_TOPIC, "{\n" + "\t" + "\"" + "default" + "\"" + ": " + "\"" + read_sensor_value() + "\"" + "\n" + "}")
#print("Sent: " + "{\n" + "\t" + "\"" + "default" + "\"" + ": " + "\"" + read_sensor_value() + "\"" + "\n" + "}")
print("Published")
sleep(10)
except Exception as e:
print("Exception publish: " + str(e))
raise
def sub_cb(topic, msg):
print(msg)
try:
if int(msg) < 200:
led.value(0)
state = 1
else:
led.value(1)
state = 0
except:
print("The message is None or message format is not supported")
#def mqtt_topic_get():
# global mqtt_client
# connect_mqtt()
# mqtt_client.subscribe(SHADOW_GET_TOPIC)
# print("Subscribed to %s topic" % (SHADOW_GET_TOPIC))
# try:
# while 1:
#micropython.mem_info()
# c.wait_msg()
# finally:
# c.disconnect()
def connect_mqtt():
try:
with open(KEY_FILE, "r") as f:
key = f.read()
print("MQTT received KEY")
with open(CERT_FILE, "r") as f:
cert = f.read()
print("MQTT received CERTIFICATE")
mqtt_client = MQTTClient(client_id=MQTT_CLIENT_ID, server=MQTT_HOST, port=MQTT_PORT, keepalive=5000, ssl=True, ssl_params={"cert":cert, "key":key, "server_side":False})
mqtt_client.connect()
mqtt_client.set_callback(sub_cb)
print("MQTT is connected")
mqtt_client.publish("esp32/pub", "{\"alert\":\"Hello world!!\"}");
mqtt_client.publish("esp32/pub", strTemp);
mqtt_client.publish("esp32/pub", strHum);
mqtt_client.publish("esp32/pub", strStatus);
except Exception as e:
print('Cannot connect to MQTT ' + str(e))
raise
def led_state(led):
print(led.value())
def read_sensor_value():
light_sensor_value = light_sensor.read()
return str(light_sensor_value)
def connect_wifi(ssid, pw):
wlan = network.WLAN(network.STA_IF)
if not wlan.isconnected():
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PW)
while not wlan.isconnected():
pass
print("Connected as:", wlan.ifconfig())
#start execution
try:
print("Connecting to WIFI...")
connect_wifi(WIFI_SSID, WIFI_PW)
print("Connecting to MQTT...")
connect_mqtt()
print("Publishing")
#pub_msg()
print("OK")
#mqtt_topic_get()
except Exception as e:
print(str(e))
for i in range (0, 5, 1):
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(1)
lcd.move_to(3,0)
lcd.putstr('Temp: %3.1f C' %temp)
lcd.move_to(0,1)
lcd.putstr(status)
sleep(2)
lcd.clear()
except OSError as e:
print('Falla!')