使用 Arduino Mega 和以太网屏蔽 W5100 将 POST Json 发送到 API

问题描述

将此作为我的草图,串行监视器说 JSON 已成功发送。但它并没有反映到我的 Cloud DB。

我将 HTTPS 更改为 HTTP,但没有成功。哪里会出错?

我的目标是将我的 Arduino 中的所有输入发送到我的服务器并存储到我的 Cloud DB。

编辑:替换所有建议的编辑后,我收到 400 Bad request。 在 Postman 中,请求有效,所以我知道我的请求有效。但是我无法使用以太网屏蔽使其在 arduino 中工作

void setup() {
  Serial.begin(9600);
  
  // initialize the Ethernet shield using DHCP:
    if (Ethernet.begin(mac) == 0) {
      Serial.println("Failed to obtaining an IP address using DHCP");
      while(true);
    }
    
  delay(1000);

  Serial.println("connecting...");

  if (client.connect(HOST_NAME,HTTP_PORT)) {
    Serial.println("connected");
  } else {
    Serial.println("connection Failed");
  }

   //Create JSON doc and write a "name" attribute
  const size_t capacity = JSON_OBJECT_SIZE(3);
  DynamicJsonDocument doc(capacity);
    doc["tank_id"] = "2a";
    doc["branch_name"] = "aurora";
    doc["water_level"] = "high level";


  //POST request
  Serial.println("Begin POST Request");

  client.println("POST /myURL HTTP/1.1");
    Serial.println("POST /myURL HTTP/1.1");

  client.println("Host: host.net");
    Serial.println("Host: host.net");
  client.println("User-Agent: Arduino/1.0");
    Serial.println("User-Agent: Arduino/1.0");

  client.println("Content-Type: application/json");
    Serial.println("Content-Type: application/json");

  client.println("Connection: keep-alive");
    Serial.println("Connection: keep-alive");

  client.print("Content-Length: ");
    Serial.print("Content-Length: ");

  client.println(measureJson(doc));
      Serial.println(measureJson(doc));

  client.println();
  Serial.print(F("Sending: "));
  serializeJson(doc,Serial);
  Serial.println();


  //This works like client.println,but prints doc to client
  serializeJsonPretty(doc,client);

  //To let me kNow that request has been completed
  Serial.println("Sent POST Request");

  while (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
}

void loop() {
 while(client.connected()) {
      if(client.available()){
        // read an incoming byte from the server and print it to serial monitor:
        char c = client.read();
        Serial.print(c);
      }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)