【得捷电子Follow me第3期】任务4:连接WiFi网络
[复制链接]
任务要求
将Seeed Studio XIAO ESP32C3连接到WiFi网络,并访问互联网信息
硬件准备
该任务使用 Seeed Studio XIAO ESP32C3 即可完成,但需要将 IPEX 天线连接上,否则会因为信号衰减过多导致网络连接不稳定。
代码实现
这里我将使用 Seeed Studio XIAO ESP32C3 连接至WIFI,并使用 http 协议请示当前时间并显示在 OLED 屏幕上,作为目标来完成该任务。
实现代码如下:
import time
import utime
import network
import urequests
import ujson
import task2
# 网络配置
wifi_ssid = "WIFI_SSID"
wifi_password = "WIFI_PASSWORD"
# 获取当前时间API
url = "https://f.m.suning.com/api/ct.do"
station = network.WLAN(network.STA_IF)
station.active(True)
# 连接至wifi
def connect_wifi():
# 不断尝试连接到配置的WIFI
while not station.isconnected():
print("Connecting...")
station.connect(wifi_ssid, wifi_password) # 连接至配置的WIFI AP
time.sleep(10)
# 连接成功,输出IP地址
print("Connected!")
print("My IP Address:", station.ifconfig()[0])
# 显示IP地址在OLED上
task2.text_ip = station.ifconfig()[0]
# 获取wifi连接状态
def get_wifi_state():
return station.isconnected()
def get_time():
# 请示当前时间
response = urequests.get(url)
# 检查返回请求返回状态码
if response.status_code == 200:
'''
获取到的结果JSON:
{"api":"time","code":"1","currentTime": 1700054614641,"msg":""}
'''
# 解析返回的JSON数据
data = ujson.loads(response.text)
# 获取到的时间戳单位是毫秒,MicroPython time 转换时间戳的单位是秒,因此需要先进行换算。
# 另外获取到的时间戳起始时间是1970年1月1日,而 MicroPython esp32 time 模块起始时间为 2000年1月1日 因此还需要减去差值
local_time = utime.localtime(int(data["currentTime"] / 1000) - 946656000)
# 格式化显示时间, 由于屏幕宽度有限这里只显示 月-日 时:分:秒
local_data_time = "{:02d}-{:02d} {:02d}:{:02d}:{:02d}".format(local_time[1], local_time[2], local_time[3], local_time[4], local_time[5])
print("Local Date Time:", local_data_time)
# 更新时间显示
task2.show_date_time(local_data_time)
else:
task2.show_date_time("Failed to get the time!")
效果展示
连接网络成功并正确获取到时间后,在 OLED 上显示当前时间,实现效果如下图所示:
演示视频
|