Отправка последовательных данных на локальный сервер

Я новичок в кодировании arduino. Я читаю данные из последовательного порта и сохраняю его в массиве символов. Я хочу отправить эти данные на локальный сервер, но он не преобразуется в строку

Код:

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
ESP8266WebServer server;
char* ssid = "Office RTPL";
char* password = "********";
char data[64];
char data1[64];
String str;
void setup()

{
  // put your setup code here, to run once:
  WiFi.begin(ssid,password);
  Serial.begin(115200);
  while(WiFi.status()!= WL_CONNECTED)
  {
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.print("IP Address: ");
  Serial.print(WiFi.localIP());
  server.on("/",[](){server.send(200,"text/plain","Data Test");});
  server.on("/toggle",serialData);
  server.begin();
}
void loop() 
{
  // put your main code here, to run repeatedly:
  server.handleClient();
 ;
}
void serialData()
{
  if(Serial.available() > 0)
      {

        server.send(200,"text/plain","Data");
         for(int n=0; n<64; n++)
         {
           data[n] = (Serial.read());

         } 
         String str (data);
         server.send(200,"text/plain",str);


  else 
        {
        String no_data = "No Serial Data";
        server.send(200,"text/plain",no_data);
        delay(5000);
        }


}

Пожалуйста, помогите

1 голос | спросил ankit ankit 13 MaramTue, 13 Mar 2018 08:59:47 +03002018-03-13T08:59:47+03:0008 2018, 08:59:47

1 ответ


1

Как я упоминаю в моем ответе о последовательная связь :

  

Перед чтением всегда убедитесь, что данные доступны. Например, это неверно:

if (Serial.available ())
  {
      char a = Serial.read ();
      char b = Serial.read ();  // may not be available
  }
     

Тест Serial.available гарантирует, что у вас есть один байт, однако код пытается прочитать два. Он может работать, если в буфере есть два байта, если вы не получите -1, который будет выглядеть как «ÿ», если будет напечатан.

В вашем коде:

if(Serial.available() > 0)
    {
    server.send(200,"text/plain","Data");
     for(int n=0; n<64; n++)
     {
       data[n] = (Serial.read());

Итак, вы знаете, что один байт доступен, но вы читаете 64. Нет, это не сработает.

ответил Nick Gammon 13 MaramTue, 13 Mar 2018 09:12:11 +03002018-03-13T09:12:11+03:0009 2018, 09:12:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132