螺丝钉yy 发表于 2019-7-3 16:03:16

智能家居——智能插座

本帖最后由 螺丝钉yy 于 2019-7-3 16:03 编辑

   强迫症,{:5_179:}我猜很多人或多或少都有一点吧,只是严重程度的差别。是不是有人在出门后,在电梯间或者其他地方突然想起门是否关好了。为了确保安全又得折回去看一看是不是将门关上了。既费时间也费精力。想不想通过手机或者网页方式提醒:门没关上。这样的话就可以知道门是不是关好了,如果没有关好,可以通过关联设备将门关上,这些都可以由阿里平台和入门套件实现。这样的生活是不是很智能呢!         所需材料:
             阿里云lot入门套件x1
             智能手机                x1
   门锁用到的是阿里云lot入门套件里面的电磁锁,电磁锁的工作电压12v,所以需要外接12v的电压,电流要达到1A以上,当没有电的时候,门锁打开,当有电是门锁关上。所以我们需要用到继电器。电磁锁的具体使用方法可参考https://www.dfrobot.com.cn/goods-1948.html
开启我们的智能之旅
一、创建产品、设备
   打开阿里云物联网平台:https://iot.aliyun.com/
    创建产品,名为智能门锁,在这多说两句,我建议选择类别为自定义品类,我发现有些人选择其他的选项,也不是不可以,但是阿里云平台就会给你默认参数,无法进行修改,对后面的项目操作不方便。


   自定义功能。名称为:门锁状态,标识符为:LockStatus,数据类型:bool型,0表示关门,1表示开门。




创建设备。隶属于智能门锁产品下,名为Lock。



二、程序
   继电器是设置引脚插入D2口,电磁锁是读取信息,插入D3口。
示例程序
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DFRobot_Aliyun.h"

#define SET_DOOR_PIND2
#define READ_DOOR_PIND3

/*配置WIFI名和密码*/
const char * WIFI_SSID   = "WIFI_SSID";
const char * WIFI_PASSWORD = "WIFI_PASSWORD";

/*配置设备证书信息*/
String ProductKey = "you Product Key";
String ClientId = "12345";
String DeviceName = "you Device Name";
String DeviceSecret = "you Device Secret";

/*配置域名和端口号*/
String ALIYUN_SERVER = "iot-as-mqtt.cn-shanghai.aliyuncs.com";
uint16_t PORT = 1883;

/*需要操作的产品标识符*/
String Identifier = "you Identifier";

/*需要上报和订阅的两个TOPIC*/
const char * subTopic = "you sub Topic";//****set
const char * pubTopic = "you pub Topic";//******post

DFRobot_Aliyun myAliyun;
WiFiClient espClient;
PubSubClient client(espClient);

uint8_t readDoorStatus(){
return digitalRead(READ_DOOR_PIN);
}
static void openDoor(){
digitalWrite(SET_DOOR_PIN, HIGH);
delay(500);
digitalWrite(SET_DOOR_PIN, 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("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;
}
uint8_t DoorStatus = root["params"];
Serial.print("readDoorStatus=");
Serial.print(DoorStatus);
if(DoorStatus == 1){
    openDoor();
}
}

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);
pinMode(SET_DOOR_PIN,OUTPUT);
pinMode(READ_DOOR_PIN,INPUT_PULLUP);
digitalWrite(SET_DOOR_PIN, LOW);

/*连接WIFI*/
connectWiFi();

/*初始化Alinyun的配置,可自动计算用户名和密码*/
myAliyun.init(ALIYUN_SERVER,ProductKey,ClientId,DeviceName,DeviceSecret);

client.setServer(myAliyun.mqtt_server,PORT);

/*设置回调函数,当收到订阅信息时会执行回调函数*/
client.setCallback(callback);

/*连接到Aliyun*/
ConnectAliyun();

/*上报门锁状态信息*/
client.publish(pubTopic,("{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":"+readDoorStatus()+"},\"method\":\"thing.event.property.post\"}").c_str());
}
uint8_t tempDoorStatus= 0;
uint8_t lastDoorStatus= 0;
void loop(){
if(!client.connected()){
    ConnectAliyun();
}
tempDoorStatus = readDoorStatus();
if(tempDoorStatus != lastDoorStatus){
    lastDoorStatus = tempDoorStatus;
    /*上报门锁状态信息*/
    client.publish(pubTopic,("{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":"+tempDoorStatus+"},\"method\":\"thing.event.property.post\"}").c_str());
    delay(500);
}
client.loop();
}
将wifi部分改成自己现有的IP


将设备的三元组信息粘贴到相应的位置


将标识符和上报和订阅的topic进行替换



topic替换的成阿里云平台上的产品智能门锁的前两个数据


最后编译,下载程序。
三、创建移动应用服务
进入阿里云平台开发服务的lot studio,创建移动应用服务,隶属于智能家居项目下。将“自定义新增页1”改为智能门锁,用鼠标将可视化组建下的文字、开关控件拖动到中间的页面上

对门的开关进行配置数据,选择产品,设备,属性状态。然后对首页模块的列表页进行配置,链接到智能门锁。

然后点击报存,构建二维码,成功后你就试下你的门锁能不能智能打开了,如果可以,你试下自动关上如何实现。








页: [1]
查看完整版本: 智能家居——智能插座