from machine import Pin, PWM # 從 machine 模組中引入 Pin 和 PWM 用於控制引腳和 PWM 信號
from HCSR04 import HCSR04 # 從 HCSR04 模組中引入 HCSR04 用於超聲波測距
import network # 引入 network 模組,用於連接 Wi-Fi
import time # 引入 time 模組,用於延遲
import urequests # 引入 urequests 模組,用於發送 HTTP 請求
# 連接到 Wi-Fi 網絡
sta = network.WLAN(network.STA_IF) # 建立 Wi-Fi station(STA) 物件
sta.active(True) # 啟用 Wi-Fi 介面
sta.connect('Wokwi-GUEST', '') # 連接到指定的 Wi-Fi 網絡,請替換成你的 Wi-Fi SSID 和密碼
print('Linking...')
while not sta.isconnected(): # 等待直到連接成功
pass
print('Link OK')
# 定義 ThingSpeak API 的主機和 API 金鑰
host = 'http://api.thingspeak.com' # ThingSpeak API 的主機位址
api_key = '5LMSE9MIB2JUZCCN' # 你的 ThingSpeak API 金鑰,請替換成自己的金鑰
# 初始化超聲波傳感器,觸發引腳為 15,回波引腳為 19
sr04 = HCSR04(trigPin = 15, echoPin = 19 )
# 初始化 LED 引腳
LED_red = Pin(25, Pin.OUT) # 設定引腳 25 為紅色 LED,模式為輸出
LED_green = Pin(26, Pin.OUT) # 設定引腳 26 為綠色 LED,模式為輸出
LED_blue = Pin(27, Pin.OUT) # 設定引腳 27 為藍色 LED,模式為輸出
# 對紅色 LED 設定 PWM,頻率為 1000 Hz,並設置初始亮度為 0
pwm_led_red = PWM(LED_red, freq=1000)
pwm_led_red.duty(0)
# 對綠色 LED 設定 PWM,頻率為 1000 Hz,並設置初始亮度為 0
pwm_led_green = PWM(LED_green, freq=1000)
pwm_led_green.duty(0)
# 對藍色 LED 設定 PWM,頻率為 1000 Hz,並設置初始亮度為 0
pwm_led_blue = PWM(LED_blue, freq=1000)
pwm_led_blue.duty(0)
dist = 0 # 初始化距離變量
try:
while True:
print('start')
try:
dist = sr04.distance() # 獲取距離
print('Distance:', dist, 'cm')
# 製作上傳 URL,包含 API 金鑰和距離數據
url = '%s/update?api_key=%s&field4=%s' % (host, api_key, dist)
r = urequests.get(url) # 發送 GET 請求將數據上傳到 ThingSpeak
# 根據距離調整 LED 顯示
if dist > 100: # 如果距離 > 100
for i in range(1024): # 慢速漸亮
pwm_led_green.duty(i)
time.sleep(0.005) # 延遲 5 毫秒
for j in range(1024): # 慢速漸暗
pwm_led_green.duty(1023 - j)
time.sleep(0.005) # 延遲 5 毫秒
elif 30 < dist and dist < 100: # 如果距離介於30-100
for i in range(1024): # 慢速漸亮
pwm_led_blue.duty(i)
time.sleep(0.005) # 延遲 5 毫秒
for j in range(1024): # 慢速漸暗
pwm_led_blue.duty(1023 - j)
time.sleep(0.005) # 延遲 5 毫秒
elif dist < 30: # 如果距離 <30
for i in range(1024): # 慢速漸亮
pwm_led_red.duty(i)
time.sleep(0.005) # 延遲 5 毫秒
for j in range(1024): # 慢速漸暗
pwm_led_red.duty(1023 - j)
time.sleep(0.005) # 延遲 5 毫秒
except Exception as e: # 捕捉異常
print(e.args[0]) # 打印異常信息
time.sleep(1) # 延遲 1 秒
except KeyboardInterrupt: # 捕捉鍵盤中斷信號
print('Program stopped!') # 打印程序停止信息