Отправка нескольких сообщений через последовательный монитор в 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");
}
}
Было бы полезно, если бы я мог узнать, как это сделать правильно.
Заранее спасибо.
@Dingodudesir, 👍0
1 ответ
Лучший ответ:
с сервера вы отправляете в конце строки \r\r\n. сначала \r находится в строке, а \r\n добавляется println. затем на клиенте вы читаете, пока \r не появится первая строка, затем вы читаете пустую строку, пока не появится следующая \r.
- Как постоянно отправлять данные от нескольких клиентов на сервер с помощью NodeMCU?
- Как определить размер Flash?
- В ESP-12E NodeMCU, какой выход PIN A0?
- Преобразование byte* в int в Arduino
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- NodeMCU (Arduino IDE) «DynamicJsonBuffer» не был объявлен в этой области
- NodeMCU поддерживает внедрение ключей?
- Датчик движения PIR (HC-SR501) ложные результаты с NodeMCU