共计 4564 个字符,预计需要花费 12 分钟才能阅读完成。
本文是 RT-Thread 用户 @xusiwei1236 原创公布,是用于加入 RT-Thread 与国民技术联手推出 N32G457 RT-Thread 设计大赛,原文:https://club.rt-thread.org/as…
基于 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/as…
我的项目简介
本我的项目实现了哪些性能?
- 实现了基于 NTP 的工夫同步;
- 实现了查问以后公网 IP 地址;
- 实现了查问以后所在城市;
- 实现了查问实时天气信息;
- 实现了在墨水屏上显示阳历、农历、星期、周数、实时天气等信息;
- 实现了阳历和农历对应信息保留到闪存中,防止反复联网查问;
本我的项目有什么翻新点?
- 相比纸质日历,无需手动翻页;
- 相比纸质日历,能够显示实时天气信息;
- 相比 LCD/OLED 屏的同类产品,电子墨水屏的功耗更低,更节能环保;
硬件局部
本我的项目次要包含 x 个硬件模块:
- N32G457 开发板,作为主控制器管制其余外设;
- 微雪的墨水屏驱动板,用于驱动墨水屏;
- 4.2 英寸三色墨水屏,分辨率 400×300;
- ESP8266 Wi-Fi 模组,用于实现联网能力;
- W25Q128 闪存模块,容量 16MB,用于存储中文字体,以及阳历和农历的对应关系等数据;
硬件模块间连接
五个硬件模块之间的整体连贯关系如下图:
开发板引脚调配
次要应用到的资源,以及开发板和外设的引脚连贯关系(管制局部):
具体应用状况阐明:
UART
- UART4:连贯 ESP-01S 模块,用于实现联网获取工夫和实时天气信息;
SPI
- SPI1:连贯 W25Q128 模块,用于和闪存芯片通信,实现数据存储性能;
- SPI2:连贯墨水屏驱动板,用于和墨水屏通信,实现界面显示;
GPIO
- 连贯墨水屏扩大板上的 EPD_CS,用于输入墨水屏的片选信号;
- 连贯墨水屏扩大板上的 EPD_DC,用于输入墨水屏的数据 / 命令信号;
- 连贯墨水屏扩大板上的 EPD_RST,用于输入墨水屏的复位信号;
- 连贯墨水屏扩大板上的 EPD_BUSY,用于墨水屏的忙碌状态的输出;
- 连贯 W25Q128 模块的 CS,用于输入闪存芯片的片选信号;
- 开发板自带的三个按键,用于作为输出按键;
3V3/GND
- 连贯 ESP-01S 模块,用于向 ESP8266 芯片供电;
- 连贯墨水屏扩大板,用于向 SRAM 和墨水屏供电;
- 连贯 W25Q128 模块,用于向闪存芯片供电;
软件局部
本我的项目的软件局部基于 RT-Thread 物联网操作系统,除了本我的项目开发的业务逻辑代码外,还应用了一些 RT-Thread 内核 API、一些 RT-Thread 软件包,以及一些三方组件,上面别离介绍。
主代码仓:https://gitee.com/N32G457/e_c…(欢送 Star 反对)
下载命令:git clone --recursive https://gitee.com/N32G457/e_calendar.git
局部组件通过 git submodule 援用了其余代码仓,具体见 .gitmodules
文件;
组件框图
软件各局部的组件框图如下:
业务代码
本我的项目开发的业务代码位于 applications
目录下,具体文件性能如下(大部分是.c 和.h 两个文件):
- amap_location_api 高德定位 API 对接;
- amap_weather_api 高德天气预报 API 对接;
- chinese_date_api 农历查问 API 对接;
- fs_init.c 闪存分区挂载(依赖 RT-Thread 内核的 fatfs 反对);
- http_api_utils http 工具函数;
- hzk16 HZK16 汉字字体相干接口;
- hzk16_data HZK16 汉字字体数据;
- hzk16_setup 将 HZK16 字体装置到闪存分区;
- key_task 按键扫描工作;
- kvdb 封装了 FlashDB 外面的 KVDB,更容易应用;
- main.c 程序入口;
- network_task 网络工作,用于解决网络申请(农历查问较慢,所以独自放在一个工作外面执行);
- sohu_wanip_api 搜狐公网 IP 查问 API 对接;
- time_utils 工夫解决工具函数;
- ui_consts UI 常量;
- ui_draw UI 绘制,界面绘制逻辑独自放在了这外面;
- ui_task UI 工作,调用 ui_draw 实现相干性能;
N32G457 BSP
对于 N32G457 的 BSP,也批改了:
批改了 pin 驱动,增加了 rt_pin_get 接口的反对,已提 PR 并合入 RT-Thread 主仓;
- 链接:https://github.com/RT-Thread/…
- 批改了国民技术 SDK 外面的 RT-Thread spi 驱动,修复了 SPI1 默认配置不对的问题,反对了 SPI2,暂未提交 PR;
RT-Thread 组件包
本我的项目应用到的 RT-Thread 软件包位于 packages
目录下:
at_device
- 提供 ESP8266 AT 命令结构和响应解析性能,实现联网;
netutils
- 提供网络工夫协定(NTP)的实现,实现从网络获取工夫、设置工夫;
webclient
- 提供了超文本传输协定(HTTP)客户端的实现,用于天气查问申请的发送和接管;
cJSON
- 一个轻量级的纯 C 实现的 JSON 字符串解析库,用于解析天气查问响应的 JSON 字符串;
FlashDB
- 一个嵌入式数据库,提供了键值数据库(KVDB)和时序数据库(TSDB)两类 API,同时提供了一些 msh 的测试命令;
- 批改:bench 命令中的 KV 测试次数改为 60,容许创立 kvdb 时格式化分区;
- 代码仓:https://gitee.com/N32G457/Fla…
gbk2utf8
- GBK 和 UTF8 相互转换,HTTP API 返回的汉字是 UTF8 编码的;
其余三方软件包
本我的项目应用到的其余三方软件均来自外设模块供应商,代码放在 board
目录下,包含:
epaper
- 微雪墨水屏扩大板驱动软件包,来自微雪的 E -Paper_Shield)页面;
- 删除 了无用的代码,包含不是 4.2 寸屏幕的代码、以及 SD 卡驱动;
- 批改 了 GPIO 相干的代码,改为用 RT-Thread 的 pin 驱动接口;
- 批改 了 SPI 相干的代码,改为用 RT-Thread 的 spi 驱动接口;
- 增加 了基于 RT-Thread finsh 的墨水屏测试程序(绘制棋盘格、全屏填充、输入引脚测试),能够在 shell 模式下通过命令调用执行;
成果展现
演示视频:https://www.bilibili.com/vide…
我的项目小结
这里是现阶段的我的项目小结:
- 原打算用微雪的 Arduino 墨水屏扩大板作为驱动板,后果中途该板子坏了,起初替换为的微雪的树莓派墨水屏驱动板,两者的差别次要是前者有一个 128KB 的 SRAM 芯片,不占用主控单片机的内存,后者须要 30KB 内存占用(300×400/8*2);
- 农历日期查问,没有找到比拟好的云服务提供商,只找到了 tianapi.com 的黄历服务,然而他们收费用户的单日调用次数太少了,所以基于 Spring Boot 和 Redis 做了一个带缓存的黄历服务;
- 目前选用的 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 的装置门路,可能须要依据你的理论状况批改;
高德定位和天气服务
本我的项目应用了高德定位和高德天气服务,须要留神:
- 须要注册高德开发者账号,并申请 API Key 之后能力应用相干性能;
- API Key 的 Kconfig 配置项位于菜单 ”Application config” -> “AMAP API config” 菜单下;
- 因为在我的项目顶层 Kconfig 间接增加
source "applications/Kconfig"
选型后 RT-Thread env 工具关上会报错,因而source "applications/Kconfig"
增加到了board/Kconfig
文件中了;
农历查问服务
农历查问服务是基于 Spring Boot 和 Redis 搭建的 tianapi.com 的黄历服务的缓存版本,次要解决了:
- tianapi 容许的每日 API 调用次数太少的问题;
- 移除了响应中目前设施端不须要的一些字段;
代码仓地址:https://gitee.com/swxu/wservi…
硬件物料清单
本我的项目蕴含的物料清单如下(都能够间接淘宝买到):
编号 | 物品名称 | 价格 | 商家 | 备注 |
---|---|---|---|---|
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 元 |
注:
- 局部商品价格可能会有变动,上表仅为我购买时的不含邮费的价格;
ESP-01S 烧录器不是必选,如果有其余 USB-UART 转接器也能够用;
- 这个转换器也能够当 USB-UART 转接器用,
- 标号是为了 ESP-01S 对应的,所以实际上 TX 是接管脚,RX 是发送脚;
- 逻辑分析仪不是必选我的项目,然而十分不便用来对 SPI 相干的问题进行调试;
接线注意事项
接线须要留神的细节有:
- W25Q128 模组的 DI 脚作为 SPI 的 MOSI,DO 脚作为 SPI 的 MISO;
- 最好有一块万用表,能够用于查看线路连通性;