侧边栏壁纸
博主头像
MDZZW博主等级

曾经也是帅哥,如今只是肉多

  • 累计撰写 28 篇文章
  • 累计创建 26 个标签
  • 累计收到 7 条评论

智能门锁

MDZZW
2022-08-10 / 1 评论 / 3 点赞 / 1,570 阅读 / 517 字
温馨提示:
本文最后更新于 2022-10-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

作品展示

IMG_20220809_004047

image-1660061631511

Screenshot_2022-08-10-00-17-20-086_iot.clz.me
Screenshot_2022-08-05-17-44-55-797_com.miui.home

材料清单

  1. ESP8266 淘宝15左右
  2. MG995 180°舵机 淘宝13左右 已玩废,建议买全金属齿轮舵机不然两下齿轮就磨平了 25左右
  3. 充电模块 2元左右
  4. 18650电池 15元3节
  5. CP2102 6元左右 这个模块有5V和3.3V输出 这里用于给开发板和舵机供电
  6. 杜邦线若干 2元左右
  7. 外卖一次性筷子和随便捡的铁丝用于连接门把手 不要钱

接线图

image

源码

#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET
#include <Servo.h>
#include <Blinker.h>
#define PIN_SERVO 16 //舵机信号线
 
Servo myservo;
 
char auth[] = "";//替换成点灯科技设备Key
char ssid[] = ""; //你家的WiFi热点名称
char pswd[] = ""; //你的WiFi密码
 
bool oState = false;

BlinkerButton Button1("door");// 电灯可以新增按钮  命名叫door

//小爱同学电源类回调
void miotPowerState(const String & state)
{
     BLINKER_LOG("need set power state: ", state);
    myservo.attach(PIN_SERVO);
 
    if (state == BLINKER_CMD_ON) {
        openDoor();
    }
    else if (state == BLINKER_CMD_OFF) {
        openDoor();
    }
}

 //小爱同学语音命令反馈
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;
    }
}
 
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
 
    Blinker.vibrate();
    
    uint32_t BlinkerTime = millis();
    
    Blinker.print("millis", BlinkerTime);
}


void button1_callback(const String & state)
{
    BLINKER_LOG("get button1111 state: ", state);
    if (state == BLINKER_CMD_ON) {
        openDoor();
 
    }
    Blinker.vibrate(); 
}
 
void setup()
{
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
 
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
 
  myservo.write(0);
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);
    Button1.attach(button1_callback);
    BlinkerMIOT.attachPowerState(miotPowerState);
    BlinkerMIOT.attachQuery(miotQuery);
}


void openDoor()
{
  myservo.write(0);
  for(int i=0;i<=180;i+=20)             //控制舵机角0~180°
    {
      BLINKER_LOG("开始旋转:",i);
      myservo.write(i);                
      delay(5);
    }
    BLINKER_LOG("暂停");
    delay(2000);
  
    for(int i=180;i>=0;i-=20)            //控制舵机角180°~0
    {
      BLINKER_LOG("开始旋转:",i);
      myservo.write(i);               
      delay(5);
    }  
  BlinkerMIOT.powerState("on");
  BlinkerMIOT.print();
  oState = true;

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

评论区