AT 组件:RT-Thread 一个比较典型的组件,
解决了不同网络模块AT命令之间的差异导致的重复开发的问题,大幅度简化了MCU+无线模块方案开发。
前言
一、AT 组件简介
二、at_device 软件包使用步骤
2.1 at_device 软件包
2.2 使用步骤
三、 测试问题
3.1 问题的出现(未解决)
3.2 需要DMA问题?(测试不是)
3.3 ESP8266固件问题?(应该也不是)
3.4 正常情况(以前的程序)
结语
上文我们开始接触 RT-Thread 的组件与软件包,在专栏的这部分,我并不计划深入分析这些组件与软件包的理论基础。即便如此,在介绍 SFUD组件的时候,我还是做了简单介绍。
正好手头有一个 ESP8266 的模块,就想着测试记录一下 AT 组件的使用。
今天我们要介绍的 AT 组件相对来说,比 SFUD 组件复杂一些,这次真的不介绍理论了,因为我能看到的理论资料,大家都能看到,我会把自己的参考的一些文档放出链接,供大家参考。
本文用到的不仅仅是 AT 组件,还用到了基于 AT 组件的软件包,理论性的东西不是 RT-Thread 专栏组件与软件包部分的重点,我的目的在于记录使用我们的开发环境如何快速的使用这些组件与软件包进行我们产品的实际应用。
❤️
本 RT-Thread 专栏记录的开发环境:
RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境 及 配合CubeMX开发快速上手)
RT-Thread记录(二、RT-Thread内核启动流程 — 启动文件和源码分析)
❤️
RT-Thread 内核篇系列博文链接:
RT-Thread记录(三、RT-Thread 线程操作函数及线程管理与FreeRTOS的比较)
RT-Thread记录(四、RT-Thread 时钟节拍和软件定时器)
RT-Thread记录(五、RT-Thread 临界区保护)
RT-Thread记录(六、IPC机制之信号量、互斥量和事件集)
RT-Thread记录(七、IPC机制之邮箱、消息队列)
RT-Thread记录(八、理解 RT-Thread 内存管理)
RT-Thread记录(九、RT-Thread 中断处理与阶段小结)
❤️
在STM32L051C8 上使用 RT-Thread 应用篇系列博文连接:
RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (一、无线温湿度传感器 之 新建项目)
RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (二、无线温湿度传感器 之 CubeMX配置)
RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (三、无线温湿度传感器 之 I2C通讯)
RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (四、无线温湿度传感器 之 串口通讯)
❤️
RT-Thread 设备篇系列博文链接:
RT-Thread记录(十、全面认识 RT-Thread I/O 设备模型)
RT-Thread记录(十一、I/O 设备模型之UART设备 — 源码解析)
RT-Thread记录(十二、I/O 设备模型之UART设备 — 使用测试)
RT-Thread记录(十三、I/O 设备模型之PIN设备)
RT-Thread记录(十四、I/O 设备模型之ADC设备)
RT-Thread记录(十五、I/O 设备模型之SPI设备)
❤️
RT-Thread 组件与软件包系列博文链接:
RT-Thread记录(十六、SFUD组件 — SPI Flash的读写)
为了方便用户使用 AT 命令,并且适配不同厂家的不同设备, RT-Thread 提供了 AT 组件用于 AT 设备的连接和数据通讯。
AT 组件理论知识参考文章:
RT-Thread 官方 AT 组件说明
RT-Thread 官方文档:应用 AT 组件连接 ESP8266 模块
rt-thread AT组件学习梳理
AT 命令集是一种应用于 AT 服务器(AT Server)与 AT 客户端(AT Client)间的设备连接与数据通信的方式。
AT 组件的使用包括客户端的和服务器,对于嵌入式设备而言,更多的情况下设备使用 AT 组件作为客户端连接服务器设备,如下图:
如果有些 AT 模块可以跑 RT-Thread,那么他们可以使用 AT 组件作为服务器端的设备,如图:
乐鑫 ESP8266 大家应该很熟悉,一款性价比极高的 WIFI 模块,正因为他的性价比高,所以很收欢迎,所以很通用,这也是为什么官方以及很多文章都是使用 ESP8266 作为测试。
以前我们在裸机使用 ESP8266,需要根据文档根据自己的需求自己一点一点实现模块的驱动程序,现在使用了 RT-Thread 系统,我们可以基于 RT-Thread 提供的 AT 组件进行 ESP8266 的操作。
在使用 RT-Thread 系统的时候,我们有 AT 组件可以进行 ESP8266 的操作,因为 AT 组件是通用的驱动,它并不区分不同芯片,即便我们有 AT 组件可以使用,但是按理来说还是得自己根据 ESP8266 本身的资料基于 AT 组件实现操作 ESP8266 的驱动程序。
但是,我们说过 RT-Thread 相对于其他的 RTOS 来说,他的生态做得很好,开发者可以根据 RT-Thread 标准的框架,写好各种各样的开源软件包,提供给大家使用。
正式因为 ESP8266 通用,所以已经有开发者基于 RT-Thread 的AT组件,写好了支持 ESP8266 的软件包 at_device。我们可以直接使用:
基本的介绍完毕,我们直接来说明一下如何使用 RT-Thread 的组件与软件包,简单的使用我们的 ESP8266 WIFI 模块。
☆ 先说明一个依赖关系, AT 组件需要使用 libc ,at_device 软件包又是基于 AT 组件设计,所以我们在 RT-Thread 配置中,需要使能 AT组件,libc,添加 at_device 软件包 3 个大步骤 。☆
当然,因为 ESP8266 是使用串口和 MCU相连,不要忘记定义好 WIFI 模块使用的 UART 设备。因为我们前面文章的时候已经使能了 ESP8266 使用的 uart3 设备,所以这里无需额外操作。
我们按照顺序,使用图文说明:
1、使能 WIFi 模块串口:
根据我们以前博文 RT-Thread记录(十二、I/O 设备模型之UART设备 — 使用测试) 操作即可。
对于在 RT-Thread Settings 中设置的这些步骤,可以一次性完成,我这里使用的是分开说明,但是实际上使能组件与软件包这些操作可以同时进行,不冲突。
2、打开 RT-Thread Settings,使能 AT 组件和 libc组件,如下图所示:
其中可以查看一下 AT 的配置项,在基础知识中应该了解到, 下图中的 CLI 命令行接口,就是可以通过 shell 命令行直接向 WIFI 模块发送指令做测试:
勾选了这两个组件可以直接进行下面的步骤,作为测试,也可以先看看什么效果,在命令行中多了 at 的操作命令:
3、 还是在 RT-Thread Settings 中,点击添加软件包,通过搜索找到 at_device 软件包添加 :
4、 配置 at_device 软件包 :
可以看到现在 at_device 软件包已经支持很多常用的模块,使用起来非常方便:
我们本次测试使用的是 ESP8266,所以在 ESP8266中进行配置:
设置完毕可通过工程查看,软件包的位置都在 packages 文件夹下面:
到此,我们的设置就完成了,可以直接编译进行烧录测试。
最后测试结果,一言难尽啊…… ,尝试了好几个小时,最终在这个上面居然失败了……
好难过,因为我同样的硬件,用以前的版本程序,也是用 at_device 软件包一切正常 (灬ꈍ ꈍ灬)
我一点一点记录一下:
最开始按照上面的设置,第一现象是:
上面提示没有足够的缓存接收数据,这里指的是串口接收缓存,以前我们测试时候一直是使用的是 64大小,需要改大一点,改大一点比如 512 如图:
改了以后不会有警告了,但是还是会联网失败,有时候是这样:
有时候是这样:
有时候又是这样:
期间也网上找了一些说法,也参考了一些文章,反正就是各种尝试,各种都不成功 = =!
有的说得用DMA ,下面是使用了 DMA 的结果(缓存512 和1024 都一样):
网上也有文章说 ESP8266 的固件版本会影响测试结果,我手头并没有可以烧录 ESP8266 的设备。
我是根据什么来判断固件没问题的呢,在以前没有 RT-Thread Studio 的时候,我也使用过 RT-Thread ,同样的硬件吗,也是使用了 at_device 软件包,其 ENV 配置如下:
同样的硬件同样的 WIFI 环境,使用上面配置是能够正常驱动 ESP8266的,如下图所示:
对应的,我们现在的 RT-Thread Studio 环境,我设置成一样的就会出错:
同样的硬件同样的 WIFI 环境,就会出问题,情况如下:
反正我是感觉今天是解决不了了… …
反正也是使用的 AT 组件,只不过版本(V1.3.0)与现在的版本(V1.3.1)不同,使用了at_device 软件包默认的 ESP8266 示例,测试可以正常的连上WIFi,而且可以正常 ping 通网络:
本文虽然只是测试一下基于RT-Thread AT组件的 at_device 软件包,但是在测试过程中遇到了问题,因为手头的 ESP8266 是好些年前的模块找出来的,对于他的一些开发工具,都已经没有了,所以没有对模块进行版本更换。
不过话说回来,同样的系统,同样的组件和软件包,基本上就是版本有点区别,结果却不一样,这个问题,我最终还是没能解决 = =! 我猜想是自己哪里设置有点问题? 还是哪里出了问题?
最近都不会使用 ESP8266 WIFI 模块,找出来本来也只是为了说明一下 RT-Thread AT组件与软件包的使用,本来以为简简单单,没想到翻车了……
这次文章的结尾轻松不起来了,遇到个没解决的问题,但是我希望说明是到位了,还有如果有知道问题的朋友还望告知 。
我们接下来还要测试几个简单的软件包,我们在设备模型中没有讲过 I2C 设备模型,因为我们可以直接使用现成的I2C设备软件包。
全部0条评论
快来发表一下你的评论吧 !