import time
import machine
import onewire
import ds18x20
import dht
import urequests
# ThingSpeak API Key and URL
API_KEY = "4TOIP0FIRSPY6LFS"
TS_URL = "https://api.thingspeak.com/update?api_key=" + API_KEY
# Pin assignments
DHT_PIN = 2 # GPIO pin connected to the DHT22 sensor
DS18B20_PIN = 3 # GPIO pin connected to the DS18B20 sensor
LDR_PIN = 26 # Analog input pin connected to the LDR sensor
PIR_PIN = 4 # GPIO pin connected to the PIR Motion Sensor
# Initialize DHT22 sensor
dht_sensor = dht.DHT22(machine.Pin(DHT_PIN))
# Initialize DS18B20 sensor (assuming one is connected)
# Add DS18B20 initialization logic here
ds_pin = machine.Pin(DS18B20_PIN)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
# Initialize LDR sensor
ldr_sensor = machine.ADC(LDR_PIN)
# Initialize PIR Motion Sensor
pir_sensor = machine.Pin(PIR_PIN, machine.Pin.IN)
while True:
dht_data = None
ds18b20_data = None
ldr_value = None
pir_value = None
# Read data from DHT22
try:
dht_sensor.measure()
dht_data = dht_sensor.temperature(), dht_sensor.humidity()
except Exception as e:
print("Failed to read data from DHT22:", e)
# Read data from DS18B20
# Add DS18B20 sensor reading logic here
try:
roms = ds_sensor.scan()
if roms:
ds_sensor.convert_temp()
time.sleep_ms(750)
ds18b20_data = ds_sensor.read_temp(roms[0]) # Use the first DS18B20 sensor if multiple are connected
except Exception as e:
print("Failed to read data from DS18B20:", e)
# Read data from LDR
try:
ldr_value = ldr_sensor.read_u16()
except Exception as e:
print("Failed to read data from LDR:", e)
# Read data from PIR Motion Sensor
try:
pir_value = pir_sensor.value()
except Exception as e:
print("Failed to read data from PIR Motion Sensor:", e)
if dht_data is not None:
temperature, humidity = dht_data
print("Temperature: {:.1f}°C".format(temperature))
print("Humidity: {:.1f}%".format(humidity))
if ds18b20_data is not None:
print("DS18B20 Temperature: {:.2f}°C".format(ds18b20_data))
if ldr_value is not None:
print("LDR Value: {}".format(ldr_value))
if pir_value is not None:
print("PIR Motion: {}".format(pir_value))
# Send data to ThingSpeak
try:
ts_payload = "field1={:.1f}&field2={:.1f}&field3={}&field4={}".format(
temperature if temperature is not None else 0,
humidity if humidity is not None else 0,
ldr_value if ldr_value is not None else 0,
pir_value if pir_value is not None else 0
)
response = urequests.get(TS_URL + "&" + ts_payload)
print("ThingSpeak Response:", response.text)
response.close()
except Exception as e:
print("Failed to send data to ThingSpeak. Full error details:", e)
time.sleep_ms(2000) # Delay before the next reading