AloT 物联网开发实战02 (三)|学习笔记

简介: 快速学习 AloT 物联网开发实战02 (三)

开发者学堂课程【阿里云 AIoT 物联网开发实战:AloT 物联网开发实战02】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/328/detail/3695


AloT 物联网开发实战02 (三)


3、定义物模型

去平台创建产品,然后给产品定义物模型,

image.png

本次实践只有温度和湿度。

image.png

去注册设备,获取设备身份,用来设备端的开发。

image.png

到物联网平台的控制台可以创建产品,比如家庭温湿度计,选择自定义品类、直连设备 WiFi 的方式  Json,认证方式是密钥,也就是三组,然后点击创建。

image.png

创建完成之后可以看到基础通讯的一些 topic,每个 topic 是做什么用的是上报还是订阅,模型通讯的 topic 都不需要自定义,系统会自动生成的。

image.png

还有一部分企业可能需要自己定一些私有的通讯的 topic,可以在自定义里来添加。

image.png

到功能定义里来生成物模型,点击编辑添加功能。

image.png

添加自定义功能确定,生成属性。

image.png

再完成湿度的定义,点击发布上线。

image.png

拥有模型定义。

image.png

前往设置,添加设备,添加成功。

image.png

可以一键复制设备的三元组。

image.png

4、设备端开发

S8266的板子、传感器再加上光线,成本都很低。

image.png

需要下载一个安装的 ide 的编辑器。下载完之后需要在很重要的扩展版,管理里边添加 url,通过这里可以拉取到 SP8266 的相关的部件。

image.png

配置好之后,在里边的管理输入 ESP866,然后选择2.4.1的固件版本。

image.png

同时还需要去加载一些驱动程序,存放的目录在 libraries,用到了一个 json 的工具,一个加密包,一个加密的算法,以及 PubSub 的一个 MQTT 的实现。注意需要修改 package 报文,keep alive 时间改到300。

image.png

在这之后需要选择 NodeMCU1.0(ESP-12E Module) 模块,波特率选择 115200,port 可以看自己电脑窗口的标识。数据 DHD11传感器的接线接到第七口,ESP8266 的第七线。剩下的一个是 GHD 地线和 VCC 直接接到 3.3V,地线直接接到执行地上就可以,完成了设备硬件的接线。

image.png

看一下开发版,可以修改资源加载的扩展。

image.png

加载成功之后,可以看到 ESP8266的一些模块,选择 NodeMCU 1.0 (ESP-12E Module)

image.png

波特率选最高,选择11520

image.png

Part 不是蓝牙的。

image.png

5、程序开发

Esp8266_loT

finclude <ESP8266WiFi.h>

/*PubSubClient 2.4.0 */

#include <PubSubClient.h>

/*ArduinoJson 5.13.4*/

#include <ArduinoJson.h>

/*DHT sensor library 1.3.0 */

#include “DHT.h"

/*Crypto 0.2.0*/  

#include"SHA256.h"

#define DHTPIN 13//nodeMCU pin

#define DHTTYPE DHT11// Define DHTtype

#define BAUD_RATE 115200

#define DELAY TIME 10*1000 //60s interval between updating data

/*连接您的WIFI SSID和密码 */

#define WIFI SSID "aliyun_iot"  

#define WIFI PASSWD "88888888"  

*设备的三元组信息*/

#define PRODUCT_KEY "a1kRdXDgNOv"  

#define DEVICE NAME "tado"  

#define DEVICE_SECRET "7caf9c4e98fdf8496466a8d8941a321 c"  

#define REGIONID "cn-shanghai"  

/*IoT 物联网平台 Endpoint 域名和端口号 */

#define MOTT SERVER PRODUCT KEY".iot-as-matt"REGION_I D"aliyuncs.com  

#define MOTT_PORT 1883  

#define MQTT_USRNAME DEVICE_NAME“&" PRODUCTKEY  

//用于身份验证的 MOTT_PASSWD 和 CLIENT_ID

#define CONTENT STR FORMAT "clientIdesp8266deviceName" DEVICE NAME "productKey” PRODUCT KEY "timestampyd"  

char CLIENT_ID[80]={'\0'};  

char *MOTT_PASSWD;

/*topic 和 payload*/

#define PROP_POST_TOPICT“/sys/" PRODUCT_KEY"/”DEVICE_ NAME"/thing/event/property/post"

#define BODY_FORMAT"{\"id\":\"123\", \"version\":\"1.0\", \" method\" :\"thing.event .property.post\",\"params\":{\"temperature\":$.1f,\"humidity\”%.if}}”

DHT dhtDHTPINDHTTYPE);  

WiFiClient espClient;

PubSubClient client(espClient);

//set up module like main founction  

void setup()

{

Serial.begin(BAUD_RATE;

//initalize DHT sensor  

dht.begin();

//生成身份验证的 MQTT_PASSWD 和 CLIENT_ID

char hashs[32];

char buff[128]={'\0'};

int timestamp=millis);

sprintf(CLIENT_ID,“esp82661securemode=3signmethod=hma csha256timestamp=dtimestamp);

sprintf(buff,CONTENT_STRFORMATtimestamp); I  

SHA256 sha256;

sha256resetHMAC(DEVICE_SECRETstrlen(DEVICESECRET); sha256.update(buff,strlen(buf)):

sha256finalizeHMAc(DEVICE SECRETstrlen(DEVICE SECRET)ha shsstrlen(hashs))

MQTT_PASSWD=hex_to_str(hashssizeof(hashs));

wifiInit();

}

//this runs over and over  

void loop{

// if Read temperature as Fahrenheit then set a parameter(isFahrenheit=true)  

float temperature=dht.readTemperature);  

float humidity=dht.readHumidityO;

// Check if any reads failed and exit early (to try again). if(isnan(temperatureIisnanChumidity)){

Serial.printlnC"read temperature or humidity data error!");

} else {

Serial.print("read temperature:");  

Serial.println(temperature);

Serial.printC"read humidity:");

char jsonBuf[128];

sprintf(jsonBuf,BODY_FORMATtemperaturehumidity);

Serial.printn(jsonBuf);

if(client.connected()){

Boolean d=client.publish(PROP_POST_TOPIC,jisonBuf);

Seciot,printCpublish;1=成功,0 -失败,云端返回Code="); Serialprintin(d);}}

client.loop();

//wait for delay time before attempting to post again delay(DELAY_TIME);

}

void wifiIntto)

{

WiFi.mode(WIFI_STA);

WiFi.begin(WIFI_SSID,WIFI_PASSWD );

while(WiFi.status()!=WL_CONNECTED)

{

delay(1000)

Serial.printinC“WiFi not Connect");

}

Serial.println("Connected to AP);  

Serial.println("IP address:");

Serial.println(WiFi.localIPO());

/*连接 WiFi 之后,连接 MQTT 服务器*/

client.setServerMQTT_SERVERMOTT_PORT) client.setCallback(callback);

mqttCheckConnect());

}

void callback(char *topic, byte *payload, unsigned int length)

Serial,printC"Message arrived ["); ‘

Seriolprint(topic);

Serial.print("]“);

payload[Length]='\@';

Serial.pmntlnchar)payload)

}

void mattCheckConnect()

{

while(!client.connected())

{

Serial.printlnC"Connecting to MQTT Server...");  

Serial.printlnMOTT PASSWD);  

Serial.printin(CLIENT_ID):

if(client.connectCCLIENT_IDMQTT_USRNAMEMQTT_PASSWD)

{

Serialprintln("MQTT Connected!");

}

Else

{

Serial.printC"MQTT Connect err:");  

Serial.println(client.state());

}

先引入 esp8266 的 wifi 环境,PubSub 是用来做 MQTT 的通讯,

是一个 json 格式化保存的发送,DHT.h 是温湿度传感器,#include"SHA256.h" 是用来做签名的加密算法。efine DHTPIN 13是对应的第七的开发板端口的 PIN 码,#define BAUD_RATE 115200 是传出的波特率,#define DELAY TIME 10*100 数据采集的延时 10s,#define WIFI SSID "aliyun_iot" #define WIFI PASSWD "88888888"  wifi 的账号密码,PRODUCT KEY".iot-as-matt"REGION_I D"aliyuncs.com 通过开发文档看到 server 拼接方式,端口1883, "clientIdesp8266deviceName" DEVICE NAME "productKey” PRODUCT KEY "timestampyd"  连接字符串用来签名模板,最终会把 DEVICE NAME、PRODUCT KEY 替换掉,“/sys/" PRODUCT_KEY"/”DEVICE_ NAME "/thing/ event/property/post" 上报的 topic 报文,\"id\":\"123\", \"version\":\"1.0\", \" method\" :\"thing.event .property.post \",\"params\":{\"temperature\":$.1f,\"humidity\”%.if}}”有温度和湿度两个值会被替换掉。

DHT dhtDHTPINDHTTYPE); 初始化传感器的驱动,PubSubClient client(espClient); PubSub 的初始化,Serial.begin(BAUD_RATE;

//initalize DHT sensor dht.begin(); 设置波特率传感器启动,有了连接的身份信息,先把 wifi 连接上,整体运行之后每隔十秒去读取传感器的温湿度,如果温湿度正常就会发起网络端的上报。client.publish(PROP_POST_TOPIC,jisonBuf);publish 的一个结果,1代表成功,0代表失败,完成了设备端的编码。

当完成程序编码之后可以把开发板通过 usb 接口连到电脑上,通过收录工具的来进行程序的一个收录。点击收录同时开启监视器。

可以看到在物联网平台上,设备状态属于离线。先进行程序的收录,目前已经在通过串口来收录,目前完成了30%多。

image.png

收录完成之后,可以看到程序连接 WiFi 接入点,然后发起阿里云 MQTT 的连接,刷新一下控制台看到当前的设备也仍处于在线状态。数据为55和24,也是上报的数据。

image.png

设备上报的数据27和85。下一个十秒的时候数据采集失败,数据采集失败也很常见。

image.png

下一个十秒看到传感器成功地采集到了一个新的数据,26度、71湿度值,控制台实时的更新了一条数据。

image.png

下一个十秒数据采集失败。再一个十秒数据更新为26度、63,26度、61,26度、59,因为不哈气所以数据值一直下降。

image.png

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
23天前
|
传感器 边缘计算 物联网
《手把手实现一个物联网项目》02 什么是物联网?
在当今数字化时代,我们经常听到物联网(Internet of Things,IoT)这个术语,但是什么是物联网呢?物联网是如何影响我们的日常生活和未来的发展呢?在本文中,我们将探索物联网的定义、架构以及一些常见的应用领域。
|
3月前
|
传感器 编解码 安全
《物联网技术》课程笔记——第三章 物联网感知技术之传感技术
《物联网技术》课程笔记——第三章 物联网感知技术之传感技术
《物联网技术》课程笔记——第三章 物联网感知技术之传感技术
|
存储 SQL 运维
AloT 物联网开发实战02 (四)|学习笔记
快速学习 AloT 物联网开发实战02 (四)
96 0
AloT 物联网开发实战02 (四)|学习笔记
|
算法 安全 物联网
AloT 物联网开发实战02 (二)
AloT 物联网开发实战02 (二)
288 0
AloT 物联网开发实战02 (二)
|
传感器 物联网 机器人
AloT 物联网开发实战02(一)|学习笔记
快速学习 AloT 物联网开发实战02
124 0
AloT 物联网开发实战02(一)|学习笔记
|
算法 安全 物联网
AIoT 物联网开发实战02|学习笔记(一)
快速学习 AIoT 物联网开发实战02
272 0
AIoT 物联网开发实战02|学习笔记(一)
|
存储 传感器 算法
AIoT物联网开发实战02|学习笔记(二)
快速学习AIoT物联网开发实战02
167 0
AIoT物联网开发实战02|学习笔记(二)
|
消息中间件 监控 网络协议
AloT 企业物联网业务平台实战03(一)|学习笔记
快速学习 AloT 企业物联网业务平台实战03
250 0
|
物联网 Shell API
AloT 企业物联网业务平台实战03(二)|学习笔记
快速学习 AloT 企业物联网业务平台实战03
193 0
AloT 企业物联网业务平台实战03(二)|学习笔记
|
JSON 缓存 物联网
AloT 企业物联网业务平台实战03(三)|学习笔记
快速学习 AloT 企业物联网业务平台实战03(三)
169 0
AloT 企业物联网业务平台实战03(三)|学习笔记

相关产品

  • 物联网平台