今年一月份整理元件箱的时候发现了一个8位RGB灯条,想起网上前段时间流行的 WIFI 像素时钟:LaMetric
正好可以巩固一下曾经写代码的快乐时光,开搞!!手上的灯珠比较大,当时也没有仔细考虑工业设计,就打算做个能用的就行。
下面做了个简单的第一版,其实真的可以优化很多地方,看完不要笑😂😂😂,但是懒得搞了,先用着再说
硬件创造世界,软件让世界更美好,硬件底层搭好了,软件能实现出各种各样的功能,优化人类体验。
调试的时候拍的
硬件设计
硬件设计其实比较简单,我懒到电源直接买了整个模块搭上去。。。就是PCB正面左边二维码区域,PCB正面右边就是8266模块了,背面的是陀螺仪的降压IC
原理图
硬件预留了18650电池和电量检测部分电路,软件没有还没有做
这个小项目 RGB 灯有 100 个,也就是10 * 10 = 100
的点阵,当时没想那么多,结果就是很多图像没有办法展示出来了,LaMetric可是 4 * 8 * 8 = 256
像素的,按照设计第一版有预留电容,但是背面的图案太不好看了,就直接拿掉了(按道理加电容更加稳定),一百个灯珠,焊接是真的累😮💨
功耗测试
实际测试发现,运行彩虹流水灯,也就是功耗拉满的时候过 RGB 灯珠电流达到了 0.9A 左右,也就是5V*09.A=4.5W了,功耗比较高了,再测了测发热量满载都50°C了
软件设计
代码是arduino写的,写了两千多行,代码长了点,不太好展示,基本逻辑就是控制RGB显示图案出来。
下面展示几个联网跟新的操作
联网抓取json文件
每天检测两次,看是否有固件更新,一但有就马上判断进入OTA了
文件格式如下:
1 | { |
通过http网址跟新固件
就这个功能函数我找了好久,网上大部分都是 arduino IDE 更新固件,要不就是局域网跟新,自己整合了一段时间,打包了一个函数,直接拿去使用,记得需要添加头文件
下面这段是更新固件的百分数,实现每增加1%就亮一个灯。
1 | strip.setPixelColor(((progress / (total / 100))) - 1, (progress / (total / 100)) / 100 * 255 * brightness / 100, (255 - (progress / (total / 100)) / 100 * 255) * brightness / 100, (255 - (progress / (total / 100)) / 100 * 255) * brightness / 100); |
而http://V1_0_1_beta.bin
可以替换成自己的固件链接
完整函数如下:
1 | //必备的头文件 |
除了网络信号不好之外,没有出过一次差错,这个小玩意就这样放在那里稳定地运行着。这个版本后续没有再做了,算是一次尝试,毕业后第一次捡回了嵌入式编程,回顾下大学那会敲代码的快乐时光。才几个月没有动,基本上是重新学了,这老本行不能就这样丢了呀,以后再多做些好玩的项目练练手。