本帖最后由 luobeihai 于 2023-3-1 09:34 编辑
#申请原创# @21小跑堂
最近需要评估下极海的 APM32F091 型号做一个物联网项目,然后发现 RT-Thread Studio 已经支持了极海的 APM32F0 系列的开发了。想着基于RT-Thread系统丰富的组件,可以很快把项目所需功能使用起来,我们只要专注于业务逻辑的开发即可。 下面,分享一下自己在 RT-Thread Studio 环境下,使用 APM32F091VCT6+ESP8266 模块,把联网功能使用起来。
1. 新建APM32F091VC的工程
1.1 安装APM32F0系列SDK包我们打开RT-Thread Studio的SDK包管理窗口,然后找到Geehy厂商的软件支持包,安装我们所需要的APM32F0系列的支持包,如下图:
1.2 新建APM32F091的项目工程1、点击创建RT-Thread项目 2、然后结合自己的硬件板子,选择合适的配置,创建项目即可。 2. 编译下载生成的基本工程下载完成之后,我们编译刚创建完成的工程,然后再下载到我们的硬件板子运行。 可以看到,编译完成,没有任何的警告和错误。 然后下载到板子运行,刚创建好的工程,main函数时不断想串口输出字符串的,打开串口终端打印信息如下: 串口可以正常打印字符以及接收串口输入的命令,说明工程已经正常运行起来了。 3. 添加ESP8266软件包RT-Thread Studio有非常丰富的组件可以使用,其中就包括ESP8266的软件包。我们可以在配置界面,直接点击使能ESP8266软件包就可以使用了。 所以说,在RT-Thread上使用ESP8266非常的简单,主要是人家帮我们把ESP8266的驱动,AT命令解析等代码都写好了。 1、双击 RT-Thread Settings 文件,打开配置界面,然后找到软件包 -> IoT物联网 -> AT设备... ,如下图: 2、使能AT客户端,以及配置相关选项。 实际上,我们开启了ESP8266软件包之后,会自动帮我们使能AT客户端组件的,因为ESP8266软件包要依赖该组件。如下图: 4. 使能UART2以及添加使能ESP8266的引脚初始化代码
4.1 使能UART2上面我们使能了ESP8266软件包,然后就可以编译下载到板子,看看运行情况了。 这个时候,是可以正常编译通过的。下载到板子的运行情况如下: 很明显提示说,没有开启UART2设备,这是因为我们上一步配置时,使用的是串口2连接ESP8266模块,但是我们却没有使能串口2,所以才有这样的报错。下面使能串口2: 其实很简单,只要在board.h定义串口2的宏,即可使能串口2。不过我看了APM32的串口驱动代码,串口引脚的初始化代码是要用户编写的(当然如果做的更完善的话,串口引脚的初始化代码都不需要用户编写)。 但是没关系,只是串口引脚的初始化代码而已,我们在drv_common.c文件中,厂商提供的驱动函数中,已经初始化了UART1和UART2的串口引脚了,如下图: 也就是说我们使用这两个串口的话,那就不用我们自己写引脚的初始化代码了。当然如果你使用的是其他的串口,根据这里的示例代码,自己对着编写一下也没什么。 4.2 添加使能ESP8266引脚的初始化代码我所使用的ESP8266模块,还需要向该模块的使能引脚输出高电平,ESP8266模块才能正常工作。这个引脚使用普通的GPIO口即可,我的引脚板子连接到模块的是PA0,所以初始化代码如下: void ESP8266_EN_GPIO_Init(void)
{
GPIO_Config_T GPIO_ConfigStruct;
RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA);
GPIO_ConfigStruct.mode = GPIO_MODE_OUT;
GPIO_ConfigStruct.pin = GPIO_PIN_0;
GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
GPIO_ConfigStruct.outtype = GPIO_OUT_TYPE_PP;
GPIO_ConfigStruct.pupd = GPIO_PUPD_NO;
GPIO_Config(GPIOA, &GPIO_ConfigStruct);
/* PA0 = 1, enable esp8266 */
GPIO_SetBit(GPIOA, GPIO_PIN_0);
}
我们把该函数编写到drv_common.c文件中,然后在该文件的 hw_board_init 函数中调用该函数,如下图: 5. 验证测试使能了UART2,以及添加了ESP8266模块使能引脚拉高的代码之后,这个时候再次编译下载,就可以正常运行了。可以看到AT Client初始化成功,然后把ESP8266模块的版本信息给打印出来,如下图: 当然,我们可以看到一个错误,说一行数据溢出了。关于这个问题,我看了很多网上的说法是ESP8266模块在启动的时候,有一个复位命令,该命令会返回一串很长的字符串,从而导致有这个错误,但是我们可以忽略该错误,因为不影响我们使用。 如果我们填写的WIFI名称和密码正确的话,那么可以正常连上WIFI的,如下图: 我们可以使用ifconfig命令查看IP地址: 如果我们的路由器能正常上网,那么我们使用ping命令,就可以正常平台百度的网址,如下图: 可以看到有数据返回,说明ESP8266模块已经能正常联网了。 以上就是在RT-Thread Studio环境下,使用APM32F091芯片 + ESP8266模块实现联网的过程了,当然我们使用其他系列的MCU过程还是差不多的。总体来说还是很简单的,当然这主要是因为RT-Thread提供的组件。 6. 挖坑我们使用了APM32F091+ESP8266实现了联网之后,其实可以做很多事情了。 比如使用MQTT协议,上传物联网设备监控到的数据到云服务器,然后我们通过手机查看该数据,从而实现远程监控。又或者我们通过手机等设备,发送控制命令到云服务器,然后云服务器再转发到具体的物联网设备,实现远程控制,比如智能台灯,智能浇灌设备等等。 MQTT协议在物联网设备中经常使用,我们基于RT-Thread系统,可以很容易就把该协议使用起来,如下图是RT-Thread支持的一些物联网云服务平台: 如OneNet、阿里云、腾讯云等平台。在RT-Thread系统下,很容易就能把我们的设备接入这些云平台。 这里挖个坑,后面我再介绍下,使用ESP8266模块,如何接入这些云平台。
|
得益于RT-Thread Studio的丰富组件,用户可以快速搭建起较为完整的项目框架,使用体验较好,文章结构分明,过程详细。