乐鑫技术交流
直播中

王玲

7年用户 1409经验值
私信 关注
[问答]

如何让TCP每10毫秒发送一次数据包?

我写了一个代码,将传感器数据发送到 matlab 并将其保存在那里用于绘图等。
我的问题是我想要至少 10 毫秒的发送速率,但我能达到的最快传输速率是每个数据包 60-70 毫秒。我已经禁用了 Nagle,但没有任何改变。
我发布相关部分:
代码:全选void loop()
{

  client = server.available();

  //Check if client is available

  if (client)
  {

    Serial.println("Client vorhanden");

    // while client is connected
    while (client.connected())
    {
      startStopTransmission();

      if (transmission)
      {

        if (tenmsFlag)
        {
          readSensorData();

          double Values[] = {acc_x, acc_y, acc_z, eul_x, eul_y, eul_z};

          client.write((uint8_t *)Values, sizeof Values);

          client.flush();

          tenmsFlag = false;
        }
      }
    }
  }
}
库中似乎存在硬编码延迟。

                 

回帖(1)

王瑞

2023-2-22 09:21:05
直接通过 USART 发送 AT 命令,您不受任何库的约束,我保证它易于使用。Espressif 有很多文件一步一步解释。但请注意,制造商本身指定了通过 TCP/UDP 发送数据的命令之间的值 20ms。即便如此,时间也已经大大减少了。
参加考试。通过串行“ATrn”或“ATnr”发送,两者都可以。发送命令后,从 Usart 读取数据并使用“println”打印它们。收到的字必须是“OK”。不要忘记正确设置模块的波特率(出厂默认值 115200)。一旦你能够执行这些步骤,在谷歌上搜索“Esp8266 example at commands”,你会在其中找到如何建立 UDP/TCP 连接。这很简单,最多有 5 个命令来建立连接。
举报

更多回帖

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