螺丝钉yy 发表于 2019-7-25 14:34:44

叫你起床的不是闹钟是--光感系统

    哈哈,因为把阿里云入门套件的产品使用一遍了。嗯,有点不满足,于是我把魔爪伸向了其他的传感器。经过我不懈努力({:5_195:})找到了一款比较好用的光线传感器。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,设备三元组等和原来是一样的,不同的是后面的部分。
      
示例程序如下:
   #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:31

恕我无能,没看特别懂,哈哈哈

Yan 发表于 2019-8-22 14:52:27

结果第二天早上下雨了迟到

螺丝钉yy 发表于 2019-8-23 09:24:03

hnyzcj 发表于 2019-7-25 18:47
恕我无能,没看特别懂,哈哈哈

{:5_127:}啊啊啊

螺丝钉yy 发表于 2019-8-23 09:27:23

hnyzcj 发表于 2019-7-25 18:47
恕我无能,没看特别懂,哈哈哈

是我没表述清楚{:5_127:}

螺丝钉yy 发表于 2019-8-23 09:36:07

Yan 发表于 2019-8-22 14:52
结果第二天早上下雨了迟到

哈哈哈,这也太尴尬了
页: [1]
查看完整版本: 叫你起床的不是闹钟是--光感系统