0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread记录(十七、 AT组件-使用at软件包)

矜辰所致 来源:矜辰所致 作者:矜辰所致 2022-07-06 20:33 次阅读
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 组件简介

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

poYBAGLFgR6ATE06AADD5-Rkpwc520.png

如果有些 AT 模块可以跑 RT-Thread,那么他们可以使用 AT 组件作为服务器端的设备,如图:

pYYBAGLFgR6AOQNbAACvb0IKsck149.png

二、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。我们可以直接使用:

poYBAGLFgR6AF9StAACZLIb8Tpk570.png

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设备 — 使用测试) 操作即可。

对于在 RT-Thread Settings 中设置的这些步骤,可以一次性完成,我这里使用的是分开说明,但是实际上使能组件与软件包这些操作可以同时进行,不冲突。

2、打开 RT-Thread Settings,使能 AT 组件和 libc组件,如下图所示:

pYYBAGLFgR6AdxucAAB7d2uJJR4991.png

其中可以查看一下 AT 的配置项,在基础知识中应该了解到, 下图中的 CLI 命令行接口,就是可以通过 shell 命令行直接向 WIFI 模块发送指令做测试:

pYYBAGLFgR-APcqCAAB9Tz7yNno620.png

勾选了这两个组件可以直接进行下面的步骤,作为测试,也可以先看看什么效果,在命令行中多了 at 的操作命令:

poYBAGLFgR-ACklgAABocA6RJwY112.png

3、 还是在 RT-Thread Settings 中,点击添加软件包,通过搜索找到 at_device 软件包添加 :

pYYBAGLFgR-AdCo_AACRoLbp588278.png

4、 配置 at_device 软件包 :

可以看到现在 at_device 软件包已经支持很多常用的模块,使用起来非常方便:

poYBAGLFgR-ABA8pAADPugKh5i4837.png

我们本次测试使用的是 ESP8266,所以在 ESP8266中进行配置:

pYYBAGLFgSCAfF7WAABjs7eOSeU852.png

设置完毕可通过工程查看,软件包的位置都在 packages 文件夹下面:

poYBAGLFgSCAHyAYAABTC6KX_1E140.png

到此,我们的设置就完成了,可以直接编译进行烧录测试。

三、 测试问题

最后测试结果,一言难尽啊…… ,尝试了好几个小时,最终在这个上面居然失败了……

好难过,因为我同样的硬件,用以前的版本程序,也是用 at_device 软件包一切正常 (灬ꈍ ꈍ灬)

我一点一点记录一下:

3.1 问题的出现(未解决)

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

pYYBAGLFgSCAapnUAAB3-Q3U0og464.png

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

poYBAGLFgSCAK4gnAAAuUYmWETo279.png

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

pYYBAGLFgSCAfA3WAAEMIdRHECg700.png

有时候是这样:

poYBAGLFgSGAR776AAC8mJxevq4009.png

有时候又是这样:

pYYBAGLFgSGAH0reAADB6PxbYjM653.png

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

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

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

pYYBAGLFgSKAcr5dAAEgQwSjXGY308.png

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

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

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

poYBAGLFgSKAc3_RAADK1GJi6bQ490.png

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

pYYBAGLFgSKAflBgAACE_L-pm_k718.png

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

pYYBAGLFgSOAXjhZAAFhaimPVTI009.png

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

poYBAGLFgSOAHL5YAACo51v18dY153.png

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

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

反正也是使用的 AT 组件,只不过版本(V1.3.0)与现在的版本(V1.3.1)不同,使用了at_device 软件包默认的 ESP8266 示例,测试可以正常的连上WIFi,而且可以正常 ping 通网络:

pYYBAGLFgSOAMjzZAADgvr87MXc531.png

结语

本文虽然只是测试一下基于RT-Thread AT组件的 at_device 软件包,但是在测试过程中遇到了问题,因为手头的 ESP8266 是好些年前的模块找出来的,对于他的一些开发工具,都已经没有了,所以没有对模块进行版本更换。

不过话说回来,同样的系统,同样的组件和软件包,基本上就是版本有点区别,结果却不一样,这个问题,我最终还是没能解决 = =! 我猜想是自己哪里设置有点问题? 还是哪里出了问题?

最近都不会使用 ESP8266 WIFI 模块,找出来本来也只是为了说明一下 RT-Thread AT组件与软件包的使用,本来以为简简单单,没想到翻车了……

这次文章的结尾轻松不起来了,遇到个没解决的问题,但是我希望说明是到位了,还有如果有知道问题的朋友还望告知 。

我们接下来还要测试几个简单的软件包,我们在设备模型中没有讲过 I2C 设备模型,因为我们可以直接使用现成的I2C设备软件包。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AT
    AT
    +关注

    关注

    2

    文章

    180

    浏览量

    64682
  • RT-Thread
    +关注

    关注

    31

    文章

    1148

    浏览量

    38857
  • ESP8266
    +关注

    关注

    50

    文章

    946

    浏览量

    43867
  • SFUD
    +关注

    关注

    0

    文章

    4

    浏览量

    1026
收藏 人收藏

    评论

    相关推荐

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

    从本文开始,测试学习一些 RT-Thread 常用的组件软件包,先从刚学完的 SPI 设备开始。
    的头像 发表于 07-06 10:35 5056次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>记录</b>(十六、SFUD<b class='flag-5'>组件</b> Flash读写)

    RT-Thread Studio添加软件包报错怎么解决?

    RT-Thread Studio添加软件包报错ImportError: No module named psutil
    发表于 03-01 08:41

    送给工程师路上正迷茫的你:RT-Thread 软件包构建指南

    对应的软件包平台,软件包生态对于一门语言的选择至关重要,本次讲座将会讲述如何快速构建一个可通用的软件包,介绍RT-Thread可兼容的标准, 如posix标准;重点讲解如何移植开源仓库
    发表于 09-27 15:53

    RT-Thread OneNET软件包的功能特点是什么?

    有哪位大神能否介绍一下OneNET 平台 。 RT-Thread OneNET 软件包功能特点是什么?
    发表于 04-02 06:39

    介绍RT-Thread软件包

    学习要点介绍 RT-Thread软件包;简介 nRF24L01 软件包的使用,讲解如何使用此软件包将数据正确发送和接收;学习线程间的通信,IPC 的使用,即获取温度的线程 A 与无
    发表于 07-27 06:07

    RT-Thread 配置教程

    打开 RT-Thread 配置界面通过双击工程根目录下的 RT-Thread Settings 文件,可以打开 RT-Thread 配置界面,如下图所示:软件包中心通过点击 立即查看
    发表于 08-12 14:01

    使用RT-Thread操作系统驱动教程简单记录

    ESP8266 软件包,此处连接的串口为 uart4 。本章使用 RT-Thread 的 STemWin 软件包,使用 STM32 的 FSMC 接口做 lcd 的驱动,运行 STemWin的例程。为节省片
    发表于 03-22 10:51

    使用menuconfig配置基于RT-Thread的NimBLE软件包

    最近在学习 RT-Thread 中的 NimBLE 软件包,使用 menuconfig 配置选中 NimBLE 软件包,设置各种选项后,成功通过编译并且运行起来。不过这仅仅只是按照文档说明运行了起来
    发表于 06-27 11:18

    【原创精选】RT-Thread征文精选技术文章合集

    、I/O 设备模型之SPI设备)RT-Thread记录(十六、SFUD组件 Flash读写)RT-Thread记录
    发表于 07-26 14:56

    RT-THREAD studio 2.0.0不能添加软件包能帮忙看看是什么问题吗

    1.电脑联想小新15,intel平台2.windows10专业版64位系统3.问题描述:RT-THREAD studio 2.0.0不能添加软件包4.用两台联想笔记本电脑对比过,一台能够正常添加
    发表于 11-30 10:15

    rt-thread studio里添加软件包失败怎么解决?

    rt-thread studio里使用软件包功能,添加软件包之后,点击保存,在项目栏测没有软件包的添加
    发表于 02-13 14:14

    使用RT-Thread Studio开发CH32V307实现按键软件包使用

    使用上篇帖子创建的工程,使用RT-Thread Studio软件包添加工具,快速实现MultiButton的使用在RT-Thread Studio工程内打开RT-Thread Sett
    发表于 04-15 21:16

    RT-Thread 软件包介绍

    。所以,想要成为高级程序员就快来使用、创造软件包吧~软件包的定义RT-Thread 软件包:运行于 RT-Thread 物联网操作系统平台上
    发表于 05-21 19:38 5239次阅读

    RT-Thread软件包定义和使用

    RT-Thread软件包是运行于RT-Thread物联网操作系统平台上,面向不同应用领域的通用软件组件
    的头像 发表于 05-21 11:29 9656次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>软件包</b>定义和使用

    RT-Thread中mymqtt软件包的使用方法

    在上一篇文章 RT-Thread中Lan8720和lwip协议栈的使用的工程基础上添加mymqtt软件包。 使能mqtt example和mqtt test,保存,等待下载更新软件包
    的头像 发表于 10-13 10:44 479次阅读
    <b class='flag-5'>RT-Thread</b>中mymqtt<b class='flag-5'>软件包</b>的使用方法