2019-9-25 15:46:45 [显示全部楼层]
2921浏览
查看: 2921|回复: 1

[讨论交流] 记一次阿里云IoT移动应用制作

[复制链接]
本帖最后由 QAQ 于 2019-9-25 16:50 编辑

一,背景介绍:      
       最近很流行一句话,万物皆物联。身为一个DIY爱好者,我当然也不能错过。于是我入手了DFRobot的阿里云IoT套件,功能确实非常的实用,并且门槛很低。刚好手里还有一块BME680温湿度检测传感器,本着物尽其用的原则。我制作了这一款室内环境检测装置。

二,实物展示:

记一次阿里云IoT移动应用制作图1

三,制作步骤:

1, 硬件准备:

记一次阿里云IoT移动应用制作图34

2, 连线图:

记一次阿里云IoT移动应用制作图2

3, 搭建开发环境:

将以下所需要的库文件解压后放置到Arduino IDE的libraries文件夹下
记一次阿里云IoT移动应用制作图3

记一次阿里云IoT移动应用制作图5

4, 配置阿里云移动应用:

4.1,登陆阿里云
1,登陆进入到阿里云首页,按下图操作:

记一次阿里云IoT移动应用制作图6



4.2,创建项目
1,进入到控制台后,点击开发服务下的IoT Studio创建一个环境检测项目:
记一次阿里云IoT移动应用制作图7
记一次阿里云IoT移动应用制作图8

4.3,创建产品

1,在生成的项目下面,创建一个产品。点击产品选项,选择新建产品
记一次阿里云IoT移动应用制作图9
2,在产品创建界面创建一个名叫室内环境检测的产品:
记一次阿里云IoT移动应用制作图10
3,产品生成后,点击查看进入到产品详情页,如下图所示,选择功能定义,再点击添加功能
记一次阿里云IoT移动应用制作图11
4,  如下图添加温度示例所示,分别添加温度、湿度、气压、3个功能参数:
记一次阿里云IoT移动应用制作图37           记一次阿里云IoT移动应用制作图12          记一次阿里云IoT移动应用制作图13
创建完成后效果如下:
记一次阿里云IoT移动应用制作图14

4.4,创建设备
1,产品创建完成后,就可以开始创建设备了。步骤如下图所示:
记一次阿里云IoT移动应用制作图15
2,在弹出窗口点击关闭即可:
记一次阿里云IoT移动应用制作图16
3,设备创建完成后,回到产品中去调试刚才创建的自定义功能,按下图操作即可:
记一次阿里云IoT移动应用制作图17

4.5,创建移动应用

1,产品和设备都创建完毕后,就可以开始创建移动应用了。如下图所示,新建一个移动应用:
记一次阿里云IoT移动应用制作图18
2,创建一个名叫环境检测的应用:
记一次阿里云IoT移动应用制作图19
3,修改新增标签页1的名称为环境检测:
记一次阿里云IoT移动应用制作图20
4, 创建一个容器:
记一次阿里云IoT移动应用制作图21
5,创建内容和配置数据,拖入两个文字模块到之前的容器中,并将第一个文字模块的内容改为温度。
记一次阿里云IoT移动应用制作图22
与温度相同,创建另外几个参数的显示模块:
记一次阿里云IoT移动应用制作图23
配置动态数据,如下图所示配置温度的动态数据,湿度、气压的配置方式与之相同。只是选择的属性不同。
记一次阿里云IoT移动应用制作图24
全部数据配置完成,如下图所示:
记一次阿里云IoT移动应用制作图25
6,配置入口列表页,按下面的图片操作即可:
记一次阿里云IoT移动应用制作图26

记一次阿里云IoT移动应用制作图27
7,构建移动应用,按下图所示操作。构建一个安装包:
记一次阿里云IoT移动应用制作图28
点击我只想自己使用:
记一次阿里云IoT移动应用制作图29
点击随机生成再点击下一步等待打包成功即可。
记一次阿里云IoT移动应用制作图30

4.6,下载移动应用到手机

1,将打包好的应用下载到手机中:
记一次阿里云IoT移动应用制作图31
2,下载安装好后,打开手机即可看到我们创建的移动应用:
记一次阿里云IoT移动应用制作图32
5, 上传代码:
将阿里云iot平台上的设备3元组数据填入到示例代码中即可:
记一次阿里云IoT移动应用制作图35     记一次阿里云IoT移动应用制作图36
执行以下的示例代码,实现每一钟检测一次数据。
[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上已经得到了最新消息的推送:
记一次阿里云IoT移动应用制作图33

pATAq  版主

发表于 2019-9-27 14:53:24

想搞个天猫精灵的
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

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

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

mail