查看: 104|回复: 5

[项目教程] 叫你起床的不是闹钟是--光感系统

[复制链接]
    哈哈,因为把阿里云入门套件的产品使用一遍了。嗯,有点不满足,于是我把魔爪伸向了其他的传感器。经过我不懈努力()找到了一款比较好用的光线传感器。Gravity:模拟环境光线传感器(Arduino兼容)DFR0026,这款光线传感器使用超级方便,跟阿里云入门套件差不多,通过感受光照强度,将所测值通过串口显示。当然这次我做的肯定还是要用上阿里云平台,如果把这款传感器挂接到窗帘上,当每天阳光照射后,达到某个值,钉钉自动提醒你,或者再接入一个产品,将窗帘自动打开,那么以后叫醒你的不是闹钟了,而是阳光。还有一个使用场景,现在很多女性都是独居,可以将它作为一个安全提醒,当小偷进入房间 ,肯定有光照变化,那么通过钉钉的一个及时提示就可以发现不法分子,而不是像监控那样一直盯着。话不多说,直接来吧...准备材料:   Fire Beetle ESP32   x1
                  Fire Beetle ESP32 扩展版  x1
                    Gravity:模拟环境光线传感器  x1
  SETP1:创建产品、设备
    创建产品、设备我相信大家都不陌生了。
   产品名为:光感系统。选择添加自定义功能,名称就叫光感系统,标识符为LightStatus,数据类型为整形,根据这款光线传感器的使用规格,它的使用范围是0--6000,步长为1 .
                           1.png
                           2.png

  添加设备,接下来就为光感系统产品添加设备。设备名就叫做Light-ESP32得到设备三元组。
                3.png
STEP2:构建开发服务
     将光感系统产品及其所属的Light-ESP32设备导入到智能家居项目中。
                      4.png
   进入到开发页面服务后,发现它又新增了一些功能,什么人脸识别,感觉还很高大上,哪天试一试。咳咳,重回正题!
     将设备输入拖入到画布中,改为光传感器,配置到的光感系统产品及设备
                     5.png
然后再接入HTTP返回,通过在线模拟输入查看是否配置成功。点击部署,启动,调试,选择虚拟调试,输入某一个值,然后回到开发页面查看HTTP返回节点日志
                   6.png
                     7.png
   返回成功后,说明配置成功。接着我们需要将HTTP返回删除,然后添加条件判断节点,配置为:任意一个满足条件,条件去配置为:上一节点(payload),props.LightStatus.value,<,静态数据,数值型,200(这个值可根据自己需要改动)。
                     8.png
  然后添加钉钉机器人。我这里是添加的一个机器人,连接条件判断的满足接口是HTTP返回,不做任何处理,另一个不满足条件接口连接钉钉机器人,将webhook获取后添加进来,选择自定义text,将消息提示内容改为:起床了
                      9.png
  都配置好以后,点解部署,启动,调试,看是否能够正确将消息推送到钉钉。
                         10.png
STEP3:修改程序
    因为这是一个不在阿里云入门套件里的传感器,所以没有相应的示例,但是我们可以仿照示例,修改部分程序即可。前面的Wifi,设备三元组等和原来是一样的,不同的是后面的部分。
         11.png
示例程序如下:
   
[AppleScript] 纯文本查看 复制代码
#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[i]);
  }
  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();
}
 

现在试一下,你的光感系统能不能正确使用起来吧。






hnyzcj  超级版主

发表于 2019-7-25 18:47:31

恕我无能,没看特别懂,哈哈哈
回复 支持 反对

使用道具 举报

Yan  学徒

发表于 前天 14:52

结果第二天早上下雨了  迟到
回复 支持 反对

使用道具 举报

螺丝钉yy  初级技师
 楼主|

发表于 昨天 09:24

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

啊啊啊
回复 支持 反对

使用道具 举报

螺丝钉yy  初级技师
 楼主|

发表于 昨天 09:27

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

是我没表述清楚
回复 支持 反对

使用道具 举报

螺丝钉yy  初级技师
 楼主|

发表于 昨天 09:36

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

哈哈哈,这也太尴尬了
回复 支持 反对

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

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

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

mail