失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 物联网系列⑤——基于ESP8266与点灯科技平台的氛围灯设计(接入小爱同学)

物联网系列⑤——基于ESP8266与点灯科技平台的氛围灯设计(接入小爱同学)

时间:2018-12-16 11:03:53

相关推荐

物联网系列⑤——基于ESP8266与点灯科技平台的氛围灯设计(接入小爱同学)

物联网系列⑤——基于ESP8266与点灯科技平台的氛围灯设计(接入小爱同学)

一、设计目标二、电路设计三、思路介绍四、ESP8266代码

一、设计目标

使用点灯科技平台接入物联网,可通过手机点灯APP控制氛围灯的开关,该氛围灯拥有一个系统默认颜色,若用户想显示其他颜色可通过手机点灯APP进行设置接入小爱同学,通过语音控制氛围灯的开关通过外接TTL串口下载模块给ESP8266程序烧写,通过跳线帽手动拉低GPIO0电平,手动RST供电使用LM1117 5V转3V设计,可选择使用Mico USB和DC 5.5*2.5mm接口进行5V供电引脚使用通用设计,方便外设扩展LED指示灯指示系统运行状态

二、电路设计

三个电路板通过铜柱共地并固定,通过一根黑色5V电源线进行板间供电,组成塔式结构。不同层数的电路板执行不同的功能,第一层为点灯科技+小爱对加湿器开关控制。第二层为点灯科技+小爱控制WS2812B灯带。第三层为ESP8266作为网络服务器

三、思路介绍

WS2812b为3线控制,分别为VCC,Din(控制引脚),GND。数据传输机制为Din数据输入到第一颗RGB光源后,该光源会将数据传输到第二颗,第二颗再将数据传输到第三颗,以此类推来完成数据传输。在arduino IDE中使用Adafruit_NeoPixel库实现对WS2812b的控制。氛围灯系统默认颜色存储于代码中的变量,在使用默认颜色时调用即可。若想让氛围灯显示其他颜色则可以通过点灯APP下发颜色命令来实现,并将该颜色数值存储于临时变量,这意味着只要电路板不断电,灯带就可以自由地在系统默认颜色和我们手动设置的颜色之间进行切换。

四、ESP8266代码

#define BLINKER_PRINT Serial#define BLINKER_WIFI#define BLINKER_MIOT_OUTLET#include <Blinker.h>#include <Adafruit_NeoPixel.h>char auth[] = "**********";//设备号char ssid[] = "**********";//无线账号char pswd[] = "**********";//无线密码int LED_OPEN=0;//氛围灯标志位int Control_OPEN=0;//氛围灯颜色控制标志位int count=0;//LED翻转计数器int send_data=0;//发送命令标志位uint8_t colorR1 ;//用于颜色存储uint8_t colorG1 ;uint8_t colorB1 ;uint8_t colorR2 ;//用于颜色存储2uint8_t colorG2 ;uint8_t colorB2 ;uint8_t colorR_Set= map( 0, 0, 255, 0, 255);//颜色默认值uint8_t colorG_Set= map(255, 0, 255, 0, 255);//颜色默认值uint8_t colorB_Set= map(242, 0, 255, 0, 255);;//颜色默认值#define LED1 16#define LED2 14#define PIN D1#define NUMPIXELS57Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);#define RGB_1 "RGBKey"// 新建组件对象BlinkerButton Button1("LED_Button");BlinkerButton Button2("Control_Button");BlinkerRGB RGB1(RGB_1);//APP端颜色设置回调函数void rgb1_callback(uint8_t r_value, uint8_t g_value, uint8_t b_value, uint8_t bright_value){digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));BLINKER_LOG("R value: ", r_value);BLINKER_LOG("G value: ", g_value);BLINKER_LOG("B value: ", b_value);BLINKER_LOG("Rrightness value: ", bright_value);uint8_t colorR = map(r_value, 0, 255, 0, bright_value);uint8_t colorG = map(g_value, 0, 255, 0, bright_value);uint8_t colorB = map(b_value, 0, 255, 0, bright_value);colorR2=colorR1 ;//存储colorG2=colorG1 ;colorB2=colorB1 ;colorR1=colorR ;//存储colorG1=colorG ;colorB1=colorB ;Button2.print("on");Control_OPEN=1;//氛围灯颜色调节send_data=1;//运行标志位为1}// 按下按键1即会执行该函数void button1_callback(const String & state) {BLINKER_LOG("get button state: ", state);digitalWrite(LED1, !digitalRead(LED1));if(digitalRead(LED1)==0){Button1.print("off");LED_OPEN=0;//关闭}else{Button1.print("on");LED_OPEN=1;//开启}send_data=1;//运行标志位为1}// 按下按键2即会执行该函数void button2_callback(const String & state) {BLINKER_LOG("get button state: ", state);digitalWrite(LED2, !digitalRead(LED2));if(digitalRead(LED2)==0){Button2.print("off");Control_OPEN=0;//关闭}else{Button2.print("on");Control_OPEN=1;//开启}send_data=1;//运行标志位为1}// 如果未绑定的组件被触发,则会执行其中内容void dataRead(const String & data){BLINKER_LOG("Blinker readString: ", data);}//小爱同学处理函数void miotPowerState(const String & state){BLINKER_LOG("need set power state: ", state);if (state == BLINKER_CMD_ON) {digitalWrite(LED2, HIGH);LED_OPEN=1;BlinkerMIOT.powerState("on");BlinkerMIOT.print();send_data=1;//运行标志位为1}else if (state == BLINKER_CMD_OFF) {digitalWrite(LED2, LOW);LED_OPEN=0;BlinkerMIOT.powerState("off");BlinkerMIOT.print();send_data=1;//运行标志位为1}}void setup() {// 初始化串口Serial.begin(115200);#if defined(BLINKER_PRINT)BLINKER_DEBUG.stream(BLINKER_PRINT);#endif// 初始化有LED的IOpinMode(LED_BUILTIN, OUTPUT);digitalWrite(LED_BUILTIN, HIGH);pinMode(LED1, OUTPUT);digitalWrite(LED1, LOW);pinMode(LED2, OUTPUT);digitalWrite(LED2, LOW);// 初始化blinkerBlinker.begin(auth, ssid, pswd);pixels.begin();Blinker.attachData(dataRead);Button1.attach(button1_callback);//按键1Button2.attach(button2_callback);//按键2RGB1.attach(rgb1_callback);//小爱回调函数BlinkerMIOT.attachPowerState(miotPowerState);}void loop() {Blinker.run();count++;//led计数器if(send_data==1)//运行标志位为1{if(LED_OPEN==1 )//开启{if(Control_OPEN==1)//控制开启{// int r1=colorR2,g1=colorG2,b1=colorB2;for(int n = 0; n < NUMPIXELS; n++){pixels.setPixelColor(n, pixels.Color(colorR1,colorG1,colorB1));pixels.show();} }else{int r=0,g=0,b=0;for(int i = 0; i < NUMPIXELS; i++){pixels.setPixelColor(i, pixels.Color(colorR_Set,colorG_Set,colorB_Set));pixels.show();}} }else if (LED_OPEN==0)//关闭{uint8_t colorR = map(0, 0, 255, 0, 0);uint8_t colorG = map(0, 0, 255, 0, 0);uint8_t colorB = map(0, 0, 255, 0, 0);for(int i = 0; i < NUMPIXELS; i++){pixels.setPixelColor(i, pixels.Color(colorR,colorG,colorB));pixels.show();}}send_data=0;//运行标志位清0 }else{send_data=0;//运行标志位为0 }if(count==100){digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));count=0;}}

不足之处还望各位大佬不吝赐教!

如果觉得《物联网系列⑤——基于ESP8266与点灯科技平台的氛围灯设计(接入小爱同学)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。