import machine
import network
import time
import urequests
import ujson
import dht
# WiFi credentials
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
# ThingSpeak API settings
THINGSPEAK_API_KEY = "2O509SZM9TPDT9H7"
THINGSPEAK_URL = "http://api.thingspeak.com/update"
# DHT22 sensor
dht_sensor = dht.DHT22(machine.Pin(4))
# Potentiometer for pH simulation
PH_SENSOR_PIN = machine.ADC(0) # Analog pin 0
# LED for indicating soil condition
LED_PIN = machine.Pin(2, machine.Pin.OUT) # GPIO pin 2
# Function to read pH value from potentiometer
def read_ph():
ph_value = PH_SENSOR_PIN.read_u16() / 65535.0 * 7 # Simulate pH range from 0 to 7
return ph_value
# Function to check soil condition based on pH
def check_soil_condition(ph):
if 5 <= ph <= 6:
print("Soil in good condition (pH: {:.2f})".format(ph))
LED_PIN.value(0) # Turn off the LED (green)
else:
print("Soil in poor condition (pH: {:.2f})".format(ph))
LED_PIN.value(1) # Turn on the LED (red)
# Function to read temperature and humidity from DHT22 sensor
def read_temperature_humidity():
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
return temperature, humidity
# Function to send data to ThingSpeak
def send_data_to_thingspeak(ph, temperature, humidity):
data = {
"api_key": THINGSPEAK_API_KEY,
"field1": ph,
"field2": temperature,
"field3": humidity,
}
response = urequests.post(THINGSPEAK_URL, data=ujson.dumps(data), headers={"Content-Type": "application/json"})
response.close()
# Initialize the WiFi connection
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
# wait for the Wi-Fi connection to establish
while not wifi.isconnected():
time.sleep(1)
print("Connected to Wi-Fi")
if __name__ == "__main__":
try:
while True:
ph = read_ph()
print("pH: {:.2f}".format(ph))
check_soil_condition(ph)
temperature, humidity = read_temperature_humidity()
print("Temperature: {:.2f}°C, Humidity: {:.2f}%".format(temperature, humidity))
send_data_to_thingspeak(ph, temperature, humidity)
print("Data sent to ThingSpeak")
time.sleep(10) # Adjust the sleep interval as needed
except KeyboardInterrupt:
pass