AT

AT Device 软件包使用说明与问题汇总

发布于 2019-06-28 16:49:26
    本帖最后由 Cheney_Chen 于 2019-7-2 11:05 编辑


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

at_device_t.jpg

本帖主要介绍 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 设备移植指南》中为大家展现,尽情期待!!

最后,全家福镇楼。

at_device.jpg[/md]



查看更多

关注者
0
被浏览
4.2k
56 个回答
flyboy
flyboy 2019-06-28
膜拜大佬!!!
Skiars
Skiars 2019-06-28
支持楼主!顶起
Ernest
Ernest 2019-06-28
at server 例程完美使用,简单、容易上手
armink
armink 2019-06-29
建议发到微信公众号 @小师妹
bernard
bernard 2019-06-30
顶下,代码兼容性问题是一个十分重要的事情!有的时候牺牲一些代码质量的考虑,但能够有更好的兼容性,这也是值得的。
Cheney_Chen
Cheney_Chen 2019-07-01
    本帖最后由 Cheney_Chen 于 2019-7-1 09:55 编辑


bernard 发表于 2019-6-30 16:29
顶下,代码兼容性问题是一个十分重要的事情!有的时候牺牲一些代码质量的考虑,但能够有更好的兼容性,这也 ...

嗯,V2.0.0 版本之后软件包框架和功能基本趋于稳定,之后的改动应该不会太大,兼容性这快会重点考虑
shao7936626
shao7936626 2019-07-03
我看到了合宙的720h呢,我也按照sim800c的 源码写了一下,但是我的产品是一个一直不关机的产品,感觉现在的at源码 好像没有设备的状态监测和重连机制
Cheney_Chen
Cheney_Chen 2019-07-04
shao7936626 发表于 2019-7-3 23:16
我看到了合宙的720h呢,我也按照sim800c的 源码写了一下,但是我的产品是一个一直不关机的产品,感觉现在的 ...


1. V2.0.0 版本 AT Device 软件包接入 netdev 中提供了对设备网络连接状态的实时检测,可以通过 netdev 组件中相关接口获取,或者 ifconfig 命令查看当前计入设备的网络信息。

2. 关于重连机制,目前软件包中没有做过多处理,但是软件包提供了 at_device_control 接口,可以对设备进行关机或者重启操作,或者其他控制类操作,可以通过 control 接口在应用层实现设备重连机制。
insect2006
insect2006 2019-07-04
RTT3.1.2,WIFI模块是ESP8266,现在使用的是版本是1.4.0,不需要升级了吧?
Cheney_Chen
Cheney_Chen 2019-07-04
insect2006 发表于 2019-7-4 09:34
RTT3.1.2,WIFI模块是ESP8266,现在使用的是版本是1.4.0,不需要升级了吧?


如果不升级 RT-Thread 版本,可以继续使用 1.4.0 版本,可以不升级
shao7936626
shao7936626 2019-07-05
Cheney_Chen 发表于 2019-7-4 09:31
1. V2.0.0 版本 AT Device 软件包接入 netdev 中提供了对设备网络连接状态的实时检测,可以通过 netdev ...


1. 目前2.0的版本应该没有做完,while 1中发送了cgreg 检测了一下 是否挂上了gprs ,但是我在实际的使用用,明明status灯都灭了 ,他AT模块还是上传的0,1 ,这个就比较尴尬了

2. 有control接口,但是没有详细实现,全部要自己写一下
Cheney_Chen
Cheney_Chen 2019-07-05
    本帖最后由 Cheney_Chen 于 2019-7-5 10:14 编辑


shao7936626 发表于 2019-7-5 00:24
1. 目前2.0的版本应该没有做完,while 1中发送了cgreg 检测了一下 是否挂上了gprs ,但是我在实际的使用 ...

1. 一般 AT 设备网络状态的同步都需要一定时间,这和模块内部实现有关,模块内部状态的同步也不是实时的;

2. control 接口根据不同设备和应用实现可能有所不同,后面会尽量添加更多通用的控制方式,这块功能的添加也需要大家反馈和支持,可以的话希望大家也能参与进来,完成新 control 功能添加。
shao7936626
shao7936626 2019-07-08
Cheney_Chen 发表于 2019-7-5 09:46
1. 一般 AT 设备网络状态的同步都需要一定时间,这和模块内部实现有关,模块内部状态的同步也不是实时的; ...


嗯,大家一同努力!
jamguo
jamguo 2019-08-07
请问下 进入了CLI模式以后 怎么退出呢? 我输入 ESC 无法退出
jamguo
jamguo 2019-08-07
还有,请问下 AT包的API在哪里看呀?
jamguo
jamguo 2019-08-07
谢谢谢谢!!!
Cheney_Chen
Cheney_Chen 2019-08-07
jamguo 发表于 2019-8-7 10:23
请问下 进入了CLI模式以后 怎么退出呢? 我输入 ESC 无法退出


直接按键盘的 ESC 键就可以退出
Cheney_Chen
Cheney_Chen 2019-08-07
jamguo 发表于 2019-8-7 11:14
还有,请问下 AT包的API在哪里看呀?


at_device 软件包对应用层提供的是标准的 BSD Socket API 接口,你这里说的 API 是什么意思?
jamguo
jamguo 2019-08-07
Cheney_Chen 发表于 2019-8-7 14:37
at_device 软件包对应用层提供的是标准的 BSD Socket API 接口,你这里说的 API 是什么意思? ...


谢谢 我在文档中心找到了 谢谢!
jamguo
jamguo 2019-08-07
Cheney_Chen 发表于 2019-8-7 14:37
at_device 软件包对应用层提供的是标准的 BSD Socket API 接口,你这里说的 API 是什么意思? ...


能请问一下 在哪里能找到 使用 at包的 SIM800c的例程吗?裸机比较好弄,用了包弄了一下午也没弄清楚

例如:at_exec_cmd(resp, "AT+CIPSTART=\"TCP\",\"118.114.247.142\",\"40006\"");

LOG打印
[E/at.clnt] execute command (AT+CIPSTART="TCP","118.114.247.142","40006") failed!

在裸机上是可以用的呀。。。。。
jamguo
jamguo 2019-08-07
jamguo 发表于 2019-8-7 17:22
能请问一下 在哪里能找到 使用 at包的 SIM800c的例程吗?裸机比较好弄,用了包弄了一下午也没弄清楚

例 ...


难道是 “40002” 这个双引号不需要?
Cheney_Chen
Cheney_Chen 2019-08-08
    本帖最后由 Cheney_Chen 于 2019-8-8 09:51 编辑


jamguo 发表于 2019-8-7 17:27
难道是 “40002” 这个双引号不需要?

这个问题可能是 SIM800C 模块进入多连接模式的原因。

根据 SIM800 官网 AT 命令文档介绍,TCP 连接时如果只建立单连接,使用 AT+CIPSTART="TCP","118.114.247.142","40006" 格式命令创建没有问题,如果开启多连接支持模式,需要在创建之前添加 socket 值,及使用 AT+CIPSTART=0,"TCP","118.114.247.142" 格式命令创建。

at_device 软件中在 SIM800C 设备初始化时,默认开启了多连接功能的支持(AT+CIPMUX=1 命令),所以使用的时候需要按照多连接模式发送。不过这命令的格式一般不用应用层关心吧,你完全可以直接使用:socket、connect 等函数创建 TCP 连接。
jamguo
jamguo 2019-08-09
Cheney_Chen 发表于 2019-8-8 09:49
这个问题可能是 SIM800C 模块进入多连接模式的原因。

根据 SIM800 官网 AT 命令文档介绍,TCP 连接时如果 ...


好的 谢谢。。我还在用at_exec_cmd 发送命令,学习了
jamguo
jamguo 2019-08-12
请问下 AT软件包有例程吗?各种模块都行,现在还是搞不定链接TCP
Cheney_Chen
Cheney_Chen 2019-08-12
jamguo 发表于 2019-8-12 17:17
请问下 AT软件包有例程吗?各种模块都行,现在还是搞不定链接TCP

最常用的就是 ESP8266 设备连接了,硬件正确连接之后,at_device 软件包中选中 esp8266 ,设备初始化完成之后,可以直接运行 network_sample 软件包中 TCP 示例程序。
test.jpg

test2.jpg

不知道现在什么问题跑不起来?
jamguo
jamguo 2019-08-13
就是 使用 SIM800C 软件包 使用BSD socket 链接 日志打印

[E/at.clnt] execute command (AT+CIPCLOSE=1) failed!

然后就死在这里了。。。
jamguo
jamguo 2019-08-13
打开了SIM800c的sample
I/sal.skt] Socket Abstraction Layer initialize success.
[I/at.clnt] AT client(V1.3.0) on device uart2 initialize success.
[I/at.dev] sim800c device(sim0) network operator: CHINA MOBILE
[I/at.dev] sim800c device(sim0) network initialize success!

感觉我们这个RTTHREAD 文档可以详细一点 层次太多了,,,我这种小白真的看不懂

下面是网上复制的一段线程


static void tcp_server_thread(void *p_arg)
{
struct sockaddr_in ca; //连接地址
struct sockaddr_in sa;
int sock_fd; //服务器的 socked
int sock_conn; // 请求的 socked
socklen_t addr_len; // 地址长度
int length;
int num;

memset(&sa, 0, sizeof(struct sockaddr_in));
sa.sin_family= AF_INET; /* this is our host address */
sa.sin_port=0;
sa.sin_addr.s_addr = htonl(INADDR_ANY);
if ((sock_fd= socket(AF_INET, SOCK_STREAM, 0)) < 0) {
closesocket(sock_fd);
}
if (bind(sock_fd,(struct sockaddr *)&sa,sizeof(struct sockaddr_in)) < 0) {
closesocket(sock_fd);
}
if(listen(sock_fd, 1)<0)
closesocket(sock_fd);

addr_len = sizeof(struct sockaddr_in);
sock_conn = accept(sock_fd, (struct sockaddr *)&ca, &addr_len);
if(sock_conn<0) //状态小于0代表连接故障,此时关闭套接字
{
closesocket(sock_fd);
}
else send(sock_conn, "connect success!\n\r", 20, 0);

while (1)
{
memset(data_buffer, 0, sizeof(data_buffer)); //清空接收Buff

length = recv(sock_conn, (unsigned int *)data_buffer, 100, 0); //将收到的数据放到接收Buff

for(num=0;num<100;num++) //接收Buff的数据转移到数据处理Buff,防止之后数据混乱
{
tcp_server_recvbuf[num]=data_buffer[num];
}

if(tcp_server_recvbuf[2]=='L'&tcp_server_recvbuf[3]=='E'&tcp_server_recvbuf[4]=='D'&
tcp_server_recvbuf[5]=='1'&tcp_server_recvbuf[6]=='O'&tcp_server_recvbuf[7]=='N')
//判断收到的数据是否为LED1ON
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); //打开LED1
send(sock_conn, "LED1已打开\n",strlen("LED1已打开\n"), 1); //回复客户端LED1已打开

}

if(tcp_server_recvbuf[2]=='L'&tcp_server_recvbuf[3]=='E'&tcp_server_recvbuf[4]=='D'&
tcp_server_recvbuf[5]=='1'&tcp_server_recvbuf[6]=='O'&tcp_server_recvbuf[7]=='F'&tcp_server_recvbuf[8]=='F')
//判断收到的数据是否为LED1OFF
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); //关闭LED1
send(sock_conn, "LED1已关闭\n",strlen("LED1已关闭\n"), 1); //回复客户端LED1已关闭
}
/*LED0使用指令*/
if(tcp_server_recvbuf[0]=='L'&tcp_server_recvbuf[1]=='E'&tcp_server_recvbuf[2]=='D'&
tcp_server_recvbuf[3]=='0'&tcp_server_recvbuf[4]=='O'&tcp_server_recvbuf[5]=='N')
//判断收到的数据是否为LED0ON
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); //打开LED0
send(sock_conn, "LED0已打开\n",strlen("LED0已打开\n"), 1); //回复客户端LED0已打开
}

if(tcp_server_recvbuf[2]=='L'&tcp_server_recvbuf[3]=='E'&tcp_server_recvbuf[4]=='D'&
tcp_server_recvbuf[5]=='0'&tcp_server_recvbuf[6]=='O'&tcp_server_recvbuf[7]=='F'&tcp_server_recvbuf[8]=='F')
//判断收到的数据是否为LED0OFF
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); //关闭LED0
send(sock_conn, "LED0已关闭\n",strlen("LED0已关闭\n"), 1); //回复客户端LED0已关闭
}
rt_thread_mdelay(10);
}
}
13640612207
13640612207 2019-08-13
请问 ping:network interface device get error.是什么原因,使用的是MW31模块
flyboy
flyboy 2019-08-13
13640612207 发表于 2019-8-13 16:29
请问 ping:network interface device get error.是什么原因,使用的是MW31模块


是的,这个模块没有 ping 对应的 AT 指令,所以不支持这个命令
Cheney_Chen
Cheney_Chen 2019-08-13
jamguo 发表于 2019-8-13 12:01
打开了SIM800c的sample
I/sal.skt] Socket Abstraction Layer initialize success.
AT client(V1.3.0) ...


你指的 RT-Thread 的文档具体是哪一个,我们后面会尽快完善 AT 相关应用代码
13640612207
13640612207 2019-08-13
flyboy 发表于 2019-8-13 17:14
是的,这个模块没有 ping 对应的 AT 指令,所以不支持这个命令


白搞了两天,谢谢了
flyboy
flyboy 2019-08-14
13640612207 发表于 2019-8-13 17:34
白搞了两天,谢谢了


你用的MW31是一个单独的无线模块吗,我的是ali-developer-kit 开发板上板载的模块,这个 MW31 的软件包也是我比着开发板提供的资料里的AT指令做的,可能不全。我没找到诺行官方的AT指令文档。你如果有完整的模块资料的话,也可以看看,比着完善一下。
RT-WH
RT-WH 2019-08-15
AT_DEVEICE 注册到netdev ,然后 用SAL 组件 进行socekt 编程 ,我想 用ESP8266 telnet 实现远程finish
Cheney_Chen
Cheney_Chen 2019-08-15
RT-WH 发表于 2019-8-15 09:38
AT_DEVEICE 注册到netdev ,然后 用SAL 组件 进行socekt 编程 ,我想 用ESP8266 telnet 实现远程fini ...

目前还不支持 AT 设备作为网络服务器呢,所以 telenet 功能可能用不了,在上述常见问题第六条有提到哦
jamguo
jamguo 2019-09-19
    本帖最后由 jamguo 于 2019-9-19 16:40 编辑


Cheney_Chen 发表于 2019-8-15 10:11
目前还不支持 AT 设备作为网络服务器呢,所以 telenet 功能可能用不了,在上述常见问题第六条有提到哦 ...

[E/at.clnt] AT Client receive failed, uart device get data error(-2)
[E/at.skt] sim800c device(sim0) receive size(2) data failed.
[E/mqtt] [221292] wait Ping Response res: 0

请问下,我使用AT组件 联网没问题,就是会不定时的这样断网,是串口问题?还是什么超时之类的?跑裸机没问题
Cheney_Chen
Cheney_Chen 2019-09-19
jamguo 发表于 2019-9-19 16:39
[31m[E/at.clnt] AT Client receive failed, uart device get data error(-2) [0m
[31m[E/at.skt] sim800c ...


应该是 URC 接收函数中设置的串口接收超时时间过短,之前根据数据长度设置的(比如这里接收两个字节,则接收超时时间为两个 TICK),可能造成串口接收失败问题,laster 最新版设置了最低超时间,你可以更新一下试试,具体改动看下面 PR 提交记录:

https://github.com/RT-Thread-packages/at_device/pull/69
jamguo
jamguo 2019-09-19
Cheney_Chen 发表于 2019-9-19 17:18
应该是 URC 接收函数中设置的串口接收超时时间过短,之前根据数据长度设置的(比如这里接收两个字节,则 ...


谢谢 ,我试一下
jamguo
jamguo 2019-09-20
Cheney_Chen 发表于 2019-9-19 17:18
应该是 URC 接收函数中设置的串口接收超时时间过短,之前根据数据长度设置的(比如这里接收两个字节,则 ...



[E/at.clnt] AT Client receive failed, uart device get data error(-2)
[E/at.skt] sim800c device(sim0) receive size(2) data failed.
[E/mqtt] [302099] wait Ping Response res: 0

修改了以后还是会这样,已经改了20个TICK了,请问下这是什么问题呢? [302099] 这是什么错误编码吗?能根据这个找原因吗?
insect2006
insect2006 2019-10-15
    本帖最后由 insect2006 于 2019-10-15 17:35 编辑


RTT版本3.1.2,AT组件1.4.0

AT模块为ESP8266,SAL组件等均已启用

上电后加入WIFI成功,at_ping测试OK,AT CLI模式测试OK。

使用web_get_test和web_post_test官方范例进行HTTP测试,提示socket 0发送失败,接收超时。

请问是什么原因?

下图是开启RAW数据的截图(Finsh波特率已调高到921600bps)



1.png
haov000
haov000 2019-10-16
你好,首先感谢开源的组件使用,现在使用SIM800C,遇到一个场景就是使用的时候打开sim800C的供电开关,数据传输完成后关闭sim800C的供电,我看现在的接口只有注册at_device_register,而没有注销的接口,这个应该怎么实现,或者提供一下思路吗?
Cheney_Chen
Cheney_Chen 2019-10-18
haov000 发表于 2019-10-16 11:58
你好,首先感谢开源的组件使用,现在使用SIM800C,遇到一个场景就是使用的时候打开sim800C的供电开关,数据 ...


建议直接将网卡设置为 DOWN 状态,应用层可调用 netdev_set_down 接口,针对 sim800c 设备会直接调用 sim800c_netdev_set_down 函数,该函数中有关闭模块供电即设置状态的操作,对应设置 netdev_set_up 之后又可正常使用
haov000
haov000 2019-10-18
Cheney_Chen 发表于 2019-10-18 10:08
建议直接将网卡设置为 DOWN 状态,应用层可调用 netdev_set_down 接口,针对 sim800c 设备会直接调用 sim ...


明白了,感谢
haov000
haov000 2019-10-19
    本帖最后由 haov000 于 2019-10-19 09:28 编辑


Cheney_Chen 发表于 2019-10-18 10:08
建议直接将网卡设置为 DOWN 状态,应用层可调用 netdev_set_down 接口,针对 sim800c 设备会直接调用 sim ...

你好,测试发现在不断调用netdev_set_down/netdev_set_up的时候,会出现内存泄露,最终导致无内存可用,内存错误提示如下:
[E/at.clnt] AT create response object failed! No memory for response buffer!
[E/at.dev.sim800] no memory for resp create.
测试代码如下:
while(1)
{
rt_thread_mdelay(60 * 1000);
rt_kprintf("will off\n");
aa = netdev_get_by_name("sim0");
netdev_set_down(aa);
rt_thread_mdelay(10 * 1000);
rt_kprintf("on.... net up\n");
aa = netdev_get_by_name("sim0");
netdev_set_up(aa);
}




haov000
haov000 2019-10-19
Cheney_Chen 发表于 2019-10-18 10:08
建议直接将网卡设置为 DOWN 状态,应用层可调用 netdev_set_down 接口,针对 sim800c 设备会直接调用 sim ...


你好,问题已查明,在调用netdev_set_up的时候,在函数sim800c_netdev_check_link_status(..)中会不断创建线程,而down的时候没有删除该线程,该线程应该是只需要创建一次即可,请修正下
Cheney_Chen
Cheney_Chen 2019-10-21
haov000 发表于 2019-10-19 10:25
你好,问题已查明,在调用netdev_set_up的时候,在函数sim800c_netdev_check_link_status(..)中会不断创 ...


收到,感谢反馈,近期会修复该问题
sf116
sf116 2019-11-17
新手第一次使用RTT,问题有点低级,多多包涵:
RTT版本3.1.2,AT组件版本1.5.0,AT模块为ESP8266,
启动SAL、AT组件初始化OK;
[I/SAL_SOC] Socket Abstraction Layer initialize success.
[I/at.clnt] AT client(V1.2.0) on device uart2 initialize success.
设备连接OK;
[22:48:36.835]ÊÕ¡û¡ô[I/at.esp8266] ESP8266 WIFI is connected.
[22:48:39.692]ÊÕ¡û¡ô[I/at.esp8266] AT network initialize success!
ping测试OK;
[22:49:09.084]ÊÕ¡û¡ô32 bytes from www.rt-thread.org icmp_seq=1 time=28 ms
[22:49:10.083]ÊÕ¡û¡ô32 bytes from www.rt-thread.org icmp_seq=2 time=29 ms
[22:49:11.084]ÊÕ¡û¡ô32 bytes from www.rt-thread.org icmp_seq=3 time=28 ms
[22:49:12.088]ÊÕ¡û¡ô32 bytes from www.rt-thread.org icmp_seq=4 time=26 ms
1、请问用int at_connect(int socket, const struct sockaddr *name, socklen_t namelen)连接服务器吗?
2、参数应该怎样赋值?
(服务器IP:192.168.0.106,端口号:8080)


梦笑真美
梦笑真美 2019-11-18
    本帖最后由 梦笑真美 于 2019-11-18 22:49 编辑


使用EC20打开TCP和发送数据经常超时或未响应,把等待时间加大也不行,我裸机程序都能一次成功的






RTT版本 4.0.1
AT DEVICE 1.4


QQ截图20191118224844.png
Cheney_Chen
Cheney_Chen 2019-11-19
梦笑真美 发表于 2019-11-18 22:42
使用EC20打开TCP和发送数据经常超时或未响应,把等待时间加大也不行,我裸机程序都能一次成功的




从日志看,可能是因为阿里云连接时地址的问题,将连接的地址改为全部小写试试再连接吧
梦笑真美
梦笑真美 2019-11-19
Cheney_Chen 发表于 2019-11-19 10:04
从日志看,可能是因为阿里云连接时地址的问题,将连接的地址改为全部小写试试再连接吧 ...


但其实是可以链接上的,只是概率很低,一直不停的尝试

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友