2851| 1
|
[讨论交流] 记一次阿里云IoT移动应用制作 |
本帖最后由 QAQ 于 2019-9-25 16:50 编辑 一,背景介绍: 最近很流行一句话,万物皆物联。身为一个DIY爱好者,我当然也不能错过。于是我入手了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元组数据填入到示例代码中即可: 执行以下的示例代码,实现每一钟检测一次数据。 [mw_shl_code=applescript,true]#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); }[/mw_shl_code] 6, 查看效果: 可以看得到,我们的手机app上已经得到了最新消息的推送: |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed