查看: 288|回复: 0

[讨论交流] 【IoT套件测评】Gravity:阿里云IoT 之智能灯光控制

[复制链接]
上一篇介绍了阿里云IoT软件篇:Gravity:阿里云IoT 之温度控制
接下来分享物联篇:IGravity:阿里云IoT 之智能灯光控制

360截图20190530140505399.jpg
一、利用物联网控制灯光思路框架:
1、灯设备与移动设备建立网络通信连接
2、通过服务器实时转发,被第三方设备调用
3、移动控制设备app控制灯的开关实现物联;
截图201905302016474149.png
二、环境
1、硬件:阿里云IoT 入门套件x1
FireBeetle Board-ESP32 主板,购买地址:http://www.dfrobot.com.cn/goods-1394.html
2、软件:
1、操作系统:基于 Windows 7操作系统,
2、软件:Arduino1.8.0 以上版本下载链接: https://www.arduino.cc/en/main/software?setlang=cn
三、物联产品和设备创建
1、创建产品:iot智能灯光
创建产品.jpg
2、添加设备:2019esp

添加设备.jpg
3、功能定义
截图201905301935284739.png
4、复制设备证书、域名、端口号等连接信息
截图201905301938425750.png
5、设备的Topic列表

截图201905301939345406.png
四、编写IDE智能灯光控制程序
[Python] 纯文本查看 复制代码
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DFRobot_Aliyun.h"
 
#define LED  D2
#define BUTTON D3
 
/*配置WIFI名和密码*/
const char * WIFI_SSID     = "**************";
const char * WIFI_PASSWORD = "********";
 
/*配置设备证书信息*/
String ProductKey = "*******";
String ClientId = "12345";/*自定义ID*/
String DeviceName = "2019esp";
String DeviceSecret = "****************";
 
/*配置域名和端口号*/
String ALIYUN_SERVER = "iot-as-mqtt.cn-shanghai.aliyuncs.com";
uint16_t PORT = 1883;
 
/*需要操作的产品标识符*/
String Identifier = "switch2";
 
/*需要上报和订阅的两个TOPIC*/
const char * subTopic = "/sys/a1lUufvfvs8/*************";//****set
const char * pubTopic = "/sys/a1lUufvfvs8/************";//******post
 
DFRobot_Aliyun myAliyun;
WiFiClient espClient;
PubSubClient client(espClient);
 
/*ButtonState、LEDState用来存储LED灯同BUTTON按钮的当前值*/
uint8_t ButtonState = 0;
uint16_t LEDState = 0;
static void openLight(){
  digitalWrite(LED, HIGH);
}
 
static void closeLight(){
  digitalWrite(LED, LOW);
}
 
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("123");
  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;
  }
  const uint16_t LightStatus = root["params"][Identifier];
  if(LightStatus == 1){
    openLight();
  }else{
    closeLight();
  }
  /*当LED灯的状态发生改变后,则上报LED灯的当前状态*/
  if(LightStatus != LEDState)
  {
        LEDState = LightStatus;
        String tempMseg = "{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":"+(String)LightStatus+"},\"method\":\"thing.event.property.post\"}";
        char sendMseg[tempMseg.length()];
        strcpy(sendMseg,tempMseg.c_str());
        client.publish(pubTopic,sendMseg);
  }
}
 
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);
  /*将LED(D2)设置为IO输出,BUTTON(D3)设置为IO输入*/
  pinMode(LED,OUTPUT);
  pinMode(BUTTON,INPUT);
   
  /*连接WIFI*/
  connectWiFi();
   
  /*初始化Alinyun的配置,可自动计算用户名和密码*/
  myAliyun.init(ALIYUN_SERVER,ProductKey,ClientId,DeviceName,DeviceSecret);
   
  client.setServer(myAliyun.mqtt_server,PORT);
   
  /*设置回调函数,当收到订阅信息时会执行回调函数*/
  client.setCallback(callback);
   
  /*连接到Aliyun*/
  ConnectAliyun();
   
  /*开机先关灯*/
  closeLight();
  /*保存BUTTON按钮的初始值状态*/
  ButtonState =digitalRead(BUTTON);
  //Serial.print("ButtonState:");
  //Serial.println(ButtonState);
  /*上报关灯信息*/
  client.publish(pubTopic,("{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":0},\"method\":\"thing.event.property.post\"}").c_str());
}
 
void loop(){
  if(!client.connected()){
    ConnectAliyun();
  }
 uint8_t ButtonValue = digitalRead(BUTTON);
 /*如果检测到按钮的状态发生了改变,则发送指令到阿里云平台以更新设备信息*/
 if (ButtonValue != ButtonState)
 {
    /*保存按钮的当前状态*/
    ButtonState = ButtonValue;
    /*按下:发送开灯指令,阿里云IoT上的相应设备状态变为1;松开:发送关灯指令,阿里云IoT上的相应设备状态值变为0,只需改变Identifier后的值*/
    String tempMseg = "{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":"+(String)ButtonState+"},\"method\":\"thing.event.property.post\"}";
    char sendMseg[tempMseg.length()];
    strcpy(sendMseg,tempMseg.c_str());
    client.publish(pubTopic,sendMseg);
    delay(1000);
  }
  client.loop();
}

五、数据测试1、产品管理进入在线调试窗口,功能:led开关(switch2) 方法:设置 ,"switch2": 1;发送指令,
截图201905301947482289.png



2、通过串口监视器观察串口发送的数据,表示接收数据成功!
截图201905301951337842.png



截图201905301950531117.png

六、移动控制设备控制灯的开关

1、创建IoT套件智能灯光

截图201905301955378959.png

2、导入产品

截图201905302000304705.png

3、产品被激活,联产品设备



截图201905302005196193.png

七、移动应用开发

1、新增可视化应用

截图201905302009324667.png

2、配置物联智能灯光APP页面

截图201905302012179316.png

3、预览测试


八、知识拓展

IoT Studio
物联网开发服务 (IoT Studio,原 Link Develop),是阿里云针对物联网场景提供的生产力工具,可覆盖各个物联网行业核心应用场景,帮助您高效经济地完成设备、服务及应用开发。物联网开发服务提供了移动可视化开发、Web 可视化开发、服务开发与设备开发等一系列便捷的物联网开发工具,解决物联网开发领域开发链路长、技术栈复杂、协同成本高、方案移植困难的问题,重新定义物联网应用开发。

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

本版积分规则

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

硬件清单

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

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

mail