高级会员

- 积分
- 710
- 金钱
- 710
- 注册时间
- 2014-8-14
- 在线时间
- 224 小时
|
例程没有看到TLS加密通信,自己问了问AI,给出的答案也是千奇百怪,看了下乐鑫的例程,路径为:Espressif\frameworks\esp-idf-v5.1.2\examples\protocols
https的,我比较喜欢自己组包发送请求,这样平台通用性很强,也看了具体内容,具体到如何调用接口的部分,比较模糊了。
也看了mqtt里边的ssl,同样的,底层的接口调用都看不到,在mqtt组件里完成了,我也是比较喜欢paho-mqtt来自己组包协议,自己调用网络接口来发送和接收数据。
--------------------------------------------------------------------------
之所以我喜欢这样,我是想吧硬件平台和软件应用尽可能分离开,这样一旦我换一个硬件,比如使用4G网络,有线网络,这样我的应用层是通用的,我只需要吧网络底层接口做好就可以了。
--------------------------------------------------------------------------
进入主题(核心步骤是6,7,8,9)
1.wifi连接和tcp直连是一样的,照抄例程或者用自己做好的就行。
2.获取你要连接的云平台的认证证书,以阿里物联网为例,可在:首页>物联网平台>操作指南>设备接入>使用协议自主接入>使用MQTT协议自主接入>MQTT-TLS连接通信,下载"阿里云物联网平台自签名证书"。HTTPS的证书在:首页>物联网平台>操作指南>设备接入>使用协议自主接入>使用MQTT协议自主接入>MQTT-WebSocket连接通信(操作步骤>1.准备证书>最后的蓝色字体"根证书")下载。
3.包含头文件,#include "esp_tls.h"
4.证书文件后缀是.crt,只需要把后缀改为.pem即可,然后修改为如下格式,主要是加上双引号和换行符
5.使用 esp_tls_cfg_t 结构体配置证书,如图
6.在wifi got ip之后,使用 esp_tls_t *esp_tls_init(void) 接口创建tls句柄。
7.然后使用接口 int esp_tls_conn_new_sync(const char *hostname, int hostlen, int port, const esp_tls_cfg_t *cfg, esp_tls_t *tls) 连接,当前我看了接口参数,只支持域名连接,mqtts端口为8883,后边两个参数就是配置的证书和创建的tls句柄。
8.使用接口 ssize_t esp_tls_conn_write(esp_tls_t *tls, const void *data, size_t datalen) 发送数据。
9.使用接口 ssize_t esp_tls_conn_read(esp_tls_t *tls, void *data, size_t datalen) 接收数据。
--------------------------------------------------------------------------
这样就具备了连接,发送,接收的功能了。在此基础上,我使用mqtt协议接入了阿里云,上传数据和下发数据,对用户来说,除了接口不一样,其他都是一样的,基本属于无损替换。
也试了自行组包https,自动创建设备(https只支持预注册,mqtts可以支持到免预注册),这样底层不管是tls还是tcp直连,我的应用层代码只是替换下接口的事情。
|
|