本文是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...

我的项目简介

本我的项目实现了哪些性能?

  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_c...(欢送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/...
  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/Fla...
  6. gbk2utf8

    • GBK和UTF8相互转换,HTTP API返回的汉字是UTF8编码的;

其余三方软件包

本我的项目应用到的其余三方软件均来自外设模块供应商,代码放在board目录下,包含:

  1. epaper

    • 微雪墨水屏扩大板驱动软件包,来自微雪的E-Paper_Shield)页面;
    • 删除了无用的代码,包含不是4.2寸屏幕的代码、以及SD卡驱动;
    • 批改了GPIO相干的代码,改为用RT-Thread的pin驱动接口;
    • 批改了SPI相干的代码,改为用RT-Thread的spi驱动接口;
    • 增加了基于RT-Thread finsh的墨水屏测试程序(绘制棋盘格、全屏填充、输入引脚测试),能够在shell模式下通过命令调用执行;

成果展现

演示视频:https://www.bilibili.com/vide...

我的项目小结

这里是现阶段的我的项目小结:

  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/wservi...

硬件物料清单

本我的项目蕴含的物料清单如下(都能够间接淘宝买到):

编号物品名称价格商家备注
1N32G457开发板不详国民技术流动方提供的
24.2寸(红白黑)三色墨水屏126WaveShare微雪电子不包邮,邮费8元
3树莓派墨水屏驱动板56WaveShare微雪电子
4W25Q128闪存模组11.96telesky旗舰店/risym旗舰店包邮
5ESP-01S模组+烧录器17.5佳信微数码专营店满19.9包邮
640P母对母杜邦线(10cm)2佳信微数码专营店
740P公对母杜邦线(10cm)3.3佳信微数码专营店
8迷你逻辑分析仪(C口)+5条贴片测试钩38Muse 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. 最好有一块万用表,能够用于查看线路连通性;