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

概述

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


它可以实现:

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

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

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

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

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

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

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

RT-Thread使用情况概述

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

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

软件包:

fal/EasyFlash/littlefs/netutils/cJSON/mbedtls/rt_ota 等 

设备驱动:

GPIO/SPI/RTC/WLAN/BLE 等

硬件框架

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

软件框架说明

程序运行逻辑图

程序主要文件

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

软件模块说明

我这个作品里软件模块划分的比较清晰,各个模块均独立为一个单独文 件,比较好理解。屏幕、蓝牙、网络、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 文件中。

演示视频



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

代码地址



GitHub

https://github.com/illusionlee/lightcube 

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

报名参加请扫描图中二维码!

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

RT-Thread


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

长按二维码,关注我们

点击阅读原文进入RT-Thread官网

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值