本帖最后由 Cheney_Chen 于 2019-7-2 11:05 编辑
[postbg]bg3.png[/postbg][md]AT Device 软件包发布有将近一年的时间了,期间经过几个版本的迭代,AT Device 软件包支持的功能和使用的方式也基本趋于稳定。从软件包的下载量和排名也可以看出大家对 AT Device 软件包的热情和支持。

本帖主要介绍 AT Device 软件包使用方式和版本说明,并就 AT Device 软件包使用时出现的部分问题提出解决方式,希望对大家在 AT Device 软件包使用时有所帮助。如果有问题可以直接在该贴查找解决方式或提问,将会获得第一时间的回复 。
## 软件包介绍
**1. 什么是 AT Deivce 软件包**
- AT Device 软件包是由不同 AT 设备的移植实现和示例文件组成;
- AT Device 软件包需要配合 RT-Thread AT 组件使用,AT Device 软件包是 AT 组件针对不同 AT 设备的实现。
- AT Device 软件包旨在简化 AT 设备命令交互流程。软件包封装处理复杂的 AT 交互命令,提供简便的 AT 设备初始化和控制操作接口,并且抽象标准 BSD Socket API 用于 AT 设备网络连接。
- AT Device 软件包目前支持的设备如下:
- wifi 模块:ESP8266、RW007
- 2G 模块:M26、MC20、SIM800C
- 4G 模块:EC20、SIM76XX
**2. 为什么要使用 AT Device 软件包**
- 现如今,AT 命令被广泛的应用于嵌入式开发领域,但是针对不同厂家或者设备 AT 命令的格式不尽相同,使得适配的程序缺少重用性也为程序维护提供困难。使用 AT Device 软件包,**抽象统一接口,应用层无需改动程序即可兼容不同的 AT 设备**。
- 针对 AT 设备程序开发,最难处理的就是 AT 命令的收发和数据解析的操作,如果处理不好很容易造成数据的丢失或解析错误。 AT Device 软件包中针对不同设备已经完成大部分命令交互和解析的工作,并**提供标准命令交互和数据解析接口**,用户只需调用简单接口即可完成对 AT 设备的控制。
- AT Device 软件包提供多种 AT 设备支持,针对已经适配好的设备,可以直接配置使用软件包,无需任何更改,即可对 AT 设备进行管理和控制。
- AT Device 软件包支持**多个 AT 设备同时接入**(V2.0.0 版本支持),各个 AT 设备之间独立互不影响。
**3. 如何使用 AT Device 软件包**
- AT Device 软件包官方地址:
- AT Device 软件包最新版本号:V2.0.0 版本
- AT Device 软件包配置使用方式,参考[软件包使用说明配置选项介绍](#2-%E8%8E%B7%E5%8F%96%E6%96%B9%E5%BC%8F)。
**4. 软件包版本更新说明**
AT Device 软件包发布以来经过了多个版本的更新迭代,各个版本之间功能有所差异且需要适配 AT 组件改动,导致大家在版本的选择上容易产生问题,下面着重介绍一下 AT Device 软件包版本发展史,**如果在版本选择和使用上出现的问题小伙伴可以优先查看这里**。
目前 AT Device 软件包已经 release 7 个版本,最新版本为 laster 版本(V2.0.0),各个版本介绍如下:
- V1.0.0:该版本为最初版本,适配 ESP8266、M26 模块,距最新版本改动较大,不建议使用;
- V1.1.0:该版本主要适配系统中 SAL 组件和 AT 组件改动,距最新版本改动较大,不建议使用;
- V1.2.0:该版本要修复 BUG,添加对 EC20 模块支持,建议配合 RT-Thread V3.1.0 版本使用;
- V1.3.0:该版本主要适配 AT 组件中多客户端功能支持,建议配合 RT-Thread V3.1.0 版本使用;
- V1.4.0:该版本修复软件包 BUG,建议配合 RT-Thread V3.1.1 、V3.1.2 或 V4.0.0 版本 使用;
- V1.5.0:该版本添加对 RW007、SIM800C、SIM76XX 模块支持,建议配合 RT-Thread V3.1.1 、V3.1.2或 V4.0.0 版本使用;
- V1.6.0:该版本适配 netdev 网卡组件,添加 AT Device 网卡命令的支持,需要配合 RT-Thread V3.1.3 版本 或 V4.0.1 版本使用;
- laster(V2.0.0):最新版本重构了 AT Device 软件包结构,添加对多网络客户端支持,即支持同时选中多个 AT 设备。因为改动较大且和之前 RT-Thread 版本不兼容,**如果选中 laster 版本 AT Device 软件包,只能使用 Github 最新版本 RT-Thread!!!**
综上我们可以知道,不同版本 AT Device 软件包在使用时对 RT-Thread 版本有一定依赖,希望大家在使用之前注意这点。当然 AT Device 软件包版本依赖在 ENV 中已经处理,我们需要做的只有**更新 ENV!更新 ENV!更新ENV!**,才能正确的处理软件包依赖关系。
**5. 软件包使用注意事项**
- 配置软件包之前建议 `pkgs --upgrade` 更新 ENV 工具(强烈建议 ENV 工具添加自动更新功能);
- 如果使用 github 上最新版本 RT-Thread ,则只能使用 laster 版本 AT Device 软件包;如果使用 release 版本 RT-Thread ,请参考上述软件版本更新说明选择合适版本 AT Device 软件包。
- AT Device 软件包适配的模块目前**不支持作为网络服务器**使用(如 accept 等函数不支持);
- AT Device 软件包 V1.X.X 版本只支持开启一个设备,V2.0.0 版本(laster)支持同时开启多个设备。
- AT Device 软件包 V1.X.X 版本和 V2.0.0 版本选项配置方式差异较大,如果进行版本升级请详细查 [软件包 README 文件中配置介绍](/blob/master/README.md)。
- AT Device 软件包开启会默认开启 AT 组件中配置选项,一般来说 AT 组件中配置选项无需改动。
## 常见问题汇总
下面就大家使用 AT Device 软件包或者 AT 组件时可能出现的一些问题进行整理:
**1. 软件包版本更新或版本升级问题**
**错误现象:**
```c
error: "at_device_ops" has already been declared in the current scope.
```
```c
error: #error directive: "This RT-Thread version is older!!, please check and updata laster RT-Thread!"
```
AT Device 软件包 V2.0.0 更新之后很多小伙伴遇到上述错误,这类问题是下载使用的软件包版本和 RT-Thread 版本不兼容的问题,参考[问题描述](https://www.rt-thread.org/qa/forum.php?mod=viewthread&tid=11896&extra=page%3D1%26filter%3Dtypeid%26typeid%3D5)。
**解决方式:**
- 首先需要使用 `pkgs --update` 命令更新 ENV工具,如果更新失败可在官网下载最新版 ENV 并更新,[ENV 下载地址](https://pan.baidu.com/s/1cg28rk)。
- 然后参考软件包版本更新说明,选择与当前 RT-Thread 系统匹配的软件包版本。
**2. 设备初始化不通过问题**
**错误现象:**
```c
error: wait AT client(uart) connect timeout(5000 tick).
```
```c
error: AT client initialize failed! Not find the device(uart2).
```
```c
error: esp8266 device(esp1) network initialize failed(-1).
```
该错误是配置的串口名称错误或者初始化时发送 `AT\r\n` 命令等待 AT 设备响应超时问题,这时候开发板和 AT 设备之间命令无法正常交互。
**解决方式:**
- 该类问题一般都是开发板和 AT 设备硬件连接错误问题或 AT 设备本身问题。
- 确定 AT 设备和开发板连接的串口名称,和 AT Device 软件包中配置的串口名称是否一致;
- 确定开发板串口和 AT 设备的 TX/RX 引脚是否连接正常,反接 TX/RX 引脚确定问题;
- 部分 AT 设备需要额外供电(如 ESP8266 设备),确定设备供电正常;
- 针对 wifi 模块查看配置的 wifi ssid 和 password 是否正常;
**3. 开启 AT 组件 RAW 数据打印功能后,日志显示错误问题**
**错误现象:**
AT 组件中 `Enable print RAW format AT command communication data` 选项用于开启 AT 组件 RAW 数据显示功能,该功能可以打印出 AT 设备数据交互过程中发送和接收的命令详细信息。
部分小伙伴在开启该功能后,出现日志显示错误问题。
**解决方式:**
- RAW 数据开启之后因为瞬时数据量较大,打印可能出现问题,可以修改 shell 串口波特率,一般改为 921600(**注意修改的是 shell 串口波特率,不是 AT 设备串口**)。
**4. 发送数据失败,提示 Socket 连接状态错误问题**
**错误现象:**
```c
error: send datat error, current socket(0) state (3) is error;
```
部分小伙伴在使用 AT Device 运行 onetnet 软件包或者 ali-iotkit 软件包时,关闭创建的 Socket 连接时会出现上述错误, 提示 Socket 关闭之后数据发送失败。
**处理方式:**
- 由日志可知该问题是当前 Socket 连接已经关闭,但是还有数据继续发送。该问题由于AT Device 软件包 V1.X.X 版本中对 Socket 状态处理不当导致,已经在 AT Device 软件包 V2.0.0 版本修复问题。
**5. 发送 AT 命令后接收到的响应数据不完全问题**
**错误现象**
开发板和 AT 设备正常连接后,发送 AT 命令,得到的响应数据不全,缺少部分尾部数据,但是命令发送函数返回正常,参考[问题描述](https://www.rt-thread.org/qa/forum.php?mod=viewthread&tid=10384&extra=page%3D2%26filter%3Dtypeid%26typeid%3D5)。
**处理方式**
- 该错误可能是 AT 设备使用的串口接收缓冲器太小导致的(RT_SERIAL_RB_BUFSZ 默认为 64 bytes),数据未及时接收完就被覆盖导致的,建议适当增加串口接收数据的缓冲区大小(如 256 bytes)。
**6. 使用 AT Device 软件包完成 AT 设备联网后,部分网络功能不可用,无法作为网络服务器问题**
**错误现象:**
AT 设备使用 AT Device 软件包完成联网之后,系统中部分网络软件包或网络功能不能使用,如 webnet 软件包、Telnet 功能、TFTP 功能等,参考[问题描述](https://www.rt-thread.org/qa/forum.php?mod=viewthread&tid=10364&extra=page%3D2%26filter%3Dtypeid%26typeid%3D5)。
**处理方式:**
- AT 设备目前只支持作为网络客户端使用,对于上述软件包或网络功能都是作为网络服务器,目前不支持使用。
**7. 常见问题调试处理方式**
- 初始化失败,需检查硬件连接、AT 设备供电、WIFI 或 SIM 卡等网络连接环境;
- FinSH 中输入`at client` 命令,进入 AT CLI 模式,CLI 模式下用户可以直接输入 AT 命令和 AT 设备进行交互,这样可以确定部分发送的命令和响应的格式是否正确;
- 开启 RAW 数据可以实时的查看当前 AT 命令收发的详细信息,通过日志分析可以很方便的定位问题原因,注意需要调整 shell 串口波特率;
- 针对不同的 AT 设备,AT 命令手册必不可少,一般在对应设备官方网站可以下载,可以帮助大家熟悉命令收发流程,配合 RAW 数据分析问题产生的原因。
- 上述方式都不行,建议贴吧发帖,或该贴下发回帖反馈问题!
## 后话
AT Device 软件包的发展离不开社区小伙伴的努力和支持,该贴将持续更新 AT Device 软件包常见问题,小伙伴们对 AT Device 软件包有什么改进的意见或者建议都可以直接在帖子下方提出。
针对论坛中大家经常提到的 AT 设备移植方式,将在下一篇帖子 《RT-Thread AT 设备移植指南》中为大家展现,尽情期待!!
最后,全家福镇楼。

[/md]
查看更多