开发者学堂课程【HaaS 物联网应用开发课程:4_6_Haas 连接云端实验_理论篇】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/801/detail/13840
4_6_Haas 连接云端实验_理论篇
内容介绍:
一、实验简介
二、云端配置
三、代码编写、编译与烧录
四、Wi-Fi 连接与分析
五、DHCP 获取与分析
六、MQTT 连接分析
一、实验简介
1.实验目标与拓补
实验拓补结构如下:
设备阿里云通过 MQTT 消息进行数据的发送和接收
实验目标:通过该实验,熟悉以下几个知识点:
①在阿里云创建新产品
②熟悉代码编辑与编译和烧写
③熟悉 Wi-Fi 连接过程
④熟悉 Lwl 中 DHCP 获取 IP 地址过程
⑤熟悉 MQTT 连接过程
二、云端配置
在讲云端配置之前,我们来讲一下为什么云端配置要放在这里:因为要达到一个实验是让设备与云端进行交互,首先就需要在云端创建相关内容使得设备与云端可以进行交互,包括一些鉴权等相应的操作,那么下面我们来看一下云端配置需要什么。
云端的配置,首先是要创建一个产品类型,然后在这个产品类型里面创建一个设备。
1.新产品创建
第一步是登录到阿里云的官网上,连接如下:
https://iot.console.aliyun.com/product,也可以扫描相关二维码进入;之后在公共实例下有个设备管理,选择产品,再点击创建产品,可以选择创建什么样的产品。
这里我们实验创建的是直连设备,所谓直连设备是指设备与云端是直接通过 Wi-Fi 连到云端的设备;联网方式选择Wi-Fi,数据格式选择透传,就是收到什么数据由发送什么数据决定。通过以上方式就在云端上创建了产品。第二步是创建一个设备
2.创建设备
在公共实例下的设备管理里面的设备,点击添加设备,选择所属产品,设置设备名称;设置完成之后点击确定,会显示添加设备成功;之后再点击前往查看就可查看设备的详细信息;在设备端,需要点击DeviceSecret后的查看,可以看到设备三元组的信息,三元组信息是用于 MQTT 在云端做认证,这个认证是为了数据的安全,所以需要三元组的信息。点击一键复制,就可以把三元组信息复制下来,它在设备端需要使用。
三、代码编写、编译与烧录
1.代码编写
这里需要用到我们刚刚讲的三元组信息,打开文件修改文件 application/example/mqtt_demo/mqtt_example.c 并修改其中的三元组信息:
#define PRODUCT_KEY "a18VwY88b79"
#define DEVICE_NAME "my_kaiguan"
#define DEVICE_SECRET "73009b38c5f12345c67890b2309
06f9f"
对应修改为刚刚从网页上获取的信息。
本次使用 mqtt_demo 工程作为例子,进行 mqtt 的实验。其中的三元组主要包括以上三个信息,对应值从云端网页获取。三元组的信息具体代表∶
宏定义 |
说明 |
PRODUCT_KEY |
产品的ID号码 |
DEVICE_NAME |
产品的名字 |
DEVICE_SECRET |
产品的密钥,用于安全验证 |
2.代码编译
代码编译主要分成两个步骤,第一个是配置编译的工程,使用的是 MQTT_demo,使用的开发版是 haaseduk1;配置之后执行编译,编译是使用 aos make,更多关于代码相关的可以参考前面的章节。
3.镜像烧录
接下来需要将代码编译好的镜像烧录到设备上,烧录主要分为两个步骤:第一个步骤是将设备连接到电脑上,特别注意的是要打开左边的电源开关;第二步是执行 aos upload 命令,它会自动烧录到设备上,烧录完成大概需要1-2分钟时间。烧录之后,就可以通过串口软件看到整个串口上的输出。
四、Wi-Fi 连接与分析
1.Wi-Fi 连接
今天的实验使用的是 open(没有密码)的 Wi-Fi,使用 open 的 Wi-Fi 可以看到所有没有加密的信息。
命令行 |
说明 |
netmgr -t wifi -c [ssid] [password] |
使用ssid password连网 |
命令行连接
#netmgr -t wifi -c haas
[Jan 01 00:00:26.251]<I>WIFI_SERVICE wifi_service_on:1895
[Jan 01 00:00:26.252]<E>WIFI_SERVICE wifi_service_wifi_co
nnect:2049 up netif
[Jan 01 00:00:26.252]<I>WIFI_SERVICE wifi_service_wifi_connec
t:2085 ssid=haas pwd=
Wi-Fi 扫描结果
27983/net wq | scan resulto: (2417, "haas" ,-51 , "a4 : 50:46:c2:2e:d9")
Wi-Fi 连接成功
<I>WIFI_SERVICE wifi_connected : 607
再看一下通过 Wireshark 抓的整个 Wi-Fi 连接过程
我们看到:Wi-Fi 连接过程中要发送 Probe Request 和 Response、能扫描到 Haas 设备并且能收到回应,然后通过association 等进行连接。因为是 open 的方式,所以当收到 Association Response 之后就表示成功连接,下面的信息会在后面做详细介绍。
Probe Request,SN=8,FN=0,Flags=........c,sSID=haas
Probe Response,SN=503,FN=0,Flags=....C,BI=100,SSID=haas
………
Authentication,SN=4055,FN=o,Flags=........C
Association Request,SN=10,FN=0,Flags=........c,SSID=haas
Acknowledgement,Flags=........C
Association Response,SN=4056,FN=0,Flags=... .....c
Association Response,SN=4056,FN=0,Flags=... .....c
五、DHCP 获取与分析
当 WiFi 连接之后会启动 DHCP cilent 从设备上获取 IP 地址,IP 地址在路由器里,如果打印出 IPV4 Address 就表示成功获取当前的 IP 地址;然后会看到 DHCP 的抓包过程,如下图显示,DHCP 有四个报文:discover、offer、request、ack,其中每个步骤可以参考之前的章节;之后挑选一个 DHCP REQUEST 的报文,表示设备向 DHCP 要 IP地址,如 Request IP Address:lwip(192.168.43.163)
启动 DHCP client
<I>WIFI_SERVICE wifi_dhcp_start:1764 start dhcp
获取到IP地址 [Jan 01 00:00:29.099]<I>WIFISERVICE
IPv4 Address
: 192.168.43.163
DHCP 过程抓包
DHCP REQUEST 报文 Request IP Address:lwip(192.168.43.163
注意:DHCP server 分配 IP 地址的服务器有可能是路由器上,也有可能在其他地方,这个需要根据局域网环境配置的情况来动态的看待这个问题。
如上述步骤,DHCP 整个过程就能获得IP地址,设备就能连接到局域网,如果这个局域网有上行出口能到广域网,那么整个设备就能连接到大网上,也就是能够成功联网,联网之后就是要设备与云端连接,这个连接需要 MQTT。
六、MQTT 连接分析
1.MQTT 连接
MQTT 连接
[Jan 01 00:00:29. 603] <I>MQTT connect pa rams :
MQTTVersion=4, cl ientID=a 18VwY t8b69.my ka iguan I t imes tamp=2524 608000000,v=sdk-c-3 .0.1,securemode=2,s i gnme thod=hmacs
ha256,lan=C, ss=1,gw=0 ,ext=01,keepAliveInterval=120, username-my_ kaiguan&a18VwYt8b69
云端连接成功
MQTT 连接之后,设备的 demo 会自动连接 MQTT 的服务器,连接的参数会打印出来,参数如上所示;通过这种方式能够连接到云端,并且在云端能够查看设备是否在线。
MQTT 连接成功之后就要做主题订阅和发布消息。
2.MQTT 订阅
MQTT 订阅主题
[Jan 01 00:00:14. 705]<I>MQTT mqtt subscribe packet sent, topic = /a18VwYt8b69/my_ kaiguan/user/get!
云端订阅日志
显示
{"Content":"subscribe topic:/a18VwYt8b69/my_ kaiguan/user/get"}表示:成功订阅了主题,从而看到云端的订阅日志。
3.MQTT 发送消息查看
MQTT 发布消息到主题
>
”message”:”hello!”
>
}
订阅之后,MQTT 就可以发布消息到主题,云端可以查看主题页面,点击云端运行日志就可以查看每一发送到云端的详细消息。
4. MQTT 发布消息
MQTT 发布消息是在设备管理下的设备理有个 topic 列表,点击 user/get 后的发布消息就能从云端发送消息到设备,相当于设备订阅了这个主题,从而收到信息。
5.MQTT 发布消息查看
云端发送消息
设备端收到信息
Payload:This is a test 123
云端发送消息,比如 This is a test 123,然后设备端就收到了消息并且将它打印出来。
如此,整个实验:设备完全从云端创建产品、创建设备,在设备端修改对应的消息,连接网络、获取 IP 地址以及MQTT 的连接、订阅、发布等整个流程就构成了整个网络的交互和通信。