发新帖本帖赏金 80.00元(功能说明)我要提问
返回列表
打印
[APM32F0]

基于RT-Thread Studio环境使用APM32F091+ESP8266模块实现联网

[复制链接]
987|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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模块,如何接入这些云平台。




使用特权

评论回复

打赏榜单

21小跑堂 打赏了 80.00 元 2023-03-06
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
21小跑堂 2023-3-6 16:00 回复TA
得益于RT-Thread Studio的丰富组件,用户可以快速搭建起较为完整的项目框架,使用体验较好,文章结构分明,过程详细。 
沙发
两只袜子| | 2023-3-9 15:52 | 只看该作者
讲解挺仔细,有时间慢慢看

使用特权

评论回复
发新帖 本帖赏金 80.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

50

帖子

1

粉丝