本帖最后由 eew_bKCCPh 于 2023-10-4 14:53 编辑
zz
视频地址【得捷电子Follow me第2期】汇总-【得捷电子Follow me第2期】汇总-EEWORLD大学堂
代码地址【得捷电子Follow me第2期】esp32-s3-嵌入式开发相关资料下载-EEWORLD下载中心
项目介绍:
最终是实现了联网实时显示天气和温度,基本上也就是把前几个小任务所学的结合起来了
以下是各个任务说明:
任务1:屏幕显示中文
一.开箱及烧录固件
1.介绍
这款Feather带有本机USB和4 MB闪存+ 2 MB的PSRAM,因此非常适合与低成本WiFi的CircuitPython或Arduino一起使用。本机USB意味着它可以像键盘或磁盘驱动器一样工作。 WiFi 意味着它非常适合物联网项目。Feather意味着它与羽毛之翼的大型社区合作以实现可扩展性。
ESP32-S3 是一款高度集成、低功耗、2.4 GHz Wi-Fi/BLE 片上系统 (SoC) 解决方案,内置原生 USB 以及其他一些有趣的新技术,如飞行时间距离测量和 AI 加速。凭借其最先进的功率和射频性能,该 SoC 是与物联网 (IoT) ()、可穿戴电子产品 () 和智能家居相关的各种应用场景的理想选择。
2.烧录固件
Feather ESP32-S3 TFT Download --- 羽毛 ESP32-S3 TFT 下载 (circuitpython.org)在此链接下载固件,双击reset按键后出现此画面与fthrs3bootusb设备
将下载好的固件拖入盘内,设备自动重启,电脑上出现名为circuitpy的盘则表示烧录固件完成
二.下载库和写程序
1.下载CircuitPython 库包
2.程序
import board
from adafruit_display_text import bitmap_label
import terminalio
from adafruit_bitmap_font import bitmap_font
font = bitmap_font.load_font("fonts\wenquanyi_10pt.pcf")
color = 0x11ff11
text2 = "只因你太美"
scale = 3
text_area2 = bitmap_label.Label(font,text=text2,scale=scale)
text_area2.x = 10
text_area2.y = 30
board.DISPLAY.show(text_area2)
while True:
pass
程序效果
任务2:网络功能使用:
一.创建WiFi热点
Circuitpython创建和连接wifi都只需要一行代码,非常方便。
##开启热点 --------------------------------------------------------------------------------------
# SPDX-FileCopyrightText: 2020 Brent Rubell for Adafruit Industries
# SPDX-License-Identifier: MIT
import os
import wifi
print("ESP32-S3 Station Test")
wifi.radio.start_ap('zz', '12138888')
## end开启热点 --------------------------------------------------------------------------------------
二.连接WiFi
连接wifi并显示其ip
import board, os, wifi
from adafruit_display_text import bitmap_label
import terminalio
from adafruit_bitmap_font import bitmap_font
font = bitmap_font.load_font("fonts\wenquanyi_10pt.pcf")
color = 0x11FF11
wifi.radio.connect('ZZ', '12138888')
print(f"My IP address: {wifi.radio.ipv4_address}")
text2 = "IP地址: " + str(wifi.radio.ipv4_address)
scale = 1
text_area2 = bitmap_label.Label(font, text=text2, scale=scale)
text_area2.x = 10
text_area2.y = 30
board.DISPLAY.show(text_area2)
while True:
pass
任务3:控制WS2812B
一。介绍
Adafruit ESP32-S3 TFT Feather的板子上集成了一颗RGB灯WS2812B。还有两颗按键,其中复位键不能拿来当功能键使用,所以在不接外设的情况下,只有一个按键可以使用。两个器件的具体位置如下图。
介绍一下WS2812B灯珠。WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源,内置RGB三色灯珠,每个灯珠控制需要24位数据,8Bit绿色亮度+8Bit红色亮度+8Bit蓝色亮度,每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示。多个灯珠组合在一起可形成灯带,灯带上的灯珠供电并联,信号线“串联”。信号由DI进到灯珠,灯珠在锁存24Bit数据后,将剩余数据整形放大后通过DO端口输出给下一个级联的灯珠,每经过一个灯珠的传输,信号减少24bit。当灯珠接收到280μs以上的RESET数据,灯珠根据自己锁存的数据完成对RGB三色灯的控制。
二。代码
完成按一下按钮进行三个颜色的切换
import board
import neopixel
import digitalio
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
pixel.brightness = 0.3
button = digitalio.DigitalInOut(board.BUTTON)
button.switch_to_input(pull=digitalio.Pull.UP)
pixel.fill((0, 0, 0))
i = 0
while True:
if not button.value:
i = i + 1
if i > 3:
i = 1
if i == 1:
pixel.fill((255, 0, 0))
elif i == 2:
pixel.fill((0, 255, 0))
elif i == 3:
pixel.fill((0, 0, 255))
任务4:天气和时间
【得捷电子Follow me第2期】+任务4:天气和时间 [复制链接]
主要分为这几步
然后代码中有:
city_code = "101020100"
url = JSON_weather_URL.format(city_code)
这里使用了北京市的城市代码"101020100"。
城市代码是一个唯一标识每个城市的编号。不同天气API可能有不同的城市代码系统。
这个天气API文档中给出了常见城市及其代码:
- 北京:101010100
- 上海:101020100
- 广州:101280601
所以通过传入正确的城市代码,就可以从API获取对应城市的天气数据。
这样设计可以支持获取全球任意城市天气,只需要知道对应的城市代码即可。
代码
import board, os, wifi
import time
import ssl
import socketpool
import adafruit_requests
from adafruit_display_text import label, wrap_text_to_lines
from adafruit_bitmap_font import bitmap_font
color = 0xFFFFFF
font = bitmap_font.load_font("fonts\wenquanyi_10pt.pcf")
display = board.DISPLAY
display.brightness = 1
display.rotation = 0
JSON_TIME_URL = "http://quan.suning.com/getSysTime.do"
JSON_weather_URL = "http://t.weather.sojson.com/api/weather/city/{}"
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
def screen(print_text):
text_area = label.Label(font, text=print_text, scale=1)
text_area.x = 5
text_area.y = 15
text_area.scale = 1
text_area.color = color
display.show(text_area)
def get_data():
try:
response = requests.get(JSON_TIME_URL)
except ConnectionError as e:
print("Connection Error:", e)
print("Retrying in 60 seconds")
time_data = response.json()['sysTime2'][:-3]
try:
city_code = "101020100"
url = JSON_weather_URL.format(city_code)
response = requests.get(url)
except ConnectionError as e:
print("connect error:{},retry in 60s".format(e))
weather_data = response.json()
cityInfo = weather_data['cityInfo']
city_weather = weather_data['data']
forecast = city_weather['forecast']
dis_str = cityInfo['city'] + ' ' + forecast[0]['week']
dis_str += "\n时间:"+time_data
dis_str += '\n空气质量:' + city_weather['quality']
dis_str += "\n温度:"+city_weather['wendu']+"℃"
dis_str += "\n湿度:" + city_weather['shidu']
return dis_str
while not wifi.radio.ipv4_address:
try:
wifi.radio.connect('ZZ', '12138888')
except ConnectionError as e:
print("connecti error:{},retry in 2s".format(e))
time.sleep(2)
print("get ip:", wifi.radio.ipv4_address)
while True:
info = get_data()
screen(info)
time.sleep(60)
|
心得体会:通过这次活动让我这个穷困的学生党也学到了很多,希望下次还能继续参加
|