【得捷电子Follow me第3期】任务4:连接WiFi网络(联网、每日一句英语)
[复制链接]
本帖最后由 HonestQiao 于 2023-11-11 23:26 编辑
Seeed Studio XIAO ESP32C3使用的是ESP32-C3核心,联网功能时是基本功能。
下面就分享联网的过程,以及联网后,从api接口请求数据,并显示到显示屏上。
一、联网
关于联网的具体处理,Seeed官方提供了演示代码,具体可见:MicroPython for ESP32C3 | Seeed Studio Wiki
其具体的代码如下:
import network
import urequests as requests
import ujson as json
import utime as time
# 无线连接设置
wifi_ssid = "无线热点"
wifi_password = "连接密码"
网处理
def scan_and_connect():
station = network.WLAN(network.STA_IF)
station.active(True)
if not station.isconnected():
print("Scanning for WiFi networks, please wait...")
for ssid, bssid, channel, RSSI, authmode, hidden in station.scan():
print("* {:s}".format(ssid))
print(" - Channel: {}".format(channel))
print(" - RSSI: {}".format(RSSI))
print(" - BSSID: {:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}".format(*bssid))
print()
while not station.isconnected():
print("Connecting...")
station.connect(wifi_ssid, wifi_password)
time.sleep(10)
print("Connected!")
print("My IP Address:", station.ifconfig()[0])
# 联网
scan_and_connect()
上述代码的过程很简单,是标准的ESP32中,MicroPython的联网处理。
执行上述代码,联网成功后,输出如下:
二、请求API
要请求API接口,可以使用urequest模块来进行。
本次分享中,调用的接口为每日一句英语,具体调用说明地址为:每日英语-每日英语API接口-免费API接口-聚合数据 (juhe.cn)
在该页面上,申请接口的权限,以及对应的KEY。
具体的调用代码如下:
# 每日一句(英语)接口
api_key = "411f8a902123456786ecc36b87654321"
api_url = "http://apis.juhe.cn/fapigx/everyday/query"
# 请求API
response = requests.get(api_url+"?key="+api_key)
# 从API返回获取数据
if response.status_code == 200:
data = json.loads(response.text)
if "result" in data:
print(data)
date = data['result']['date']
content = data['result']['content']
note = data['result']['note']
else:
print("No content")
date = "No Date"
content = "Content is empty"
else:
print("error")
date = "No Date"
content = "Request is error"
print("Date: ", date)
print("Content: ", content)
在上述代码中,使用urequests.get()请求API接口,然后检查返回数据是否正确,如果返回正确,则从其中解析出对应的数据。
最终的数据,英文句子存放到变量content,日期存放到date中。
实际运行结果如下:
三、输出结果到屏幕上
在之前的分享 【得捷电子Follow me第3期】任务2:驱动扩展板上的OLED屏幕(字符、中文、仪表、诗词) 中,已经说明了使用 micropython-nano-gui 来驱动显示,这里同样适用该库。
得到了每日一句英语后,使用下面的代码进行显示:
from color_setup import ssd
from gui.core.nanogui import refresh
from gui.core.writer import CWriter
from gui.widgets.textbox import Textbox
from gui.widgets.label import Label
from gui.core.colors import *
# 字体调用
import gui.fonts.arial10 as arial10
# 清屏
refresh(ssd, True)
# 显示输出
CWriter.set_textpos(ssd, 0, 0)
wri = CWriter(ssd, arial10, verbose=False)
wri.set_clip(True, True, False)
# 显示日期
Label(wri, 0, 40, date)
# 显示英文句子
# Positional
pargs = (13, 2, 124, 4) # Row, Col, Width, nlines
tb = Textbox(wri, *pargs, clip=False)
tb.append(content, ntrim = 100)
refresh(ssd)
在上述代码中,使用了Label和TextBox两个组件,分别用于显示日期和英文句子。
TextBox在现实的时候,可以通过clip参数,来控制是自动换行,还是溢出的不显示。
最终运行的结果如下:
四、总结
得益于ESP32强大的联网能力支持,要连接网络并从网络获取数据,易如反掌。
而结合网络开发应用,能够实现更多的应用方式和场景。
|