【得捷电子Follow me第2期】任务2:网络功能使用
[复制链接]
本帖最后由 Tristan_C 于 2023-8-30 09:01 编辑
任务2的内容是网络功能的使用,也就是完成网络功能的使用,能够创建热点和连接到WiFi,鉴于Circuit Python非常丰富的参考,再结合ESP32-S3本身也已经有原生软硬件支持WiFi,因此也是非常容易实现WiFI的AP和Station。
一、WiFi AP热点功能
首先在文件settings.toml中定义WiFi使用到的SSID和Password
如下图定义。
然后在使用是,利用os.getenv接口获取。
具体实现代码如下
import os
import wifi
print("Flow Me Task 2:WiFi AP Mode")
wifi.radio.start_ap(os.getenv("WIFI_SSID"), os.getenv("WIFI_PASSWORD"))
while True:
pass
保存运行之后板载显示屏显示信息如下
就可以用电脑扫描到该热点。
此时可以点击链接,输入前述密码建立链接如下。
二、WiFi Station功能连接到WiFi热点
昨晚了AP的功能,接下来实现任务中作为station链接到别的AP的功能。
完成的目标是能够连接到指定ssid和password的ap,并能通过网络API获取当前时。
首先同样需要在文件settings.toml中定义WiFi使用到的SSID和Password,只不过这次使用的ssid和password是被链接的ap的信息。然后再定义时间戳获取的接口api地址。
使用的地址可以参考如下的获取时间api接口大全
这里选择一个苏宁的接口接口地址
http://quan.suning.com/getSysTime.do
该接口返回的时间信息如下图,会比较方便显示,通过json解析即可,在浏览器输入API获得回复如下。
我们将其也加到settings.toml中
而为了能让时间滚动起来,我们加入time,每2秒通过该api请求一次时间
本次需要额外添加的是adafruit_requests
具体代码如下:
import os
import wifi
import ssl
import socketpool
import adafruit_requests
import time
print("Flow Me Task 2:WiFi station Mode(connect to an AP)")
print(f"ESP32 connecting to {os.getenv('WIFI_SSID')}")
wifi.radio.connect(os.getenv("WIFI_SSID"), os.getenv("WIFI_PASSWORD"))
print(f"ESP32 connected to {os.getenv('WIFI_SSID')}")
print(f"My MAC address: {[hex(i) for i in wifi.radio.mac_address]}")
print(f"My IP address: {wifi.radio.ipv4_address}")
print("Get time from SUNING.")
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
while True:
#每2秒获取一次时间
time.sleep(2)
response = requests.get(os.getenv("SUNING_TIME_API"))
print(f"{response.json()['sysTime2']}")
运行效果
|