本文是RT-Thread用户@xusiwei1236 原创发布,是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thread.org/ask/article/3649.html

基于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,用于存储中文字体,以及阳历和农历的对应关系等数据;

硬件模块间连接

五个硬件模块之间的整体连接关系如下图:

开发板引脚分配

主要使用到的资源,以及开发板和外设的引脚连接关系(控制部分):

具体使用情况说明:

  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文件;

组件框图

软件各部分的组件框图如下:

业务代码

本项目开发的业务代码位于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)页面;
    • 删除了无用的代码,包括不是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. 最好有一块万用表,可以用于检查线路连通性;

【N32G457】基于RT-Thread和N32G457的墨水屏日历相关推荐

  1. 基于rt thread smart构建EtherCAT主站

    我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem 有兴趣的去可以下载下来跑一下 软件工程推荐用vscode 打开.rt thre ...

  2. 【20210108期AI简报】技术宅硬核跨年,开源DIY墨水屏日历!

    导读:本期为 AI 简报20210108期,将为您带来 9 条相关新闻,新年新气象,恭祝大家牛年大吉~ 1. 技术宅硬核跨年,DIY墨水屏日历:自动刷新位置.天气,随机播放2000多条「毒鸡汤」| 开 ...

  3. CORE-ESP32C3|eink|墨水屏日历+时间日期+温度显示|I2C软件模拟| LuatOS-SOC接口|官方demo|学习(14):墨水屏动态日历+oled日期显示+ AHT10测温模组

    目录 参考博文 源于网友oled+eink+aht10项目 源代码修改及复现说明 主要修改 显示效果 ​编辑硬件准备 软件版本 日志及soc下载工具 软件使用 接线说明 天气显示屏 硬件接线 温度采集 ...

  4. 技术宅硬核跨年,DIY墨水屏日历:自动刷新位置、天气,随机播放2000多条「毒鸡汤」| 开源...

    贾浩楠 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 自制一个电子墨水屏日历,需要几步? 是能自动刷新位置.天气情况,还能随机播放2000多条毒鸡汤的那种. ↑↑↑就像这样:如果我的人生 ...

  5. CORE-ESP32C3|eink|墨水屏日历|天气API|LuatOS公共接口|气象要素数据V1|collectgarbage|LuatOS-SOC接口|官方demo|学习(13):墨水屏动态日历

    目录 参考博文 项目官方地址 显示效果: 硬件准备 软件版本 日志及soc下载工具 软件使用 接线示意图 硬件接线 一.Elink驱动管脚适配 二.天气信息获取 API使用方式: 接口格式(注意需不需 ...

  6. 【项目分享】基于AB32和RT-Thread的墨水屏智能日历

    基于AB32VG1的墨水屏智能日历 项目背景 本项目是[RT-Thread x RISC-V 应用创新大赛]参赛项目之一,大赛活动页面: RT-Thread X RISC-V 创新应用设计大赛 (el ...

  7. 基于GD32F103C8T6添加RT Thread nano设备框架并添加串口设备(以控制台console( uart0 )为例)

    最近没事琢磨了一下使用设备框架的问题.因为将串口注册到设备框架可以应用十分丰富的软件包. 于是就整理了一下手上的工程,重新将工程梳理了一遍. 像这样是十分清爽了,其中RTOS是操作系统源代码 并且学习 ...

  8. 关于RT thread系统节拍时钟的配置

    关于RT thread系统节拍时钟的配置                  -----本文基于rt-thread-3.1.3版本编写 首先,使用RTthread OS时,要配置(或者明白)它的系统节拍 ...

  9. RT Thread根据开发板制作BSP方法

    之前一直不懂怎么使用RT Thread的软件包,感谢网上的大神,看了你们的博客后大概了解一些,在此做下记录.用RT Thread软件包需要RT Thread的系统,但是RT Thread和RT Thr ...

最新文章

  1. c. Litmxs找女友
  2. ITK:创建高斯内核
  3. [Java Web – Maven – 1A]maven 3.3.3 for windows 配置(转)
  4. Dubbo(九)之注解配置
  5. ASP.NET MVC中在Action获取提交的表单数据方法总结 (4种方法,转载备忘)
  6. centos7系统根目录扩容
  7. 记录用户转成超级用户的文件名字_一分钟了解Linux用户
  8. GoLand中的指针操作 * 和
  9. mysql update 多个字段_MySQL数据库基础
  10. mybatis的mapper接口与xml传参问题
  11. 对前后端分离和FastDFS的使用的再理解
  12. LeetCode 148 排序链表
  13. 最贵服务器多少钱_十次方分享:租服务器一般花费多少钱一年?
  14. 《如何成为一个会学习的人》
  15. Pascal语言学习手册 Inno Setup 学习资料大全
  16. 快速集成华为AGC-AppLinking服务-Cocos平台
  17. python调用photoshop_Python和Photoshop
  18. 联想 M4400 升级无线网卡 -- 根据白名单升级网卡
  19. oracle设置事务隔离级别为读已提交,oracle的事务隔离级别和读一致性
  20. Android利用zxing生成二维码,识别二维码,中间填充图片超详细、超简易教程

热门文章

  1. 60mph和kmh换算_mph换算kmh(mph换算器)
  2. 解密WEP和WPA-PSK/WPA-PSK加密的数据包
  3. 武汉大学计算机音乐,名家论坛丨预告:聆听音乐
  4. word中使用宏批量插入图片
  5. C++实现基于博弈树的5x5一子棋人机对战
  6. 【vscode】常用快捷键
  7. 百度地图点击marker换图标的两种方式
  8. redis 集群 实操 (史上最全、5w字长文)
  9. Google Dremel数据模型详解(上)
  10. 大数据之路——数据挖掘