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

相关实践学习
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
5月前
|
数据安全/隐私保护
小红书自动评论软件,小红书评论回复脚本,autojs框架分享
该脚本主要实现以下功能模块: 关键词触发机制
|
11月前
|
前端开发 安全 UED
React 文件预览组件:File Preview
在现代Web应用中,文件上传和预览功能至关重要。本文基于React库,详细介绍如何构建文件预览组件,涵盖文件选择器、图片预览、文件大小限制及多种文件类型支持。通过实际代码示例,解析常见问题如跨域请求、文件路径处理和状态管理,并提供解决方案。帮助开发者提升用户体验,减少误操作。
799 2
|
JSON 安全 fastjson
使用fastjosn作为消息转换器,与openapi冲突问题
从Swagger 2升级到SpringDoc过程中,初整合SpringSecurity时遭遇重重难关。首战主页访问受阻,调整安全配置终通行。次遇文档版本不明,困惑不已。最棘手乃JSON序列化问题,快被逼疯。导师相助锁定疑点,在日期处理上,Fastjson与SpringDoc不兼容。解决方案:或回归Jackson,或自定义Fastjson字符串序列化器。经历三日奋战,终告捷,感慨良多。
455 1
使用fastjosn作为消息转换器,与openapi冲突问题
|
算法 大数据
【科研入门】评价指标AUC原理及实践
该文介绍了二分类问题的评估指标,特别是AUC的概念和重要性。文章首先讲解了混淆矩阵,包括TP、FP、FN和TN的含义,然后讨论了准确率、精确率和召回率,并指出它们在处理不平衡数据集时的局限性。接着,作者解释了阈值对分类结果的影响以及如何通过调整阈值平衡精确率和召回率。最后,文章重点介绍了ROC曲线和AUC,说明AUC作为衡量模型性能的无参数指标,其值越接近1表示模型性能越好。AUC可以通过计算ROC曲线下的面积或比较样本对的预测得分来求得。
939 1
【科研入门】评价指标AUC原理及实践
|
Java API 开发工具
【Android】安Android Studio环境搭建注意点
【Android】安Android Studio环境搭建注意点
305 1
|
传感器 物联网 机器人
AloT 物联网开发实战02(一)|学习笔记
快速学习 AloT 物联网开发实战02
394 0
AloT 物联网开发实战02(一)|学习笔记
|
前端开发 数据库
jackson序列化时区问题
jackson序列化时区问题
388 1
jackson序列化时区问题
|
算法 安全 物联网
AloT 物联网开发实战02 (二)
AloT 物联网开发实战02 (二)
574 0
AloT 物联网开发实战02 (二)
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 递归死循环案例及解法
背景 PostgreSQL 提供的递归语法是很棒的,例如可用来解决树形查询的问题,解决Oracle用户 connect by的语法兼容性。 请参考https://yq.aliyun.com/articles/54657 但是如果参与递归查询的数据集有问题,例如数据打结的问题。则会导致递
7362 0
|
存储 传感器 运维
AloT 企业物联网平台入门01|学习笔记(一)
快速学习 AloT 企业物联网平台入门01
977 17
AloT 企业物联网平台入门01|学习笔记(一)

相关产品

  • 物联网平台