写点什么

RT-Thread 记录(十七、AT 组件 — ESP8266 使用 at_device 软件包联网)

作者:矜辰所致
  • 2022 年 8 月 26 日
    江苏
  • 本文字数:3776 字

    阅读完需:约 12 分钟

RT-Thread记录(十七、AT组件 — ESP8266使用 at_device 软件包联网)
AT 组件:RT-Thread 一个比较典型的组件,解决了不同网络模块AT命令之间的差异导致的重复开发的问题,大幅度简化了MCU+无线模块方案开发。
复制代码


前言

上文我们开始接触 RT-Thread 的组件与软件包,在专栏的这部分,我并不计划深入分析这些组件与软件包的理论基础。即便如此,在介绍 SFUD 组件的时候,我还是做了简单介绍。


正好手头有一个 ESP8266 的模块,就想着测试记录一下 AT 组件的使用。


今天我们要介绍的 AT 组件相对来说,比 SFUD 组件复杂一些,这次真的不介绍理论了,因为我能看到的理论资料,大家都能看到,我会把自己的参考的一些文档放出链接,供大家参考。


本文用到的不仅仅是 AT 组件,还用到了基于 AT 组件的软件包,理论性的东西不是 RT-Thread 专栏组件与软件包部分的重点,我的目的在于记录使用我们的开发环境如何快速的使用这些组件与软件包进行我们产品的实际应用。


本 RT-Thread 专栏记录的开发环境:

RT-Thread 记录(一、RT-Thread 版本、RT-Thread Studio 开发环境 及 配合 CubeMX 开发快速上手)

https://xie.infoq.cn/article/44be1057caace7a6a2c4c4b59

RT-Thread 记录(二、RT-Thread 内核启动流程 — 启动文件和源码分析)

https://xie.infoq.cn/article/44be1057caace7a6a2c4c4b59

RT-Thread 内核篇系列博文链接:

RT-Thread 记录(三、RT-Thread 线程操作函数及线程管理与 FreeRTOS 的比较)

https://xie.infoq.cn/article/1d2e8e030ae689d6b8ee44b05

RT-Thread 记录(四、RT-Thread 时钟节拍和软件定时器)

https://xie.infoq.cn/article/3198c9b741782036bfd6e54e9

RT-Thread 记录(五、RT-Thread 临界区保护

https://xie.infoq.cn/article/7a41020e03184950664df7391

RT-Thread 记录(六、IPC 机制之信号量、互斥量和事件集)

https://xie.infoq.cn/article/1f49bfd6c69377deb9eee838f

RT-Thread 记录(七、IPC 机制之邮箱、消息队列)

https://xie.infoq.cn/article/360b04e7bc6024917afecef1d

RT-Thread 记录(八、理解 RT-Thread 内存管理)

https://xie.infoq.cn/article/bd5d8f8a19fa11ea9feacf34d

RT-Thread 记录(九、RT-Thread 中断处理与阶段小结)

https://xie.infoq.cn/article/3da9530cfac06feece3523a0c

RT-Thread 设备篇系列博文链接:

RT-Thread 记录(十、全面认识 RT-Thread I/O 设备模型)

https://xie.infoq.cn/article/40536d29988d683c78b4ba5ff

RT-Thread 记录(十一、I/O 设备模型之 UART 设备 — 源码解析)

https://xie.infoq.cn/article/38bb4bf15cb81f1fdb060b29e

RT-Thread 记录(十二、I/O 设备模型之 UART 设备 — 使用测试)

https://xie.infoq.cn/article/1df47f3ae5174dfcb418b07b6

RT-Thread 记录(十三、I/O 设备模型之 PIN 设备)

https://xie.infoq.cn/article/af3ff1066f61cddeb134c3c88

RT-Thread 记录(十四、I/O 设备模型之 ADC 设备)

https://xie.infoq.cn/article/2eda5e23a77db3a60d2595d97

RT-Thread 记录(十五、I/O 设备模型之 SPI 设备)

https://xie.infoq.cn/article/33dcc6fdc5169c287078a2bbb

RT-Thread 记录(十六、SFUD 组件 — SPI Flash 的读写)

https://xie.infoq.cn/article/d163b38baf9f10c289cd8a361

一、AT 组件简介


为了方便用户使用 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 组件作为服务器端的设备,如图:



.


如果想深入了解理论基础,大家可以自己参考上面推荐的链接文章。


.

二、at_device 软件包使用步骤


乐鑫 ESP8266 大家应该很熟悉,一款性价比极高的 WIFI 模块,正因为他的性价比高,所以很收欢迎,所以很通用,这也是为什么官方以及很多文章都是使用 ESP8266 作为测试。


以前我们在裸机使用 ESP8266,需要根据文档根据自己的需求自己一点一点实现模块的驱动程序,现在使用了 RT-Thread 系统,我们可以基于 RT-Thread 提供的 AT 组件进行 ESP8266 的操作。

2.1 at_device 软件包


在使用 RT-Thread 系统的时候,我们有 AT 组件可以进行 ESP8266 的操作,因为 AT 组件是通用的驱动,它并不区分不同芯片,即便我们有 AT 组件可以使用,但是按理来说还是得自己根据 ESP8266 本身的资料基于 AT 组件实现操作 ESP8266 的驱动程序。


但是,我们说过 RT-Thread 相对于其他的 RTOS 来说,他的生态做得很好,开发者可以根据 RT-Thread 标准的框架,写好各种各样的开源软件包,提供给大家使用。


正式因为 ESP8266 通用,所以已经有开发者基于 RT-Thread 的 AT 组件,写好了支持 ESP8266 的软件包 at_device。我们可以直接使用:


2.2 使用步骤

基本的介绍完毕,我们直接来说明一下如何使用 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 设备 — 使用测试)https://xie.infoq.cn/article/1df47f3ae5174dfcb418b07b6 操作即可。


对于在 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 软件包一切正常 (灬ꈍ ꈍ灬)


我一点一点记录一下:

3.1 问题的出现(未解决)

最开始按照上面的设置,第一现象是:



上面提示没有足够的缓存接收数据,这里指的是串口接收缓存,以前我们测试时候一直是使用的是 64 大小,需要改大一点,改大一点比如 512 如图:



改了以后不会有警告了,但是还是会联网失败,有时候是这样:



有时候是这样:



有时候又是这样:



期间也网上找了一些说法,也参考了一些文章,反正就是各种尝试,各种都不成功 = =!



.

3.2 需要 DMA 问题?(测试不是)

有的说得用 DMA ,下面是使用了 DMA 的结果(缓存 512 和 1024 都一样):



.

3.3 ESP8266 固件问题?(应该也不是)

网上也有文章说 ESP8266 的固件版本会影响测试结果,我手头并没有可以烧录 ESP8266 的设备。


我是根据什么来判断固件没问题的呢,在以前没有 RT-Thread Studio 的时候,我也使用过 RT-Thread ,同样的硬件吗,也是使用了 at_device 软件包,其 ENV 配置如下:



同样的硬件同样的 WIFI 环境,使用上面配置是能够正常驱动 ESP8266 的,如下图所示:



对应的,我们现在的 RT-Thread Studio 环境,我设置成一样的就会出错:



同样的硬件同样的 WIFI 环境,就会出问题,情况如下:



.反正我是感觉今天是解决不了了... ....

3.4 正常情况(以前的程序)


反正也是使用的 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 设备软件包。

发布于: 刚刚阅读数: 3
用户头像

矜辰所致

关注

不浮夸,不将就,认真对待学知识的我们! 2022.08.02 加入

不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开! 为了活下去的嵌入式工程师,画画板子,敲敲代码,玩玩RTOS,搞搞Linux ...

评论

发布
暂无评论
RT-Thread记录(十七、AT组件 — ESP8266使用 at_device 软件包联网)_esp8266_矜辰所致_InfoQ写作社区