基于ESP8266和WS2812B的智能炫彩灯牌设计
一 产品介绍
本产品使用esp8266模块和ws2812b灯珠制作了一款wifi控制的智能家居炫彩灯牌。你还可以结合家中的其他物件,对其进行包装,实现各个灯的颜色变化。比如台灯,手电筒等等,甚至你还把灯珠嵌入到某个模型里面,使其发光发亮。试想一下,在逢年过节之时,偶尔在家中需要烘托一下节日的气氛,这时你拿起手机控制家中灯的颜色变化,岂不给节日增添一份色彩。想要自己动手制作一款智能灯珠吗,我们就以炫彩灯牌为例,一起来学习这款DIY的制作过程吧。
如果你想直接获取【基于ESP8266和WS2812B的智能炫彩灯牌设计】的源码,接线表等相关资料,可直接划到本页末尾按要求获取即可。
二 准备材料
想要制作一款wifi控制的智能灯珠,esp8266和ws2812b这两个模块是必不可少的。其次,我们还需要一个esp8266的扩展板,nodemcu,用来接电源线和地线,若是没有可用面包板代替。然后,接线要用到的就是杜邦线啦,我们要准备一些母对母的杜邦线,你还需要一个供电设备给该设备供电,比如充电宝。最后,你还需要一部手机和一台电脑,用来完成软件方面的工作。
三 ESP8266介绍
ESP8266是一款超低功耗的UART-WiFi 透传模块,拥有业内极富竞争力的封装尺寸和超低能 耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi 无线网络上,进 行互联网或局域网通信,实现联网功能。ESP8266EX 内置 Tensilica L106,32 位微型控制器(MCU),具有超低功耗和 16 位RSIC。CPU 时钟速度高达 80 MHz,最高可达 160 MHz。支持实时操作系统(RTOS)。目前 Wi-Fi 协议栈只用了 20% 左右,其它的都可用于用户编程和开发。ESP8266EX 专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了最低功耗。ESP8266EX 有三种省电模式:激活模式、睡眠模式和深度睡眠模式。工作温度范围达到-40°C 到 +125°C。
引脚图:

技术指标:

四 WS2812B介绍
WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和可编程定电流控制部分,有效保证了像素点光的颜色高度一致。数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅受限信号传输速度要求。高达 2KHz 的端口扫描频率,在高清摄像头的捕捉下都不会出现闪烁现象,非常适合高速移动产品的使用。280μs以上的RESET时间,出现中断也不会引起误复位,可以支持更低频率、价格便宜的MCU。LED具有低电压驱动、环保节能、亮度高、散射角度大、一致性好超、低功率及超长寿命等优点。将控制电路集成于LED上面,电路变得更加简单,体积小,安装更加简便。
引脚功能:

五 接线图
六 程序设计思路及流程图
我们使用Arduino IDE软件编写该程序的代码,使用C语言编程,其优点是可调用的库比较多,便于我们学习理解。首先我们先初始化各个设备,然后esp8266先断开所有热点连接,再尝试连接程序中所定义的WIFI热点名称和密码,如果连接失败,则一直尝试连接。若连接成功,则串口打印出对应的IP地址,这时,我们在调用web端的服务器页面,用来选择灯的颜色变化。用户登录对应的IP地址,当对应的灯的颜色按键被按下时,从而控制灯珠显示对应的颜色和亮度。最后,判断电源是否关闭,如果电源关闭,则程序结束。

七 核心代码展示
此段代码用来初始化wifi的连接,以及使用wifi来连接对应的设备。
/** * 初始化Wifi连接
*/
void initWifiConnect(void)
{
Serial.printf("Connecting to WiFi:%s\n",SSID);// 串口打印当前WiFi热点的名字
WiFi.disconnect(); // 默认断开之前的连接,回归初始化非连接状态
WiFi.mode(WIFI_STA); // 设置ESP工作模式为Station模式
WiFi.begin(SSID, PASSWORD); // 连接到WiFi
int cnt = 0; // 记录重试次数
while (WiFi.status() != WL_CONNECTED) // 当还没有连接上WiFi热点时
{
delay(1000); // 延时等待1秒
cnt++; // 累计次数+1
Serial.print("."); // 串口输出.表示设备正在连接WiFi热点
if(cnt>=40) // 超过40秒还没有连接上网络
{
delayRestart(1); //一直连接不上就重启ESP系统
}
}
Serial.println(WiFi.localIP()); // 打印当前IP地址
}
cpp

八 结果展示
1 eps8266与ws2812的智能灯牌
本项目代码开源,若需获取,戳1 eps8266与ws2812的智能灯牌 (bilibili.com)网址进行学习后,私信可以提供源码资料。
软嵌物联团队会不定期更新嵌入式DIY作品教学,若您有需要,可关注我们的账号。
若需要免费的技术支持,可以在企鹅群找到我们,1159144432

