动手用blinker做台灯-Arduino中文社区 - Powered by Discuz! Archiver

hqs1 发表于 2019-5-27 01:50

动手用blinker做台灯

本帖最后由 hqs1 于 2019-5-27 22:45 编辑

分享一个使用blinker做的台灯,使用的是esp8266,可以使用天猫精灵进行控制(亮度、开关)。
http://player.youku.com/player.php/sid/XNDE5ODk3ODkyMA==/v.swf
附上代码
#define BLINKER_PRINT Serial //串口调试组件
#define BLINKER_MQTT         //通讯方式
#define BLINKER_ALIGENIE_LIGHT

//#define BLINKER_ESP_SMARTCONFIG
#define BLINKER_DEBUG_ALL
#include <Blinker.h>

#define LED D1
#define Button_io D2
#define LED_light_MAX 100
#define LED_light_MIX 10

bool LED_power = false; //灯状态
intset_light = 60;    //设置态
intNow_light = 0;   //现在态

char auth[] = "";   //APP key
char ssid[] = "";      //WiFi 名字
char pswd[] = "";       //密码
//创建对象
BlinkerButton power("btn_pwr");
BlinkerSlider Slider1("Slider");

/*
* APP组件
*/
void slider1_callback(int32_t value) //滑动条处理
{
set_light = value;
LED_light_set(set_light , LED_power);
Slider1.print(value);
}

void power_callback(const String &state) { //台灯开关处理
if (state == BLINKER_CMD_ON) {
    LED_power = true ;
    power.icon("fal fa-power-off");
    power.color("#FF0000");
    power.text("", "开");
    power.print("on");
}
if (state == BLINKER_CMD_OFF) {
    LED_power = false ;
    power.icon("fal fa-power-off");
    power.color("#FFFFFF");
    power.text("", "关");
    power.print("off");
}
LED_light_set(set_light , LED_power);
}

/*
* 语音音箱处理
*/
void aligeniePowerSate(const String & state) //台灯开关处理
{
if (state == BLINKER_CMD_ON) {
    LED_power = true ;
    BlinkerAliGenie.powerState("on");
    BlinkerAliGenie.print();
}
else if (state == BLINKER_CMD_OFF) {
    LED_power = false ;
    BlinkerAliGenie.powerState("off");
    BlinkerAliGenie.print();
}
LED_light_set(set_light , LED_power);
}


void aligenieBright(const String & bright) //灯亮度处理
{
if (bright == BLINKER_CMD_MAX) {
    set_light = LED_light_MAX;
}
else if (bright == BLINKER_CMD_MIN) {
    set_light = LED_light_MIX;
}
else {

    set_light = bright.toInt();
}
BlinkerAliGenie.brightness(set_light);
BlinkerAliGenie.print();
LED_light_set(set_light , LED_power);

}

void aligenieRelativeBright(int32_t bright)
{
set_light += bright;
BlinkerAliGenie.brightness(set_light);
BlinkerAliGenie.print();
LED_light_set(set_light , LED_power);

}



void LED_light_set(int light, bool power) {
light = light * 10.24;
if (power) {
    analogWrite(LED ,light);
}
else {
    analogWrite(LED , LOW);
}
}





void setup()
{
Serial.begin(9600);
#if defined(BLINKER_PRINT)
BLINKER_DEBUG.stream(BLINKER_PRINT);
BLINKER_DEBUG.debugAll();
#endif
power.attach(power_callback);
Slider1.attach(slider1_callback);
Blinker.begin(auth, ssid, pswd);
Blinker.attachHeartbeat(heartbeat);
BlinkerAliGenie.attachPowerState(aligeniePowerSate);
BlinkerAliGenie.attachBrightness(aligenieBright);
BlinkerAliGenie.attachRelativeBrightness(aligenieRelativeBright);

pinMode(LED , OUTPUT);
pinMode(Button_io , INPUT_PULLUP);
digitalWrite(LED, LOW);
attachInterrupt(Button_io,button,FALLING);
}

void loop() {
Blinker.run();
}



void heartbeat() //心跳包
{
if (LED_power) {
    power.icon("fal fa-power-off");
    power.color("#FF0000");
    power.text("", "开");
    power.print("on");
}
else {
    power.icon("fal fa-power-off");
    power.color("#FFFFFF");
    power.text("", "关");
    power.print("off");
}
Slider1.print(set_light);
}



void button() {
    if (digitalRead(Button_io) == LOW){
      detachInterrupt(Button_io);   
      LED_power = !LED_power;
      LED_light_set(set_light , LED_power);
    }
    attachInterrupt(Button_io,button,FALLING);
}

原理是ESP8266控制NMOS调节灯的电压从而改变灯的亮度。
代码只需填WiFi信息和KEY即可使用,做人做到底,我也把PCB也贴上来。
注意:PCB文件我画的是双色(支持暖和白灯)如需单色接一个即可。




PCB解析



实物图


台灯调试成功。





PCB文件和原理图已上传到github,只能用于学习。不可商业。
github地址:https://github.com/hqs1/blinker-lamp
如有问题可在评论区留言。


xjgby 发表于 2019-6-8 17:14

本帖最后由 xjgby 于 2019-7-29 11:11 编辑

zxy2266 发表于 2019-7-7 14:36

本身带WIFI模块不清楚怎么和天猫精灵进行交互控制

^AHA^ 发表于 2021-11-16 21:16

大佬能否出一个小爱同学的代码
页: [1]
查看完整版本: 动手用blinker做台灯