Fillmore 发表于 2020-4-10 13:49

水墨屏桌面台历

本帖最后由 Fillmore 于 2020-4-10 13:50 编辑

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

<p>&nbsp;</p>

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

<p>&nbsp;</p>

<h2 cid="n6" mdtype="heading">功能描述</h2>

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

<section>
<section powered-by="xiumi.us">
<section>
<section powered-by="xiumi.us">
<section>
<section powered-by="xiumi.us">
<section></section>
</section>
</section>
</section>
</section>
</section>
</section>

<p>&nbsp;</p>

<h2 cid="n29" mdtype="heading">作品使用的软件包列表</h2>

<p>1、EasyFlash软件包</p>

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

<section>负责部分配置参数的存储。</section>

<h3 cid="n52" mdtype="heading">2、fal软件包</h3>

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

<section>参数保存操作依赖此包。</section>

<h3 cid="n55" mdtype="heading">3、airkissOpen软件包</h3>

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

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

<h3 cid="n58" mdtype="heading">4、netutils软件包</h3>

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

<h3 cid="n60" mdtype="heading">5、pahomqtt软件包</h3>

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

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

<h3 cid="n63" mdtype="heading">6、cJSON软件包</h3>

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

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

<h3 cid="n66" mdtype="heading">7、u8g2-c 软件包</h3>

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

<h3 cid="n68" mdtype="heading">8、【新增】lunar_calendar软件包</h3>

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

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

<h3 cid="n71" mdtype="heading">9、【新增】bs8116a软件包</h3>

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

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

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

<h2 cid="n74" mdtype="heading">硬件框图</h2>

<p></p>

<h2 cid="n76" mdtype="heading">软件设计</h2>

<h4 cid="n77" mdtype="heading">逻辑流程图</h4>

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

<p></p>

<p><strong>架构</strong></p>

<hr />
<h4 cid="n80" mdtype="heading">这里放置了我的主要代码,共11个文件,c文件8个,头文件2个,编译文件1个。</h4>

<p>&nbsp;</p>

<section>
<pre>
<code> 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         /* 计时器 */
</code></pre>
</section>

<p>&nbsp;</p>

<section>简单介绍一下:</section>

<h5 cid="n84" mdtype="heading">defines.h</h5>

<section>
<pre>
<code> 1#define MAX_TODO_SIZE  8
2typedef struct {
3    char content;
4    short status;
5} TODO;
6typedef struct {
7    char date;
8    TODO todo_list;
9    char festival;
10    char words;
11} CALENDAR;
12extern CALENDAR calendar_data;</code></pre>
</section>

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

<h5 cid="n87" mdtype="heading">init.c</h5>

<section>
<pre>
<code>1/* 集中初始化 */
2void init_all(void) {
3    fal_init();
4    easyflash_init();
5    init_mq();
6    init_sem();
7    init_keyboard();
8    hwtimer_init();
9}
</code></pre>
</section>

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

<section>对应的源码均已开源。</section>

<section>&nbsp;</section>

<section>
<p><strong>Web操作界面</strong></p>

<p></p>
</section>

<h2 cid="n102" mdtype="heading">代码地址</h2>

<p cid="n103" mdtype="paragraph"><code>bs8116a-latest</code> 代码地址:<a href="https://github.com/illusionlee/bs8116a.git" target="_blank">https://github.com/illusionlee/bs8116a.git</a></p>

<p cid="n104" mdtype="paragraph"><code>lunar_calendar-latest</code> &nbsp;代码地址:<a href="https://github.com/illusionlee/lunar_calendar.git" target="_blank">https://github.com/illusionlee/lunar_calendar.git</a></p>

<p cid="n105" mdtype="paragraph">项目代码地址:<a href="https://github.com/illusionlee/desk_calendar.git" target="_blank">https://github.com/illusionlee/desk_calendar.git</a></p>

<p cid="n106" mdtype="paragraph">&nbsp;</p>

<section>本期分享来自RT-Thread软件包大赛一等奖获得者李硕</section>

led2015 发表于 2020-4-26 18:33

<p>一看就是很高大上的设计,看起来非常不错,很适合办公桌的使用,有时想想,也不可能直接拿个平板来代替</p>

w494143467 发表于 2020-10-12 19:54

<p>厉害了,一个非常用心的设计啊,现在备忘录都是写在手机上,因为有时候在公司需要记回家后要做的事,所以这个设备还需要联网,而且也需要密码,防止别人看到,以后有时间的自己设计一个~</p>

se7ens 发表于 2021-3-18 13:54

<p>想法不错,可以把功能集成到电子挂历上</p>
页: [1]
查看完整版本: 水墨屏桌面台历