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

发表在 AT2019-6-28 16:49 [复制链接] 51 2519

本帖最后由 Cheney_Chen 于 2019-7-2 11:05 编辑
/ f5 `: F  w9 U6 g

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

2 J0 b* ^% P+ {: H& g/ |

at_device_t.jpg

- P+ O- |1 o! |: p1 _

本帖主要介绍 AT Device 软件包使用方式和版本说明,并就 AT Device 软件包使用时出现的部分问题提出解决方式,希望对大家在 AT Device 软件包使用时有所帮助。如果有问题可以直接在该贴查找解决方式或提问,将会获得第一时间的回复 。

- R/ @# d- `- H

软件包介绍

4 K2 p0 e) o, {, `1 A( Y# a

1.  什么是 AT Deivce 软件包

6 ~7 ^; l- I' O& W' d& T& `
    , L& k7 S" K% `. ]
  • 0 A" c- F9 d( a

    AT Device 软件包是由不同 AT 设备的移植实现和示例文件组成;

    & k8 p  f' }+ U, E7 q) Y
  • 1 [* ?* R- ^/ M) g3 Q
  • # Y  d7 {" ]. t: ?

    AT Device 软件包需要配合 RT-Thread AT 组件使用,AT Device 软件包是 AT 组件针对不同 AT 设备的实现。

    8 L8 j  Y2 \2 K& w, m
  • 6 u3 ^5 g# K/ o
  • 6 N& [0 s. D/ a# A5 ^

    AT Device 软件包旨在简化 AT 设备命令交互流程。软件包封装处理复杂的 AT 交互命令,提供简便的 AT 设备初始化和控制操作接口,并且抽象标准 BSD Socket API 用于 AT 设备网络连接。

    / j8 j. s' k3 I7 j3 v- j
  • & `5 H' z. j5 y5 D
  • AT Device 软件包目前支持的设备如下:" P. b+ ?1 R! Q9 q7 _+ I
      ; S* U. O) T9 Z- ?
    • wifi 模块:ESP8266、RW007
    • 0 k, ~1 O1 @; z6 H  S$ Y, ^
    • 2G 模块:M26、MC20、SIM800C
    • 0 _9 Z& b- ^8 h. ]5 e$ x! `
    • 4G 模块:EC20、SIM76XX
    • / p' i' ~2 n! e7 {
  • 2 E* F5 [/ i8 q8 e3 I
$ F! c' E6 ?0 }4 t% C, j

2. 为什么要使用 AT Device 软件包

( M/ d/ R0 Q& Y& N
    8 U, O; _$ l) b# q- A* y6 ^, M
  •   R, u# @9 x0 y6 ~, s+ w

    现如今,AT 命令被广泛的应用于嵌入式开发领域,但是针对不同厂家或者设备 AT 命令的格式不尽相同,使得适配的程序缺少重用性也为程序维护提供困难。使用 AT Device 软件包,抽象统一接口,应用层无需改动程序即可兼容不同的 AT 设备

    ( X1 i8 J0 T: f, S2 Z/ l" ^
  • 2 D& }7 [# H, ]) D# U9 B, R
  • , B2 d$ m8 I7 X' k& }% S. Y

    针对 AT 设备程序开发,最难处理的就是 AT 命令的收发和数据解析的操作,如果处理不好很容易造成数据的丢失或解析错误。 AT Device 软件包中针对不同设备已经完成大部分命令交互和解析的工作,并提供标准命令交互和数据解析接口,用户只需调用简单接口即可完成对 AT 设备的控制。

    . I" j) l7 B& a
  • 4 i* g9 Q' \8 a1 d7 m6 g# ?
  • 3 x' W# r/ s6 [* v, Z+ O5 p- g

    AT Device 软件包提供多种 AT 设备支持,针对已经适配好的设备,可以直接配置使用软件包,无需任何更改,即可对 AT 设备进行管理和控制。

    " M$ W5 U) [2 c& Y3 o
  • 6 X6 u& e: V% w5 e7 J& W
  • AT Device 软件包支持多个 AT 设备同时接入(V2.0.0 版本支持),各个 AT 设备之间独立互不影响。
  • ) D. v, M4 r  a% y( H
" \6 I' a/ l2 @! k

3. 如何使用 AT Device 软件包

) A  \/ Z# p- R4 h8 V! E% q% a* z - j" H- D4 W% L

4. 软件包版本更新说明

" o" s1 n0 Z' r" C; `

AT Device 软件包发布以来经过了多个版本的更新迭代,各个版本之间功能有所差异且需要适配 AT 组件改动,导致大家在版本的选择上容易产生问题,下面着重介绍一下 AT Device 软件包版本发展史,如果在版本选择和使用上出现的问题小伙伴可以优先查看这里

  }% Y# @; {* X3 I8 K: n+ ~

目前 AT Device 软件包已经 release 7 个版本,最新版本为 laster 版本(V2.0.0),各个版本介绍如下:

0 {  @1 X+ J0 g# l
    + i$ |- b4 f  D' }' V$ \
  • V1.0.0:该版本为最初版本,适配 ESP8266、M26 模块,距最新版本改动较大,不建议使用;
  • . j' B: @& ?# _2 E. i6 q5 [: Y& i3 N
  • V1.1.0:该版本主要适配系统中 SAL 组件和 AT 组件改动,距最新版本改动较大,不建议使用;
  • 2 Q4 J( o7 `& d; |$ J
  • V1.2.0:该版本要修复 BUG,添加对 EC20 模块支持,建议配合 RT-Thread V3.1.0 版本使用;
  • + [8 G. Q  I# u1 V9 f: F: ?9 r
  • V1.3.0:该版本主要适配 AT 组件中多客户端功能支持,建议配合 RT-Thread V3.1.0 版本使用;
  • - H) O/ r0 `& d/ K- Y; T
  • V1.4.0:该版本修复软件包 BUG,建议配合 RT-Thread V3.1.1 、V3.1.2 或 V4.0.0 版本 使用;
  • + P' E( K4 X6 E
  • V1.5.0:该版本添加对 RW007、SIM800C、SIM76XX 模块支持,建议配合 RT-Thread V3.1.1 、V3.1.2或 V4.0.0 版本使用;
  • 7 l/ Q+ V4 Q) c( C5 i3 h+ v
  • V1.6.0:该版本适配 netdev 网卡组件,添加 AT Device 网卡命令的支持,需要配合 RT-Thread V3.1.3 版本 或 V4.0.1 版本使用;
  • . C! ~) w8 X' c; O" Z4 k/ c
  • laster(V2.0.0):最新版本重构了 AT Device 软件包结构,添加对多网络客户端支持,即支持同时选中多个 AT 设备。因为改动较大且和之前 RT-Thread 版本不兼容,如果选中 laster 版本 AT Device 软件包,只能使用 Github 最新版本 RT-Thread!!!
  • : a. d% K; y% V- o1 u, L
' @# w; A5 ?1 [  Q3 T

综上我们可以知道,不同版本 AT Device 软件包在使用时对 RT-Thread 版本有一定依赖,希望大家在使用之前注意这点。当然 AT Device 软件包版本依赖在 ENV 中已经处理,我们需要做的只有更新 ENV!更新 ENV!更新ENV!,才能正确的处理软件包依赖关系。

+ ?$ G' Z( ^* g7 j

5. 软件包使用注意事项

  T$ M3 [+ Z2 o" a
    * V- ]1 M% w8 j
  • 配置软件包之前建议 pkgs --upgrade 更新 ENV 工具(强烈建议 ENV 工具添加自动更新功能);
  • / b  Z/ I8 \; a# f* F
  • 如果使用 github 上最新版本 RT-Thread ,则只能使用 laster 版本 AT Device 软件包;如果使用 release 版本 RT-Thread ,请参考上述软件版本更新说明选择合适版本 AT Device 软件包。
  • " [, p" u7 ~7 w4 f- g
  • AT Device 软件包适配的模块目前不支持作为网络服务器使用(如 accept 等函数不支持);
  • & f( V/ G6 r3 ?( v( h
  • AT Device 软件包 V1.X.X 版本只支持开启一个设备,V2.0.0 版本(laster)支持同时开启多个设备。
  • ' [( K5 J, B9 A- U- U# |
  • AT Device 软件包 V1.X.X 版本和 V2.0.0 版本选项配置方式差异较大,如果进行版本升级请详细查 软件包 README 文件中配置介绍
  • ' k! Q2 E. g2 D' J* L# K& M4 G
  • AT Device 软件包开启会默认开启 AT 组件中配置选项,一般来说 AT 组件中配置选项无需改动。
  • * q* {* o! |; c: \
/ M9 p- P, q* i' |5 J1 x+ ^

常见问题汇总

7 G% j( U' `3 H$ `' v

下面就大家使用 AT Device 软件包或者 AT 组件时可能出现的一些问题进行整理:

4 K: z: u0 d# e

1. 软件包版本更新或版本升级问题

- g; C: F5 ]0 h0 x1 d

错误现象:

' |. g3 S1 C; h" z. @
error: "at_device_ops" has already been declared in the current scope.
. f$ R8 ]: A% L- R- _/ w4 _
error: #error directive: "This RT-Thread version is older!!, please check and updata laster RT-Thread!"
! z: h# ~' J( x' U0 [6 f# X) g

AT Device 软件包 V2.0.0 更新之后很多小伙伴遇到上述错误,这类问题是下载使用的软件包版本和 RT-Thread 版本不兼容的问题,参考问题描述

: S1 W% m- B% {7 m$ r( m1 p$ N

解决方式:

# R' w  c- W# }) |9 i
    8 u3 ^! l+ w8 z, q+ t' K
  • 首先需要使用 pkgs --update 命令更新 ENV工具,如果更新失败可在官网下载最新版 ENV 并更新,ENV 下载地址
  • 6 C8 u! p  ^4 n/ H( ?6 k  l9 i
  • 然后参考软件包版本更新说明,选择与当前 RT-Thread 系统匹配的软件包版本。
  • ! x4 l, @; M5 t0 e
6 P# O- F2 n/ H: Z, b

2. 设备初始化不通过问题

3 b: A9 F) l3 f0 _, w7 v* D+ W' l

错误现象:

  d1 a' x0 ]# b7 n0 n. g1 j
error: wait AT client(uart) connect timeout(5000 tick).
0 @# P- l+ P/ J0 S7 l$ ?
error: AT client initialize failed! Not find the device(uart2).
" P' @) a6 l( ]$ ~
error: esp8266 device(esp1) network initialize failed(-1).
7 |" W  h% C, X$ \% i2 g* N% G! O

该错误是配置的串口名称错误或者初始化时发送 AT\r\n 命令等待 AT 设备响应超时问题,这时候开发板和 AT 设备之间命令无法正常交互。

; n( A( c1 k6 j6 P0 G2 \" x  ?+ w

解决方式:

2 X$ A' x1 Z/ B. q& H# T
    + @* }, H& v6 [/ \" L9 h) n5 Y
  • " g/ t- z3 t: e

    该类问题一般都是开发板和 AT 设备硬件连接错误问题或 AT 设备本身问题。

    5 @6 g* O5 R% }
  •   L8 X. y) Y$ q8 W6 W7 ^0 X
  • 确定 AT 设备和开发板连接的串口名称,和 AT Device 软件包中配置的串口名称是否一致;
  • # {/ }' x' Z, W; G0 P1 n: w
  • 确定开发板串口和 AT 设备的 TX/RX 引脚是否连接正常,反接 TX/RX 引脚确定问题;
  • # n) ?0 N5 K/ T6 `- X4 H$ X% _: P8 Q1 y
  • 部分 AT 设备需要额外供电(如 ESP8266 设备),确定设备供电正常;
  • + T9 F# k. c; {, C
  • 针对 wifi 模块查看配置的 wifi ssid 和 password 是否正常;
  • ) E& O$ Z- s7 Z# ~' Y
0 u! _2 X5 I; J# m

3. 开启 AT 组件 RAW 数据打印功能后,日志显示错误问题

; C1 j. B  K% K$ {9 ^8 a2 t

错误现象:

: a5 G9 l7 r; q/ t7 i( g* x

AT 组件中 Enable print RAW format AT command communication data 选项用于开启 AT 组件 RAW 数据显示功能,该功能可以打印出 AT 设备数据交互过程中发送和接收的命令详细信息。

- l  Q" ~9 o) N3 E$ Z* [

部分小伙伴在开启该功能后,出现日志显示错误问题。

+ c8 y. |/ m1 G0 b1 |6 u

解决方式:

# W* C/ L+ l; J  ]7 Y. a4 d  V. v/ s
    , C; S6 _. O7 ~8 L$ U! \( J
  • RAW 数据开启之后因为瞬时数据量较大,打印可能出现问题,可以修改  shell 串口波特率,一般改为 921600(注意修改的是 shell 串口波特率,不是 AT 设备串口)。
  • 3 B5 M& t+ j! A, n# n
+ F" r$ L2 z" V  u* s) b/ u2 x

4. 发送数据失败,提示 Socket 连接状态错误问题

, }' d9 H8 z5 {0 V+ q* B; z

错误现象:

: ]$ S$ a8 r: A% t
error: send datat error, current socket(0) state (3) is error;
# E6 B6 A3 _( i5 e5 U) z

部分小伙伴在使用 AT Device 运行 onetnet 软件包或者 ali-iotkit 软件包时,关闭创建的 Socket 连接时会出现上述错误, 提示 Socket 关闭之后数据发送失败。

8 ^+ i; |6 F5 l% t6 S

处理方式:

, g  e5 q- \5 T
    7 B7 h# F/ V% U8 b0 @4 `% v  E1 r
  • 由日志可知该问题是当前 Socket 连接已经关闭,但是还有数据继续发送。该问题由于AT Device 软件包 V1.X.X 版本中对 Socket 状态处理不当导致,已经在 AT Device 软件包 V2.0.0 版本修复问题。
  • 4 a4 r4 e' i9 c- I0 V  D% S& ?
( f( V" r6 D! m. B

5. 发送 AT 命令后接收到的响应数据不完全问题

2 o5 A% e# \& U# X; n6 ~# I

错误现象

6 D0 [: J. \+ u, @2 K" c) L

开发板和 AT 设备正常连接后,发送 AT 命令,得到的响应数据不全,缺少部分尾部数据,但是命令发送函数返回正常,参考问题描述

2 c0 M/ u0 Y& t+ L; n) v3 v

处理方式

- t6 L. Y. Y: \  w/ [
    % g; L) B) v! S) v& C
  • 该错误可能是 AT 设备使用的串口接收缓冲器太小导致的(RT_SERIAL_RB_BUFSZ 默认为 64 bytes),数据未及时接收完就被覆盖导致的,建议适当增加串口接收数据的缓冲区大小(如 256 bytes)。
  • , @) K" ~4 \2 E# H
% e( E+ J1 i" r% d

6. 使用 AT Device 软件包完成 AT 设备联网后,部分网络功能不可用,无法作为网络服务器问题

+ {' P' l* {2 q) d5 R

错误现象:

( y4 j6 _  S  U9 u& d% l- z

AT 设备使用 AT Device 软件包完成联网之后,系统中部分网络软件包或网络功能不能使用,如 webnet 软件包、Telnet 功能、TFTP 功能等,参考问题描述

5 E; {% ~# o% O& K% |

处理方式:

8 }0 a: F$ `9 R* c3 V8 Z( E
    4 g$ @, y$ b: ~0 P
  • AT 设备目前只支持作为网络客户端使用,对于上述软件包或网络功能都是作为网络服务器,目前不支持使用。
  •   Z7 z# ?3 M* o: N4 G9 Q
/ D: I- d- I- O& N. G: v' V4 ~

7. 常见问题调试处理方式

+ `; a; z) U: {- a- ]$ ~' h, K6 t
    % V$ m/ T& K8 [" c4 Y: y! V$ v& e
  • 初始化失败,需检查硬件连接、AT 设备供电、WIFI 或 SIM 卡等网络连接环境;
  • : @0 \! D3 u; l0 v
  • FinSH 中输入at client 命令,进入 AT CLI 模式,CLI 模式下用户可以直接输入 AT 命令和 AT 设备进行交互,这样可以确定部分发送的命令和响应的格式是否正确;
  • " d$ L  N% c, ]) L7 A
  • 开启 RAW 数据可以实时的查看当前 AT 命令收发的详细信息,通过日志分析可以很方便的定位问题原因,注意需要调整 shell 串口波特率;
  • 0 S- r5 l$ g' J( [7 b, Y
  • 针对不同的 AT 设备,AT 命令手册必不可少,一般在对应设备官方网站可以下载,可以帮助大家熟悉命令收发流程,配合 RAW 数据分析问题产生的原因。
  • * n2 S1 n  z' G) {' B. e  a2 K
  • 上述方式都不行,建议贴吧发帖,或该贴下发回帖反馈问题!
  • $ b) \- w* R; B: G; n
7 o$ \) a5 W' w

后话

# b8 I- @6 d- Z. D

AT Device 软件包的发展离不开社区小伙伴的努力和支持,该贴将持续更新 AT Device 软件包常见问题,小伙伴们对 AT Device 软件包有什么改进的意见或者建议都可以直接在帖子下方提出。

, m9 \. ]7 j. m3 L8 h: m7 ]( Q

针对论坛中大家经常提到的 AT 设备移植方式,将在下一篇帖子 《RT-Thread AT 设备移植指南》中为大家展现,尽情期待!!

( F$ Z* f2 J" g' i" p

最后,全家福镇楼。

' i% _" e9 J& E! ?/ _" W

at_device.jpg

( Z4 V& b5 Y3 K6 o
4 o3 T) d- k: U! d& P
7 l/ X' c1 a+ `. K0 E  v; D) x( f# `7 n) y+ B
4 M0 ~; q" g+ r" r/ ?  Y$ h5 |
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-6-28 17:48:57 | 显示全部楼层
膜拜大佬!!!
使用道具 举报 回复
发表于 2019-6-28 17:58:49 | 显示全部楼层
支持楼主!顶起
使用道具 举报 回复
发表于 2019-6-28 18:03:54 | 显示全部楼层
at server 例程完美使用,简单、容易上手
使用道具 举报 回复
发表于 2019-6-29 14:58:58 | 显示全部楼层
建议发到微信公众号 @小师妹
使用道具 举报 回复
发表于 2019-6-30 16:29:02 | 显示全部楼层
顶下,代码兼容性问题是一个十分重要的事情!有的时候牺牲一些代码质量的考虑,但能够有更好的兼容性,这也是值得的。
使用道具 举报 回复
发表于 2019-6-30 17:01:54 | 显示全部楼层
膜拜大佬
使用道具 举报 回复
发表于 2019-7-1 09:54:09 | 显示全部楼层
本帖最后由 Cheney_Chen 于 2019-7-1 09:55 编辑
8 Z/ E! W) ^8 C$ O1 i
bernard 发表于 2019-6-30 16:295 S0 ~* h! a8 R5 i
顶下,代码兼容性问题是一个十分重要的事情!有的时候牺牲一些代码质量的考虑,但能够有更好的兼容性,这也 ...
% a# X9 `6 T& `1 ~* I. ~- u# H' L
嗯,V2.0.0 版本之后软件包框架和功能基本趋于稳定,之后的改动应该不会太大,兼容性这快会重点考虑
使用道具 举报 回复
发表于 2019-7-3 23:16:15 | 显示全部楼层
我看到了合宙的720h呢,我也按照sim800c的 源码写了一下,但是我的产品是一个一直不关机的产品,感觉现在的at源码 好像没有设备的状态监测和重连机制
使用道具 举报 回复
发表于 2019-7-4 09:31:40 | 显示全部楼层
shao7936626 发表于 2019-7-3 23:16
% w& S+ g8 |! C我看到了合宙的720h呢,我也按照sim800c的 源码写了一下,但是我的产品是一个一直不关机的产品,感觉现在的 ...
. {* ^" |% D! D# x1 P
1. V2.0.0 版本 AT Device 软件包接入 netdev 中提供了对设备网络连接状态的实时检测,可以通过 netdev 组件中相关接口获取,或者 ifconfig 命令查看当前计入设备的网络信息。
# i0 l2 U) l7 i5 m7 C! i, e$ C8 s0 d. a. \" u
2. 关于重连机制,目前软件包中没有做过多处理,但是软件包提供了 at_device_control 接口,可以对设备进行关机或者重启操作,或者其他控制类操作,可以通过 control 接口在应用层实现设备重连机制。
使用道具 举报 回复
发表于 2019-7-4 09:34:48 | 显示全部楼层
RTT3.1.2,WIFI模块是ESP8266,现在使用的是版本是1.4.0,不需要升级了吧?
使用道具 举报 回复
发表于 2019-7-4 14:12:12 | 显示全部楼层
insect2006 发表于 2019-7-4 09:34
( b6 H# l! N5 v* V% v8 H5 j7 \RTT3.1.2,WIFI模块是ESP8266,现在使用的是版本是1.4.0,不需要升级了吧?

& S' u2 q5 q6 O) f2 z如果不升级 RT-Thread 版本,可以继续使用 1.4.0 版本,可以不升级
使用道具 举报 回复
发表于 2019-7-5 00:24:17 | 显示全部楼层
Cheney_Chen 发表于 2019-7-4 09:31, W, H, i- p7 n2 O
1. V2.0.0 版本 AT Device 软件包接入 netdev 中提供了对设备网络连接状态的实时检测,可以通过 netdev  ...

0 g  B: a; K% k/ w7 o1. 目前2.0的版本应该没有做完,while 1中发送了cgreg 检测了一下 是否挂上了gprs ,但是我在实际的使用用,明明status灯都灭了 ,他AT模块还是上传的0,1 ,这个就比较尴尬了
1 k7 f) V# ]; R1 L8 P3 F. F+ H2 A* t- Q" M
2. 有control接口,但是没有详细实现,全部要自己写一下
使用道具 举报 回复
发表于 2019-7-5 09:46:04 | 显示全部楼层
本帖最后由 Cheney_Chen 于 2019-7-5 10:14 编辑
6 a3 ~& P2 Y, a3 x" K  l- U
shao7936626 发表于 2019-7-5 00:24
+ X) G& W: m* g$ P4 n1. 目前2.0的版本应该没有做完,while 1中发送了cgreg 检测了一下 是否挂上了gprs ,但是我在实际的使用 ...

( O  s" ~+ y: E5 d% _( ~* w1. 一般 AT 设备网络状态的同步都需要一定时间,这和模块内部实现有关,模块内部状态的同步也不是实时的;  X* @' D9 I+ `6 }

' S) u) h  N  I& o$ H3 T1 h; Z2 E9 S2. control 接口根据不同设备和应用实现可能有所不同,后面会尽量添加更多通用的控制方式,这块功能的添加也需要大家反馈和支持,可以的话希望大家也能参与进来,完成新 control 功能添加。
使用道具 举报 回复
发表于 2019-7-8 16:38:42 | 显示全部楼层
Cheney_Chen 发表于 2019-7-5 09:46
1 a0 O) e. n) A0 Y) V7 b1. 一般 AT 设备网络状态的同步都需要一定时间,这和模块内部实现有关,模块内部状态的同步也不是实时的; ...
9 _+ d' s0 N2 ?6 k! W3 V
嗯,大家一同努力!
使用道具 举报 回复
发表于 2019-8-7 10:23:27 | 显示全部楼层
请问下  进入了CLI模式以后 怎么退出呢? 我输入 ESC 无法退出
使用道具 举报 回复
发表于 2019-8-7 11:14:44 | 显示全部楼层
还有,请问下 AT包的API在哪里看呀?
使用道具 举报 回复
发表于 2019-8-7 11:16:03 | 显示全部楼层
谢谢谢谢!!!
使用道具 举报 回复
发表于 2019-8-7 14:36:23 | 显示全部楼层
jamguo 发表于 2019-8-7 10:23
# m: g" T2 C' y  h请问下  进入了CLI模式以后 怎么退出呢? 我输入 ESC 无法退出
. ?7 p  L' q4 X. d  Z3 R
直接按键盘的 ESC 键就可以退出
使用道具 举报 回复
发表于 2019-8-7 14:37:45 | 显示全部楼层
jamguo 发表于 2019-8-7 11:14& B; u0 h2 ]- k6 ]: O) L7 M
还有,请问下 AT包的API在哪里看呀?
$ |8 k$ F5 K2 y* f. v
at_device 软件包对应用层提供的是标准的 BSD Socket API 接口,你这里说的 API 是什么意思?
使用道具 举报 回复
发表于 2019-8-7 16:18:58 | 显示全部楼层
Cheney_Chen 发表于 2019-8-7 14:37
1 |4 f- ~8 y$ q3 u0 I( o% ?+ j( x8 zat_device 软件包对应用层提供的是标准的 BSD Socket API 接口,你这里说的 API 是什么意思? ...
2 t" j- R( h( w2 m8 b0 J5 L; m
谢谢  我在文档中心找到了 谢谢!
使用道具 举报 回复
发表于 2019-8-7 17:22:54 | 显示全部楼层
Cheney_Chen 发表于 2019-8-7 14:37: `2 p" h4 O9 s$ E) f/ }
at_device 软件包对应用层提供的是标准的 BSD Socket API 接口,你这里说的 API 是什么意思? ...

4 B7 ^* w0 h3 a能请问一下 在哪里能找到 使用 at包的 SIM800c的例程吗?裸机比较好弄,用了包弄了一下午也没弄清楚 . R* m% i# d6 E3 t& ^
" N2 D; q& Q6 U# e4 a; _# U
例如:at_exec_cmd(resp, "AT+CIPSTART=\"TCP\",\"118.114.247.142\",\"40006\"");6 U- u. E$ S9 |5 q, f" O0 _
  {( ~: q, a& g  l" X
LOG打印
: t, a: p' }8 s+ T9 Z! K[E/at.clnt] execute command (AT+CIPSTART="TCP","118.114.247.142","40006") failed!
: e# }$ O6 G* R$ h2 [, E! h' O" l' _/ Z% D/ t" z$ N) ^
在裸机上是可以用的呀。。。。。6 I! j* Q# T5 ^* }( r4 ?
使用道具 举报 回复
发表于 2019-8-7 17:27:45 | 显示全部楼层
jamguo 发表于 2019-8-7 17:223 Q! Q. K$ W$ n4 O0 E8 z
能请问一下 在哪里能找到 使用 at包的 SIM800c的例程吗?裸机比较好弄,用了包弄了一下午也没弄清楚 8 Q% z: s0 J  [* u" }7 }' ~

( i1 w7 k5 \' X4 R) |+ D% o0 l例 ...
( Q% u$ ~5 O# B6 |' g, a( n7 m. u) H
难道是 “40002”  这个双引号不需要?
使用道具 举报 回复
发表于 2019-8-8 09:49:53 | 显示全部楼层
本帖最后由 Cheney_Chen 于 2019-8-8 09:51 编辑
, K/ W- ~* N" u
jamguo 发表于 2019-8-7 17:27( u7 i, W+ |0 ~# ]+ ^
难道是 “40002”  这个双引号不需要?
# |* O3 s0 s, T* Y
这个问题可能是 SIM800C 模块进入多连接模式的原因。
0 U: `7 Y4 z3 o: G( E, d$ c3 J/ ~# y
根据 SIM800 官网 AT 命令文档介绍,TCP 连接时如果只建立单连接,使用 AT+CIPSTART="TCP","118.114.247.142","40006" 格式命令创建没有问题,如果开启多连接支持模式,需要在创建之前添加 socket 值,及使用 AT+CIPSTART=0,"TCP","118.114.247.142" 格式命令创建。5 A' W7 N2 z9 A4 |$ D0 p

6 v, I/ z0 h: j3 H/ z. ^at_device 软件中在 SIM800C 设备初始化时,默认开启了多连接功能的支持(AT+CIPMUX=1 命令),所以使用的时候需要按照多连接模式发送。不过这命令的格式一般不用应用层关心吧,你完全可以直接使用:socket、connect 等函数创建 TCP 连接。
使用道具 举报 回复
发表于 2019-8-9 10:31:23 | 显示全部楼层
Cheney_Chen 发表于 2019-8-8 09:49! R' {: I/ g, P& L
这个问题可能是 SIM800C 模块进入多连接模式的原因。
3 }1 ~4 x, [* D% s9 v( {6 C/ H3 t" F
根据 SIM800 官网 AT 命令文档介绍,TCP 连接时如果 ...
# L; E7 H* V' `
好的 谢谢。。我还在用at_exec_cmd 发送命令,学习了
使用道具 举报 回复
发表于 2019-8-12 17:17:27 | 显示全部楼层
请问下 AT软件包有例程吗?各种模块都行,现在还是搞不定链接TCP
使用道具 举报 回复
发表于 2019-8-12 20:05:04 | 显示全部楼层
jamguo 发表于 2019-8-12 17:17$ W4 a6 c% Y- L: `# v! J' V- J# p
请问下 AT软件包有例程吗?各种模块都行,现在还是搞不定链接TCP

8 e% `" J+ h1 @! ?0 G# ~3 |, M最常用的就是 ESP8266 设备连接了,硬件正确连接之后,at_device 软件包中选中 esp8266 ,设备初始化完成之后,可以直接运行 network_sample 软件包中 TCP 示例程序。
+ g# U; {0 m0 k! D( V test.jpg
8 T) ^: }1 f& S) r6 r
: _( D# _; {7 L# d2 F test2.jpg
  j9 h& z" _2 Y+ w3 j  Y) i4 z
% k9 t& Q$ i5 s# Y不知道现在什么问题跑不起来?1 T: W2 F+ u8 e7 Q8 p; _) X0 a
使用道具 举报 回复
发表于 2019-8-13 11:46:50 | 显示全部楼层
就是 使用 SIM800C 软件包   使用BSD socket 链接  日志打印 9 z2 g" D2 [% Y
) |7 Q5 M+ h& i; ~
[E/at.clnt] execute command (AT+CIPCLOSE=1) failed!, U7 V8 Z, G2 X, G2 u! P( w

, P1 @' U, [, \0 v7 o. I然后就死在这里了。。。
使用道具 举报 回复
发表于 2019-8-13 12:01:00 | 显示全部楼层
打开了SIM800c的sample  
' B, A$ K; P0 p5 q- U3 HI/sal.skt] Socket Abstraction Layer initialize success./ B# r' \9 z4 d1 T0 V$ S7 e
[I/at.clnt] AT client(V1.3.0) on device uart2 initialize success.
- X4 `1 {1 N' ?[I/at.dev] sim800c device(sim0) network operator: CHINA MOBILE2 J. q1 t. `8 _. _6 f; }1 k; [9 m
[I/at.dev] sim800c device(sim0) network initialize success!
; V4 f% `; m, e& M
, W! L9 I- I1 t- y  Y+ F  d感觉我们这个RTTHREAD 文档可以详细一点 层次太多了,,,我这种小白真的看不懂
5 ^! P. D; B' B+ B: A; ?( F$ p; K% `0 q- n, i% C  T
下面是网上复制的一段线程
0 l9 W% x; ]: t* s/ O2 s3 O$ o3 |) i( I' {0 z

0 N; K. F- W) t) \% l2 wstatic void tcp_server_thread(void *p_arg)' w2 W  A# q3 ~
{
- q( }- n- d6 b3 v  `2 m        struct sockaddr_in ca;                                //连接地址4 ^( m. @3 r7 h4 @
        struct sockaddr_in sa;# j1 k+ `. I( B
        int sock_fd;                                                                //服务器的 socked * [& c+ B& H: N# s. ?
        int sock_conn;                                                                // 请求的 socked % z* `1 z, S, E! G7 B* h7 H# X) w3 _. Z
        socklen_t addr_len;                                                        // 地址长度
% T& I: P! z( g3 {8 E- C! Y5 y$ r        int length;
' v* R# p, Q0 E6 i7 O; m3 M; y5 D, N) s        int num;
, k! j1 G5 p: T9 |$ D; @/ m! A! v  c3 @5 u4 G0 E$ c* j
        memset(&sa, 0, sizeof(struct sockaddr_in));
9 d& ]( ]/ ?$ H9 Y        sa.sin_family= AF_INET;              /* this is our host address */
- D' Q% l0 c/ o3 t4 h) G  sa.sin_port=0; - n% w  r6 o5 p$ D5 j* P+ ^
        sa.sin_addr.s_addr = htonl(INADDR_ANY);+ C# o* H5 q* J
  if ((sock_fd= socket(AF_INET, SOCK_STREAM, 0)) < 0) {3 R" X1 \* ~; `- k% K
        closesocket(sock_fd);
3 J' P. O( H5 ^4 f        }: B) y, m1 u" ]8 c6 y; }7 w: y
        if (bind(sock_fd,(struct sockaddr *)&sa,sizeof(struct sockaddr_in)) < 0) {
; w# j' x2 K8 E1 R% S8 i% Z        closesocket(sock_fd);                                   
" x* b: T: m8 _        }                          
$ f$ q* m  a* I+ A4 A        if(listen(sock_fd, 1)<0)- d# n% y: [; a( c" f3 p$ b2 e
        closesocket(sock_fd);) w2 J- j8 `; Q0 w+ |9 T. H/ ]
       
+ t8 l( V( ?+ ?        addr_len = sizeof(struct sockaddr_in);       
. T1 f* p( `. F! ]6 ^        sock_conn = accept(sock_fd, (struct sockaddr *)&ca, &addr_len);5 d: U" r$ I! p" Z
        if(sock_conn<0)                                                                                        //状态小于0代表连接故障,此时关闭套接字
7 a9 n9 Y0 ~, S3 P# \- f8 g                {
' X9 N: x6 Z! i, n4 Q. ^, y) j9 L2 y                        closesocket(sock_fd);; j5 Q. p0 B% h" l, Q( r
                }
! z9 s$ z  h2 ^' u, I/ W$ Q        else send(sock_conn, "connect success!\n\r", 20, 0);
/ Q2 r! q1 d, s( h               
; ^2 X, A- {7 a6 T3 }                while (1) $ J$ n/ |( J# w$ L; ^8 e% }
        {1 S! R- V4 |, q3 D" N  C3 S8 J
                memset(data_buffer, 0, sizeof(data_buffer));                        //清空接收Buff, V! ?" ~+ G# Q" k! d: V) E" ]2 J
               
( v% i6 o' `/ S2 j. V                length = recv(sock_conn, (unsigned int *)data_buffer, 100, 0);        //将收到的数据放到接收Buff
5 x9 T" Y4 O6 j) u2 L                * X$ s4 ~; `/ N& [
                for(num=0;num<100;num++)                                                                //接收Buff的数据转移到数据处理Buff,防止之后数据混乱               
1 v+ [, r; X" c6 |/ P. H  p                {2 V# O( C& T  z% d: I" W2 x
                        tcp_server_recvbuf[num]=data_buffer[num];
" D' y( |# E; i$ C                }- L% i8 C$ p  e4 l; I4 j
               
  x+ d/ P' W3 y2 {: L+ |" N                if(tcp_server_recvbuf[2]=='L'&tcp_server_recvbuf[3]=='E'&tcp_server_recvbuf[4]=='D'&
0 w* }% ]! K7 |6 C                                tcp_server_recvbuf[5]=='1'&tcp_server_recvbuf[6]=='O'&tcp_server_recvbuf[7]=='N')+ K- K4 h$ R; v; |7 n- h
                                //判断收到的数据是否为LED1ON
" }9 ^( [2 g/ W: b; u# u2 A% v  @                        {
4 ]2 z# M1 H( w8 j                        HAL_GPIO_WritePin(GPIOA,  GPIO_PIN_0, GPIO_PIN_RESET);                //打开LED13 B. m- F, T2 k+ z
                        send(sock_conn, "LED1已打开\n",strlen("LED1已打开\n"), 1);        //回复客户端LED1已打开
5 x+ H5 \: w! ?: B6 @6 q, X% B3 E; J+ ]
                        }
, k& a8 [' p* ~8 f                        5 ~2 X" I1 @" f0 V4 t$ k% P8 L- l" I
                        if(tcp_server_recvbuf[2]=='L'&tcp_server_recvbuf[3]=='E'&tcp_server_recvbuf[4]=='D'&
1 G$ C2 m0 m3 ]                                tcp_server_recvbuf[5]=='1'&tcp_server_recvbuf[6]=='O'&tcp_server_recvbuf[7]=='F'&tcp_server_recvbuf[8]=='F')
+ k, ^' a3 \& U' d5 T8 z                                //判断收到的数据是否为LED1OFF* m/ L. I8 L* R7 d- U  R* r9 X- [
                        {
- o' q$ a0 Z" f; p* M" r2 m                        HAL_GPIO_WritePin(GPIOA,  GPIO_PIN_0, GPIO_PIN_SET);                //关闭LED1
. ]% w4 ?: x+ _3 l/ ], k                        send(sock_conn, "LED1已关闭\n",strlen("LED1已关闭\n"), 1);        //回复客户端LED1已关闭( \) B& ~5 K$ B" w9 s
                        }" a. H' `9 Z/ T, l4 S: b$ x
                        /*LED0使用指令*/
( ?9 [9 r6 I% c& D# Q5 \2 o( p% s                        if(tcp_server_recvbuf[0]=='L'&tcp_server_recvbuf[1]=='E'&tcp_server_recvbuf[2]=='D'&2 e7 I5 _* u7 l% t: d8 Z
                                tcp_server_recvbuf[3]=='0'&tcp_server_recvbuf[4]=='O'&tcp_server_recvbuf[5]=='N')       
8 o7 B. w5 X! M5 b. I5 G                                //判断收到的数据是否为LED0ON
: O% ?  ^4 P( V0 o/ K2 [' n                        {7 J. O7 t$ }  J7 Y
                        HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_1, GPIO_PIN_RESET);                //打开LED0
5 e6 C; \$ M) j1 @0 p$ G: f                        send(sock_conn, "LED0已打开\n",strlen("LED0已打开\n"), 1);        //回复客户端LED0已打开) |4 o' T' R0 f& `3 F
                        }
3 a: \, y+ _1 Z6 D5 d                       
  K+ g2 x# K, O% E6 E0 b                        if(tcp_server_recvbuf[2]=='L'&tcp_server_recvbuf[3]=='E'&tcp_server_recvbuf[4]=='D'&
. R8 {; X/ ^4 N! ], t                                tcp_server_recvbuf[5]=='0'&tcp_server_recvbuf[6]=='O'&tcp_server_recvbuf[7]=='F'&tcp_server_recvbuf[8]=='F')
: A7 l2 E' ~- e* f; v                                //判断收到的数据是否为LED0OFF2 d4 T6 ^- M5 o7 f" Z
                        {
, T  ^1 D: N6 l- m0 @                        HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_1, GPIO_PIN_SET);                //关闭LED0
9 c4 @$ U* T6 D3 \7 q2 G                        send(sock_conn, "LED0已关闭\n",strlen("LED0已关闭\n"), 1);        //回复客户端LED0已关闭
( \5 J. t0 {5 j                        }
4 G# N7 E. e5 \, }3 M1 P  j7 C9 T                        rt_thread_mdelay(10);( p, \6 ]6 t- x# l: @( R
        }9 G7 A* Z4 K. h$ g% }/ y
}
使用道具 举报 回复
发表于 2019-8-13 16:29:06 | 显示全部楼层
请问 ping:network interface device get error.是什么原因,使用的是MW31模块* L: P; P6 h  |& T4 ~6 w8 o& Q
使用道具 举报 回复
发表于 2019-8-13 17:14:35 | 显示全部楼层
13640612207 发表于 2019-8-13 16:29
6 U8 w3 Q& L; }1 N" Y$ P请问 ping:network interface device get error.是什么原因,使用的是MW31模块

' i4 B- A, A0 b0 O+ o3 i是的,这个模块没有 ping 对应的 AT 指令,所以不支持这个命令
使用道具 举报 回复
发表于 2019-8-13 17:18:27 | 显示全部楼层
jamguo 发表于 2019-8-13 12:01
' q7 p" Q+ y. o5 G打开了SIM800c的sample  
+ N) s, [1 T0 c6 X% T; e2 rI/sal.skt] Socket Abstraction Layer initialize success.
' b- e% x/ |+ N" B# W% U! S AT client(V1.3.0)  ...
3 O! \3 E' B$ a- `% u8 {( W
你指的 RT-Thread 的文档具体是哪一个,我们后面会尽快完善 AT 相关应用代码
使用道具 举报 回复
发表于 2019-8-13 17:34:50 | 显示全部楼层
flyboy 发表于 2019-8-13 17:14% U$ _9 r+ Z8 _  Y8 b) f7 h
是的,这个模块没有 ping 对应的 AT 指令,所以不支持这个命令

, w! \  P  ]9 \! v+ F: k1 G3 ^白搞了两天,谢谢了
使用道具 举报 回复
发表于 2019-8-14 10:52:18 | 显示全部楼层
13640612207 发表于 2019-8-13 17:34: |* d) i/ r) @& S1 g
白搞了两天,谢谢了
7 C$ x5 `) I8 x; H+ C4 u1 n3 ?
你用的MW31是一个单独的无线模块吗,我的是ali-developer-kit 开发板上板载的模块,这个 MW31 的软件包也是我比着开发板提供的资料里的AT指令做的,可能不全。我没找到诺行官方的AT指令文档。你如果有完整的模块资料的话,也可以看看,比着完善一下。
使用道具 举报 回复
发表于 2019-8-15 09:38:05 | 显示全部楼层
AT_DEVEICE   注册到netdev ,然后 用SAL 组件  进行socekt 编程  ,我想 用ESP8266  telnet  实现远程finish
使用道具 举报 回复
发表于 2019-8-15 10:11:50 | 显示全部楼层
RT-WH 发表于 2019-8-15 09:38! Q7 v- ]+ \- O6 z( q1 h  k7 B
AT_DEVEICE   注册到netdev ,然后 用SAL 组件  进行socekt 编程  ,我想 用ESP8266  telnet  实现远程fini ...
5 |1 L$ J2 }3 m! y9 h1 l# X; l
目前还不支持 AT 设备作为网络服务器呢,所以 telenet 功能可能用不了,在上述常见问题第六条有提到哦
使用道具 举报 回复
发表于 2019-9-19 16:39:17 | 显示全部楼层
本帖最后由 jamguo 于 2019-9-19 16:40 编辑
) N5 a% g$ k- L5 ?3 b
Cheney_Chen 发表于 2019-8-15 10:11( ^3 B, E! J- Y" u
目前还不支持 AT 设备作为网络服务器呢,所以 telenet 功能可能用不了,在上述常见问题第六条有提到哦 ...

4 k1 j3 M, Z7 R[E/at.clnt] AT Client receive failed, uart device get data error(-2)# C" J, }7 u3 Y# r4 V+ P
[E/at.skt] sim800c device(sim0) receive size(2) data failed.
1 }& t& z% C- [% u. R$ w+ z[E/mqtt] [221292] wait Ping Response res: 0! m5 n' @! W* ]" O, s

& X3 I$ u+ A4 a" J7 D* i3 U请问下,我使用AT组件 联网没问题,就是会不定时的这样断网,是串口问题?还是什么超时之类的?跑裸机没问题
使用道具 举报 回复
发表于 2019-9-19 17:18:22 | 显示全部楼层
jamguo 发表于 2019-9-19 16:39: r1 _  n5 p% L% f4 Z1 w+ [
[31m[E/at.clnt] AT Client receive failed, uart device get data error(-2) [0m
  V- E8 J' j) O/ t& `1 O6 ]$ S9 Y% {% k [31m[E/at.skt] sim800c  ...

6 O5 R% }+ {: ^- o应该是 URC 接收函数中设置的串口接收超时时间过短,之前根据数据长度设置的(比如这里接收两个字节,则接收超时时间为两个 TICK),可能造成串口接收失败问题,laster 最新版设置了最低超时间,你可以更新一下试试,具体改动看下面 PR 提交记录:' |/ W1 {( Y; ?
# A5 g3 r( k6 @4 s0 z6 {6 O
https://github.com/RT-Thread-packages/at_device/pull/69
使用道具 举报 回复
发表于 2019-9-19 17:45:06 | 显示全部楼层
Cheney_Chen 发表于 2019-9-19 17:18* K- `, [+ E3 M# q* S5 L8 @' L
应该是 URC 接收函数中设置的串口接收超时时间过短,之前根据数据长度设置的(比如这里接收两个字节,则 ...
) W+ ?5 }* ]/ Q1 k( T
谢谢  ,我试一下
使用道具 举报 回复
发表于 2019-9-20 10:28:30 | 显示全部楼层
Cheney_Chen 发表于 2019-9-19 17:18# z3 i( x8 _, e# v9 e
应该是 URC 接收函数中设置的串口接收超时时间过短,之前根据数据长度设置的(比如这里接收两个字节,则 ...
6 ?4 u& }, Y9 ~5 h' L) q

3 M6 |1 [' g" f" n1 j0 n" |" a[E/at.clnt] AT Client receive failed, uart device get data error(-2)
, M; h8 a2 `: m* I  N" r[E/at.skt] sim800c device(sim0) receive size(2) data failed.
5 |- B) V9 w& z1 k[E/mqtt] [302099] wait Ping Response res: 08 ~9 \% D" x! G# t" A5 N
3 ?. R. Y: M( g/ N1 Y1 C
修改了以后还是会这样,已经改了20个TICK了,请问下这是什么问题呢? [302099] 这是什么错误编码吗?能根据这个找原因吗?% Y; S" h6 |, a! l2 o. W1 m5 M+ y
使用道具 举报 回复
发表于 2019-10-15 17:32:55 | 显示全部楼层
本帖最后由 insect2006 于 2019-10-15 17:35 编辑
% R: a1 S' U* q" R* B5 C3 d( d+ s4 [- B: |# G
RTT版本3.1.2,AT组件1.4.0. L8 Z8 S. @! H7 V0 `( C8 x
- G  U$ _0 Q7 K8 Z# @% R
AT模块为ESP8266,SAL组件等均已启用
& H$ ?4 H' t% @( U/ [) x6 P5 h# I
7 p. p% `3 X) T5 \2 h上电后加入WIFI成功,at_ping测试OK,AT CLI模式测试OK。# U7 k* f& N% o$ S, e
) ~1 A9 j1 B  ~5 t
使用web_get_test和web_post_test官方范例进行HTTP测试,提示socket 0发送失败,接收超时。0 ?; T) D& {' i* m
( [- J. |0 R/ m- W
请问是什么原因?& c; }/ T/ E* c

, j3 N5 r: z0 p4 s" e+ S下图是开启RAW数据的截图(Finsh波特率已调高到921600bps): x5 y0 X+ a" T% s

+ |; V: F" d) m, b$ H; u9 l  t; }) S- [' u/ `7 N; z
1.png
使用道具 举报 回复
发表于 2019-10-16 11:58:42 | 显示全部楼层
你好,首先感谢开源的组件使用,现在使用SIM800C,遇到一个场景就是使用的时候打开sim800C的供电开关,数据传输完成后关闭sim800C的供电,我看现在的接口只有注册at_device_register,而没有注销的接口,这个应该怎么实现,或者提供一下思路吗?% D4 ]  L- [4 B& a2 {/ l
使用道具 举报 回复
发表于 2019-10-18 10:08:33 | 显示全部楼层
haov000 发表于 2019-10-16 11:58
# T4 Y% n/ N' H* G$ n你好,首先感谢开源的组件使用,现在使用SIM800C,遇到一个场景就是使用的时候打开sim800C的供电开关,数据 ...
4 O# Q9 s4 S* Z+ C4 e% i
建议直接将网卡设置为 DOWN 状态,应用层可调用 netdev_set_down 接口,针对 sim800c 设备会直接调用 sim800c_netdev_set_down 函数,该函数中有关闭模块供电即设置状态的操作,对应设置 netdev_set_up 之后又可正常使用
使用道具 举报 回复
发表于 2019-10-18 14:11:50 | 显示全部楼层
Cheney_Chen 发表于 2019-10-18 10:08! t8 d8 S# B  S& N
建议直接将网卡设置为 DOWN 状态,应用层可调用 netdev_set_down 接口,针对 sim800c 设备会直接调用 sim ...
  p# \4 c% E, d3 P% N
明白了,感谢
使用道具 举报 回复
发表于 2019-10-19 09:27:33 | 显示全部楼层
本帖最后由 haov000 于 2019-10-19 09:28 编辑 - s8 C! N5 v6 L# A$ |6 b- S# _) o/ X
Cheney_Chen 发表于 2019-10-18 10:08
' m: r/ c: a# G% V5 a* X+ a* h建议直接将网卡设置为 DOWN 状态,应用层可调用 netdev_set_down 接口,针对 sim800c 设备会直接调用 sim ...
, f$ X$ x7 a4 `0 J9 Y
你好,测试发现在不断调用netdev_set_down/netdev_set_up的时候,会出现内存泄露,最终导致无内存可用,内存错误提示如下:
# V4 j! w7 _) ^& g. G[E/at.clnt] AT create response object failed! No memory for response buffer!) \$ w5 v' T/ n
[E/at.dev.sim800] no memory for resp create.
2 A3 Q3 Y0 n+ u, Q测试代码如下:
7 ?/ O4 x' {3 u  e  ~while(1)
* r4 X1 y: p, W4 w' ?9 R, O{
4 M7 f& z# w4 E% K$ j! f% `                rt_thread_mdelay(60 * 1000);
) k0 x7 f' a' |                rt_kprintf("will off\n");
7 k$ |1 v3 [; T! x( c$ w) h                aa = netdev_get_by_name("sim0");" R, F. E$ c* C% i. `
                netdev_set_down(aa);
( F* }* {  J% J: C3 W                rt_thread_mdelay(10 * 1000);! @; w. r  h8 _+ T( n. T
                rt_kprintf("on.... net up\n");
' \( u( I) y% f' }5 g; y4 @                aa = netdev_get_by_name("sim0");
" P4 ]2 _4 W3 s5 n6 X  D                netdev_set_up(aa);
* F8 n/ m5 O' C}
$ u; L; {& G. x! \/ P3 v
" P. B( Z6 U; R
& y0 P. q9 ]7 r0 J# b
/ T0 a5 ?' R2 a4 }
9 J* j3 v  V8 x7 j5 \
使用道具 举报 回复
发表于 2019-10-19 10:25:19 | 显示全部楼层
Cheney_Chen 发表于 2019-10-18 10:08
& i+ {6 B4 W& A建议直接将网卡设置为 DOWN 状态,应用层可调用 netdev_set_down 接口,针对 sim800c 设备会直接调用 sim ...
5 i4 _+ w8 G4 l, `
你好,问题已查明,在调用netdev_set_up的时候,在函数sim800c_netdev_check_link_status(..)中会不断创建线程,而down的时候没有删除该线程,该线程应该是只需要创建一次即可,请修正下
使用道具 举报 回复
发表于 2019-10-21 13:53:02 | 显示全部楼层
haov000 发表于 2019-10-19 10:25
3 I7 W4 b' y+ y* n2 W# K# E4 L- R" }6 Q你好,问题已查明,在调用netdev_set_up的时候,在函数sim800c_netdev_check_link_status(..)中会不断创 ...
" k  Z- Z( m! o' `7 ]
收到,感谢反馈,近期会修复该问题
使用道具 举报 回复
发表于 2019-11-17 22:58:59 | 显示全部楼层
新手第一次使用RTT,问题有点低级,多多包涵:
# r9 i, e$ I1 bRTT版本3.1.2,AT组件版本1.5.0,AT模块为ESP8266,6 Q# E: N: t" z! S) J
启动SAL、AT组件初始化OK;, O( P0 V1 ]) R; Z, M1 D
[I/SAL_SOC] Socket Abstraction Layer initialize success.
+ v4 T9 i4 g. @[I/at.clnt] AT client(V1.2.0) on device uart2 initialize success.: Y. i4 E% x6 A5 X
设备连接OK;
  x' C- P" {5 T$ ?$ R* d4 Z[22:48:36.835]ÊÕ¡û¡ô[I/at.esp8266] ESP8266 WIFI is connected.
3 U5 K( u! T7 X4 f/ y0 l[22:48:39.692]ÊÕ¡û¡ô[I/at.esp8266] AT network initialize success!
: r9 v4 X7 S! {# I+ K7 `ping测试OK;/ Z; E2 i7 l3 l) I
[22:49:09.084]ÊÕ¡û¡ô32 bytes from www.rt-thread.org icmp_seq=1 time=28 ms, v/ I  y8 Y5 s4 Q
[22:49:10.083]ÊÕ¡û¡ô32 bytes from www.rt-thread.org icmp_seq=2 time=29 ms
2 h; B5 F' q! P[22:49:11.084]ÊÕ¡û¡ô32 bytes from www.rt-thread.org icmp_seq=3 time=28 ms  z' Y! o/ h1 J6 B+ I
[22:49:12.088]ÊÕ¡û¡ô32 bytes from www.rt-thread.org icmp_seq=4 time=26 ms% J7 e# }7 b9 ?6 p
1、请问用int at_connect(int socket, const struct sockaddr *name, socklen_t namelen)连接服务器吗?# u3 S9 J$ }3 V( o
2、参数应该怎样赋值?* R) ]8 W( i( W
(服务器IP:192.168.0.106,端口号:8080)) L' p) b; X+ [/ i

5 F( W8 g. z% A5 d9 ?# I# J0 ~9 l& ^- w- a) k$ O3 c( j
使用道具 举报 回复
发表于 2019-11-18 22:42:02 | 显示全部楼层
本帖最后由 梦笑真美 于 2019-11-18 22:49 编辑 6 j: Q; i0 W: q; b

3 {" ]- ^$ K) W- n使用EC20打开TCP和发送数据经常超时或未响应,把等待时间加大也不行,我裸机程序都能一次成功的6 H1 g$ k# x! b8 a, l! e

5 j+ N; q6 A3 S% r1 \2 x
; `+ J+ \" X0 `, d6 K6 k5 b3 P" X# t  Y$ f3 B, A8 ^

4 G/ _3 [: r/ {$ }
% I  |4 e  N$ v: ]) P; H, F6 O
0 L# X  B$ W' Y# @  vRTT版本   4.0.1
. Y8 h+ v8 M% _/ O7 s0 PAT DEVICE  1.4' C- X7 n! ^& D7 ]6 O0 I
1 V' f, P/ f$ `* j# c) \
QQ截图20191118224844.png
使用道具 举报 回复
发表于 2019-11-19 10:04:13 | 显示全部楼层
梦笑真美 发表于 2019-11-18 22:42
) G2 h- }  c: O. b使用EC20打开TCP和发送数据经常超时或未响应,把等待时间加大也不行,我裸机程序都能一次成功的
: I& `* i" Y, n* J- y7 \% }
从日志看,可能是因为阿里云连接时地址的问题,将连接的地址改为全部小写试试再连接吧
使用道具 举报 回复
12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表