查看: 1081|回复: 2

[分享] 动手用blinker做台灯

[复制链接]
  • TA的每日心情
    奋斗
    2018-8-29 00:35
  • 签到天数: 21 天

    [LV.4]偶尔看看III

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

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

    附上代码

    kittenblock中小学创客名师推荐的图形化编程软件

    #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);
    }
    

    原理是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 编辑

  • TA的每日心情
    开心
    2019-9-14 16:38
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    发表于 2019-7-7 14:36 | 显示全部楼层
    本身带WIFI模块不清楚怎么和天猫精灵进行交互控制
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    同时读取两个传感器的数据,并上传至云端存储
    同时读取两个传感器的数据
    一个示例,仅供参考,可以自己更换传感器,或者连接更多传感器。 开发板: Wifiduin
    求助帖 新手
    求助帖 新手
    如图,第一个LED灯驱动失败,求原因… 板子是UNO R3,LED灯接在13与GND上面。
    【Arduino】108种传感器系列实验(93)---CSR8350蓝牙音乐模块
    【Arduino】108种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    光线跟踪钛合金猫眼
    光线跟踪钛合金猫眼
    +视频 https://www.bilibili.com/video/av67732712/ +原理 ---光线跟踪 建立极
    "高精度"米家电子温湿度计Pro拆解
    "高精度"米家电子温湿度计
    为了了解哪种温湿度传感器更好,我搞了一个米家电子温湿度计Pro(阿蒙同志赠送) 价格
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表