Отправка нескольких сообщений через последовательный монитор в nodeMCU

Я пытаюсь отправить несколько сообщений по беспроводной сети с одного ESP8266-12E NodeMCU на другой. Я успешно установил соединение и могу отправлять и получать отдельные сообщения. MAC-адреса нужны исключительно для проверки того, что данные отправляются нужному клиенту. Моя проблема заключается в отправке нескольких сообщений, которые я должен иметь возможность наблюдать в последовательном мониторе.

Вот мой код сервера:

#include <ESP8266WiFi.h>

extern "C" {
  #include <user_interface.h>
}

int32_t freq = 10000;

WiFiServer server(80);                            //Initialize the server on Port 80

void setup() {
  pinMode(D1,OUTPUT);
  pinMode(D2,OUTPUT);
  pinMode(D3,OUTPUT);

  Serial.begin(9600);                             //Start communication between the ESP8266-12E and the monitor window

  analogWriteFreq(freq);

  WiFi.mode(WIFI_AP);                             //This ESP8266-12E is an AccessPoint 
  WiFi.softAP("NodeMCU_js", "12345678");          //Provide the (SSID, password)  

  IPAddress HTTPS_ServerIP = WiFi.softAPIP();      //Obtain the IP of the Server
  Serial.println("Server IP is: ");                 //Print the IP to the monitor window 
  Serial.println(HTTPS_ServerIP);
  server.begin();                                 //Start the HTTP Server

}

void loop() { 
  WiFiClient client = server.available();         //Check if a client has connected to the server

  struct station_info *stat_info;
  struct ip_addr *IPaddress;
  IPAddress address;

  if (client) {  
    Serial.println("Somebody has connected :)");

    stat_info = wifi_softap_get_station_info();

    while (stat_info != NULL){
      IPaddress = &stat_info->ip;
      address = IPaddress->addr;
      Serial.println();

      Serial.print("Client IP Address = ");
      Serial.print(address);
      Serial.println();

      Serial.print("Client MAC Address = ");
      Serial.print(stat_info->bssid[0],HEX);
      Serial.print(":");
      Serial.print(stat_info->bssid[1],HEX);
      Serial.print(":");
      Serial.print(stat_info->bssid[2],HEX);
      Serial.print(":");
      Serial.print(stat_info->bssid[3],HEX);
      Serial.print(":");
      Serial.print(stat_info->bssid[4],HEX);
      Serial.print(":");
      Serial.print(stat_info->bssid[5],HEX);
      Serial.println();

      if (stat_info->bssid[0] == 0xDC && stat_info->bssid[1] == 0x4F && stat_info->bssid[2] == 0x22 && stat_info->bssid[3] == 0x17 && stat_info->bssid[4] == 0xEE && stat_info->bssid[5] == 0x95){
          int duty1 = 150;
          int duty2 = 200;
          int duty3 = 250;
          Serial.println("Duty - 1 : "+String(duty1));
          Serial.println("Duty - 2 : "+String(duty2));
          Serial.println("Duty - 3 : "+String(duty3));

          analogWrite(D1,duty1);
          analogWrite(D2,duty2);
          analogWrite(D3,duty3);

          client.println(String(duty1)+"\r");                          //Server's response to the client
          client.println(String(duty2)+"\r");
          client.println(String(duty3)+"\r");
       }
      else {
        Serial.println();
        Serial.println("Client not recognized.");
      }
     stat_info = STAILQ_NEXT(stat_info, next); 
    }
  }
}

Вот мой клиентский код:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

char ssid[] = "NodeMCU_js";
char password[] = "12345678";

IPAddress server(192,168,4,1);       // фиксированный IP-адрес сервера

WiFiClient client;                // Создает клиента, который может подключаться к указанному IP-адресу и порту в Интернете, как определено в client.connect()

void setup() {
  pinMode(D4,OUTPUT);

  WiFi.persistent(false);
  WiFi.mode(WIFI_STA);

  Serial.begin(9600);                 //Последовательное соединение
  WiFi.begin(ssid,password);          //WiFi-подключение

  while (WiFi.status() != WL_CONNECTED) {         //Ждем завершения подключения WiFI
    delay(500);
    Serial.println("Connecting...");
  }
  Serial.println("Connected.");
  client.connect(server,80);
}

void loop() {
  if(WiFi.status()== WL_CONNECTED){   //Проверка статуса подключения WiFi
    String answer1 = client.readStringUntil('\r');
    Serial.println();
    Serial.print("From Server(1): ");
    Serial.print(answer1);
    client.flush();

    String answer2 = client.readStringUntil('\r');
    Serial.println();
    Serial.print("From Server(2): ");
    Serial.print(answer2);
    client.flush();

    String answer3 = client.readStringUntil('\r');
    Serial.println();
    Serial.print("From Server(3): ");
    Serial.print(answer3);
    client.flush();

  }
  else{
    Serial.println("Error in WiFi connection");   
  } 
}    

Было бы полезно, если бы я мог узнать, как это сделать правильно.

Заранее спасибо.

, 👍0


1 ответ


Лучший ответ:

0

с сервера вы отправляете в конце строки \r\r\n. сначала \r находится в строке, а \r\n добавляется println. затем на клиенте вы читаете, пока \r не появится первая строка, затем вы читаете пустую строку, пока не появится следующая \r.

,