RTThreadIoTOS · 2020年11月08日

【RT-Thread 开源作品秀】时光空间立方

概述

基于麻雀一号核心板 RW052,即博通的 WIFI 蓝牙一体的芯片 BK7252,我制作了一款桌面小工具:时光空间立方

它可以实现:

1、微信小程序可以通过蓝牙配置小立方的参数; 

2、晃动立方可以触发亮屏、亮灯; 

3、立方可以通过蓝牙配网,连接 WIFI; 

4、屏幕上可以显示:日期时间、实时天气、名言警句,或者是模仿摇 骰子产生随机点数; 

5、立方内部有呼吸灯和彩虹灯的效果。作为一款桌面小工具,它既可以提示必要的信息,如时间、天气,又可 以趣味互动,如摇骰子、随机显示名言警句,集信息提示与娱乐一体。 

image.png
外观则是完美的正方体,每个面在未启动时就像一面镜子,启动后则可 以看到一个无限五彩斑斓的内部空间。放置于办公桌面,既是一款优雅的装饰品,又是一款具有实用价值的小巧工具。

整个方案涉及的技术栈有:硬件选型,PCB 设计,RT-Thread 程序, 3D 建模打印,服务器端程序,API 接口对接,微信小程序编写等等。通过这个作品,锻炼了我实现产品的能力,让我对产品设计的不同方面 都加深了理解。

RT-Thread使用情况概述

内核部分:使用了线程、信号量、互斥量、定时器 

组件部分:使用了虚拟文件系统、FinSH、netdev 网卡 

软件包:

fal/EasyFlash/littlefs/netutils/cJSON/mbedtls/rt\_ota 等 

设备驱动:

GPIO/SPI/RTC/WLAN/BLE 等

硬件框架

image.png

核心模块RW052是官方的一个基于 BK7252 芯片的WIFI 蓝牙一体的 模组,引出了非常多的引脚,使用起来非常方便,可以直接通过 USB 供电。驱动屏幕使用了模拟 SPI,LCD 是使用了麻雀一号上屏幕厂家的同系列不 同尺寸的屏幕。WS2812 则是使用了硬件 SPI,通过 MOSI 按照时序进行输出规定协 议的波形,从而驱动 WS2812。

软件框架说明

image.png

程序运行逻辑图

image.png

程序主要文件

软件方案自我感觉比较简单,中间使用了部分信号量和互斥量保证线程 同步,整体是按照不同功能模块进行了文件拆分,方便功能划分和解耦合。 

软件模块说明

我这个作品里软件模块划分的比较清晰,各个模块均独立为一个单独文 件,比较好理解。屏幕、蓝牙、网络、GPIO 基本上都是遵循原有的代码逻 辑进行编写,逻辑比较清晰。所以这里我重点讲一下之前驱动 WS2812 失 败的原因与解决方案。 

之前没有正确驱动 WS2812 的原因,比较多样化,比如自以为是的断 定通过 GPIO+延时函数可以实现 WS2812 的驱动逻辑,后来经过示波器 证明时序完全不在一个量级上;后来使用了 I2C,发现时序非常不好控制, 也作罢;最后使用了 SPI,但是也是经历了由模拟 SPI 到硬件 SPI 的过程。软件 SPI 理论上跟模拟 GPIO 没区别,达不到效果,使用了硬件 SPI 后发 现时序有时候会乱掉。最终使用硬件 SPI+DMA 方式,才得到了最终效果。

至于为什么使用 SPI,是从 WS2812 驱动时序来反推的。

WS2812 的时序属于单总线式的时序,每一个 bit 都是由一个高电平+ 低电平实现,一个周期要在 1.25 微秒左右。当高电平在 400 纳秒,低电 平在 800 纳秒左右,则该 bit 为 0,反之为 1。 

当 SPI 时钟设置在一个比较合适的频率时,一个字节周期刚刚好可以在 1.25 微秒左右,比如 6-8MHz。这样,只需要用一个字节表示 WS2812 一个 bit 即可。 

当然,一切都是可以变通的,我最开始的程序是采用了一个字节表示一 个 bit 的方式,后来发现这种方式不是很稳定,则改成了一个字节表示 2bit。这样既节省了内存开支,也比之前的时序稳定性略好。经过实际测试,虽然 仍有瑕疵,但较之前版本效果更好一些,所以最后我选择了这个方案。

具体的实现代码在 ws2812.c 文件中。

演示视频

image.png

视频中展示了整个控制流程,从上电,到用自己写的微信小程序连接蓝 牙,再到不同指令的发送。网络通信是直接连接到我自己的一台互联网服务器上,通过 http 接口 获取数据,服务器程序使用 Python 编写。配网功能很简单没有展示,配置成功一次后,上电自动就能联网了。 

代码地址

GitHub

https://github.com/illusionlee/lightcube 

代码使用了 MIT 协议,相对较为开放。因为我的一些代码仍然会有一些 BUG,所以非常期待更多人可以参与进来,issue、pr,开源精神亦在于此 吧!共同完善,争取每个人都可以拥有属于自己的时光空间立方,工作闲暇 之余,拿起来晃一晃,能够体验到一点点乐趣。

推荐阅读

【嵌入式AI入门日记】将 AI 模型移植到 RT-Thread 上(1)
【RT-Thread 开源作品秀】基于 RT-Thread 的“数码小精灵”设计与实现

原文链接:https://mp.weixin.qq.com/s/vEmpE4xpwA-0nWp5A7pn7A
转载已获授权,禁止二转
推荐阅读
关注数
8071
内容数
181
小而美的物联网操作系统,经过14年的累积发展,RT-Thread 已经拥有一个国内最大的嵌入式开源社区,同时被广泛应用于能源、车载、医疗、消费电子等多个行业,累积装机量超过4亿台,成为国人自主开发、国内最成熟稳定和装机量最大的开源 RTOS。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息