记一次阿里云IoT移动应用制作
本帖最后由 QAQ 于 2019-9-25 16:50 编辑一,背景介绍:
最近很流行一句话,万物皆物联。身为一个DIY爱好者{:5_122:},我当然也不能错过。于是我入手了DFRobot的阿里云IoT套件,功能确实非常的实用,并且门槛很低。刚好手里还有一块BME680温湿度检测传感器,本着物尽其用的原则。我制作了这一款室内环境检测装置。
二,实物展示:
三,制作步骤:
1, 硬件准备:
2, 连线图:
3, 搭建开发环境:
将以下所需要的库文件解压后放置到arduino IDE的libraries文件夹下
4, 配置阿里云移动应用:
4.1,登陆阿里云1,登陆进入到阿里云首页,按下图操作:
4.2,创建项目1,进入到控制台后,点击开发服务下的IoT Studio创建一个环境检测项目:
4.3,创建产品
1,在生成的项目下面,创建一个产品。点击产品选项,选择新建产品:2,在产品创建界面创建一个名叫室内环境检测的产品:3,产品生成后,点击查看进入到产品详情页,如下图所示,选择功能定义,再点击添加功能。4,如下图添加温度示例所示,分别添加温度、湿度、气压、3个功能参数: 创建完成后效果如下:
4.4,创建设备1,产品创建完成后,就可以开始创建设备了。步骤如下图所示:2,在弹出窗口点击关闭即可:3,设备创建完成后,回到产品中去调试刚才创建的自定义功能,按下图操作即可:
4.5,创建移动应用
1,产品和设备都创建完毕后,就可以开始创建移动应用了。如下图所示,新建一个移动应用:2,创建一个名叫环境检测的应用:3,修改新增标签页1的名称为环境检测:4, 创建一个容器:5,创建内容和配置数据,拖入两个文字模块到之前的容器中,并将第一个文字模块的内容改为温度。与温度相同,创建另外几个参数的显示模块:配置动态数据,如下图所示配置温度的动态数据,湿度、气压的配置方式与之相同。只是选择的属性不同。全部数据配置完成,如下图所示:6,配置入口列表页,按下面的图片操作即可:
7,构建移动应用,按下图所示操作。构建一个安装包:点击我只想自己使用:点击随机生成再点击下一步等待打包成功即可。
4.6,下载移动应用到手机
1,将打包好的应用下载到手机中:2,下载安装好后,打开手机即可看到我们创建的移动应用:5, 上传代码:将阿里云iot平台上的设备3元组数据填入到示例代码中即可:
执行以下的示例代码,实现每一钟检测一次数据。#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DFRobot_Aliyun.h"
#include "DFRobot_BME680_I2C.h"
#include "Wire.h"
/*配置WIFI名和密码*/
const char * WIFI_SSID = "你的wifi账号";
const char * WIFI_PASSWORD = "你的wifi密码";
/*配置设备证书信息*/
String ProductKey = "你的产品号";
String ClientId = "12345";
String DeviceName = "你的设备名称";
String DeviceSecret = "你的设备密码";
/*配置域名和端口号*/
String ALIYUN_SERVER = "iot-as-mqtt.cn-shanghai.aliyuncs.com";
uint16_t PORT = 1883;
/*需要操作的产品标识符(温度,湿度,气压两个标识符)*/
String TempIdentifier = "你的温度标识符";
String HumiIdentifier = "你的湿度标识符";
String PreIdentifier = "你的气压标识符";
/*需要上报和订阅的两个TOPIC*/
const char * subTopic = "你的接收topic";//****set
const char * pubTopic = "你的发送topic";//******post
DFRobot_Aliyun myAliyun;
WiFiClient espClient;
PubSubClient client(espClient);
#define CALIBRATE_PRESSURE
DFRobot_BME680_I2C bme(0x77);//0x77 I2C address
float seaLevel;
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();
}
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();
uint8_t rslt = 1;
delay(1000);
while(rslt != 0) {
rslt = bme.begin();
if(rslt != 0) {
delay(2000);
}
}
#ifdef CALIBRATE_PRESSURE
bme.startConvert();
delay(1000);
bme.update();
seaLevel = bme.readSeaLevel(525.0);
#endif
}
void loop(){
if(!client.connected()){
ConnectAliyun();
}
bme.startConvert();
delay(1000);
bme.update();
int temp = bme.readTemperature() / 100;
int hum = bme.readHumidity() / 1000;
int pressure = bme.readPressure()/100;
client.publish(pubTopic,("{\"id\":"+ClientId+",\"params\":{\""+TempIdentifier+"\":"+temp+",\""+HumiIdentifier+"\":"+hum+",\""+PreIdentifier+"\":"+pressure+"},\"method\":\"thing.event.property.post\"}").c_str());
delay(60000);
}
6, 查看效果:
可以看得到,我们的手机app上已经得到了最新消息的推送: 想搞个天猫精灵的
页:
[1]