【RT Thread作品秀】RedClock 电路方案
【RT-Thread作品秀】RedClock 作者:iysheng 概述 我开发RedClock这个作品的背景主要有两个: 1.我想开发一下墨水屏,想体验下新奇的事物; 2.想在传统wifi时钟的基础上添加一个番茄时钟的功能,尝试提高工作效率,让其不单单具备提供时间和天气的功能 目前RedClock实现的功能,可以概括为4条: 1.通过墨水屏同步显示时间、天气图标(时间信息通过ntp校时,天气信息通过js语言从和风天气获取) 2.一键切换番茄时钟模式,番茄时钟的默认周期是25分钟,到实践通过屏幕提示 3.通过外接氣壓传感器lps22hh获取温度和气压信息并通過墨水屏幕 4.時間、天氣、温度和气压信息支持通过网络访问ART-Pi的设备IP同步显示 开发环境 硬件:ART-Pi、LPS22HH、SSD1619 RT-Thread版本:V4.0.3 开发工具及版本: 编译工具:arm-none-eabi-gcc、arm-none-eabi-binutils 编辑工具:vim 烧录、调试工具:openocd 0.10+ dirty(打过补丁才可以烧录程序到ART-Pi的外部flash)、kermit(串口工具)、telnet(调试工具)、gdb 硬件开发工具:Kicad(RedClock扩展板开发工具) RT-Thread使用情况概述 使用到的内核模块部分: 互斥锁、信号量、mempool、device 组件部分: cJSON、EasyFlash、webnet 软件包部分: lps22hb(传感器) 其他: 使用到的总线接口:I2C(传感器)、SPI(墨水屏) 硬件框架 软件框架说明 软件的实现设计到两个层次,设备驱动层(墨水屏驱动层开发),APP层(天气、传感器和时间的更新显示分别在不同的线程完成,线程间的数据交换通过函数完成,全局变量均为static类型,依据高内聚、低耦合分层设计理念开发) 软件模块说明 本软件主要的软件设计理念是创建多个线程,根据功能划分各个线程实现的功能: 在factory工程的基础上,添加了red_monitor_thread这个线程,完成传感器数据周期一分钟获取一次、以及更新tomato显示相关的内容。还有一个redclock_lcd_thread线程周期性的刷新屏幕,目前从屏幕寿命考虑,设置为3分钟刷新一次。还有一个线程完成对按键的扫描(目前仅仅支持番茄时钟快速切换的按键)。 考虑到为了实现一次配网,重启后自动联网,开启了easyflash保存wifi帐号和密码。联网为了消除跨域访问设备的问题,替换了原始ART-Pi的index.html文件为自己的文件,这样将对应的js和css部署在自己电脑这端完成开发和调试,借助webnet通过CGI的方式完成时间、温度、气压的上报(支持同步通过浏览器访问ART-Pi查看)和天气的下发(天气通过js连接和风天气服务获取)。 墨水屏的开发,通过注册了一个device完成,通过SPI接口访问。更新墨水瓶内容相关的动作,放在了四个函数中完成(分别完成天气图标更新、时间更新]、传感器数据更新、番茄时钟状态更新), 这些函数指挥更新墨水屏显示的内容,不会刷新墨水屏显示,刷新墨水屏显示的时候,更新才会有效。 演示效果 演示视频: 圖片展示: 比赛感悟 比赛过程中,我使用Kicad画了两版PCB,并作PCB然后焊接,整个开发过程大部分都是在Linux下完成的,初了开发墨水屏显示界面的时候使用了磨刀这个原型开发工具以及Image2Lcd整个软件将图片转换为C语言。 感觉自己收获最多的地方有两个方面,第一个方面当然是软件了,印象最深刻的是通过在openocd的代码仓库察看不同的branch和patch,给openocd打补丁然后修改对应的配置文件,支持直接烧录程序到ART-Pi的外部flash。通过这个工作,让我对openocd的使用有了更多的了解(通过访问openocd的网站以及看对应的manual), 这个是我最激动的。其他的软件方面就是对easyflash和webnet这两个组件有了学习,通过阅读对应的代码,学到了在32上进行KV类型的数值保存的新方法,之前我接触32保存配置数据使用的方法是从内部flash的尾部划分64KB虚拟为快设备,然后来格式化为elm文件系统,然后以cJSON格式保存,现在看来浪费了很多空间,easyflash也是我以后工作中替换之前这种方案新的可取的方法。通过对Webnet的学习,我真正接触到了通过http服务,远程通过浏览器和32进行数据通讯的方法。围绕webnet, 我还真正开发了一波js和css代码,开发js代码的时候,学会了通过jquery实现post和get请求,然后ART-Pi这端通过CGI完成HTTP通讯。 硬件方面,我感觉很开心的是自己
用户评论