搜索

[uCOS/RTOS] 【RTOS】RT-Thread创新设计大赛--时光空间立方--》方案提交

[复制链接]
677|15
 楼主 | 2020-6-21 09:22 | 显示全部楼层 |阅读模式
本帖最后由 downloadtext 于 2020-7-2 23:27 编辑

图片4.png

概述
    在之前的一个作品制作中,购买了ws2812灯带没有驱动成功,所以这次重点就放在了驱动ws2812。联想到曾经看到过的一个无限镜效果,决定自己制作出一个无限空间,置于手心,从中看去深邃无比,好似一个时光隧道不知通向哪里。
    基于麻雀一号核心板RW052,即博通的WIFI蓝牙一体的芯片BK7252,我制作了一款桌面小工具:时光空间立方。
    它可以实现:
    1、微信小程序可以通过蓝牙配置小立方的参数;
    2、晃动立方可以触发亮屏、亮灯;
    3、立方可以通过蓝牙配网,连接WIFI;
    4、屏幕上可以显示:日期时间、实时天气、名言警句,或者是模仿摇骰子产生随机点数;
    5、立方内部有呼吸灯和彩虹灯的效果。
    作为一款桌面小工具,它既可以提示必要的信息,如时间、天气,又可以趣味互动,如摇骰子、随机显示名言警句,集信息提示与娱乐一体。
    外观则是完美的正方体,每个面在未启动时就像一面镜子,启动后则可以看到一个无限五彩斑斓的内部空间。放置于办公桌面,既是一款优雅的装饰品,又是一款具有实用价值的小巧工具。
    整个方案涉及的技术栈有:硬件选型,PCB设计,3D建模打印,RT-Thread程序,服务器端,API接口,微信小程序编写等等。
    通过这个作品,锻炼了我实现产品的能力,让我对产品设计的不同方面都加深了理解。

RT-Thread使用情况概述
内核部分:使用了线程、信号量、互斥量、定时器
组件部分:使用了虚拟文件系统、FinSH、netdev网卡
软件包:fal/EasyFlash/littlefs/netutils/cJSON/mbedtls/rt_ota等
设备驱动:GPIO/SPI/RTC/WLAN/BLE等

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

软件框架说明
图片2.png
程序运行逻辑图

图片3.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文件中。

演示效果
图片5.png
演示视频
B站: https://www.bilibili.com/video/BV1za4y1Y7Fg/
(视频中为了方便拍摄,没有选择来回摇晃,而是直接往桌子上磕一下,并且设置了默认亮灯亮屏为15秒)
视频中展示了整个控制流程,从上电,到用自己写的微信小程序连接蓝牙,再到不同指令的发送。
网络通信是直接连接到我自己的一台互联网服务器上,通过http接口获取数据,服务器程序使用Python编写。
配网功能很简单没有展示,配置成功一次后,上电自动就能联网了。





RT-Thread应用创新设计大赛-时光空间立方-OK.pdf (1.95 MB, 下载次数: 63)

使用特权

评论回复
 楼主 | 2020-6-29 15:17 | 显示全部楼层
此次作品虽然有些遗憾的地方, 但正好留下一个契机,等待下次的完善。
一切都是最好的安排,暂时的修整行囊,是为了前往更好的远方!

使用特权

评论回复
| 2020-6-29 15:40 | 显示全部楼层
downloadtext 发表于 2020-6-29 15:17
此次作品虽然有些遗憾的地方, 但正好留下一个契机,等待下次的完善。
一切都是最好的安排,暂时的修整行囊 ...

期待你成就更好的作品!~

使用特权

评论回复

评论

downloadtext 2020-6-29 15:45 回复TA
谢谢~ 相信不久之后我还会有能眼前一亮的小作品出现 
 楼主 | 2020-7-2 23:32 | 显示全部楼层
更新完善了一下帖子内容和最终文档附件。

使用特权

评论回复
| 2020-7-24 16:35 | 显示全部楼层
想法很赞,作品很有创意

使用特权

评论回复

评论

downloadtext 2020-7-24 23:01 回复TA
谢谢夸奖,我会继续努力 
| 2020-7-28 17:52 | 显示全部楼层
恭喜恭喜 一等奖作品

使用特权

评论回复

评论

downloadtext 2020-7-28 22:46 回复TA
谢谢~ 
| 2020-7-28 18:41 | 显示全部楼层
厉害啦!恭喜恭喜

使用特权

评论回复

评论

downloadtext 2020-7-28 22:47 回复TA
哈哈 谢谢~ 
 楼主 | 2020-7-30 23:10 | 显示全部楼层
捞一下……

使用特权

评论回复
| 2020-8-17 17:12 | 显示全部楼层
请教楼主:服务器上抓一言的数据,是定时去爬的么,

使用特权

评论回复

评论

downloadtext 2020-8-18 21:43 回复TA
@xianting77 :当时这么做没别的特别目的,就是觉得方便管理,都走自己的服务器中转比较舒爽,也没有考虑大量设备请求的情况。自己用的话,直接用一言的API足够了。 
xianting77 2020-8-18 18:39 回复TA
@downloadtext :谢谢楼主,回复。我看到一言,给开发者提供了API,是否可以考虑直接从立方向一言服务器请求数据。这么做开销并不会太大,在服务器端的Python脚本处理后有哪些好处呢。方便分享你服务器部分的处理脚本不。 
downloadtext 2020-8-17 21:57 回复TA
立方请求服务器,服务器转发请求,相当于中转了一下。 
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表