esp8266+Blinker+小爱同学控制双色LED

首先硬件部分:主控采用node MCU,灯光采用双色LED灯管,由于MCU输出电压有限不能完美驱动LED灯管,所以外加两个MOS管模块给灯管提供电源,电路简单,可玩性很高

软件方面采用Arduino IDE开发,配合点灯Blinker实现手机控制

目前已经实现了手机APP控制led灯管的亮度色温控制,接入米家后可实现小爱同学控制开灯关灯亮度色温控制

**

程序如下

**

// An highlighted block
#define BLINKER_PRINT Serial       //用于打开串口
#define BLINKER_WIFI	//wifi接入
#define BLINKER_MIOT_LIGHT

#include <Blinker.h>//blinker库

#define ColdLED 5 //定义led引脚,对应node MCU的D1引脚
#define WarmLED 4 //定义led引脚,对应node MCU的D2引脚

float colorW;//获取亮度x
int colorT;//获取色温y

int cold;//白光输出值
int warm;//黄光输出值

unsigned char led_power; //小灯状态

char auth[] = "7f32e0e9c032"; //密钥
char ssid[] = "FAST_6B26";//wifi名称
char pswd[] = "18839153429";//WiFi密码

BlinkerSlider Slider1("br");  //绑定亮度滑动条组件
BlinkerSlider Slider2("ct");  //绑定色温滑动条组件

//亮度滑动条回调函数
void Slider1_callback(int32_t value) {

    BLINKER_LOG("亮度滑动条的值: ", value);
    colorW = value;
    
}

//色温滑动条回调函数
void Slider2_callback(int32_t value2) {

    BLINKER_LOG("色温滑动条的值: ", value2);
    colorT = value2;
}

//电源类操作的回调函数
void miotPowerState(const String & state)
{
    BLINKER_LOG("电源状态 : ", state);

    if (state == BLINKER_CMD_ON) {
	colorW = 100;
	led_power = 1;
    BlinkerMIOT.powerState("on");
    BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF) {
    colorW = 0;
		led_power = 0;
        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
}

//亮度控制的回调函数
void miotBright(const String & bright)
{
  colorW = bright.toInt();
    
	Slider1.print(colorW);
    BLINKER_LOG("当前亮度: ", colorW);
	
    BlinkerMIOT.brightness(colorW);
    BlinkerMIOT.print();
	
	Slider1.print(colorW);
	
}

//设备查询的回调函数:
void miotQuery(int32_t queryCode)
{
    BLINKER_LOG("MIOT查询代码 : ", queryCode);

    switch (queryCode)
    {   
        case 0:                                             //查询设备的情况
            BLINKER_LOG("查询亮度 : ", colorW);
			BLINKER_LOG("查询色温 : ", colorT);
            BlinkerMIOT.brightness(colorW); 
            BlinkerMIOT.brightness(colorT);                 //反馈灯的亮度
            BlinkerMIOT.powerState(led_power ?"on":"off");  //反馈灯的亮灭
            BlinkerMIOT.print();                            //反馈至小爱
            break;
    }
}

//色温回调函数
void miotColoTemp(int32_t colorTemp)
{
    BLINKER_LOG("需要设置色温 : ", colorTemp);

	  colorT = map(colorTemp,1000,10000,0,100);
	  Slider2.print(colorT);
    BlinkerMIOT.colorTemp(colorTemp);
    BlinkerMIOT.print();
	
	
}

//灯光控制函数
void LedControl(float x,int y){

	  cold = x/100*y;
    warm = x/100*(100-y);
	
    analogWrite(ColdLED, cold);
    analogWrite(WarmLED, warm);

}

void setup()
{
    
    Serial.begin(115200); //串口波特率115200
	
    BLINKER_DEBUG.stream(Serial); //串口打印调试信息

    Blinker.begin(auth, ssid, pswd);//初始化blinker

    //初始化LED引脚
    pinMode(ColdLED,OUTPUT);
	pinMode(WarmLED,OUTPUT);
    digitalWrite(ColdLED,LOW);
	digitalWrite(WarmLED,LOW);
	
    //注册电源回调函数
    BlinkerMIOT.attachPowerState(miotPowerState);

    //设置灯的亮度调节范围
    analogWriteRange(100); 

    //注册设备查询
    BlinkerMIOT.attachQuery(miotQuery);

     //注册亮度回调函数
    BlinkerMIOT.attachBrightness(miotBright);

	//注册亮度滑动条回调函数
	Slider1.attach(Slider1_callback);

	//注册色温滑动条回调函数
	Slider2.attach(Slider2_callback);

    //注册色温回调函数
    BlinkerMIOT.attachColorTemperature(miotColoTemp);
}

void loop()
{
    Blinker.run(); 
	LedControl(colorW,colorT);
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,ESP8266是一款具有Wi-Fi功能的微控制器模块,它可以与Arduino UNO R3进行通信和控制。而光照传感器用于检测环境的光照强度。下面我将用华而不实的例子来说明如何使用ESP8266和Arduino UNO R3进行光照传感器的闪烁灯实验。 首先,我们需要连接ESP8266和Arduino UNO R3。将ESP8266模块的VCC引脚连接到Arduino UNO R3的5V引脚,将GND引脚连接到Arduino UNO R3的GND引脚,将ESP8266的RX引脚连接到Arduino UNO R3的TX引脚,将ESP8266的TX引脚连接到Arduino UNO R3的RX引脚。 接下来,我们需要连接光照传感器。将光照传感器的VCC引脚连接到Arduino UNO R3的5V引脚,将GND引脚连接到Arduino UNO R3的GND引脚,将光照传感器的信号引脚连接到Arduino UNO R3的A0引脚。 接下来,我们需要编写Arduino代码。首先,导入ESP8266WiFi和SoftwareSerial库。然后,在setup函数中初始化串口通信和Wi-Fi连接。在loop函数中,读取光照传感器的数值,并根据数值控制ESP8266的GPIO引脚输出高低电平,以实现闪烁灯效果。 最后,将代码上传到Arduino UNO R3中,并将ESP8266连接到Wi-Fi网络。当光照传感器检测到较强的光照时,闪烁灯会快速闪烁;当光照传感器检测到较弱的光照时,闪烁灯会慢速闪烁。 总结来说,使用ESP8266、Arduino UNO R3和光照传感器可以实现一个具有可调节闪烁频率的光照传感器闪烁灯实验。这个实验可以用于对光照强度的实时监测和视觉提醒。相信这个简单的实验可以帮助大家更好地理解ESP8266和Arduino UNO R3的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值