import time
import ujson # type: ignore
import network # type: ignore
import urequests as requests # type: ignore
from machine import Pin # type: ignore
from dht import DHT22 # DHT22 library
# Constants
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASS = ""
BASE_URL = "http://20.13.161.116:3001/"
ENDPOINT = "data"
SEND_INTERVAL = 30 # Send data every 30 seconds
# WiFi Manager Class
class WiFiManager:
def __init__(self, ssid, password):
self.ssid = ssid
self.password = password
self.wlan = network.WLAN(network.STA_IF)
self.wlan.active(True)
def connect(self):
print("Connecting to Wi-Fi", end="")
self.wlan.connect(self.ssid, self.password)
while not self.wlan.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
print("Wi-Fi connected. IP Address:", self.wlan.ifconfig()[0])
# API Client Class
class APIClient:
def __init__(self, base_url, endpoint):
self.base_url = base_url
self.endpoint = endpoint
def send_data(self, data):
try:
url = f"{self.base_url}{self.endpoint}"
response = requests.post(url, json=data)
print("Data sent. Server response:", response.text)
response.close()
except Exception as e:
print("Error sending data:", e)
# Temperature Sensor Class
class TemperatureSensor:
def __init__(self, pin):
self.sensor = DHT22(Pin(pin))
def read_data(self):
try:
self.sensor.measure()
temperature = self.sensor.temperature()
humidity = self.sensor.humidity()
return {
"temperature": temperature,
"humidity": humidity,
"timestamp": time.time()
}
except Exception as e:
print("Error reading sensor:", e)
return None
# Temperature System Class
class TemperatureSystem:
def __init__(self, wifi_manager, api_client, sensor):
self.wifi_manager = wifi_manager
self.api_client = api_client
self.sensor = sensor
def run(self):
self.wifi_manager.connect()
while True:
data = self.sensor.read_data()
if data:
print(f"Temperature: {data['temperature']}°C, Humidity: {data['humidity']}%")
self.api_client.send_data(data)
time.sleep(SEND_INTERVAL)
# Main Execution
wifi_manager = WiFiManager(WIFI_SSID, WIFI_PASS)
api_client = APIClient(BASE_URL, ENDPOINT)
sensor = TemperatureSensor(4) # GPIO4 (GP4)
temperature_system = TemperatureSystem(wifi_manager, api_client, sensor)
# Start the Temperature System
temperature_system.run()