import network
import urequests as requests
from machine import Pin, time_pulse_us
from time import sleep_ms
# WiFi credentials (Wokwi default)
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASS = ""
# ThingSpeak Write API Key
THINGSPEAK_API_KEY = "Z8OOISBIVZOMB05J"
THINGSPEAK_URL = "http://api.thingspeak.com/update"
# Pins for 3 ultrasonic sensors
trig_pins = [Pin(2, Pin.OUT), Pin(3, Pin.OUT), Pin(4, Pin.OUT)]
echo_pins = [Pin(5, Pin.IN), Pin(6, Pin.IN), Pin(7, Pin.IN)]
# Red/Green LEDs for each slot
red_leds = [Pin(8, Pin.OUT), Pin(9, Pin.OUT), Pin(10, Pin.OUT)]
green_leds = [Pin(11, Pin.OUT), Pin(12, Pin.OUT), Pin(13, Pin.OUT)]
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASS)
print("Connecting to WiFi", end="")
while not wlan.isconnected():
sleep_ms(500)
print(".", end="")
print("\n✅ Connected:", wlan.ifconfig())
def measure_distance(trig, echo):
trig.low()
sleep_ms(2)
trig.high()
sleep_ms(10)
trig.low()
duration = time_pulse_us(echo, 1, 30000) # 30ms timeout
if duration < 0:
return None
return (duration / 2) / 29.1 # cm
def update_thingspeak(available, slot_status):
try:
url = (
f"https://api.thingspeak.com/update"
f"?api_key={THINGSPEAK_API_KEY}"
f"&field1={available}"
f"&field2={slot_status[0]}"
f"&field3={slot_status[1]}"
f"&field4={slot_status[2]}"
)
res = requests.get(url)
print("ThingSpeak Response:", res.text)
res.close()
except Exception as e:
print("⚠️ ThingSpeak update failed:", e)
# MAIN PROGRAM
connect_wifi()
while True:
slot_status = []
available = 0
# Measure all slots
for i in range(3):
dist = measure_distance(trig_pins[i], echo_pins[i])
if dist is not None and dist < 100: # threshold (cm)
red_leds[i].high()
green_leds[i].low()
slot_status.append(0) # occupied
print(f"🚗 Slot {i+1}: Occupied ({dist:.1f} cm)")
else:
red_leds[i].low()
green_leds[i].high()
slot_status.append(1) # empty
available += 1
print(f"✅ Slot {i+1}: Empty")
# Update ThingSpeak
update_thingspeak(available, slot_status)
print(f"📊 Available Slots: {available}")
print("-----------------------------")
sleep_ms(1000) # ThingSpeak: minimum 1s between updates