from machine import Pin
import time
import network
import ujson
import dht
from hx711 import HX711
from umqtt.simple import MQTTClient
# Wi-Fi Credentials
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
# ThingSpeak MQTT Settings
THINGSPEAK_MQTT_BROKER = "mqtt3.thingspeak.com"
THINGSPEAK_MQTT_PORT = 1883
CHANNEL_ID = "2840227"
MQTT_CLIENT_ID = "GRQ9OQEaNDkhPQA8ARMoPCk"
MQTT_USERNAME = "GRQ9OQEaNDkhPQA8ARMoPCk"
MQTT_PASSWORD = "bGyRXUYifNhp1ayZ4mAqQhPV"
PUBLISH_TOPIC = f"channels/{CHANNEL_ID}/publish"
# Sensor Pin Definitions
DHT_PIN = 15
HX711_DATA_PIN = 16
HX711_CLOCK_PIN = 17
# Initialize Sensors
dht_sensor = dht.DHT22(Pin(DHT_PIN))
hx = HX711(d_out=HX711_DATA_PIN, pd_sck=HX711_CLOCK_PIN)
hx.set_scale(2280)
hx.tare()
# Connect to WiFi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
print("Connecting to WiFi...", end="")
while not wlan.isconnected():
time.sleep(1)
print("\nConnected! IP Address:", wlan.ifconfig()[0])
# Read Sensor Data
def read_sensor_data():
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
weight = hx.get_units(5)
return temperature, humidity, weight
# Publish data to ThingSpeak using MQTT
def send_data_to_thingspeak_mqtt(client, temperature, humidity, weight):
payload = f"field1={temperature}&field2={humidity}&field3={weight}"
try:
client.publish(PUBLISH_TOPIC, payload)
print("Data sent to ThingSpeak via MQTT:", payload)
except Exception as e:
print("Failed to send data via MQTT:", e)
# Main Function
def main():
connect_wifi()
# Connect to MQTT Broker
client = MQTTClient(MQTT_CLIENT_ID, THINGSPEAK_MQTT_BROKER, THINGSPEAK_MQTT_PORT, MQTT_USERNAME, MQTT_PASSWORD)
client.connect()
print("Connected to ThingSpeak MQTT broker")
while True:
temperature, humidity, weight = read_sensor_data()
print(f"Temperature: {temperature:.2f} °C")
print(f"Humidity: {humidity:.2f} %")
print(f"Weight: {weight:.2f} g")
send_data_to_thingspeak_mqtt(client, temperature, humidity, weight)
time.sleep(15)
# Running the main function
if __name__ == "__main__":
main()