ESP8266+STM32 透传模式 AT+CIPSEND 返回 ERROR

在使用 ESP8266+STM32 开发时,按照以下顺序执行 AT 指令,使得 ESP8266 通过 TCP 连接到服务器端口,使用透传模式发送消息。

AT+CWJAP=<"ssid">,<"password">
AT+CIPSTART=<"TCP">,<"IP">,<port>
AT+CIPMODE=1                      // 使用透传模式
AT+CIPSEND

在直接将 ESP8266 使用 串口 转 USB 连接到电脑上,所有通信都可以正常进行,并且可以正常传输数据。

但是将 ESP8266 通过串口与 STM32 相连接时,出现无法传输数据的情况,调试发现按顺序执行前三条语句时都能够获得正确响应,但在执行 AT+CIPSEND 时返回了 ERROR。

怀疑可能是TCP连接未建立,但是发现在服务端可以看到TCP已经建立。

目前尚未发现导致该问题的原因。

解决方法:不使用透传模式,改为普通传输模式,即将 AT+CIPMODE=1 改为 AT+CIPMODE=0,并且使用 AT+CIPSEND=<length> 来传输数据。在这种方式下可以正常工作。

### 使用 AT+CIPSEND 发送指定长度的数据 要通过 `AT+CIPSEND` 命令发送指定长度的数据,需遵循以下方法: 在建立 TCP 或 UDP 连接之后(例如使用命令 `AT+CIPSTART="TCP","122.114.122.174",39999`[^2]),可以通过设置参数来定义待发送数据的长度。具体操作如下: 执行命令 `AT+CIPSEND=<length>` 后,模块会返回提示符 `>`, 此时表示可以输入实际数据内容。此时需要按照之前设定的 `<length>` 参数值提供相应字节数的数据。 例如,在发送字符串 `"test1"` 时,由于该字符串包含 5 字节字符,则应先发出指令 `AT+CIPSEND=5`[^1] 并等待确认后紧接着键入这五个字符的内容即完成传输过程。 另外值得注意的是,在正式进行上述通信流程前可能还需要配置网络接口并获取本机地址信息等准备工作;比如利用查询当前连接状态下的本地 IP 地址功能(`AT+ CWLIF`) 来了解自己所处环境中的确切位置标识情况以便后续正常交互工作开展顺利[^3]. ```python # Python模拟实现序列化发送逻辑(仅作演示用途) def send_data_via_at_command(data_length, data_content): at_send_cmd = f'AT+CIPSEND={data_length}\n' print(at_send_cmd) # 模拟向串口写入启动发送模式命令 input_prompt = '>' print(input_prompt) # 模拟接收来自设备准备就绪信号 actual_data_sent = ''.join([chr(c) for c in bytearray(data_content.encode('utf-8'))]) print(actual_data_sent) # 模拟真正传递过去的具体消息体部分 send_data_via_at_command(5,"test1") ``` #### 注意事项: 确保目标服务器端能够接受客户端发起的新链接请求以及正确解析收到的信息包结构形式非常重要。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值