835|2

1

帖子

1

TA的资源

一粒金砂(初级)

楼主
 

【得捷电子Follow me第2期】+任务汇总报告 [复制链接]

  本帖最后由 boooil 于 2023-10-25 20:40 编辑

任务视频链接


 


任务总结报告

 

任务1:控制屏幕显示中文

在Circuit官网下载Feather ESP32-S3 TFT开发板的适配固件,格式为UF2。

 

将开发板接入电脑供电,按两次板子上的“RST”复位按钮,准备进行烧录。待板子上显示待烧录画面时,将下载的uf2固件文件拖入开发板文件夹中,完成烧录。

 

完成烧录后的代码文件树如图。

其中code.py是板子默认执行的源代码文件,setting.toml是配置文件,用于配置wifi信息等。lib文件中存放代码中需要依赖的第三方python库。font/pic是用户自行创建的用于存放自定义资源的文件夹。

链接已隐藏,如需查看请登录或者注册
下载字体文件,导入font文件夹。

执行如下代码:

import board
import displayio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font

display = board.DISPLAY

font = bitmap_font.load_font("/font/wenquanyi_9pt.pcf")

# 创建显示组和文本标签
text_group = displayio.Group()
color = 0xFF0000
text_area = label.Label(font, text="test", color=color)  # 创建文本标签对象
text_area.x = 50  # 设置文本的X坐标
text_area.y = 55  # 设置文本的Y坐标
text_area.line_spacing = 0.8  # 设置文本行间距
text_area.scale = 2  # 设置文本放大倍数

# 设置文本内容
text_area.text = "任务一中文显示"  # 这里设置文本内容
text_group.append(text_area)  # 将文本标签添加到显示组中
display.show(text_group)  # 在显示设备上显示文本

while True:
 pass

 

 

任务2:网络功能使用

在setting.toml中配置wifi名称和密码。

 

 

可以看到屏幕左上角显示ip地址,wifi连接成功。

创建热点

# 启动Wi-Fi热点
wifi.radio.start_ap('Feather WiFi', '12345678')  # 启动Wi-Fi热点,SSID为'Feather WiFi',密码为'12345678'

 

 

可以检测到该热点网络并正常连接。

 

任务3:控制WS2812B

Adafruit ESP32-S3 TFT Feather 板载了一颗 NeoPixel LED,通过板子上的boot按键来控制led灯的亮灭。

# 导入board内置库
import board
# 导入time内置库
import time
# 从digitalio内置库导入DigitalInOut, Direction, Pull
from digitalio import DigitalInOut, Direction, Pull
# 导入neopixel内置库
import neopixel
# 从adafruit_led_animation.animation.blink库导入Blink
from adafruit_led_animation.animation.blink import Blink
# 从adafruit_led_animation.color库导入五种颜色定义
from adafruit_led_animation.color import JADE, BLACK, ORANGE, GOLD, OLD_LACE


#初始化像素灯引脚
pixel_pin = board.NEOPIXEL
# 设置像素灯数量,这样分开写方便以后修改代码,例如外接ws2812灯带或者矩阵
num_pixels = 1
# 初始化像素灯
pixels = neopixel.NeoPixel(
    pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=neopixel.GRB
)
# 初始化blink动态效果
blink = Blink(pixels, speed=0.5, color=BLACK)

# 初始化btn按钮对象
btn = DigitalInOut(board.BOOT0)
# 设置btn引脚为输入
btn.direction = Direction.INPUT
# 设置btn引脚为上拉
btn.pull = Pull.UP

# 定义led_color变量,用于五种颜色切换
led_color = 0

# 进入while循环
while True:
    # 判断按键是否按下
    if not btn.value:
        # 若按键按下,则对led_color求余数,根据余数指定led颜色
        if led_color % 5 == 0:
            blink = Blink(pixels, speed=0.5, color=JADE)
            print("LED is JADE")
        elif  led_color % 5 == 1:
            blink = Blink(pixels, speed=0.5, color=ORANGE)
            print("LED is ORANGE")
        elif  led_color % 5 == 2:
            blink = Blink(pixels, speed=0.5, color=GOLD)
            print("LED is GOLD")
        elif  led_color % 5 == 3:
            blink = Blink(pixels, speed=0.5, color=OLD_LACE)
            print("LED is OLD_LACE")
        elif  led_color % 5 == 4:
            blink = Blink(pixels, speed=0.5, color=BLACK)
            print("LED is BLACK")
        # led_color 增加1
        led_color = led_color + 1
    else:
        # 按键未按下时啥也不干
        pass
    # 死睡0.2秒,这期间啥也不能干
    time.sleep(0.2) # sleep for debounce
    # 执行led闪烁动态效果
    blink.animate()

 

 

任务4:日历&时钟

import board
import os
import wifi

import ssl
import socketpool
import adafruit_requests

import displayio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font

display = board.DISPLAY

 

# 请求获取JSON
JSON_TIME_URL = "http://t.weather.sojson.com/api/weather/city/101010100"


pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())


## 解析Json  
response = requests.get(JSON_TIME_URL)



weather = response.json()
cityInfo  = weather['cityInfo']
city_weather = weather['data']
forecast = city_weather['forecast']

dis_str = ""+cityInfo['parent']+' '+cityInfo['city']
dis_str += '\n' + weather['time'] +' '+forecast[0]['week']
dis_str += '\n 空气质量:'+city_weather['quality'] +" " +forecast[0]['type'] 
dis_str += "\n 最"+forecast[0]['high']+' 最'+forecast[0]['low']
dis_str += "\n 湿度: "+city_weather['shidu']+' pm2.5:'+str(city_weather['pm25']) +' pm10:'+str(city_weather['pm10'])
dis_str += forecast[0]['notice'] 
 

font = bitmap_font.load_font("/font/wenquanyi_9pt.pcf")

color = 0x9499CA
text_group = displayio.Group()
text_area = label.Label(font, text=dis_str, color=color)
text_area.x = 0
text_area.y = 10
text_area.line_spacing = 0.8
text_area.scale = 1


text_group.append(text_area)
display.show(text_group)
while True:
    pass

使用https://www.sojson.com/api/weather.html提供的api接口来查询时间和天气,获得其返回的json字符串,将json字符串进行解析,把内容输出到屏幕上。

 

 

任务总结

通过本次的开发体验,让我切身感受到了使用python语言控制板子进行各种任务输出的乐趣。虽然板子面积很小,但是五脏俱全,显示屏、LED灯,wifi模块一应俱全,可以满足很多小功能的开发。这次任务为我打开了嵌入式的新的领域,使我的技能得到了拓展,也了解到了很多之前一知半解的知识,收获满满。

 

代码资源链接

https://download.eeworld.com.cn/detail/boooil/629646?type__2276=n4Ix2D9iAx0Dy7DlcmoitDCDRizm%3D5wdx&alichlgref=http%3A%2F%2Fbbs.eeworld.com.cn%2Fmy%2Fhome.php%3Fcur%3Dmyhome%26act%3Ddownload

 

 

 

最新回复

谢谢分享,期待后续深度大赛   详情 回复 发表于 2023-10-26 17:48
点赞 关注
 
 

回复
举报

6964

帖子

11

TA的资源

版主

沙发
 
大佬的任务总结条理很清晰,作品质量非常之高!
 
 
 

回复

7608

帖子

18

TA的资源

五彩晶圆(高级)

板凳
 

谢谢分享,期待后续深度大赛

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表