import network
import urequests as requests
import ujson
import utime as time
from machine import Pin
import dht
# --- Konfigurasi WiFi ---
WIFI_SSID = "Wokwi-GUEST" # Ganti dengan SSID WiFi Anda
WIFI_PASSWORD = "" # Jika ada password, isi di sini
USE_STATIC_IP = False # Ganti ke True jika ingin menggunakan IP statis
STATIC_IP_CONFIG = ('192.168.1.100', '255.255.255.0', '192.168.1.1', '8.8.8.8') # Sesuaikan dengan jaringan Anda
SERVER_URL = "http://192.168.0.104:5000/send-data" # Sesuaikan dengan IP Flask Server
# --- Konfigurasi Sensor ---
DHT_PIN = Pin(15)
TRIG_PIN = Pin(14, Pin.OUT)
ECHO_PIN = Pin(27, Pin.IN)
dht_sensor = dht.DHT22(DHT_PIN)
# --- Fungsi untuk Menghubungkan WiFi ---
def connect_wifi():
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
print("🔄 Connecting to WiFi...")
time.sleep(1) # 🔥 Tambahkan delay sebelum pengecekan pertama
timeout = 15 # Perpanjang timeout jadi 15 detik
while not wifi.isconnected() and timeout > 0:
print(f"⏳ Connecting... ({timeout} s remaining)")
time.sleep(2) # 🔥 Tambahkan delay agar ESP32 punya waktu untuk koneksi
timeout -= 2
if wifi.isconnected():
print("✅ Connected! IP Address:", wifi.ifconfig()[0])
if USE_STATIC_IP:
print("🌐 Setting static IP...")
wifi.ifconfig(STATIC_IP_CONFIG)
return True
else:
print("❌ WiFi connection failed!")
return False
# --- Fungsi Mengukur Jarak dengan HC-SR04 ---
def get_distance():
TRIG_PIN.value(0)
time.sleep_us(5)
TRIG_PIN.value(1)
time.sleep_us(10)
TRIG_PIN.value(0)
while ECHO_PIN.value() == 0:
pass
start = time.ticks_us()
while ECHO_PIN.value() == 1:
pass
end = time.ticks_us()
duration = end - start
distance_cm = (duration / 2) / 29.1
return round(distance_cm, 2)
# --- Fungsi Mengirim Data ke Flask ---
def send_data(temperature, humidity, distance):
try:
data = {"temp": temperature, "humidity": humidity, "distance": distance}
headers = {"Content-Type": "application/json"}
print("📤 Sending data:", data)
response = requests.post(SERVER_URL, data=ujson.dumps(data), headers=headers)
print("✅ Server response:", response.text)
response.close()
except Exception as e:
print("⚠️ Error sending data:", e)
# --- Program Utama ---
if connect_wifi():
while True:
try:
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
distance = get_distance()
print(f"🌡️ Temp: {temperature}°C, 💧 Humidity: {humidity}%, 📏 Distance: {distance}cm")
send_data(temperature, humidity, distance)
except Exception as e:
print("⚠️ Error:", e)
time.sleep(5) # Kirim data setiap 5 detik