乐鑫技术交流
直播中

笑过就走

10年用户 991经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术
私信 关注
[问答]

请问如何使用AT CIPSEND或AT CIPSENDBUF发送多个数据包?

我可以使用 AT CIPSEND 发送单个数据包。但是我必须发送一系列二进制数据包。如何使用AT CISEND或AT CIPSENDBUF发送多个数据包,什么是正确的算法?

到目前为止,我尝试了以下方法,但没有成功:


  • 0,连接- 外部客户端打开 TCP 连接 0
  • 瞳孔间距,0,87 <...> - external client sends a command, eg a data packet of 87 bytes long
  • 在 cipsendbuf=0,34- 我的设备开始发送第一个回复,它是一个 34 字节长的数据包
  • My device it waits for "OK" from  ESP8266, time-out is 1 sec
  • 3,2  OK > - ESP8266 replies "OK >", it happens almost instantly
  • 我的设备发送 34 个字节的数据,然后等待 UART 发送所有数据字节
  • 在 cipsendbuf=0,38- 我的设备开始发送第二个回复,它是一个 38 字节长的数据包
  • My device it waits for "OK >" from  ESP8266, time-out is 1 sec
  • 我的设备因超时而退出
  • 繁忙的 S...接收 34 字节 0,9,发送 OK - after a delay of about 2 sec ESP8266 replies "OK",

在第一个数据包之后,这是一个巨大的延迟。如何避免这种情况?
                  

回帖(1)

juju宇哥

2024-7-15 17:03:37
要使用AT CIPSEND或AT CIPSENDBUF发送多个数据包,您可以按照以下步骤操作:

1. 确保您的设备已连接到ESP8266模块,并且ESP8266模块已连接到外部客户端。

2. 使用AT命令`AT+CIPSTART`建立TCP连接。例如:
   ```
   AT+CIPSTART="TCP","example.com",80
   ```
   这里,"example.com"是目标服务器的域名,80是目标服务器的端口号。

3. 等待ESP8266模块响应"OK",表示TCP连接已建立。

4. 使用AT命令`AT+CIPSEND`或`AT+CIPSENDBUF`发送第一个数据包。例如:
   ```
   AT+CIPSEND=34
   ```
   这里,34是您要发送的第一个数据包的长度。

5. 发送数据包的内容。ESP8266模块将自动发送数据包。

6. 等待ESP8266模块响应"OK",表示第一个数据包已成功发送。

7. 重复步骤4-6,发送后续的数据包。您可以使用循环结构来实现这一点。

8. 当所有数据包都发送完毕后,使用AT命令`AT+CIPCLOSE`关闭TCP连接。例如:
   ```
   AT+CIPCLOSE
   ```
   等待ESP8266模块响应"OK",表示TCP连接已关闭。

以下是一个示例算法,用于发送一系列二进制数据包:

```
1. 初始化数据包列表和数据包计数器
2. 连接到外部客户端
3. 循环发送数据包:
   a. 使用AT+CIPSEND或AT+CIPSENDBUF发送数据包长度
   b. 发送数据包内容
   c. 等待ESP8266模块响应"OK"
   d. 更新数据包计数器
   e. 检查是否发送完所有数据包,如果是,则跳出循环
4. 关闭TCP连接
5. 完成发送任务
```

请注意,根据您的设备和ESP8266模块的具体实现,可能需要对上述步骤进行调整。此外,确保在发送数据包时遵循正确的数据格式和协议。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分