import machine
import dht
import time
import network
import blynklib
from servo import Servo
import urequests
SERVER_URL = "http://localhost:5000/api/update"
# 1. KONFIGURASI PIN & SENSOR
DHT_PIN = 15
#SERVO_PIN = 18
my_servo = Servo(18)
dht_sensor = dht.DHT22(machine.Pin(DHT_PIN))
#servo_pwm = machine.PWM(machine.Pin(SERVO_PIN), freq=50)
# 2. KREDENSIAL BLYNK
# Ganti dengan Auth Token dari Blynk Console Anda
BLYNK_AUTH = '7h-e9o19rZb7GOB3og95BpMRlSb1D85V'
def send_to_custom_cloud(t, h):
try:
url = f"{SERVER_URL}?temp={t}&hum={h}"
response = urequests.get(url)
print("Respon Server:", response.text)
response.close()
except Exception as e:
print("Gagal kirim ke platform sendiri:", e)
# 3. KONEKSI WIFI WOKWI
def connect_wifi():
print("Menghubungkan ke WiFi", end="")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('Wokwi-GUEST', '') # SSID khusus simulasi Wokwi
while not wlan.isconnected():
print(".", end="")
time.sleep(0.5)
print("\nWiFi Terhubung!")
connect_wifi()
# 4. INISIALISASI BLYNK
blynk = blynklib.Blynk(BLYNK_AUTH)
# 5. HANDLER KONTROL (Dari Blynk ke ESP32)
# Library versi 1.0.0 mengirim satu argumen berupa list nilai
@blynk.on("V3")
def v3_write_handler(value):
try:
sudut = int(value[0])
print(f"Menerima perintah Servo: {sudut} derajat")
my_servo.write_angle(sudut) # Langsung masukkan sudut 0-180
# Mapping 0-180 derajat ke duty cycle 40-115
#duty = int(((sudut / 180) * 75) + 40)
#servo_pwm.duty(duty)
except Exception as e:
print("Error kontrol servo:", e)
@blynk.on("connected")
def blynk_connected():
print("Status: Terhubung ke Blynk Cloud")
# 6. LOOP UTAMA
last_send = 0
print("Sistem Siap...")
while True:
# Jalankan proses komunikasi Blynk[cite: 1]
blynk.run()
# Kirim data sensor setiap 5 detik agar tidak spamming
curr_time = time.time()
if curr_time - last_send > 5:
try:
dht_sensor.measure()
temp = dht_sensor.temperature()
hum = dht_sensor.humidity()
# Kirim ke Virtual Pin Blynk
blynk.virtual_write(1, temp)
blynk.virtual_write(2, hum)
print(f"Update Sensor -> Suhu: {temp}C, Lembap: {hum}%")
except Exception as e:
print("Gagal membaca sensor:", e)
last_send = curr_time