叫你起床的不是闹钟是--光感系统
哈哈,因为把阿里云入门套件的产品使用一遍了。嗯,有点不满足,于是我把魔爪伸向了其他的传感器。经过我不懈努力({:5_195:})找到了一款比较好用的光线传感器。Gravity:模拟环境光线传感器(Arduino兼容)DFR0026,这款光线传感器使用超级方便,跟阿里云入门套件差不多,通过感受光照强度,将所测值通过串口显示。当然这次我做的肯定还是要用上阿里云平台,如果把这款传感器挂接到窗帘上,当每天阳光照射后,达到某个值,钉钉自动提醒你,或者再接入一个产品,将窗帘自动打开,那么以后叫醒你的不是闹钟了,而是阳光。还有一个使用场景,现在很多女性都是独居,可以将它作为一个安全提醒,当小偷进入房间 ,肯定有光照变化,那么通过钉钉的一个及时提示就可以发现不法分子,而不是像监控那样一直盯着。话不多说,直接来吧...准备材料: Fire Beetle ESP32 x1Fire 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,设备三元组等和原来是一样的,不同的是后面的部分。
示例程序如下:
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DFRobot_Aliyun.h"
#include "Tone32.h"
#include "music_joy.h"
#define LIGHT_PINA0
/*配置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"];
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();
}
现在试一下,你的光感系统能不能正确使用起来吧。
恕我无能,没看特别懂,哈哈哈 结果第二天早上下雨了迟到 hnyzcj 发表于 2019-7-25 18:47
恕我无能,没看特别懂,哈哈哈
{:5_127:}啊啊啊 hnyzcj 发表于 2019-7-25 18:47
恕我无能,没看特别懂,哈哈哈
是我没表述清楚{:5_127:} Yan 发表于 2019-8-22 14:52
结果第二天早上下雨了迟到
哈哈哈,这也太尴尬了
页:
[1]