iT邦幫忙

2026 iThome 鐵人賽

DAY 26
0
自我挑戰組

無硬體也能玩物聯網!使用 Wokwi 模擬器與 MicroPython 打造 30 天 ESP32 實務系列 第 26 篇

使用 ESP32 模擬 Wi-Fi 連線與 NTP 網路時間取得

  • 分享至 

  • xImage
  •  

今日目標
雖然 Wokwi 線上模擬器是一個沙盒環境、無法直接連上真實的 Wi-Fi 路由器,但 MicroPython 提供了非常逼真的 network 模組來模擬 Wi-Fi 連線過程。我們將學習如何讓 ESP32 模擬連線至虛擬無線網路,並透過 NTP 網路時間協定從網際網路同步獲取精確的標準時間。

程式碼
import time
import network
import ntptime
from machine import Pin, I2C
import ssd1306

i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

def show_message(line1, line2=""):
oled.fill(0)
oled.text("=== NTP CLOCK ===", 0, 0)
oled.hline(0, 12, 128, 1)
oled.text(line1, 0, 26)
if line2:
oled.text(line2, 0, 42)
oled.show()

show_message("Connecting WiFi...", "Please wait...")
print("=== ESP32 Wi-Fi 模擬連線啟動 ===")

wlan = network.WLAN(network.STA_IF)
wlan.active(True)

SSID = "Wokwi-GUEST"
PASSWORD = ""

wlan.connect(SSID, PASSWORD)

max_wait = 10
while max_wait > 0:
if wlan.isconnected():
break
max_wait -= 1
print(".", end="")
time.sleep(1)

if wlan.isconnected():
ip_info = wlan.ifconfig()
print(f"\n✅ Wi-Fi 連線成功!")
print(f"取得 IP 位址: {ip_info[0]}")
show_message("WiFi Connected!", f"IP: {ip_info[0]}")
time.sleep(2)
else:
print("\n❌ Wi-Fi 連線逾時!")
show_message("WiFi Failed!", "Check network")
while True:
time.sleep(1)

print("正在從網路伺服器同步標準時間 (NTP)...")
show_message("Syncing NTP...", "Getting time...")

try:
# 呼叫 ntptime 模組寫入系統 RTC 時間 (預設為 UTC 標準時間)
ntptime.settime()
print("✅ NTP 時間同步成功!")
show_message("NTP Sync OK!", "Starting clock...")
time.sleep(1.5)
except Exception as e:
print(f"❌ NTP 同步失敗: {e}")
show_message("NTP Sync Failed", str(e))
time.sleep(2)

print("=== 進入即時網路時鐘主迴圈 ===")

while True:
# time.localtime() 回傳格式:(year, month, mday, hour, minute, second, weekday, yearday)
utc_time = time.localtime()

year, month, mday, hour, minute, second, weekday, yearday = utc_time

hour += 8
if hour >= 24:
    hour -= 24

    

date_str = f"{year:04d}-{month:02d}-{mday:02d}"
time_str = f"{hour:02d}:{minute:02d}:{second:02d}"


oled.fill(0)
oled.text("=== INTERNET CLOCK ===", 0, 0)
oled.hline(0, 12, 128, 1)

oled.text(f"Date:", 0, 22)
oled.text(f"{date_str}", 20, 32)

oled.text(f"Time (UTC+8):", 0, 44)
oled.text(f"{time_str}", 20, 54)

oled.show()

print(f"當前網路時間: {date_str} {time_str}")
time.sleep(1)

心得
今天我們突破了單機硬體的限制,讓 ESP32 成功連上了虛擬網際網路,並學會了利用 NTP 伺服器進行時間校準。這項技術是未來製作「物聯網氣象鐘」、「定時自動排程系統」或「雲端資料上傳」不可或缺的基石。


上一篇
情境 4:防盜門禁模擬——按鈕組合鍵密碼鎖 + OLED 顯示解鎖狀態
下一篇
模擬 MQTT 發送——將感測器數據格式化為 JSON 字串
系列文
無硬體也能玩物聯網!使用 Wokwi 模擬器與 MicroPython 打造 30 天 ESP32 實務 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言