博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开源项目|RT-Thread 软件包应用作品:水墨屏桌面台历
阅读量:2113 次
发布时间:2019-04-29

本文共 3261 字,大约阅读时间需要 10 分钟。

简介

平时经常会有一些事情忘记,比如今天几号,星期几,哪天有什么事情要做。有时候写在本子上,有时候记在微信里,但有时候连记在哪里都忘记了……

为了应对这个情况,我制作了一款带有备忘录的台历放在工作台上,提醒自己需要做的事情。

功能描述

作品功能列表:显示阳历日期、显示阴历日期、显示周几、显示纪念日、显示当日备忘事项、显示每日精选句子、点击触摸按键可以选择日期、标记待做事项状态、可通过MQTT将备忘事项传到云端、通过二维码对设备配网连接WIFI。

作品使用的软件包列表

1、EasyFlash软件包

EasyFlash是一款开源的轻量级嵌入式Flash存储器库,方便开发者更加轻松的实现基于Flash存储器的常见应用开发。

负责部分配置参数的存储。

2、fal软件包

FAL (Flash Abstraction Layer) Flash 抽象层,是对 Flash 及基于 Flash 的分区进行管理、操作的抽象层,对上层统一了 Flash 及 分区操作的 API 。

参数保存操作依赖此包。

3、airkissOpen软件包

腾讯WiFi设备一键配网协议,可以方便的对设备进行WIFI的网络配置。

帮我解决了联网一系列的烦恼,可以专注于完成业务逻辑。

4、netutils软件包

RT-Thread 可用的全部网络小工具集合,我用到了其中网络时间同步的功能。可以是设备连上网络之后,自动同步时间,让我不用关心时间是否准确。

5、pahomqtt软件包

在 Eclipse paho-mqtt源码包的基础上设计的一套 MQTT 客户端程序。

与服务器通信依赖此包,可以让我很轻松的与自己的MQTT服务器进行通信,而不必关心中间的实现细节与过程,能够把更多的工作中心放到业务处理中。

6、cJSON软件包

一款经典的json格式工具包,在C语言中通过API接口可以轻松解析和封装JSON数据。

通过MQTT传输的数据均是通过cJSON进行处理,结构化的数据更简洁直观,能把更多的注意力放到业务逻辑中。

7、u8g2-c 软件包

u8g2是一个单色屏驱动,通过它我顺利驱动了墨水屏。利用其丰富的API,我将数据生动的展现在墨水屏上。

8、【新增】lunar_calendar软件包

lunar_calendar 是一个将公历日期转换成阴历的工具软件包。

日期一般有阴历有阳历两种历法,软件包仓库并没有这个软件包,而作为一款台历,没有阴历会显得非常不完整。所以,我将阳历阴历转换的代码封装成了一款软件包,也方便为今后更多的朋友更简单的进行阴阳历的转换。

9、【新增】bs8116a软件包

bs8116a 是合泰的bs8116a-3的触摸按键芯片的中断使用软件包。

我在这个项目中使用到了bs8116a-3触摸按键,但是软件仓库中的按键软件包并不能完美实现我的需求,所以我就自己实现了相关的业务。这个软件包的其中一个特点就是可以同时使用多路i2c,连接多个bs8116触摸芯片。并且通过中断的形式,减少了系统资源消耗。通过相关参数的配置,可以达到低功耗的效果。

以上软件包均可以在以下地址找到(请复制至外部浏览器打开):http://packages.rt-thread.org/

硬件框图

软件设计

逻辑流程图

大概的流程如上,主要分为上电,配网,以及点击按键。每个部分逻辑上都比较简单,就没有详细展开。

架构


这里放置了我的主要代码,共11个文件,c文件8个,头文件2个,编译文件1个。

1applications 2├── SConscript      /* 编译文件 */ 3├── defines.h       /* 变量 函数声明 */ 4├── init.c          /* 初始化 */ 5├── keyboard.c      /* 键盘相关处理 */ 6├── logic.c         /* 逻辑处理 */ 7├── main.c          /* 主函数 */ 8├── mqtt.c          /* MQTT操作相关 */ 9├── network.c       /* 网络操作相关 */10├── qrcode_array.h  /* 配网二维码数组 */11├── screen.c        /* 屏幕操作相关 */12└── timer.c         /* 计时器 */

简单介绍一下:

defines.h
1#define MAX_TODO_SIZE  8 2typedef struct { 3    char content[64]; 4    short status; 5} TODO; 6typedef struct { 7    char date[16]; 8    TODO todo_list[MAX_TODO_SIZE]; 9    char festival[64];10    char words[256];11} CALENDAR;12extern CALENDAR calendar_data;

此处定义了我传输数据的结构体,大部分数据都是存储在这个结构体中。

init.c
1/* 集中初始化 */2void init_all(void) {3    fal_init();4    easyflash_init();5    init_mq();6    init_sem();7    init_keyboard();8    hwtimer_init();9}

这个函数将各个部分放置到一起,按照顺序逐个初始化。

对应的源码均已开源。

Web操作界面

作品演示

代码地址(以下链接请复制至外部浏览器打开)

bs8116a-latest 代码地址:https://github.com/illusionlee/bs8116a.git

lunar_calendar-latest  代码地址:https://github.com/illusionlee/lunar_calendar.git

项目代码地址:https://github.com/illusionlee/desk_calendar.git

觉得不错的话,希望可以点一下☆小星星呀!另外,作者有个公众号,非技术类。闲来无事会发一些牢骚,有兴趣的朋友可以关注一下:平头创意

本期分享来自RT-Thread软件包大赛一等奖获得者李硕,如果你也有文章愿意分享/希望获得官方的写作指导,可以发送文章/联系方式邮件至邮箱:xuqianqian@rt-thread.com  

    RT-Thread最新发布

RT-Thread Studio:RT-Thread 官方团队历经一年用心打磨,推出了 RT-Thread Studio 集成开发环境(IDE),让大家告别 ENV,能够基于一款 IDE 快速的进行 RT-Thread 项目开发。

下载地址:https://www.rt-thread.org/page/studio.html

(请将以上链接复制至外部链接打开)

2019年RT-Thread线下培训全套资料下载即可:扫码关注“RT-Thread”公众号,并回复“2019”即可获得RT-Thread培训项目资料含:RTT-MicroPython图像识别、i.MX RT1050+RT-Thread云接入、RT-Thread网络收音机、基于RT-Thread的避障小车。

示意图

你可以添加微信17775982065为好友,注明:公司+姓名,拉进 RT-Thread 官方微信交流群!

RT-Thread

让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。

长按二维码,关注我们

点击阅读原文,进入RT-Thread GitHub首页

你点的每个“在看”,我都认真当成了喜欢

转载地址:http://oonef.baihongyu.com/

你可能感兴趣的文章
【SQL】group by 和order by 的区别。
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>
【Pyton】【小甲鱼】文件
查看>>
【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
查看>>
【Pyton】【小甲鱼】异常处理:你不可能总是对的
查看>>
APP性能测试工具
查看>>
【Pyton】【小甲鱼】类和对象
查看>>
压力测试工具JMeter入门教程
查看>>
作为一名软件测试工程师,需要具备哪些能力
查看>>
【Pyton】【小甲鱼】类和对象:一些相关的BIF(内置函数)
查看>>
【Pyton】【小甲鱼】魔法方法
查看>>
单元测试需要具备的技能和4大阶段的学习
查看>>