574|1

29

帖子

4

TA的资源

一粒金砂(中级)

楼主
 

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

 


 

很开心能参加得捷电子Follow me第2期活动,这一次的板卡是Adafruit ESP32-S3 TFT Feather

Adafruit ESP32-S3 TFT Feather是由开源硬件行业知名公司Adafruit出品的一款富有特色的开源硬件,开发板使用乐鑫ESP32-S3芯片,支持WiFi和蓝牙能,自带高清TFT彩色显示屏。

特性

•  搭载 Xtensa® 32 位 LX7 双核处理器,主频高达 240 MHz,内置 512 KB SRAM (TCM),具有 45 个可编程 GPIO 管脚和丰富的通信接口,集成 2.4 GHz Wi-Fi 和 Bluetooth 5 (LE),配备原生 USB,可用作键盘/鼠标、MIDI 设备、磁盘驱动器等;
•  获得FCC / CE认证,带有4 MB闪存和2 MB PSRAM;
•  彩色 1.14“ IPS TFT,240x135 像素——采用 ST7789 芯片组的高清彩色显示屏,可从任何角度观看;
•  电源选项 - USB C 型或锂聚合物电池,通过 USB-C 供电时可为内置电池充电;
•  LiPoly 电池监控器 - LC709203 芯片主动监控电池的电压和充电状态/通过 I2C 报告电池电量百分比;
•  重置和DFU(BOOT0)按钮以进入ROM引导加载程序;
•  内置原生USB串行端口,不需要单独的电缆,串行调试输出引脚(可选,用于检查硬件串行调试控制台);
•  用于 I2C 设备的 STEMMA QT 连接器,具有可切换电源,可进入低功耗模式;
•  板载 NeoPixel 具有引脚控制电源,可实现低功耗,用于多种状态显示;
•  在深度睡眠模式下,可从Lipoly连接获得80~100uA的电流消耗;
•  可与Arduino或CircuitPython一起使用。

外观指示图

这次我完成了四个任务

任务1:控制屏幕显示中文(必做任务)

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

搭配器件:Adafruit ESP32-S3 TFT Feather

这里我主要参考大佬们的设计

使用大佬们裁剪的字库,降低字库文件大小,从而确保程序空间足够使用。

使用板载资源需要载入board库,显示功能使用display库实现。设置好显示参数后即可使用display.show函数实现显示字符。

主要调用外部库adafruit_imageload、adafruit_display_text以实现生成一个Group对象,append添加,board.DISPLAY.show进行显示。

代码

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

text_group = displayio.Group()

font = bitmap_font.load_font("\wenquanyi_10pt.pcf")
text_area = label.Label(font, text = "得捷电子Follow me第2期\n任务1:控制屏幕显示中文\n", color=0x149F14)
text_area.x = 3
text_area.y = 5
text_group.append(text_area)

text_area1 = label.Label(font, text = "奇迹12", color=0x149F14)
text_area1.x = 3
text_area1.y = 60
text_group.append(text_area1)

board.DISPLAY.show(text_group)

while True:
    pass

 

任务2:网络功能使用(必做任务)

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

搭配器件:Adafruit ESP32-S3 TFT Feather

这一部分比较简单,使用内部库就行

1.连接WiFi

项目通过连接热点实现网络访问,设备连接热点后获取IP地址和相关网络配置信息,从而实现设备的网络联机,核心代码就是wifi.radio.connect

代码

import board
import displayio
import wifi
import adafruit_requests
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
import time

WIFI_SSID = "xxxx"
WIFI_PASSWORD = "xxxx"

wifi.radio.connect(WIFI_SSID, WIFI_PASSWORD)

text_group = displayio.Group()

font = bitmap_font.load_font("\wenquanyi_10pt.pcf")
text_area = label.Label(font, text = "得捷电子Follow me第2期\n任务2:网络功能的使用--创建热点", color=0x149F14)
text_area.x = 3
text_area.y = 5
text_group.append(text_area)

text_area1 = label.Label(font, text = "WIFI已连接\nIP: "+str(wifi.radio.ipv4_address), color=0x149F14)
text_area1.x = 3
text_area1.y = 60
text_group.append(text_area1)

board.DISPLAY.show(text_group)

while True:
    pass

2.作为ap使用

也是通过内部库实现,很简单。

 

import board
import displayio
import wifi
import adafruit_requests
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
import time

AP_SSID = "esp32-s3"
AP_PASSWORD = "123456789"

wifi.radio.start_ap(AP_SSID, AP_PASSWORD)

text_group = displayio.Group()

font = bitmap_font.load_font("\wenquanyi_10pt.pcf")
text_area = label.Label(font, text = "得捷电子Follow me第2期\n任务2:网络功能的使用--创建热点", color=0x149F14)
text_area.x = 3
text_area.y = 5
text_group.append(text_area)

text_area1 = label.Label(font, text = "WIFI: "+AP_SSID+"\nPASSWORD: "+AP_PASSWORD, color=0x149F14)
text_area1.x = 3
text_area1.y = 60
text_group.append(text_area1)

board.DISPLAY.show(text_group)

while True:
    pass

 

任务3:控制WS2812B(必做任务)

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

搭配器件:Adafruit ESP32-S3 TFT Feather

控制WS2812B灯珠,主要需要用到adafruit_led_animation,neopixel两个外部库。

读取按键需要调用内部库digitalio和board,分别用于控制io口和获取板载io的信息

import board
import displayio
import digitalio
import neopixel
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
import time

ws2812_state = 0

button = digitalio.DigitalInOut(board.BUTTON)
button.direction = digitalio.Direction.INPUT
button.pull = digitalio.Pull.UP

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

font = bitmap_font.load_font("\wenquanyi_10pt.pcf")
text_area = label.Label(font, text = "得捷电子Follow me第2期\n任务3:控制WS2812B", color=0x149F14)
text_area.x = 3
text_area.y = 5
board.DISPLAY.show(text_area)

while True:
    if not button.value and not button_pressed:  # 按键被按下且之前未被按下
        button_pressed = True
        time.sleep(0.1)  # 延迟一段时间进行消抖
        if not button.value:  # 确认按键仍然被按下
            if(ws2812_state==0):
                pixel.fill(0xFF0000)
                ws2812_state+=1;
                text_area = label.Label(font, text = "红色", color=0x149F14)
            elif(ws2812_state==1):
                pixel.fill(0x00FF00)
                ws2812_state+=1;
                text_area = label.Label(font, text = "绿色", color=0x149F14)
            elif(ws2812_state==2):
                pixel.fill(0x0000FF)
                ws2812_state+=1;
                text_area = label.Label(font, text = "蓝色", color=0x149F14)
            elif(ws2812_state==3):
                pixel.fill(0xFFFFFF)
                ws2812_state+=1;
                text_area = label.Label(font, text = "白色", color=0x149F14)
            else :
                pixel.fill(0x000000)
                ws2812_state=0;
                text_area = label.Label(font, text = "黑色", color=0x149F14)
            text_area.x = 20
            text_area.y = 20
            board.DISPLAY.show(text_area)
    elif button.value:  # 按键未被按下
        button_pressed = False

 

任务4:从下方5个分任务中选择1个感兴趣的完成即可(必做任务)

■  分任务1:日历&时钟——完成一个可通过互联网更新的万年历时钟,并显示当地的天气信息

建议搭配器件:Adafruit ESP32-S3 TFT Feather

项目基于板载屏幕进行时间、日期和天气的显示,调用第三方天气服务接口与时间接口从而获取实时的天气数据和当前时间。

由于未使用RTC,全部靠服务器获取,时间更新比较慢。

代码

import board
import displayio
import wifi
import adafruit_requests
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
import time
import ssl
import socketpool
import adafruit_requests

WIFI_SSID = "qiji"
WIFI_PASSWORD = "123456789"

JSON_XINZHI_URL = "http://api.seniverse.com/v3/weather/now.json?key=xxxxxxxxxx&location=jinan&language=zh-Hans&unit=c"
JSON_TIME_URL = "http://quan.suning.com/getSysTime.do"

wifi.radio.connect(WIFI_SSID, WIFI_PASSWORD)

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

while True:
    response = requests.get(JSON_XINZHI_URL)
    weather = response.json()
    results  = weather['results']
    location = results[0]['location']
    now = results[0]['now']

    dis_str = "城市:"+location['name']+"\n"
    dis_str += "天气状况:"+now['text']+"\n"
    dis_str += "温度:"+now['temperature']+"°C"+"\n"

    response = requests.get(JSON_TIME_URL)
    timejson = response.json()
    dis_str += timejson['sysTime2']+"\n"

    display = board.DISPLAY
    board.DISPLAY.brightness = 0.9
    board.DISPLAY.rotation = 0
    font = bitmap_font.load_font("wenquanyi_10pt.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)

 

代码

https://download.eeworld.com.cn/detail/%E5%A5%87%E8%BF%B912/629579

 

心得体会

很高兴能够参加本次活动,这次活动我学习到了很多知识,也认识了很多大佬,很感谢大佬们开源的代码,让我在项目上少走了很多弯路,也希望以后follow me活动也能越来越好。

最新回复

给楼主点赞!   详情 回复 发表于 2023-10-16 09:18
点赞 关注
 
 

回复
举报

6069

帖子

4

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