Arduino Uno r3 с ошибкой Wi-Fi при загрузке строки в базу данных - PullRequest
0 голосов
/ 23 января 2020

У меня проблемы с передачей строки из моего uno в ESP8266, а затем в базу данных. Вместо того, чтобы отображать «Низкий» и направленный в программе uno, он отображает каждый символ низкого уровня на столе на моей веб-странице, а не весь мир. (см. прилагаемое изображение).

Код для Arduino Uno:

// send as 
String test = "Low";
void setup() 
{
    Serial.begin(115200);  
    // wait for the serial port to connect. Required for Leonardo/Micro native USB port only
    while (!Serial) {  ;  }
}


void loop() 
{
  Serial.print(test);

}

Код для встроенного ESP8266:

#ifdef ESP32
  #include <WiFi.h>
  #include <HTTPClient.h>
#else
  #include <ESP8266WiFi.h>
  #include <ESP8266HTTPClient.h>
  #include <WiFiClient.h>
#endif

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

char c []= "";
// Replace with your network credentials
const char* ssid     = "*****";
const char* password = "****";

// REPLACE with your Domain name and URL path or IP address with path
const char* serverName = "******";

// Keep this API Key value to be compatible with the PHP code provided in the project page. 
// If you change the apiKeyValue value, the PHP file /post-esp-data.php also needs to have the same key 
String apiKeyValue = "****";

String humidityValue;

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) { 
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());
}

void loop() {

  if(Serial.available())
  {
    char c = Serial.read();
    delay(100);
    humidityValue = c;
    Serial.print(humidityValue);
   }

  //Check WiFi connection status
  if(WiFi.status()== WL_CONNECTED){
    HTTPClient http;
    http.begin(serverName);
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");
    String httpRequestData = "api_key=" + apiKeyValue + "&humidity=" +    humidityValue + "";
    int httpResponseCode = http.POST(httpRequestData);
    delay(1000);
    http.end();    
  }
  delay(1000);
}

enter image description here

1 Ответ

1 голос
/ 23 января 2020

Вы читаете только один символ за раз:

 char c = Serial.read();

char - это один символ, а не целая строка.

Вы можете прочитать целую строку, но тогда вы просто получите то, что случилось, что уже прибыло, что может зависеть от времени. Вы отправляете LowLowLowLowLow ... так что у получателя нет возможности узнать, где заканчивается строка.

Возможно, вместо этого отправьте "Low \ n", затем на стороне получателя продолжайте читать символы, пока не увидите '\ n', а затем обработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...