开发者学堂课程【基于STM32的端到端物联网全栈开发:Paho MQTT 客户端接入阿里云物联网平台(3)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/574/detail/7939
Paho MQTT 客户端接入阿里云物联网平台(3)
Paho MQTT客户端介绍以及示例操作
1.软件包和项目结构
2.使用 CubeMX 生成系统初始化框架和代码
3.网络通信的管理(网络通信抽象层和 wifi 驱动)
4.使用 Paho MQTT 客户端协议栈连接阿里云 loT 平台
5.例程参数的存储及 Sensor 数据的读取
X-NUCLEO-IKS01A2 Sensor 扩展板
EXT-AT3080 Wifi 扩展板
节点端系统框图:
//mcu传感器通过 ifunc 与外部的传感器扩展板进行通信,来读取板上的传感器值。
//通过串口与 wifi 扩展板进行通信,进行wifi的配网,发送温湿度数据,以及接收云端下发的命令等。
//UART 串口连接 STLINK,支持虚拟串口功能,可以与PC端的串口进行通信,历程中,可以通过此串口打印运行的信息到 PC 端的串口工具
//STM32L4R5ZI 上集成有可供用户使用的3个 led 灯以及一个按钮,可以展示程序运行的状态,报警提示以及启动虚拟串口的输入。
IAR 工程及文件结构:
//I2工程的结构对应各个文件夹的结构
//I2工程中 DRIVERS 目录下包含了 STM32的 hal 驱动以及 system 板中传感器的驱动代码。
//middlewares 目录下包括 paho.mqtt 协议栈以及 mbedtls 协议栈
//wifi 目录下是 wifi 驱动部分的代码,相关文件在工程文件夹的 src 文件夹下
//AliIoT 目录下是连接 AliIoT 平台的 MQTT 客户端的实现,具体文件在 src 文件夹中的 Ali 文件夹中
//Common 文件是 Flash 操作以及网络接口相关的代码,具体文件在 src 文件夹中的 Common 文件夹中
项目例程软件架构:
应用程序:
1.节点端业务程序
2.阿里云 MQTT 连接适配层
//根据阿里云平台的要求,依照用户提供的三元组信息构建响应的 MQTT 连接参数和主题,再调用底层提供的 API,进行连接和通信
中间件:
1.Paho MQTT embedded C
2.mbedTLS(HMAC-SHA1)
3.网络接口抽象
//网络接口抽象层对底层的网络驱动接口进行封装,向上提供统一的网络接口函数,将应用层的代码与底层的实际网络接口分开,当用户改变以太网、wifi、2/3g 网等不同的连接方式时,不会影响应用层的代码,它与 MQTT 通过网络抽象层向下调用对应的 wifi 驱动完成网络数据的发送和接收。
底层驱动:
1.STM32L4 Cube HAL 硬件抽象层
2.传感器驱动
3.WIFI 模块驱动
//HAL 硬件抽象层向上层软件提供了使用各个外设的接口函数,包括通用或者是扩展属性的 API,上层的中间件以及应用程序都可以调用这些 API 函数操作外设,这样不会让上层的软件不会特别的以来某个 MCU,使程序更具有复用性,可以使用到其他 MCU 系列中。
//STM32L4 Cube 以及传感器驱动层都可以通过 CubeMAX 工具进行图像化配置,自动生成相关的代码
MCU 外设的使用:
与 WIFI 扩展板的接口定义:
1. (1)NCULEO 板接口号:CN10
(2)接口引脚号:14
(3)接口引脚名:D1
(4)STM32引脚:PD8
(5)STM32外设配置:USART3_TX
2. (1)NCULEO 板接口号:CN10
(2)接口引脚号:16
(3)接口引脚名:D1
(4)STM32引脚:PD8
(5)STM32外设配置:USART3_RX
与传感器扩展板的接口定义:
1.(1)NCULEO 板接口号:CN7
(2)接口引脚号:2
(3)接口引脚名:D15
(4)STM32引脚:PB8
(5) STM32外设配置:I2C1_SCL
2.(1)NCULEO 板接口号:CN7
(2)接口引脚号:4
(3)接口引脚名:D14
(4)STM32引脚:PB9
(5)STM32外设配置:I2C1_SDA
虚拟串口接口定义:
连接到 STLINK USB 虚拟串口:
1.(1)STM32引脚:PG7
(2)STM32外设配置:LPUART1_TX
2.(1)STM32引脚:PG8
(2)STM32外设配置:LPUART1_RX
与 USER 按键接口定义:
(1) NCULEO 板:蓝色 User 按键
(2)STM32引脚:PC13
(3)STM32外设配置:GPIO 外部中单,下降沿触发
(4)功能:控制进入虚拟串口输入模式,输入 WIFI 配网,三元组信息
与 LED 灯的接口定义:
1.
(1)NCULEO 板:LD1(绿)
(2)STM32引脚:PC7
(3)STM32外设配置:GPIO 输出
(4)功能:每次上传温湿度信息时闪烁一次
2.
(1)NCULEO 板:LD3(红)
(2)STM32引脚:PB14
(3)STM32外设配置:TIM15CH1,PWM 输出
(4)功能:高温报警提醒
4、Systick 的用途:应用的延时功能,Paho 协议 Timer
使用 CubeMX 初始化系统:
1. 选择 MCU 型号
2.#引脚外设配置(UART/I2C/EXT/TIMER)
#时钟配置
#插件配置
3.生成初始化工程
详细步骤:
检查创建工程所依赖的软件包是否已经被正确安装,通过菜单进入软件包的驱动管理
如果没有安装,可以点击选中,点击 install 进行安装。
下载完毕后点击 ACCESS TO MCU SELECTOR 创建一个新的工程
在搜索栏中进行搜索并在右侧窗口选择对应的型号进行双击,项目就创建成功。
引脚标签页:
可以进行外设所需要的配置
时钟配置页面:
工程管理:
可以设置要生成的工程相关的配置
工具标签页面:
提供功耗评估
点击左侧配置修改配置引脚:
点击该引脚,在弹出的功能单中选择所需要的功能。
外部中断和定时器配置
Timer15配置:
PWM 输出模式:
使能 EXT13外部中断
系统时钟=120MHz---(预分频=2400-1)----50KHz 计数时钟;自动重载寄存器=50000-1;捕获/比较寄存器=25000;---周期1s;占空比50%;---(PWM)---红灯0.5秒闪烁间隔
配置引脚:
配置控制按键和 LED 灯:
1.与 LED 灯的接口定义:
2.与 USER 按键接口定义
配置 TIME15:
将 pc 进行外部中断:
为 GPIO 口定义用户标签:
时钟配置:
点击时钟配置标签,进入时钟配置页面
系统时钟选择 PLLCLK 作为时钟源,选择 MSI 作为输入时钟,设置系统时钟为120HZ,点击回车
点击左侧 Addtionnal Software,点击其中的插件
勾选所选的组件并对组件进行配置
配置扩展板
点击工程管理页面,进入并进行配置,最后点击右上角的 GENERATE CODE 生成工程:
打开工程,点击配置 Linker
调整参数放置位置和选择大小。