【Funpack 2-5】基于ESP32-S3-Box-Lite和CircuitPython的电子诗词阅读器
本项目基于ESP32-S3-Box-Lite套件和CircuitPython固件,实现了一个电子诗词阅读器。本项目旨在将传统文化与现代科技相结合,为用户提供一种全新的诗词阅读体验。
标签
Funpack活动
Python
ESP32-S3-BOX-LITE
码匠许师傅
更新2023-08-02
849

一、项目概述

本项目基于ESP32-S3-Box-Lite套件和CircuitPython固件,实现了一个电子诗词阅读器。本项目旨在将传统文化与现代科技相结合,为用户提供一种全新的诗词阅读体验。本项目参与了得捷电子和硬核学堂联合举办的Funpack第二季第五期活动

二、设计思路

本项目硬件基于ESP32-S3-Box-Lite套件,固件使用CircuitPython 8.2.1(官方支持了ESP32-S3-Box-Lite开发套件),软件代码基于CircuitPython内置包和一些扩展包,使用PyCharm IDE编写。

主要设计思路如下:

  • 硬件使用ESP32-S3-Box-Lite,主要用到显示屏、按键、WiFi等功能;

  • 固件使用CircuitPython,官方支持了ESP32-S3-Box-Lite开发板,固件自带库支持了显示屏、WiFi功能,可以满足基本功能要求;

  • 软件使用了CircuitPython内置包和扩展包,内置包主要使用os,time,gc,json等包,扩展包主要使用adafruit_bitmap_font,adafruit_display_text,adafruit_reqeusts等;

  • 业务功能实现,主要包括WiFi联网、HTTP请求、JSON解析、界面绘制、UI交互,基于CircuitPython内置包和扩展包实现;

设计思路的整体框图如下所示:

e-poem-reader.png

三、硬件介绍

3.1 ESP32-S3-BOX-LITE 简介

ESP-BOX 是乐鑫发布的新一代 AIoT 开发平台,ESP32-S3-BOX-Lite 开发套件配备了一块 2.4 寸 LCD 显示屏、双麦克风、一个扬声器、两个用于硬件拓展的 Pmod™ 兼容接口和3个独立按键,可构建多样的 HMI 人机交互应用。开发板可实现离线语音唤醒和命令词识别,支持乐鑫自研的高性能声学前端算法构建语音交互系统。开发者可利用开源的 SDK轻松构建在线离线语音助手、智能语音设备、HMI 人机交互设备、多协议网关等多样的应用。

3.2 前面板按键原理图

查阅ESP32-S3-Box-Lite原理图,可以知道——前面板三个按键是通过ADC进行区分的:

Untitled

可以看到,前面板的键盘子板连接在主控芯片的GPIO1上。

3.3 启动键原理图

查阅ESP32-S3-Box-Lite原理图,可以找到侧边的启动和复位按键的部分:

Untitled

Untitled

可以看到,BOOT按键连接在主控芯片的GPIO0上。

四、软件介绍

不同于使用C语言进行嵌入式软件开发,底层驱动库代码和应用代码需要编译到同一份固件中,一次烧录到设备的二进制代码同时包含驱动代码和应用代码。使用CircuitPython或者MicroPython进行嵌入式开发时,固件和应用代码是完全分离的。

本文将软件部分和固件部分分别介绍,正是因为在开发过程中这两部分相对独立。但宽泛的来说,固件也属于一种软件,本章节重点介绍的是——不包含在固件内的Python代码部分,具体包括一些CircuitPython扩展软件包和业务功能实现代码。

4.1 CircuitPython简介

固件使用的是ESP32-S3-Box-Lite版的CircuitPython,下载页面: ESP32-S3 Box Lite - 16MB Flash, 8MB PSRAM (circuitpython.org)

使用CuicirPython最大的好处是,Adafruit已经对ESP32-S3-Box-Lite开发板做了支持,板子的绝大部功能都可以开箱即用,包括wifi、LCD功能,同时Flash、RAM配置也是正确的可以充分利用设备的运行内存和存储空间。

另外Adafruit提供了大量包,基于这些软件包进行一些功能扩展和二次开发也非常方便,例如本项目中使用到的adafruit_bitmap_font、adafruit_display_text、adafruit_requests。

4.2 导入的软件包

本项目使用到的CircuitPython扩展软件包有:

  • adafruit_bitmap_font,用于支持位图字体库

  • adafruit_display_text,用于支持文本框控件

  • adafruit_requests,用于实现HTTP请求

另外,还使用到了CircuitPython内置包:

  • digitalio,GPIO功能接口

  • analogio,ADC功能接口

  • displayio,显示功能接口

  • board,引脚别名,用microcontroller包也可以

以及Python原生包:

  • gc,用于主动触发垃圾回收

  • time,用于实现延时操作

  • json,用于实现json字符串解析

4.3 业务功能实现

目前整个业务功能代码实现全部位于一个文件内,按照过程式凡事设计为一系列函数。

业务功能实现代码主要包括:

  • WiFi联网

  • HTTP请求

  • JSON解析

  • 界面绘制

  • UI交互

下面分别介绍相关功能实现的代码片段。

WiFi联网功能,主要代码片段:

Untitled

HTTP请求和JSON解析功能,主要实现代码:

Untitled

JSON解析,调用json.loads即可解析字符串。

目录界面绘制,主要实现代码:

Untitled

绘制选择光标、选择交互界面,包括翻页功能:

Untitled

显示诗词内容界面:

Untitled

底部会显示行数的进度。

诗词内容交互,包括长诗词的翻页功能:

Untitled

五、活动心得

本次活动项目是我第一次使用CircuitPython,虽然此前也接触过不少开发板,但基本上是以C/C++开发为主。本次项目整个完成的过程中,最大的体会是感叹CircuitPython的功能完善和强大,比如这次的电子诗词阅读器软件业务代码仅用了不到500行Python代码就实现了,虽然界面比较丑陋。另外Adafruit提供的文档和示例也非常的丰富。

 

六、开源仓库

项目开源代码库地址,包括预处理之后的诗词数据:https://gitee.com/swxu/poem/

 

七、参考链接

  1. Funpack第二季第5期活动页面: Digikey Funpack (eetree.cn)

  2. ESP32-S3-Box-Lite原理图: SCH_ESP32-S3-BOX-Lite_MB_V1.1_20211221.pdf (gitee.com)

  3. ESP32-S3-Box-Lite CircuitPython固件下载页面: ESP32-S3 Box Lite - 16MB Flash, 8MB PSRAM (circuitpython.org)

  4. PyCharm IDE下载页面: https://www.jetbrains.com/pycharm/download/

  5. 文泉驿中文字体pcf位图格式: https://sourceforge.net/projects/wqy/files/wqy-bitmapfont/1.0.0-RC1/wqy-bitmapsong-pcf-1.0.0-RC1.tar.gz

  6. CircuitPython外设控制教程: CircuitPython Essentials | CircuitPython Essentials | Adafruit Learning System

  7. CircuitPython显示控制教程:Introduction | CircuitPython Display Support Using displayio | Adafruit Learning System

  8. CircuitPython字体定制教程:https://learn.adafruit.com/custom-fonts-for-pyportal-circuitpython-display

  9. CircuitPython内置包wifi参考文档: wifi — Adafruit CircuitPython documentation

  10. CircuitPython内置包analogio参考文档: analogio – Analog hardware support — Adafruit CircuitPython documentation

  11. CircuitPython内置包digitalio参考文档: digitalio – Basic digital pin support — Adafruit CircuitPython documentation

  12. CircuitPython内置包displayio参考文档: displayio – Native helpers for driving displays — Adafruit CircuitPython documentation

  13. CircuitPython扩展包adafruit_bitmap_font参考文档: adafruit_bitmap_font.bdf — Adafruit Bitmap_Font Library 1.0 documentation (circuitpython.org)

  14. CircuitPython扩展包adafruit_display_text包考文档: adafruit_display_text — Adafruit Display_Text Library 1.0 documentation (circuitpython.org)

  15. CircuitPython扩展包adafruit_requests参考文档: adafruit_requests — Adafruit Requests Library 1.0 documentation (circuitpython.org)

附件下载
poem-master.zip
团队介绍
码匠许师傅
团队成员
码匠许师傅
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号