查看: 1109|回复: 5

[分享] 基于Blinker的舵机开关灯程序

[复制链接]
回帖奖励 3 金币 回复本帖可获得 1 金币奖励! 每人限 1 次(中奖概率 10%)
  • TA的每日心情

    2020-5-10 11:03
  • 签到天数: 35 天

    [LV.5]常住居民I

    发表于 2020-2-3 20:57 | 显示全部楼层 |阅读模式
    基于Blinker的舵机开关灯程序

    一、先放张成品图:
    这套设备支持Blinker APP上对灯进行控制,同时支持小爱对灯的控制。

    Blinker界面

    Blinker界面

    设备图

    设备图
    二、硬件连接:
    舵机的PWM信号线接NODEMCU的D2脚,即可控制舵机的运动。

    NODEMCU引脚图

    NODEMCU引脚图

    SG90舵机图

    SG90舵机图

    三、程序分析
    1.设备宏定义
    [mw_shl_code=arduino,true]#define BLINKER_WIFI
    #define BLINKER_MIOT_OUTLET[/mw_shl_code]
    第二行宏定义会将这个设备在米家中显示为插座设备。
    2.头文件
    [mw_shl_code=arduino,true]#include <Blinker.h>
    #include <Servo.h>//SG90舵机需要的头文件[/mw_shl_code]
    3.设备ID和WIFI
    [mw_shl_code=arduino,true]char auth[] = "********";//设备ID,从Blinker APP上申请来的
    char ssid[] = "*********";
    char pswd[] = "**********";[/mw_shl_code]
    4.APP组件绑定
    [mw_shl_code=arduino,true]BlinkerButton Button1("btn-led");//新建按键组件
    BlinkerNumber Number1("num-wifi");  //blinker新建数据组件[/mw_shl_code]
    5.定义一些宏定义和布尔变量
    [mw_shl_code=arduino,true]bool oState = false;
    Servo SG90;

    #define angle_on  0
    #define angle_off 90[/mw_shl_code]
    6.按键回调函数
    [mw_shl_code=arduino,true]// 按下按键即会执行该函数
    void button1_callback(const String & state)
    {
        BLINKER_LOG("get button state: ", state);
        if(oState == false)//如果灯是关的
        {
          oState = true;//将灯的状态打开
          SG90.write(angle_on);//调整舵机角度
          Button1.color("#6495ED");
          Button1.print();
         }
         else if(oState == true)
         {
           oState = false;//将灯的状态关闭
           SG90.write(angle_off);//调整舵机角度
           Button1.color("#000000");
           Button1.print();
         }
    }[/mw_shl_code]
    7.小爱回调函数
    [mw_shl_code=arduino,true]void miotPowerState(const String & state)
    {
        BLINKER_LOG("need set power state: ", state);

        if (state == BLINKER_CMD_ON && oState == false) {
            BlinkerMIOT.powerState("on");
            BlinkerMIOT.print();
            SG90.write(angle_on);//调整舵机角度 打开
            Button1.color("#6495ED");
            Button1.print();
            oState = true;
        }
        else if (state == BLINKER_CMD_OFF && oState == true) {
            BlinkerMIOT.powerState("off");
            BlinkerMIOT.print();
            SG90.write(angle_off);//调整舵机角度
            Button1.color("#000000");
            Button1.print();
            oState = false;
        }
    }[/mw_shl_code]
    8.小爱的状态查询函数
    [mw_shl_code=arduino,true]void miotQuery(int32_t queryCode)
    {
        BLINKER_LOG("MIOT Query codes: ", queryCode);

        switch (queryCode)
        {
            case BLINKER_CMD_QUERY_ALL_NUMBER :
                BLINKER_LOG("MIOT Query All");
                BlinkerMIOT.powerState(oState ? "on" : "off");
                BlinkerMIOT.print();
                break;
            case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
                BLINKER_LOG("MIOT Query Power State");
                BlinkerMIOT.powerState(oState ? "on" : "off");
                BlinkerMIOT.print();
                break;
            default :
                BlinkerMIOT.powerState(oState ? "on" : "off");
                BlinkerMIOT.print();
                break;
        }
    }[/mw_shl_code]
    9.数据读取函数
    [mw_shl_code=arduino,true]void dataRead(const String & data)
    {
        BLINKER_LOG("Blinker readString: ", data);

        Blinker.vibrate();
       
        uint32_t BlinkerTime = millis();
       
        Blinker.print("millis", BlinkerTime);
    }
    [/mw_shl_code]
    10.初始化函数
    [mw_shl_code=arduino,true]void setup()
    {
        Serial.begin(115200);
        BLINKER_DEBUG.stream(Serial);
       
        Blinker.begin(auth, ssid, pswd);
        Blinker.attachData(dataRead);
       
        BlinkerMIOT.attachPowerState(miotPowerState);
        BlinkerMIOT.attachQuery(miotQuery);
        Button1.attach(button1_callback);//声明组件
        SG90.attach(4);//绑定连接舵机信号引脚的接口
        SG90.write((angle_off+angle_on)/2);//调整舵机角度
        Button1.color("#000000");//改变按键颜色
        Button1.print();//发送到APP
    }[/mw_shl_code]
    11.循环函数
    [mw_shl_code=arduino,true]void loop()
    {
        Blinker.run();
        if(oState == false)//如果灯是关的
        {
          Button1.color("#000000");
          Button1.print();
         }
         else if(oState == true)
         {
           Button1.color("#6495ED");
           Button1.print();
         }
         Number1.print(WiFi.RSSI());  //信号强度
    }[/mw_shl_code]

    SG90_wifi.rar

    1.33 KB, 下载次数: 45

    源码

  • TA的每日心情
    开心
    2020-3-6 02:42
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2020-2-28 10:07 | 显示全部楼层
    这么添加信号显示的图? ESP8266可以弄吗?板子代码是什么?APP端怎么设置?

    该用户从未签到

    发表于 2020-2-28 15:29 | 显示全部楼层
    好像直接把舵机的PWM接到ESP8266上也可以
  • TA的每日心情
    擦汗
    2020-3-9 08:21
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2020-3-4 08:28 | 显示全部楼层
    这是TJ 发表于 2020-2-28 15:29
    好像直接把舵机的PWM接到ESP8266上也可以

    理论上是可以的    只用了一个脚  有点浪费
  • TA的每日心情

    2020-5-10 11:03
  • 签到天数: 35 天

    [LV.5]常住居民I

     楼主| 发表于 2020-3-6 20:41 | 显示全部楼层
    这是TJ 发表于 2020-2-28 15:29
    好像直接把舵机的PWM接到ESP8266上也可以

    ESP8266 01S也是可以的
  • TA的每日心情

    2020-5-10 11:03
  • 签到天数: 35 天

    [LV.5]常住居民I

     楼主| 发表于 2020-3-6 20:42 | 显示全部楼层
    ksbb4920355 发表于 2020-2-28 10:07
    这么添加信号显示的图? ESP8266可以弄吗?板子代码是什么?APP端怎么设置?

    Number1.print(WiFi.RSSI());  //信号强度
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    [Arduino物联网开发实战2]数据反馈
    [Arduino物联网开发实战2]
    [md]上一篇:(https://www.arduino.cn/thread-83177-1-1.html) 除了控制设备外,blin
    小爱同学开电脑 esp8266 12f
    小爱同学开电脑 esp8266 1
    1.mini D1 wifi ESP-12F N ESP8266开发板 2.1路 5V继电器模块 高电平触发 3.AMS1117-3
    服务器平台又挂了么,显示服务器未响应了
    服务器平台又挂了么,显示
    数据读不回来了
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表