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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5492|回复: 3

[分享] 动手用blinker做台灯

[复制链接]
发表于 2019-5-27 01:50 | 显示全部楼层 |阅读模式
本帖最后由 hqs1 于 2019-5-27 22:45 编辑

分享一个使用blinker做的台灯,使用的是esp8266,可以使用天猫精灵进行控制(亮度、开关)。

附上代码
[mw_shl_code=arduino,true]#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; //灯状态
int  set_light = 60;    //设置态
int  Now_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);
}
[/mw_shl_code]
原理是ESP8266控制NMOS调节灯的电压从而改变灯的亮度。
代码只需填WiFi信息和KEY即可使用,做人做到底,我也把PCB也贴上来。
注意:PCB文件我画的是双色(支持暖和白灯)如需单色接一个即可。

PCB 3D

PCB 3D

PCB 3D

PCB 3D



PCB解析

微信图片_20190527005957.jpg

实物图
0b76acfedf686d405d11e231d1274c6.jpg

台灯调试成功。


b82146cd91289392181f4f0a7229d01.jpg


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


发表于 2019-6-8 17:14 | 显示全部楼层
本帖最后由 xjgby 于 2019-7-29 11:11 编辑

[mw_shl_code=arduino,true][/mw_shl_code]
发表于 2019-7-7 14:36 | 显示全部楼层
本身带WIFI模块不清楚怎么和天猫精灵进行交互控制
发表于 2021-11-16 21:16 | 显示全部楼层
大佬能否出一个小爱同学的代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 11:57 , Processed in 0.078298 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表