本帖最后由 Kara 于 2025-5-27 16:37 编辑
基于STM32 HAL库与标准库的esp8266接入机智云方案(下篇)
在《基于STM32 HAL库与标准库的esp8266接入机智云方案(上篇)》中,我们详细介绍了硬件连接和机智云客户端的创建。本篇将重点讲解如何下载代码、分析下载的代码,并直接使用这些代码连接机智云。同时,我们还将讨论如何移植HAL库和标准库以实现与机智云的兼容,帮助开发者更高效地完成项目的云平台接入。
一、代码下载 注意:此时手机app端的该设备为网页端的虚拟设备仅仅是作为调试UI使用。之后移植完成代码后,会与ESP8266连接,此时会出现一个新的设备信息来控制MCU,确认后,就可以去生成代码了。
首先,确认项目的开发方式是标准库还是HAL 库,如果是标准库,只能选择其他平台。我使用的是HAL库,同时也是F1x的板子,所以我选择F103C8。输入PS码后即可点击生成项目代码。生成后下载下来使用即可!
后面如果需要加其他数据或者需要控制其他东西的话都是需要重新生成代码的! 二、分析下载下来的代码 下载下来后我们先简单观察里面的代码的基本功能和配置:我们打开下载下来的代码如果是F103C8型号就是可以直接使用的,如果不是我后面也会详细说移植步骤!我们打开里面的CubeMX工程可以发现:使用机智云需要一个定时器ms级别的中断和两个串口,一个打印信息,一个连接esp8266,还有两个按键(非必要),然后我们点开keil工程,查看main函数里面到底有什么,使用了什么:
- /* Initialize interrupts */
- MX_NVIC_Init();//中断优先级配置
-
- /* USER CODE BEGIN 2 */
- timerInit();//开启定时器中断
- uartInit();//开启串口2接收中断
-
- userInit();//初始化数据(比如,LED)
- gizwitsInit();//机智云初始化
- keyInit();//按键初始化
-
- GIZWITS_LOG("MCU Init Success , SoftVersion = %s\r\n",SOFTWARE_VERSION);//打印数据
- /* USER CODE END 2 */
- #ifdef OTA_ENABLE
- Pro_D2W_Ask_Module_Reboot();
- #endif
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
-
- /* USER CODE BEGIN 3 */
- userHandle();//数据上传
- gizwitsHandle((dataPoint_t *)¤tDataPoint);//任务处理(比如:开关LED)
- }
- /* USER CODE END 3 */
- AI写代码
- 我们可以使用CH340连接串口1,esp8266连接串口2,查看按键的打印信息:发现按键设置长短按,分别用来设置esp8266的工作模式,移植后的代码的串口发送函数已经包装成了GIZWITS_LOG
- #define GIZWITS_LOG printf ///<Run log print
-
-
-
- #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
- #endif /* __GNUC__ */
- /**
- * @brief Retargets the C library printf function to the USART.
- * @param None
- * @retval None
- */
- PUTCHAR_PROTOTYPE
- {
- /* Place your implementation of fputc here */
- /* e.g. write a character to the USART1 and Loop until the end of transmission */
- HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
-
- return ch;
- }
- AI写代码
- 想要熟悉使用机智云代码就必须会使用两个函数:
- userHandle();//数据上传
- gizwitsHandle((dataPoint_t *)¤tDataPoint);//任务处理(比如:开关LED)
- AI写代码
复制代码
userHandle();//数据上传
gizwitsHandle((dataPoint_t *)¤tDataPoint);//任务处理(比如:开关LED):点击跳转定义
点击进入箭头这个函数:
基本了解了代码的最基本的功能后,后续移植也会更得心应手。
三、直接使用下载下来的代码
4.1、修改代码点亮LED 下载的代码中只定义了一个定时器、两个串口、两个按键,其他就没有配置了,我们这里自己个他配置一个LED的GPIO口,用于模拟灯:
修改1:
- static void MX_GPIO_Init(void)
- {
-
- GPIO_InitTypeDef GPIO_InitStruct;
-
- /* GPIO Ports Clock Enable */
- __HAL_RCC_GPIOD_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
-
- /*Configure GPIO pin : KEY1_Pin */
- GPIO_InitStruct.Pin = KEY1_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);
-
- /*Configure GPIO pin : KEY2_Pin */
- GPIO_InitStruct.Pin = KEY2_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- HAL_GPIO_Init(KEY2_GPIO_Port, &GPIO_InitStruct);
-
- //自己添加的GPIO口初始化,用于驱动LED
- GPIO_InitStruct.Pin = GPIO_PIN_9;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- }
- AI写代码
复制代码
修改2:
四、连接机智云平台
然后按照要求连接号硬件和LED,上电试着连接机智云,先长按Key2进入airlink模式,然后使用手机打开机智云点击右上角的+,然后点击一键配网
连接机智云串口打印信息
五、HAL库移植机智云
前面我们已经熟悉了下载的代码的最基本需求:一个串口打印信息,一个串口连接esp8266,一个定时器ms级别中断,两个按键(非必要),那么我们进行移植之前就得先得到一个已经配置好的keil工程 5.1、Keil工程的生成 前面我们已经熟悉了机智云代码的最基本的需求,所以我们移植之前的需要得到一个符合条件的Keil工程,一个串口打印信息(串口1,115200bits/s),一个串口连接esp8266(串口2,9600bits/s),一个定时器实现ms级别中断(定时器2),两个按键(非必须),需要移植的代码中配置好的就是串口1、串口2,定时器2,如果我们想要使用其他的外设,我们就需要修改机智云代码中的句柄,比如我们想要串口1连接esp8266,串口2打印信息,定时器3实现中断,我们在机智云代码中需要的修改的地方:huart1和huart2互换地方,htim2修改为htim3,以此类推。 我们这里就不随便换他的外设配置了,就按照它的来配置,最快把这个机智云物联网平台使用起来:
打开外部高速时钟:
配置时钟频率:
配置定时器二:
别忘记了打开定时器中断:
配置串口1负责打印信息(115200bits/s):
配置串口二(9600bits/s):
一样别忘记打开中断:
配置点灯GPIO口:
最后生成工程即可:
由于篇幅有限,下一篇介绍机智云代码中的重要文件及其功能。
|