加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

【RT-Thread作品秀】RedClock

2020/12/22
531
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
方块图(2)
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

RT-Thread作品秀】RedClock

作者:iysheng

概述

我开发 RedClock 这个作品的背景主要有两个:

1. 我想开发一下墨水屏,想体验下新奇的事物;

2. 想在传统 wifi 时钟的基础上添加一个番茄时钟的功能,尝试提高工作效率,让其不单单具备提供时间和天气的功能

目前 RedClock 实现的功能,可以概括为 4 :

1. 通过墨水屏同步显示时间、天气图标(时间信息通过 ntp 校时,天气信息通过 js 语言从和风天气获取)

2. 一键切换番茄时钟模式,番茄时钟的默认周期是 25 分钟,到实践通过屏幕提示

3. 通过外接氣壓传感器 lps22hh 获取温度和气压信息并通過墨水屏幕

4. 時間、天氣、温度和气压信息支持通过网络访问 ART-Pi 的设备 IP 同步显示

开发环境

硬件ART-Pi LPS22HHSSD1619

RT-Thread版本:V4.0.3

开发工具及版本:

编译工具:arm-none-eabi-gccarm-none-eabi-binutils

编辑工具:vim

烧录、调试工具:openocd 0.10+ dirty(打过补丁才可以烧录程序到 ART-Pi 的外部 flash)、kermit(串口工具)、telnet(调试工具)、gdb

硬件开发工具:KicadRedClock 扩展板开发工具)

RT-Thread使用情况概述

使用到的内核模块部分:

互斥锁、信号量、mempooldevice

组件部分:

cJSONEasyFlashwebnet

软件包部分:

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), 这个是我最激动的。其他的软件方面就是对 easyflashwebnet 这两个组件有了学习,通过阅读对应的代码,学到了在 32 上进行 KV 类型的数值保存的新方法,之前我接触32 保存配置数据使用的方法是从内部 flash 的尾部划分 64KB 虚拟为快设备,然后来格式化为 elm 文件系统,然后以 cJSON 格式保存,现在看来浪费了很多空间, easyflash 也是我以后工作中替换之前这种方案新的可取的方法。通过对 Webnet 的学习,我真正接触到了通过 http 服务,远程通过浏览器和 32 进行数据通讯的方法。围绕 webnet, 我还真正开发了一波js css 代码,开发 js 代码的时候,学会了通过 jquery 实现 post get 请求,然后 ART-Pi 这端通过 CGI 完成 HTTP 通讯。

硬件方面,我感觉很开心的是自己真的在 Kicad 绘制了 PCB 然后导出 gaber 文件作出来了 PCB 板,通过设计两版完成了 RedClock 的扩展版,两个版本都可以让墨水屏顺利点亮。第一版的问题是我将 ART-Pi 对应的 P1 P2 两组管脚放反了,汗!

不管怎么说,参加这次比赛,我很开心,可以接触到新的事物包括硬件模块和 RT-thread 上新的组件,以及真切体会到了在 Linux 上开发设计硬件的可能。

 

  • artpi_redclock.sch
    描述:RedClock 扩展版原理图
  • 代码地址.txt
    描述:代码地址
  • RedClock_project_relate.txt
    描述:RedClock项目开发仓库
  • 【RT-Thread作品秀】RedClock.docx
    描述:RedClock 项目文档

相关推荐

电子产业图谱

TA的热门作品