arduino - 无法通过ESP8266发送数据

标签 arduino udp at-command esp8266

我正在做一个关于座位占用的项目,其中使用了 Arduino、压电传感器和 ESP8266。我的问题是我无法将数据发送到运行 UDP 服务器(用 Python 编写)的 PC。

我真正的问题是,当我使用 Arduino IDE 的串行监视器时,我能够发送数据。它完美地发送和接收数据,但代码没有运行,我无法指出我的错误。

Arduino 代码:

const int seat_no = 2;
const char *ssid = "";
const char *passwd = "";
const char *ip = "192.168.43.250";
const int port = 55056;
const int threshold = 100;

String op;
int i, a, data_size;
void setup() {
  Serial.begin(9600);
  Serial1.begin(115200);
  Serial.println("Starting ESP8266");

  Serial1.write("AT+CWJAP=\"");
  Serial1.write(ssid);
  Serial1.write("\",\"");
  Serial1.write(passwd);
  Serial1.write("\"\r\n");
  Serial1.write("AT+CWMODE=1\r\n");
  Serial1.write("AT+CIPMUX=0\r\n");
  Serial1.write("AT+CIPSTART=\"UDP\",\"");
  Serial1.write(ip);
  Serial1.write("\",");
  Serial1.write(port);
  Serial1.write("\r\n");
}
void loop() {
  op = "{\"seat_status\":[";
  for (i = 0; i < seat_no; i++) {
    a = analogRead(i);
    if (a > threshold) {
      op += "\"0\"";
      Serial.println("0");
    }
    else {
      op += "\"1\"";
      Serial.println("1");
    }
    if (i < seat_no - 1)
      op += ",";
  }
  op += "]}";
  data_size = op.length();
  Serial1.write("AT+CIPSEND=");
  Serial1.write(data_size+2);
  Serial1.write("\r\n");
  delay(1000);

  for (i = 0; i < data_size; i++)
    Serial.write(op[i]);
  Serial.println();

  for (i = 0; i < data_size; i++)
    Serial1.write(op[i]);
  Serial1.write("\r\n");
  delay(5000);
}

我认为我的 Python 代码是正确的,因为我也能够从其他来源接收数据(通过 Android 应用程序 UDP 发送器),所以请帮助我纠正这个问题。

电路图 enter image description here

最佳答案

问题在于使用Serial1.write。这是一个较低级别的功能。它所做的只是发送字节,并不将数字转换为其字符串表示形式。

当您将端口和数据长度写入串行时,write 函数只是发送具有该值的字节,而不是字符串。
如果您将 Serial1 替换为 Serial 并将命令发送回 PC,您会看到错误。

要真正解决您的问题,您应该将所有 Serial1.write 替换为 Serial1.print

关于arduino - 无法通过ESP8266发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40638216/

相关文章:

c - 如何使空数组中的一个值左移

c++ - Typedef 在第一个函数定义后不起作用?

c++ - 如何使用#define 语句来设置字节数组?

java - 如何通过 UDP 服务器/客户端发送数组列表

javascript - 使用 UDP 的 Node.js 文件传输

c - 服务器不接收来自客户端的数据

http - sim800 at command post 数据到服务器

sockets - 尝试建立套接字连接时,Arduino 客户端挂起

ssl - sim800c 支持哪些密码套件?

gsm - 关于 AT-COMMAND 的类型