基于Blinker的舵机开关灯程序-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9572|回复: 16

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

[复制链接]
回帖奖励 2 金币 回复本帖可获得 1 金币奖励! 每人限 1 次(中奖概率 10%)
发表于 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, 下载次数: 202

源码

发表于 2020-2-28 10:07 | 显示全部楼层
这么添加信号显示的图? ESP8266可以弄吗?板子代码是什么?APP端怎么设置?
发表于 2020-2-28 15:29 | 显示全部楼层
好像直接把舵机的PWM接到ESP8266上也可以
发表于 2020-3-4 08:28 | 显示全部楼层
这是TJ 发表于 2020-2-28 15:29
好像直接把舵机的PWM接到ESP8266上也可以

理论上是可以的    只用了一个脚  有点浪费
 楼主| 发表于 2020-3-6 20:41 | 显示全部楼层
这是TJ 发表于 2020-2-28 15:29
好像直接把舵机的PWM接到ESP8266上也可以

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

Number1.print(WiFi.RSSI());  //信号强度
发表于 2020-7-17 08:58 | 显示全部楼层
感谢分享,学习了
发表于 2021-1-3 19:15 | 显示全部楼层
大佬怎么调整舵机角度啊我是个小白
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 09:32 , Processed in 0.124557 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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