基于Blinker的智能门锁(新手可入)

提要:
之前卓哥门做个一更深入的、技术性更强的智能门锁,对于新手来说,虽然讲的很明晰,但是可能依然会有很高的难度。于是分享一款适用于新手的、近乎搭积木的智能门锁项目。

  1. 基本思路和前期框架
    之前写了一个csdn,Aeduino代码和手机上面的Blinker部署在上面讲得很清楚,这里就直接使用,但是有一点小小的更新,因为源代码有一点小bug(在设定舵机的角度时的那个时间有一点小问题),新的代码将开门和关门两个功能分开了,并且加了一个查看门的状态的参数。
    之前的csdn
    更新的代码
#define BLINKER_WIFI //宏定义,将ESP32的模式设置为WiFi模式
#include <Blinker.h> //Blinker库
#include <ESP32Servo.h>
#include <DHT.h>//包含DHT头文件
#define DHTPIN 4      //定义DHT11模块连接管脚也可以通过gpio去进行定义
#define DHTTYPE DHT11   // 使用温度湿度模块的类型为DHT11
 
char auth[] = "8731df097c48";//blinker上提供的密钥
char ssid1[] = "";//ESP32将连接的WiFi的名字
char pswd1[] = "";//ESP32将连接的WiFi的密码
Servo myservo;//用于舵机控制的参数
BlinkerNumber HUMI("humi-1");    //定义湿度数据键名
BlinkerNumber TEMP("temp-1");    //定义温度数据键名
BlinkerNumber DOOR("zhuangtai");    //定义门状态数据键名
DHT dht(DHTPIN, DHTTYPE);    //生成DHT对象,参数是引脚和DHT的类型
float humi_read = 0, temp_read = 0;//定义浮点型全局变量 储存传感器读取的温湿度数据
int sta=0;//整型变量,判断门的状态
BlinkerButton Button1("btn1");//定义一个名为“btn1”的开关,用于控制舵机
BlinkerButton Button2("btn2");//定义一个名为“btn1”的开关,用于控制舵机

void heartbeat()
{
    HUMI.print(humi_read);        //给blinkerapp回传湿度数据
    TEMP.print(temp_read);        //给blinkerapp回传温度数据
}

void button1_callback(const String & state)    
{    
  myservo.write(180);
  Blinker.vibrate();//Blinker库的一个函数,会让你的手机震动一下
  Blinker.delay(450);
  myservo.write(90);
  Blinker.delay(2000);
  Blinker.vibrate();
  sta=1;
}//这是开门按键的函数,按下开关后,会自动调用这上面的函数

void button2_callback(const String & state)    
{ 
  myservo.write(0);
  Blinker.delay(500);
  myservo.write(90);
  Blinker.delay(2000);
  Blinker.vibrate();
  sta=0;
}//这是关门按键的函数,按下开关后,会自动调用这上面的函数
void setup()    
{   
    Serial.begin(9600); //初始化端口,将串口通讯的频率设定到9600
    myservo.attach(16);
    myservo.write(90);    
    BLINKER_DEBUG.stream(Serial);//将debug的输出流设置为串口
    BLINKER_DEBUG.debugAll();//辅助监测的工具
    Blinker.begin(auth,ssid1,pswd1); // // 初始化blinker 
    Blinker.attachHeartbeat(heartbeat);//将传感器获取的数据传给blinker app上
    //心跳包函数,每一分钟执行一次,向app端传送信息,故而app上面关于温度和湿度指示会1min更新一次
    Button1.attach(button1_callback);
    Button2.attach(button2_callback);
    dht.begin();//初始化DHT传感器
}
 
void loop() 
{   
Blinker.run();  
    float h = dht.readHumidity();//读取DHT11传感器的湿度 并赋值给h
    float t = dht.readTemperature();//读取传感器的温度   并赋值给t
    if (isnan(h) || isnan(t))//判断是否成功读取到温湿度数据
    {
        BLINKER_LOG("Failed to read from DHT sensor!");//读取温湿度失败!
    }
    else//成功读取到数据
    {   
        //打印
        BLINKER_LOG("Humidity: ", h, " %");
        BLINKER_LOG("Temperature: ", t, " *C");
        BLINKER_LOG(sta);
        humi_read = h;//将读取到的湿度赋值给全局变量humi_read
        temp_read = t;//将读取到的温度赋值给全局变量temp_read
    }
    DOOR.print(sta);            //给blinkerapp回传门的状态(因为需要实时显示就不需要放入心跳包中了,不然反应时间会很长)
    Blinker.delay(2000);//每2s读取一次温度
}

这里需要注意的是Blinker的库文件尽量不要选择最新的版本,可能会于esp32的核心板文件不匹配。
新的Blinker部署

2.3D打印模块

这个就需要自己去搞了,这里有需要的uu可以找我要我设置的3D打印的文件,但是每个寝室的门锁的硬件基础不一样,最好是根据自己的实际情况,好好的设计一下。

3.联网设计

这里需要注意,前面所有的WiFi信息都是我用自己的热点来做测试用的,也正如我csdn里面说的,校园网比较难破解(感兴趣的uu可以参考卓哥的有一篇文章),所以我们最好用一个路由器来解决(也可以自己尝试做一个,也可以参考卓哥的文章)。这样还有一个好处,路由器连接校园网时,第一个人需要进行认证,其后则不需要,这样我们就可以让esp32一直挂在上面,从而实现公网随时访问。

4.提升功能

uu们可以将寝室的灯,空调都用esp32当作控制核心来进行控制(浅挖一个坑),可以选择走线设计,也可以选择多用几个esp8266和单独电源的设计。

1 个赞