Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
flashDB
国民技术_N32G45x
SPI
【N32G457】基于RT-Thread和N32G457的墨水屏日历
发布于 2022-04-05 22:41:46 浏览:936
订阅该版
[tocm] # 基于RT-Thread和N32G457的墨水屏日历 ## 项目概述 本项目硬件部分包含N32G457开发板、ESP8266 Wi-Fi模组、W25Q128闪存模组、4.2寸三色墨水屏和墨水屏驱动板,硬件功能上使用了N32G457芯片的SPI、UART、GPIO。软件部分包含业务代码、RT-Thread内核、RT-Thread组件包以及微雪的墨水屏驱动,软件上使用了RT-Thread的一些内核API(线程、信号量、互斥锁等),以及组件库的不分组件报(at_device、cJSON、FlashDB、gbk2utf8、webclient、netutils)。最终实现了——在4.2寸三色墨水屏上显示当前日期、所在城市、室外温度、天气、阳历、农历等信息。 ## 项目背景 本项目是【RT-Thread-创新“芯”引擎 | 国民技术N32G457 RT-Thread设计大赛】参赛项目之一,大赛活动链接: https://club.rt-thread.org/ask/article/3236.html ## 项目简介 **本项目实现了哪些功能?** 1. 实现了基于NTP的时间同步; 2. 实现了查询当前公网IP地址; 3. 实现了查询当前所在城市; 4. 实现了查询实时天气信息; 5. 实现了在墨水屏上显示阳历、农历、星期、周数、实时天气等信息; 6. 实现了阳历和农历对应信息保存到闪存中,避免重复联网查询; **本项目有什么创新点?** 1. 相比纸质日历,无需手动翻页; 2. 相比纸质日历,可以显示实时天气信息; 3. 相比LCD/OLED屏的同类产品,电子墨水屏的功耗更低,更节能环保; ## 硬件部分 本项目主要包括x个硬件模块: 1. N32G457开发板,作为主控制器控制其他外设; 2. 微雪的墨水屏驱动板,用于驱动墨水屏; 3. 4.2英寸三色墨水屏,分辨率400x300; 4. ESP8266 Wi-Fi模组,用于实现联网能力; 5. W25Q128闪存模块,容量16MB,用于存储中文字体,以及阳历和农历的对应关系等数据; ### 硬件模块间连接 五个硬件模块之间的整体连接关系如下图: ![hardware.png](https://oss-club.rt-thread.org/uploads/20220405/e82029bc4b81a93dca094a6b88520f86.png) ### 开发板引脚分配 主要使用到的资源,以及开发板和外设的引脚连接关系(控制部分): ![pin-assign.png](https://oss-club.rt-thread.org/uploads/20220405/87ce868638e0afc81d44ff7d8601f1c4.png.webp) 具体使用情况说明: 1. UART * UART4:连接ESP-01S模块,用于实现联网获取时间和实时天气信息; 2. SPI * SPI1:连接W25Q128模块,用于和闪存芯片通信,实现数据存储功能; * SPI2:连接墨水屏驱动板,用于和墨水屏通信,实现界面显示; 3. GPIO * 连接墨水屏扩展板上的EPD_CS,用于输出墨水屏的片选信号; * 连接墨水屏扩展板上的EPD_DC,用于输出墨水屏的数据/命令信号; * 连接墨水屏扩展板上的EPD_RST,用于输出墨水屏的复位信号; * 连接墨水屏扩展板上的EPD_BUSY,用于墨水屏的繁忙状态的输入; * 连接W25Q128模块的CS,用于输出闪存芯片的片选信号; * 开发板自带的三个按键,用于作为输入按键; 4. 3V3/GND * 连接ESP-01S模块,用于向ESP8266芯片供电; * 连接墨水屏扩展板,用于向SRAM和墨水屏供电; * 连接W25Q128模块,用于向闪存芯片供电; ## 软件部分 本项目的软件部分基于RT-Thread物联网操作系统,除了本项目开发的业务逻辑代码外,还使用了一些RT-Thread 内核API、一些RT-Thread软件包,以及一些三方组件,下面分别介绍。 主代码仓:https://gitee.com/N32G457/e_calendar(欢迎Star支持) 下载命令:`git clone --recursive https://gitee.com/N32G457/e_calendar.git ` 部分组件通过git submodule引用了其他代码仓,具体见`.gitmodules`文件; ### 组件框图 软件各部分的组件框图如下: ![software.png](https://oss-club.rt-thread.org/uploads/20220405/2cf1c3405b286b840bab764ebe17161d.png.webp) ### 业务代码 本项目开发的业务代码位于`applications`目录下,具体文件功能如下(大部分是.c和.h两个文件): 1. amap_location_api 高德定位API对接; 2. amap_weather_api 高德天气预报API对接; 3. chinese_date_api 农历查询API对接; 4. fs_init.c 闪存分区挂载(依赖RT-Thread内核的fatfs支持); 5. http_api_utils http工具函数; 6. hzk16 HZK16汉字字体相关接口; 7. hzk16_data HZK16汉字字体数据; 8. hzk16_setup 将HZK16字体安装到闪存分区; 9. key_task 按键扫描任务; 10. kvdb 封装了FlashDB里面的KVDB,更容易使用; 11. main.c 程序入口; 12. network_task 网络任务,用于处理网络请求(农历查询较慢,所以单独放在一个任务里面执行); 13. sohu_wanip_api 搜狐公网IP查询API对接; 14. time_utils 时间处理工具函数; 15. ui_consts UI常量; 16. ui_draw UI绘制,界面绘制逻辑单独放在了这里面; 17. ui_task UI任务,调用ui_draw实现相关功能; ### N32G457 BSP 对于N32G457的BSP,也修改了: 1. 修改了pin驱动,添加了rt_pin_get接口的支持,已提PR并合入RT-Thread主仓; * 链接:https://github.com/RT-Thread/rt-thread/pull/5520 2. 修改了国民技术SDK里面的RT-Thread spi驱动,修复了SPI1默认配置不对的问题,支持了SPI2,暂未提交PR; ### RT-Thread组件包 本项目使用到的RT-Thread软件包位于`packages`目录下: 1. at_device * 提供ESP8266 AT命令构造和响应解析功能,实现联网; 2. netutils * 提供网络时间协议(NTP)的实现,实现从网络获取时间、设置时间; 3. webclient * 提供了超文本传输协议(HTTP)客户端的实现,用于天气查询请求的发送和接收; 4. cJSON * 一个轻量级的纯C实现的JSON字符串解析库,用于解析天气查询响应的JSON字符串; 5. FlashDB * 一个嵌入式数据库,提供了键值数据库(KVDB)和时序数据库(TSDB)两类API,同时提供了一些msh的测试命令; * **修改**:bench命令中的KV测试次数改为60,允许创建kvdb时格式化分区; * 代码仓:https://gitee.com/N32G457/FlashDB.git 6. gbk2utf8 * GBK和UTF8互相转换,HTTP API返回的汉字是UTF8编码的; ### 其他三方软件包 本项目使用到的其他三方软件均来自外设模块供应商,代码放在`board`目录下,包括: 1. epaper * 微雪墨水屏扩展板驱动软件包,来自微雪的[E-Paper_Shield]([E-Paper Shield - Waveshare Wiki](https://www.waveshare.net/wiki/E-Paper_Shield))页面; * **删除**了无用的代码,包括不是4.2寸屏幕的代码、以及SD卡驱动; * **修改**了GPIO相关的代码,改为用RT-Thread的pin驱动接口; * **修改**了SPI相关的代码,改为用RT-Thread的spi驱动接口; * **添加**了基于RT-Thread finsh的墨水屏测试程序(绘制棋盘格、全屏填充、输出引脚测试),可以在shell模式下通过命令调用执行; ## 效果展示 演示视频:https://www.bilibili.com/video/BV1344y1V7mR ## 项目小结 这里是现阶段的项目小结: 1. 原打算用微雪的Arduino墨水屏扩展板作为驱动板,结果中途该板子坏了,后来替换为的微雪的树莓派墨水屏驱动板,两者的差异主要是前者有一个128KB的SRAM芯片,不占用主控单片机的内存,后者需要30KB内存占用(300x400/8*2); 2. 农历日期查询,没有找到比较好的云服务提供商,只找到了tianapi.com的黄历服务,但是他们免费用户的单日调用次数太少了,所以基于Spring Boot 和Redis做了一个带缓存的黄历服务; 3. 目前选用的4.2寸三色墨水屏的刷新太慢了——单次刷新需要15秒,而且不支持局部刷新,而且价格不便宜,略坑,不推荐; ## 开发指南 对于部分想要**基于本项目进行二次开发**的朋友,需要**注意**以下细节; ### 下载代码 下载命令:`git clone --recursive https://gitee.com/N32G457/e_calendar.git ` 本项目代码仓使用了git submodule功能,使用`git clone`命令下载时需要带` --recursive`参数才能下载全部代码,网页端下载的zip包不包含子模块,编译会失败; ### 编译代码 编译命令:`scons -j 9` 本项目后期我是用`scons`命令编译的,RT-Thread Studio的工程文件`.cproject`,`.project`和`.settings`已经不是最新的了,不保证可以直接导入RT-Thread Studio成功,以及编译通过; ### 下载固件 下载脚本:`flash.bat` 里面有我本地的RT-Thread Studio的安装路径,可能需要根据你的实际情况修改; ### 高德定位和天气服务 本项目使用了高德定位和高德天气服务,需要注意: 1. 需要注册高德开发者账号,并申请API Key之后才能使用相关功能; 2. API Key的Kconfig配置项位于菜单"Application config" -> "AMAP API config" 菜单下; 3. 由于在项目顶层Kconfig直接添加`source "applications/Kconfig"`选型后RT-Thread env工具打开会报错,因此`source "applications/Kconfig"`添加到了`board/Kconfig`文件中了; ### 农历查询服务 农历查询服务是基于Spring Boot和Redis搭建的tianapi.com的黄历服务的缓存版本,主要解决了: 1. tianapi允许的每日API调用次数太少的问题; 2. 移除了响应中目前设备端不需要的一些字段; 代码仓地址:https://gitee.com/swxu/wservice.git ### 硬件物料清单 本项目包含的物料清单如下(都可以直接淘宝买到): | 编号 | 物品名称 | 价格 | 商家 | 备注 | | ---- | ----------------------------------- | ----- | ------------------------- | --------------- | | 1 | N32G457开发板 | 不详 | 国民技术 | 活动方提供的 | | 2 | 4.2寸(红白黑)三色墨水屏 | 126 | WaveShare微雪电子 | 不包邮,邮费8元 | | 3 | 树莓派墨水屏驱动板 | 56 | WaveShare微雪电子 | | | 4 | W25Q128闪存模组 | 11.96 | telesky旗舰店/risym旗舰店 | 包邮 | | 5 | ESP-01S模组+烧录器 | 17.5 | 佳信微数码专营店 | 满19.9包邮 | | 6 | 40P母对母杜邦线(10cm) | 2 | 佳信微数码专营店 | | | 7 | 40P公对母杜邦线(10cm) | 3.3 | 佳信微数码专营店 | | | 8 | 迷你逻辑分析仪(C口)+5条贴片测试钩 | 38 | Muse Lab | 不包邮,邮费3元 | 注: 1. 部分商品价格可能会有变动,上表仅为我购买时的不含邮费的价格; 2. ESP-01S烧录器不是必选,如果有其他USB-UART转接器也可以用; * 这个转换器也可以当USB-UART转接器用, * 标号是为了ESP-01S对应的,所以实际上TX是接收脚,RX是发送脚; 3. 逻辑分析仪不是必选项目,但是非常方便用来对SPI相关的问题进行调试; ### 接线注意事项 接线需要注意的细节有: 1. W25Q128模组的DI脚作为SPI的MOSI,DO脚作为SPI的MISO; 2. 最好有一块万用表,可以用于检查线路连通性;
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
xusiwei1236
https://blog.csdn.net/xusiwei1236
文章
11
回答
41
被采纳
6
关注TA
发私信
相关文章
1
BBB的SPI驱动
2
求个SPI上挂两个或多个设备的使用例子
3
SPI设备有个bug
4
spi flash 的fatfs使用一段时间后读写文件出现故障
5
SPI驱动
6
请教rt_spi_configure函数理解
7
SPI FLASH挂载的问题
8
SPI-FLASH 文件系统 SPIFFS
9
求助一个完整的 spi flash 驱动
10
关于同时使用文件系统与SPI FLASH的问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
7
个答案
2
次被采纳
三世执戟
7
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
chenyaxing
2
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部