2646| 1
|
[官方案例教程] 智能家居——智能防盗 |
本帖最后由 螺丝钉yy 于 2019-6-5 08:58 编辑 上一篇我写的是智能家居中的智能灯控,这次我想写一个关于保护家居安全的智能防盗。当有可疑人物出现在我们家附近,警报自动响起。无需监控那样我们要时不时盯着看。而且适用环境包括不限于家中,还可以用于珍贵物品,或者是放置在车底,让行车更安全。 需要的材料: 智能手机 x1 1.创建产品、设备 打开阿里云:https://iot.aliyun.com/,登录好后,我们要创建一个产品,选填:智能防盗。然后添加设备,选填: ESP32。得到设备三元组。ESP32与阿里云平台进行通信的是设备三元组,额,这里解释一下什么是设备三元组,下图圈出来的这三个就是设备三元组,所以与之通信只能对应一个设备,如果说要想控制多个物体相连,方法就是对产品增加功能。通过标识符来控制物体。 接下来,我们就要为智能防盗这个产品添加功能了。名为:红外传感器。选择的类型为布尔型,0--无人,1--有人。 添加设备,属于在智能防盗的产品下,名为 Burgarl的设备名,点击确定。得到设备三元组。 2. 编辑移动设备 因为是报警提醒,所以不像上一篇那样去手动控制开关。我们就需要另外一种方式的移动设备。Follow me! 将智能防盗产品导入到智能家居中。 然后不同的方法来咯,选中左侧导航栏的推荐->服务开发,点击新建服务,如下图所示: 然后选填服务名称:智能防盗,也是默认从属于智能家居项目中的,默认空白模板,点击完成。 现在就出现了一个新的编辑页面 点击左侧导航栏的节点,然后会出现一系列的功能选择,在节点列表中选择设备->设备触发,并将其拖动到服务画布内,把这个设备触发节点选填为PIR传感器;右侧栏配置项分别选择“智能防盗”产品,创建的设备名以及选择监听“属性或事件上报”,如下图所示: 然后将HTTP返回拖拽过来,将PIR传感器与 HTTP返回关联起来。“PIR传感器”节点配置完成后,选中PIR传感器下方列表的部署->启动->调试,如下图所示: 点击调试后,然后根据提示,点击前往调试,选择虚拟真实设备,出现下图的页面 可以试一试当选择一个参数,推送后,会出现怎样的变化? 之后添加一个“条件判断”节点,条件节点相当于一个if-else判断。选中左侧节点列表的功能->条件判断节点,将其改为“有人闯入”,条件选择选同时满足所有条件,选择静态数据,1,== ,即表示有人闯入。将其配置为“上一个节点”+“props.BurglarWarning.value”; 接下来我们就要开始连接了,先把HTTP返回给删除,刚只是简单进行虚拟真实设备测试。删掉后,将“有人闯入”和“PIR传感器”关联。再添加一个钉钉机器人,,并且要获得Webhook。这个时候就需要你下载钉钉咯,在钉钉群中,添加一个钉钉机器人(注意查看钉钉机器人的Webhook时只能用电脑端的钉钉),想当初我钉钉添加群获得Webhook,可是废了不少功夫。具体添加方法请参考如何使用该节点?->如何配置钉钉机器人节点?最终获取的Webhook,复制粘贴至右侧栏的Webhook处。 然后跟着我来选择模板是设备警告,数据来源就是PIR传感器,然后选择通知的用户,可根据个人需要自行选择。 最后点击设备触发节点的部署按钮,点击启动,我们的移动设备就完成啦。 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名称及密码。对了,编译的时候报错时没错的话,又编译不通过,建议把电脑管家等关掉,这样就可以了。 现在试一试是不是可以自动报警,钉钉上有没有消息通知呢。。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed