522|1

1

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第2期】项目汇总 [复制链接]

  本帖最后由 洛神依灵 于 2023-11-11 19:58 编辑

一 视频演示

       视频链接:【得捷电子Follow me第2期】任务视频-【得捷电子Follow me第2期】任务视频-EEWORLD大学堂

二 项目介绍

      这次主要完成了四个任务分别是控制屏幕显示中文,网络功能使用,控制WS2812B,日历&时钟。使用到的硬件是Adafruit ESP32-S3 TFT Feather。

      Adafruit ESP32-S3 TFT Feather开发板使用乐鑫ESP32-S3芯片,支持WiFi和蓝牙,板载 ST7789 TFT 彩色显示屏 ,4 MB闪存和2 MB PSRAM 。

三 项目总结报告

    任务一 控制屏幕显示中文

       在Adafruit ESP32-S3 TFT Feather开发版上显示中文其实很简单,只要引用相应的库,然后引用字体文件就可以很容易的显示中文

        字体文件怎么来的?

            先用fontSmaller提前需要的字符

       

 

            然后用GitHub上的u8g2_fontmaker-main这个项目来转换格式

            将提取的字体文件放font文件夹里,然后编辑create.bat文件 修改文件名和字体大小就行了

           

 

            会在bdf文件夹生成我们要的文件

 

         

 

上代码

首先先创建文本组

text_group = displayio.Group(scale=1, x=0, y=0)

创建Label对象

text = "华风古韵"
text_area = label.Label(font, text=text, color=0xEE0000, x=10, y=30)
text1 = "洛水天依"
text1_area = label.Label(font, text=text1, color=0x66ccff, x=10, y=95)

添加到文本组

text_group.append(text_area)
text_group.append(text1_area)

然后调用display.show()显示文本组就行了,是不是非常简单?

display.show(text_group)

主要是创建字体麻烦了点

总代码

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

display = board.DISPLAY

font_file = "fonts/hfgylsty-40.bdf"
font = bitmap_font.load_font(font_file)

text_group = displayio.Group(scale=1, x=0, y=0)

text = "华风古韵"
text_area = label.Label(font, text=text, color=0xEE0000, x=10, y=30)
text1 = "洛水天依"
text1_area = label.Label(font, text=text1, color=0x66ccff, x=10, y=95)

text_group.append(text_area)
text_group.append(text1_area)

while True:
    display.show(text_group)

任务

【得捷电子Follow me第2期】任务2:连接WIFI和创建热点
直接调库函数就行了,一行搞定开启热点,另一行搞定连接WIFI,真是太方便啦!

#开启热点
wifi.radio.start_ap(WiFiSSID, 密码)

#连接WIFI
wifi.radio.connect(WiFiSSID, 密码)

总代码 

import board
import wifi
# 1. 屏幕基础配置
display = board.DISPLAY
# 2. 设置wifi和密码
SSID = "My_ESP32"
PASSWORD = "11451400"
# 3. 启动热点
wifi.radio.start_ap(SSID, PASSWORD)
# 4. 连接wifi
wifi.radio.connect("洛神依灵のiPhone2", "tnnd8888")
# 5. 显示IP地址
print("IP:",wifi.radio.ipv4_address)
print("AP IP:",wifi.radio.ipv4_address_ap)

while True:
    pass

 

可以看到显示出二个IP,处于station+ap模式

任务三

【得捷电子Follow me第2期】任务3:控制WS2812B

这里写了now_state和pre_state保存按钮状态

然后用now_state-pre_state是不是等于1判断有无上升沿到来

一有上升沿就用位操作控制WS2812B换颜色

import board
import neopixel
import digitalio
import time
# 按键基础配置
button = digitalio.DigitalInOut(board.BUTTON)
button.switch_to_input(pull=digitalio.Pull.UP)
# WS2812B 电源控制
power = digitalio.DigitalInOut(board.NEOPIXEL_POWER)
power.direction = digitalio.Direction.OUTPUT
power.value = True
# WS2812B设置
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# 亮度
pixel.brightness = 0.1
def WS2812B(color):
    pixel.fill(((color&0x0000FF),(color&0x00FF00)>>8,(color&0xFF0000)>>16))
color=0xFF0000
pre_state=0;
now_state=0;
while True:
    now_state=button.value;
    #上升沿触发
    if now_state-pre_state==1:
        color>>=8
        if color==0x000000:
            color=0xFF0000
        WS2812B(color)
    pre_state=now_state

 

任务四

【得捷电子Follow me第2期】任务4.1:日历&时钟

API来源 http://t.weather.sojson.com/api/weather/city/101030100

通过下面代码得到API返回的JSON数据

JSON_URL = "http://t.weather.sojson.com/api/weather/city/101280201"
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
response = requests.get(JSON_URL)
json = response.json()

这是JSON数据

 

接着提取信息出来

date=json['date']
data=json['data']
shidu=data['shidu']
quality=data['quality']
forecast=data['forecast']
cityInfo=json['cityInfo']
dis_str = ""+cityInfo['parent']+' '+cityInfo['city'] +'\n'+json['time'][:11] + forecast[0]['week']
dis_str += '\n 空气质量:'+quality +" " +forecast[0]['type']
dis_str += "\n 湿度: "+shidu

时钟用字符串切片提取

# 使用字符串切片提取日期和时间部分
date_part, time_part = json['time'].split(" ")
# 提取时间中的时、分、秒
hour, minute, second = map(int, time_part.split(":"))

接着用任务一学到的文本代码显示出来就行了

总代码↓ 

#任务四
import board
import wifi
import ssl
import socketpool
import adafruit_requests
import displayio
import time
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
# 屏幕基础配置
display = board.DISPLAY
# 使用字体
font_file = "fonts/MyFonts-17.bdf"
font = bitmap_font.load_font(font_file)
# WiFi连接
wifi.radio.connect("洛神依灵のiPhone2", "tnnd8888")
# JSON获取
JSON_URL = "http://t.weather.sojson.com/api/weather/city/101280201"
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
response = requests.get(JSON_URL)
# JSON分析
# print(response.json())

json = response.json()
date=json['date']
data=json['data']
shidu=data['shidu']
quality=data['quality']
forecast=data['forecast']
cityInfo=json['cityInfo']
dis_str = ""+cityInfo['parent']+' '+cityInfo['city'] +'\n'+json['time'][:11] + forecast[0]['week']
dis_str += '\n 空气质量:'+quality +" " +forecast[0]['type']
dis_str += "\n 湿度: "+shidu
# 屏幕显示
text_group = displayio.Group(scale=1,x=0,y=0,)
text_area = label.Label(font, text=dis_str, color=0xFFFFFF, x=10, y=15)
text_group.append(text_area) 

# 使用字符串切片提取日期和时间部分
date_part, time_part = json['time'].split(" ")
# 提取时间中的时、分、秒
hour, minute, second = map(int, time_part.split(":"))
display.show(text_group)
while True:
    second += 1
    if second == 60:
        second = 0
        minute += 1
    if minute == 60:
        minute = 0
        hour += 1
    if hour == 24:
        hour = 0
    dis_str = ""+cityInfo['parent']+' '+cityInfo['city'] +'\n'+json['time'][:11] + forecast[0]['week']+"  "+str(hour)+":"+str(minute)+":"+str(second)
    dis_str += '\n 空气质量:'+quality +" " +forecast[0]['type']
    dis_str += "\n 湿度: "+shidu
    text_area.text = dis_str
    display.show(text_group)
    time.sleep(1)

 

四 总体体验(意见与建议)

        首先,非常荣幸能够参加此次比赛,也非常感谢德捷和电子工程世界,提供了这次提升自我的机会。

        软件方面: 开发板采用一种独特的U盘编程方式,只需通过文本编辑即可修改程序,这个设计很好,我非常喜欢。还有多种文本编辑器可供选择,例如Mu、Thonny以及VSCode与CircuitPython搭配使用。然而,我在使用VSCode与CircuitPython时遇到了库无法更新和终端无法连接的问题。

        硬件方面: 在尺寸与STM32F103C8T6板相当的情况下,该板提供了丰富的硬件资源,设计精巧、集成度高,然而价格较昂贵,同时容易产生热量。

        使用CircuitPython时,只需调用库即可完成相对复杂的应用,为开发者提供了更便捷的开发体验。还是挺不错的

        社区生态方面: 尽管该板拥有相对完善的官方文档和社区支持,但由于价格及产地的原因,国内用户使用较为有限,官方也没有中文教程,使用过程中需要花费更多时间进行研究。

五 资源下载

所使用的字体软件及代码都在里面了:【得捷电子Follow me第2期】软件资源及代码-编程语言相关资料下载-EEWORLD下载中心

 

最新回复

感谢楼主提供的技术分享,先收藏学习再发表个人意见,顶起来   详情 回复 发表于 2023-11-21 15:07
点赞(1) 关注
 
 

回复
举报

734

帖子

5

TA的资源

纯净的硅(高级)

沙发
 

感谢楼主提供的技术分享,先收藏学习再发表个人意见,顶起来

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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