720|0

39

帖子

4

TA的资源

一粒金砂(中级)

楼主
 

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

 

一、总结视频


二、任务总结报告

1.任务一控制屏幕显示中文

完成屏幕的控制,并且能显示中文

搭配器件:Adafruit ESP32-S3 TFT Feather

 

由于电脑上的字库文件非常大,而ESP32的内存容量就那么点,所以参考网上的大神们给出的方案,经过一波三折不是格式不对,就是转换出错再加上字体识别不成功,出现了一堆一堆的问题耗费了我很多很多的时间去寻找合适的字库文件。

我最终选择了使用FontForge将需要显示的字体进行打包,压缩之后转换成PCF文件导入进开发板。

这里放上FontForge的下载链接

https://fontforge.org/en-US/downloads/windows-dl/

 

我首先去谷歌的字体库(https://fonts.google.com/)下载了一个我喜欢的字体,经过测试,这个网站上ttf字体是可以顺利地转化为bdf的,但是有些网站上下载的ttf文件的字体是没办法转成bdf的,或者转成的bdf文件无法再进一步转换成pcf文件,且不可以被开发版识别。  

这个字体文件是ttf格式的,CircuitPython无法识别,使用FontForge将ttf转化为bdf。然后打开https://adafruit.github.io/web-bdftopcf/将BDF转化为PCF文件,进一步缩小体积,在导入开发板的font文件夹中。

   

首先打开front forge。 在打开的时候导入TTF文件,点击Element菜单,选择Bitmap Strikes Available,选择X格式。 然后在输入最下方pixel那里输入你想要的字体大小。

   

然后再次点击element菜单。 打开Regenerate Bitmap Glyphs,点击OK。 然后回到主页点击file菜单,点击 Generate font生成字体文件,选择 No Outline Font和BDF,然后再选中你想生成的文件夹,这样就可以生成BDF字库文件了。

 

再然后打开:https://adafruit.github.io/web-bdftopcf/浏览刚才生成的PDF文件直接进行转换,浏览器会自动下载PCF格式的文件。

然后将它放进开发板的fonts文件夹中,这样就可以使用这个字库了,可以看到转换后的字体文件大小大概在800K左右,虽然有点大,但是可以覆盖很多很多的文字。对于我这种懒人来说非常舒服了。

然后就是显示代码了,搞定PCF字库文件以后,直接调用函数就可以在屏幕上显示文字了,字库文件反而是最麻烦的

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

# 使用固件自带的屏幕设备,不需要另行初始化屏幕参数
display = board.DISPLAY

# 创建本例程里的唯一图像组
group = displayio.Group()

# 加载字体并定义字体颜色
font = bitmap_font.load_font("/font/font-30.pcf")
color = 0x11ff11

date1 = label.Label(font, text="你好!", color=color)
date1.x = 80
date1.y = 30
group.append(date1)

date2 = label.Label(font, text="电子工程世界", color=color)
date2.x = 0
date2.y = 80
group.append(date2)

# 显示修改后的图像组
display.show(group)

while True:
    pass

 

2.任务二 网络功能使用

完成网络功能的使用,能够创建热点和连接到WiFi

搭配器件:Adafruit ESP32-S3 TFT Feather

 

连接WIFI、创建热点可就是ESP32的强项,所以说操作起来还是非常简单的。

首先是创建热点,代码如下

import board
import os
import time
import ssl
import wifi
import socketpool
import microcontroller
import displayio
import adafruit_imageload
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font

wifi.radio.start_ap("ESP32_wifi", "88888888")#创建热点,就一句话的事

display = board.DISPLAY
group = displayio.Group()
font = bitmap_font.load_font("/font/font-30.pcf")
#nun_font = bitmap_font.load_font("/font/font-30.pcf")
color = 0x11ff11

date1 = label.Label(font, text="ESP32_wifi", color=color)
date1.x = 0
date1.y = 30
group.append(date1)

date2 = label.Label(font, text="88888888", color=color)
date2.x = 0
date2.y = 80
group.append(date2)

display.show(group)

while True:
	Pass

   

连接WIFI  配置settings.toml这个文件就可以了

 

 

从图中可以看到开发板已经连接至网络了,获得了一个IP地址:192.168.124.4。

 

3.任务三 控制WS2812B

使用按键控制板载Neopixel LED的显示和颜色切换

搭配器件:Adafruit ESP32-S3 TFT Feather

 

使用CircuitPython驱动WS2812B是非常简单的,只需要导入相应的几个库就行了。

通过内置的neopixel库,直接定义板载的WS2812灯珠,然后使用pixel.fill函数填充颜色数组就可以改变灯珠显示的颜色了。然后加入几个延时就可以,控制灯珠改变颜色的频率了。  

代码如下

import time
import board
import neopixel

pixel = neopixel.NeoPixel(board.NEOPIXEL,1)
pixel.brightness = 0.1

while True:
    time.sleep(0.02)
    pixel.fill((255,0,0))
    time.sleep(0.5)
    pixel.fill((0,255,0))
    time.sleep(0.5)
    pixel.fill((0,0,255))
    time.sleep(0.5)

 

4.任务四WS2812B效果控制

完成一个Neopixel(12灯珠或以上)控制器,通过按键和屏幕切换展示效果

搭配器件:Adafruit ESP32-S3 TFT Feather、可寻址RGB LED

 

正巧手里有一个16灯珠的WS2812B的灯板,索性就做了这一个小任务。 将开发版的D6接口接到了WS2812的数据口,然后给它通过USB供了一个五伏的电压。然后我们打开编辑器,接着上一节的代码导入button库。 然后新建一个图层用来在屏幕上显示灯珠的颜色。 这里使用的任务一的代码可以简单的显示一些中文字。

然后使用button库中的函数读取板载的按键的状态,当开发板进入程序之后,Boot键就可以当成正常的按键使用,这一点还是挺方便的。

然后在while循环中循环读取按键的信息,当检测到按键按下后改变灯珠的颜色,并显示在屏幕上,这样一来,整个任务就完成了。

下面是演示的实例和源代码。

import time
import board
import neopixel
import displayio
import digitalio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
# 使用固件自带的屏幕设备,不需要另行初始化屏幕参数
display = board.DISPLAY
# 创建本例程里的唯一图像组
group = displayio.Group()

# 按键基础配置
button = digitalio.DigitalInOut(board.BUTTON)
button.switch_to_input(pull=digitalio.Pull.UP)

state = 0

# 加载字体并定义字体颜色
font = bitmap_font.load_font("/font/font-30.pcf")

pixel = neopixel.NeoPixel(board.D6, 16)
pixel.brightness = 0.1

while True:
    if button.value == 0:
        time.sleep(0.5)
        state = state + 1
        if (state == 3):
            state = 0

    if state == 0:
        pixel.fill((255,0,0))
        date = label.Label(font, text="灯是红色的", color=0x11ff11)
        date.x = 50
        date.y = 60
        group = date
        display.show(group)

    if state == 1:
        pixel.fill((0,255,0))
        date = label.Label(font, text="灯是绿色的", color=0x11ff11)
        date.x = 50
        date.y = 60
        group = date
        display.show(group)

    if state == 2:
        pixel.fill((0,0,255))
        date = label.Label(font, text="灯是蓝色的", color=0x11ff11)
        date.x = 50
        date.y = 60
        group = date
        display.show(group)

三、源代码文件
源码文件

 

心得体会

 

在得捷 Follow Me 2 活动中,通过使用 ESP32 单片机完成一系列任务,我收获颇丰。我深刻体验到了 ESP32 强大的多语言支持和易用性,为嵌入式系统的开发提供了便捷的解决方案。


通过这次活动,我对 ESP32 单片机有了更深刻的理解,不仅在技术应用上得到锻炼,也收获了对物联网、嵌入式系统开发的更多见解。这次经历让我对硬件开发和物联网领域的学习产生了浓厚的兴趣,我期待能在未来的学习和实践中不断挑战更多有趣的技术难题。感谢得捷为我们提供了这次宝贵的学习机会,让我更好地掌握了 ESP32 的应用和潜力。

点赞 关注
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表