如何让Pico W在开机时自动设置正确时间
Pico W 开机自动同步网络时间(MicroPython实现)
核心需求
Pico W使用电池供电时,内部时钟默认从2021-01-01 00:00:00启动,需要实现开机自动完成:
- 联网获取当前标准时间
- 将内部芯片时间同步为该时间,确保
utime库返回正确时间
成熟实现方案
以下代码包含WiFi连接重试、NTP时间同步、时区调整逻辑,适配大多数低功耗场景:
import network import ntptime import utime import machine # WiFi配置信息 WIFI_SSID = "你的WiFi名称" WIFI_PASSWORD = "你的WiFi密码" # 时区偏移(东八区为8*3600,按需修改) TIME_ZONE_OFFSET = 8 * 3600 def connect_wifi(): wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print("正在连接WiFi...") wlan.connect(WIFI_SSID, WIFI_PASSWORD) # 最多重试10次,避免无限等待 retry_count = 0 while not wlan.isconnected() and retry_count < 10: utime.sleep(1) retry_count += 1 print(f"重试连接 {retry_count}/10") if wlan.isconnected(): print(f"WiFi连接成功,IP: {wlan.ifconfig()[0]}") else: print("WiFi连接失败,进入深度睡眠") machine.deepsleep() return wlan def sync_ntp_time(): try: # 使用国内NTP服务器提升同步速度 ntptime.host = "cn.pool.ntp.org" ntptime.settime() print("NTP时间同步完成") # 转换为本地时区时间并设置到RTC utc_time = utime.time() local_time = utc_time + TIME_ZONE_OFFSET machine.RTC().datetime(utime.localtime(local_time) + (0,)) print(f"本地时间已设置: {utime.localtime(local_time)}") except Exception as e: print(f"NTP同步失败: {e}") machine.deepsleep() # 开机执行主逻辑 if __name__ == "__main__": wlan = connect_wifi() if wlan.isconnected(): sync_ntp_time() # 同步完成后断开WiFi,降低功耗 wlan.disconnect() wlan.active(False) # 后续业务逻辑可在此添加
关键细节说明
- WiFi重试机制:针对信号不稳定场景设置10次重试上限,失败后进入深度睡眠节省电池
- 时区适配:NTP返回UTC时间,通过偏移量转换为本地时间,直接写入RTC确保
utime返回正确本地时间 - 低功耗优化:时间同步完成后主动关闭WiFi,适合电池供电的便携场景
- 异常容错:捕获同步异常避免程序卡死,失败后触发深度睡眠减少无效功耗
使用注意事项
- 确保Pico W刷入官方最新版MicroPython固件(已内置
network和ntptime模块) - 替换代码中的
WIFI_SSID和WIFI_PASSWORD为实际WiFi信息 - 不需要时区转换时,可移除
TIME_ZONE_OFFSET相关逻辑,直接使用UTC时间
内容的提问来源于stack exchange,提问作者Flood
相关产品推荐
相关产品推荐

