3478| 5
|
[官方案例教程] 叫你起床的不是闹钟是--光感系统 |
哈哈,因为把阿里云入门套件的产品使用一遍了。嗯,有点不满足,于是我把魔爪伸向了其他的传感器。经过我不懈努力()找到了一款比较好用的光线传感器。Gravity:模拟环境光线传感器(Arduino兼容)DFR0026,这款光线传感器使用超级方便,跟阿里云入门套件差不多,通过感受光照强度,将所测值通过串口显示。当然这次我做的肯定还是要用上阿里云平台,如果把这款传感器挂接到窗帘上,当每天阳光照射后,达到某个值,钉钉自动提醒你,或者再接入一个产品,将窗帘自动打开,那么以后叫醒你的不是闹钟了,而是阳光。还有一个使用场景,现在很多女性都是独居,可以将它作为一个安全提醒,当小偷进入房间 ,肯定有光照变化,那么通过钉钉的一个及时提示就可以发现不法分子,而不是像监控那样一直盯着。话不多说,直接来吧...准备材料: Fire Beetle ESP32 x1 Fire Beetle ESP32 扩展版 x1 Gravity:模拟环境光线传感器 x1 SETP1:创建产品、设备 创建产品、设备我相信大家都不陌生了。 产品名为:光感系统。选择添加自定义功能,名称就叫光感系统,标识符为LightStatus,数据类型为整形,根据这款光线传感器的使用规格,它的使用范围是0--6000,步长为1 . 添加设备,接下来就为光感系统产品添加设备。设备名就叫做Light-ESP32。得到设备三元组。 STEP2:构建开发服务 将光感系统产品及其所属的Light-ESP32设备导入到智能家居项目中。 进入到开发页面服务后,发现它又新增了一些功能,什么人脸识别,感觉还很高大上,哪天试一试。咳咳,重回正题! 将设备输入拖入到画布中,改为光传感器,配置到的光感系统产品及设备 然后再接入HTTP返回,通过在线模拟输入查看是否配置成功。点击部署,启动,调试,选择虚拟调试,输入某一个值,然后回到开发页面查看HTTP返回节点日志。 返回成功后,说明配置成功。接着我们需要将HTTP返回删除,然后添加条件判断节点,配置为:任意一个满足条件,条件去配置为:上一节点(payload),props.LightStatus.value,<,静态数据,数值型,200(这个值可根据自己需要改动)。 然后添加钉钉机器人。我这里是添加的一个机器人,连接条件判断的满足接口是HTTP返回,不做任何处理,另一个不满足条件接口连接钉钉机器人,将webhook获取后添加进来,选择自定义,text,将消息提示内容改为:起床了。 都配置好以后,点解部署,启动,调试,看是否能够正确将消息推送到钉钉。 STEP3:修改程序 因为这是一个不在阿里云入门套件里的传感器,所以没有相应的示例,但是我们可以仿照示例,修改部分程序即可。前面的Wifi,设备三元组等和原来是一样的,不同的是后面的部分。 示例程序如下: [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 LIGHT_PIN A0 /*配置WIFI名和密码*/ const char * WIFI_SSID = "host"; const char * WIFI_PASSWORD = "123456789"; /*配置设备证书信息*/ String ProductKey = "a1wqAqueMAT"; String ClientId = "12345"; String DeviceName = "Light-ESP32"; String DeviceSecret = "YzEbsyHZVqvwDzQlCx5SQVes1HaVzrha"; /*配置域名和端口号*/ String ALIYUN_SERVER = "iot-as-mqtt.cn-shanghai.aliyuncs.com"; uint16_t PORT = 1883; /*需要操作的产品标识符*/ String Identifier = "LightStatus"; /*需要订阅的TOPIC*/ const char * subTopic = "/sys/a1wqAqueMAT/${deviceName}/thing/service/property/set";//****set const char * pubTopic = "/sys/a1wqAqueMAT/${deviceName}/thing/event/property/post";//******post DFRobot_Aliyun myAliyun; WiFiClient espClient; PubSubClient client(espClient); uint8_t beginPlay = 0; uint8_t playWitchOne = 0; 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(); StaticJsonBuffer<300> jsonBuffer; JsonObject& root = jsonBuffer.parseObject((const char *)payload); if(!root.success()){ Serial.println("parseObject() failed"); return; } playWitchOne = root["params"][Identifier]; Serial.print("playWitchOne="); Serial.println(playWitchOne); beginPlay = 1; } void ConnectAliyun(){ while(!client.connected()){ Serial.print("Attempting MQTT connection..."); /*根据自动计算的用户名和密码连接到Alinyun的设备,不需要更改*/ if(client.connect(myAliyun.client_id,myAliyun.username,myAliyun.password)){ Serial.println("connected"); client.subscribe(subTopic); }else{ Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } void setup(){ Serial.begin(115200); /*连接WIFI*/ connectWiFi(); /*初始化Alinyun的配置,可自动计算用户名和密码*/ myAliyun.init(ALIYUN_SERVER,ProductKey,ClientId,DeviceName,DeviceSecret); client.setServer(myAliyun.mqtt_server,PORT); /*设置回调函数,当收到订阅信息时会执行回调函数*/ client.setCallback(callback); /*连接到Aliyun*/ ConnectAliyun(); } int val = 0; void loop(){ if(!client.connected()){ ConnectAliyun(); } { val=analogRead(LIGHT_PIN); //connect grayscale sensor to Analog 0 Serial.println(val,DEC);//print the value to serial delay(1000); } client.loop(); } [/mw_shl_code] 现在试一下,你的光感系统能不能正确使用起来吧。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed