智能灯作为一种最为常见的智能家居设备,在市场前景以及低门槛的驱动下,该产品已经成为开发者已经众多厂家青睐的大众化产品。你可以使用手机控制灯光开启或关闭、调节亮度及颜色甚至与音响系统同步闪烁,这种体验听上去就很有趣。
本作品希望通过将使用ArduinoUnoWiFi板结合GoKit2上的功能板,配合WS28128段RGB灯珠板子,使用机智云云端服务器,改造成可用手机来控制的无线wifi小彩灯,还原这个受大众欢迎的炫彩智能灯神秘的本质。
附注:本例只实现彩灯的一些常用功能,更多的自定义和应用场景,用户可根据自己的需求自定义完成
ArduinoUnoWiFi1片GoKit2扩展版1片8位WS28125050RGBLED小板1个杜邦线若干
ArduinoIDE(1.7.10以上版本)
WS28125050RGBLEDArduino库文件机智云云端自动生成源码(基于ArduinoUnoWiFi平台)
机智云开发者账号智能小夜灯的数据点文件或者自己云端新建
使用烙铁将杜邦线,按照下图把WS2812RGB小灯板的接线线焊接起来。
然后把小灯板的VCC、GND、DIN引脚分别按照下图图片所展示的效果图,将杜邦线的另一端接到GoKit2拓展版的扩展接口排针上。
本次项目一共5个数据点,细节可以参考下图:
新建项目的数据点可以通过两种方式来完成,一种是手动新建,新建方式可以点击下图右上角的“定义数据点教程”查看并建立本次项目的数据点;另一种是通过别人导出的数据点Excel表格完成数据点的新建,导入方式参考下图,这里不做重点描述,这次项目的数据点Excel表格通过下方链接获取。
注意:数据点环节很重要,如果没有数据点,则无法使用自动生成工具。
云端自动生成工具的详细介绍和使用方式,请参考“ArduinoUNOWiFi接入机智云介绍”文档的介绍和操作。
到这里整个工程项目的准备工作就完成了,下面是修改函数部分的指引。
ArduinoUNOWiFi云端自动生成源码,创建之后在项目如图所示的地方获得,下载下来后跟据自己的习惯修改文件夹的名字,本次项目将文件修改为“GizLamp”
请参考“ArduinoUnoWiFi接入机智云介绍”文档中,第“3.1ArduinoIDE的下载和安装”章节
请参考“ArduinoUNOWiFi接入机智云介绍”文档中,第“3.2自动生成接入库导入ArduinoIDE”章节
首先,我们使用ArduinoIDE打开云端自动生成工具生成的simpleTry.ino文件,并预览一下,如下图:
然后,我们参见“ArduinoUnoWiFiSDK之API介绍”文档里的对“事件处理”这一部分的描述以及举例部分程序结构:
之后,在继续看一下myGizwits.hasBeenSet()和myGizwits.read(,)这两条函数的解析:
通过对比的我们应该了解到这套程序的思路是,如果需要在这套程序中读取一个云端下发的数据,首先需要通过myGizwits.hasBeenSet()这条函数判断这个数据点事件有是否发生,如果数据点事件发生了就通过myGizwits.read(,)这个函数去把发生的事件所产生的数据读取出来,然后再做相应的判断。
注意:read(,)在“ArduinoUnoWiFiSDK之API介绍”一共有四条,读取不同是据点事件时,返回值的参数会有差异,使用之前参考“ArduinoUnoWiFiSDK之API介绍”文档
应该大体有个理解啦吧!其实你会发现所有你要操作的事件都完成好了!!好,那我们开始修改程序,首先从“2.4.2引用部分开始”
1)添加WS2812驱动H文件
#include
2)定义WS2812的数据通信引脚,以及RGB灯数量。#definePIN9//使用arduinounowifi的9号引脚#defineNUM_LEDS8//WS2812小板的数量是8个
3)初始化LED数量、通信引脚号和驱动模式
Adafruit_NeoPixelstrip=Adafruit_NeoPixel(NUM_LEDS,PIN,NEO_GRB+NEO_KHZ800);
1)该函数中NUM_LEDS,表示控制的点亮多少个全彩灯珠,如果你想改变灯珠点亮的个数你可以在这里进行修改。2)PIN表示的是与开发板所连的第几个端口,我们这里使用的是第9个端口,你可根据自己的需要修改对应的端口。3)关于NEO_GRB+NEO_KHZ800,这包括了与开发板所连的具体类型。具体的介绍可以参考文本最后Adafruit_NeoPixel库文件的解析,以及根据指导完成更多的案例。
引用部分完整修改参考如下
接着修改“2.4.3voidsetup(){}部分”
将以下代码添加到“voidsetup(){}”函数里面用于初始化
strip.begin();strip.show();//Initializeallpixelsto‘off’
最后修改“2.4.4voidloop(){}部分”
这一部份我们刚才已经熟悉过啦,那直接修改吧。首先,把所有自动生成工具,所定义的变量全部找出来,如下:
注:红色部分是从绿色部分复制出来的,绿色部分是自动工具自动生成的。然后,移动操作事件,如下:
完成以上动作之后,只要在//useradd这部分添加相应的驱动函数,就可以完成一个简单的彩灯,不过程序需要优化,才能有比较友好的用户体验。需要注意地方是:
彩灯场景切换事件(EVENT_SCENE)以及用户自定义事件(EVENT_RLAMP||EVENT_GLAMP||EVENT_BLAMP),均使用以下函数读取云端下发的数值;只不过场景切换事件在云端创建的数据点类型是枚举型,使用以下函数读取云端下的数值时,该函数返回的值为:0,1,2,3,4;而在用户自定义事件下实用函数,返回的值为:0~255
请参考“ArduinoUNOWiFi接入机智云介绍”文档中,第“3.3.2上传simpleTry.ino(数据点示例)”章节
使用DemoApp局域网内发现,并绑定彩灯之后,App的操作界面,一个完整的彩灯制作就完成了。
注意:局域网发现为:ArduinoUnoWiFi板子和DemoApp处于同一个WiFi热点下,DemoApp才会发现这个设备,否则无法发现,从而无法就使用DemoApp去绑定和操作这个设备。举个例子,ArduinoUnoWiFi板子被配置了链接到名字为“Gizwits”这个WiFi热点(确定已连接,并要确定Gizwits这个热点是可以链接外网),那么使用DemoApp的那部手机也需要链接到名为“Gizwits”这个热点下,否则就无法发现设备。
如果您是开发者
GizWits针对团体有很多支持计划,您可以和GizWtis联系,快速得到技术支持