[官方案例教程]智能家居——智能防盗

2646浏览
查看: 2646|回复: 1

[官方案例教程] 智能家居——智能防盗

[复制链接]
本帖最后由 螺丝钉yy 于 2019-6-5 08:58 编辑

上一篇我写的是智能家居中的智能灯控,这次我想写一个关于保护家居安全的智能防盗。当有可疑人物出现在我们家附近,警报自动响起。无需监控那样我们要时不时盯着看。而且适用环境包括不限于家中,还可以用于珍贵物品,或者是放置在车底,让行车更安全。
需要的材料:
智能手机  x1
1.创建产品、设备
打开阿里云:https://iot.aliyun.com/登录好后,我们要创建一个产品,选填:智能防盗。然后添加设备,选填: ESP32。得到设备三元组ESP32与阿里云平台进行通信的是设备三元组,额,这里解释一下什么是设备三元组,下图圈出来的这三个就是设备三元组,所以与之通信只能对应一个设备,如果说要想控制多个物体相连,方法就是对产品增加功能。通过标识符来控制物体。

智能家居——智能防盗图1

接下来,我们就要为智能防盗这个产品添加功能了。名为:红外传感器。选择的类型为布尔型0--无人1--有人


智能家居——智能防盗图2智能家居——智能防盗图3


添加设备,属于在智能防盗的产品下,名为 Burgarl的设备名,点击确定。得到设备三元组。

智能家居——智能防盗图4

2. 编辑移动设备

因为是报警提醒,所以不像上一篇那样去手动控制开关。我们就需要另外一种方式的移动设备。Follow me!
将智能防盗产品导入到智能家居中。

智能家居——智能防盗图5

然后不同的方法来咯,选中左侧导航栏的推荐->服务开发,点击新建服务,如下图所示:

智能家居——智能防盗图6

然后选填服务名称:智能防盗,也是默认从属于智能家居项目中的,默认空白模板,点击完成

智能家居——智能防盗图14

现在就出现了一个新的编辑页面

智能家居——智能防盗图7

点击左侧导航栏的节点,然后会出现一系列的功能选择,在节点列表中选择设备->设备触发,并将其拖动到服务画布内,把这个设备触发节点选填为PIR传感器;右侧栏配置项分别选择智能防盗产品,创建的设备名以及选择监听或事件上报”,如下图所示:

智能家居——智能防盗图8

然后将HTTP返回拖拽过来,将PIR传感器与 HTTP返回关联起来。PIR传感器”节点配置完成后,选中PIR传感器下方列表的部署->启动->调试,如下图所示:

智能家居——智能防盗图9

点击调试后,然后根据提示,点击前往调试,选择虚拟真实设备,出现下图的页面

智能家居——智能防盗图10

可以试一试当选择一个参数,推送后,会出现怎样的变化?
之后添加一个条件判断节点,条件节点相当于一个if-else判断。选中左侧节点列表的功能->条件判断节点,将其改为有人闯入”,条件选择选同时满足所有条件,选择静态数据1==  ,即表示有人闯入。将其配置为上一个节点+props.BurglarWarning.value”;

智能家居——智能防盗图11

接下来我们就要开始连接了,先把HTTP返回删除,刚只是简单进行虚拟真实设备测试。删掉后,将“有人闯入”和“PIR传感器”关联。再添加一个钉钉机器人,,并且要获得Webhook这个时候就需要你下载钉钉咯,在钉钉群中,添加一个钉钉机器人(注意查看钉钉机器人的Webhook时只能用电脑端的钉钉)想当初我钉钉添加群获得Webhook,可是废了不少功夫。具体添加方法请参考如何使用该节点?->如何配置钉钉机器人节点?最终获取的Webhook,复制粘贴至右侧栏的Webhook

智能家居——智能防盗图12

然后跟着我来选择模板是设备警告,数据来源就是PIR传感器,然后选择通知的用户,可根据个人需要自行选择。
智能家居——智能防盗图13
最后点击设备触发节点的部署按钮,点击启动我们的移动设备就完成啦。
3. 修改程序
将红外传感器接入D2,功放喇叭接入A4
[mw_shl_code=applescript,true]#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DFRobot_Aliyun.h"
#include "Tone32.h"
#include "music_joy.h"

#define SPEARKER_PIN  A4
#define MOTION_SENSOR_PIN  D2

/*配置WIFI名和密码*/
const char * WIFI_SSID     = "Honor 8";
const char * WIFI_PASSWORD = "11223344";

/*配置设备证书信息*/
String ProductKey = "a1D8cWYC9Wp";
String ClientId = "12345";
String DeviceName = "Burglar";
String DeviceSecret = "god6cBSFfE4DfHM2fmxAylM7JNVqyHBO";

/*配置域名和端口号*/
String ALIYUN_SERVER = "iot-as-mqtt.cn-shanghai.aliyuncs.com";
uint16_t PORT = 1883;

/*需要操作的产品标识符*/
String Identifier = "redsenor";

/*需要上报的TOPIC*/
const char * pubTopic = "/sys/a13h6IPZ3L7/${deviceName}/thing/event/property/post";//******post

DFRobot_Aliyun myAliyun;
WiFiClient espClient;
PubSubClient client(espClient);

/*播放天空之城*/
static void playCastleInTheSky(){
  for (int i = 0; i < sizeof(CastleInTheSkyData)/sizeof(CastleInTheSkyData[0]); i++) {
    int noteDuration = CastleInTheSkyDurations *600;
    tone(SPEARKER_PIN, CastleInTheSkyData,noteDuration);
  }
  noTone(SPEARKER_PIN);
}

void connectWiFi(){
  Serial.print("Connecting to ");
  Serial.println(WIFI_SSID);
  WiFi.begin(WIFI_SSID,WIFI_PASSWORD);
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.println("WiFi connected");
  Serial.print("IP Adderss: ");
  Serial.println(WiFi.localIP());
}

void callback(char * topic, byte * payload, unsigned int len){
  Serial.print("Recevice [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < len; i++){
    Serial.print((char)payload);
  }
  Serial.println();
}

void ConnectAliyun(){
  while(!client.connected()){
    Serial.print("Attempting MQTT connection...");
    /*根据自动计算的用户名和密码连接到Alinyun的设备,不需要更改*/
    if(client.connect(myAliyun.client_id,myAliyun.username,myAliyun.password)){
      Serial.println("connected");
    }else{
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}
void setup(){
  Serial.begin(115200);
  pinMode(MOTION_SENSOR_PIN,INPUT);
  pinMode(SPEARKER_PIN,OUTPUT);

  /*连接WIFI*/
  connectWiFi();
  
  /*初始化Alinyun的配置,可自动计算用户名和密码*/
  myAliyun.init(ALIYUN_SERVER,ProductKey,ClientId,DeviceName,DeviceSecret);
  
  client.setServer(myAliyun.mqtt_server,PORT);
  
  /*设置回调函数,当收到订阅信息时会执行回调函数*/
  client.setCallback(callback);
  
  /*连接到Aliyun*/
  ConnectAliyun();
}

void loop(){
  if(!client.connected()){
    ConnectAliyun();
  }
  if(digitalRead(MOTION_SENSOR_PIN) == 1){
    /*上报防盗警告*/
    client.publish(pubTopic,("{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":1},\"method\":\"thing.event.property.post\"}").c_str());
    /*播放音乐*/
    playCastleInTheSky();
  }else{
  }
  client.loop();
}[/mw_shl_code]
将程序修改为自己的设备三元组,标识符,WiFi名称及密码。对了,编译的时候报错时没错的话,又编译不通过,建议把电脑管家等关掉,这样就可以了。
现在试一试是不是可以自动报警,钉钉上有没有消息通知呢。。

rzegkly  版主

发表于 2019-6-5 19:30:52

钉钉机器人是家庭的守护神
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail