Невозможно установить связь между модулем ESP-12E и мобильным устройством через маршрутизатор ESP-12E.

Я новичок в Arduino. Я пытаюсь отправить данные с клиентского модуля ESP-12E на мобильное устройство через модуль маршрутизатора ESP (я использую Arduino IDE для программирования ESP-12E).

Для этого я успешно подключаю клиентский модуль ESP-12E к модулю ESP маршрутизатора. Вот мой код:

Код на стороне сервера

#include <ESP8266WiFi.h>

WiFiServer server(80); // Инициализируем сервер на порту 80

void setup() {
  WiFi.mode(WIFI_AP); //Наш ESP8266-12E является точкой доступа
  WiFi.softAP("11111111", "12345678");
  // Укажите (SSID, пароль);
  server.begin(); // Запускаем HTTP-сервер
  Serial.begin(115200);
  //Запуск связи между ESP8266-12E и окном монитора
  IPAddress HTTPS_ServerIP= WiFi.softAPIP();
  // Получаем IP сервера
  Serial.print("Server IP is: ");
  // Печатаем IP в окно монитора
  Serial.println(HTTPS_ServerIP);
}

void loop() {
  WiFiClient client = server.available();
  if (!client) {
    return; 
  } 
}

код на стороне клиента

#include <ESP8266WiFi.h>

const char *ssid = "11111111";
const char *password = "12345678";
const char *host = "192.168.4.1";
const int httpPort = 80;

void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  delay(8000);
  Serial.print("connecting to ");
  Serial.println(host);
  WiFiClient client;
  client.connect(host,httpPort);
  if (!client.connect(host,httpPort)) {
    Serial.println("connection failed");
    return;
  }
  Serial.println("connection Ok");
  client.print("Temperature");
  client.println( " C " );
  client.print(", ");
  client.print("HI data received");
}

Теперь я хочу получать данные на свой мобильный телефон. Итак, я подключаю свой мобильный к модулю маршрутизатора ESP-12E. А потом я отправляю данные с Клиента ESP-12E, но на мой мобильный ничего не приходит. Кто-нибудь может сказать мне, как получить данные на моем телефоне?

Теперь я использую приведенный ниже клиентский код.

код на стороне клиента

#include <ESP8266WiFi.h>

#define MAX_SRV_CLIENTS 2
// сколько клиентов должно иметь возможность подключаться по телнету к этому ESP8266
const char* ssid = "11111111";
const char* password = "12345678";
WiFiServer server(80);
WiFiClient serverClients[MAX_SRV_CLIENTS];

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.print("\nConnecting to ");
  Serial.println(ssid);
  uint8_t i = 0;
  while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);
  if(i == 21) {
    Serial.print("Could not connect to"); 
    Serial.println(ssid);
    while(1) delay(500);
  }
  //запускаем UART и сервер
  Serial.begin(115200);
  server.begin();
  server.setNoDelay(true);
  Serial.print("Ready! Use 'telnet ");
  Serial.print(WiFi.localIP());
  Serial.println(" 23' to connect");
}

void loop() {
  uint8_t i;
  //проверяем, есть ли новые клиенты
  if (server.hasClient()) {
    for(i = 0; i < MAX_SRV_CLIENTS; i++) {
      // находим свободное/отключенное место
      if (!serverClients[i] || !serverClients[i].connected()) {
        if(serverClients[i]) serverClients[i].stop();
        serverClients[i] = server.available();
        Serial.print("New client: ");
        Serial.print(i);
        continue;
      }
    }
    //свободного/отключенного места нет, поэтому отклоняем
    WiFiClient serverClient = server.available();
    serverClient.stop();
  }
  //проверяем клиентов на наличие данных
  for(i = 0; i < MAX_SRV_CLIENTS; i++) {
    if (serverClients[i] && serverClients[i].connected()) {
      if(serverClients[i].available()) {
        // получить данные от клиента telnet и отправить их на UART
        while(serverClients[i].available())
          Serial.write(serverClients[i].read());
      }
    }
  }
  //проверяем UART на наличие данных
  if(Serial.available()) {
    size_t len = Serial.available();
    uint8_t sbuf[len];
    Serial.readBytes(sbuf, len);
    // передаем данные UART всем подключенным клиентам telnet
    for(i = 0; i < MAX_SRV_CLIENTS; i++) {
      if (serverClients[i] && serverClients[i].connected()) {
        serverClients[i].write(sbuf, len);
        WiFiClient client;
        client.print("a");
        delay(1);
      }
    }
  }
}

Я подключаю свой мобильный телефон к модулю ESP маршрутизатора и отправляю данные с моего клиентского модуля ESP на свой мобильный телефон, а затем набираю IP-адрес на мобильном телефоне для получения данных. Затем я получаю этот вывод на клиентском модуле ESP 12E через последовательный порт, но ничего не получаю на своем мобильном телефоне.

 New client: 0GET / HTTP/1.1
.Host: 192.168.4.2
.Connection: keep-alive
.Cache-Control: max-age=0
.Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
.User-Agent: Mozilla/5.0 (Linux; Android 4.4.4; AO5510 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Mobile Safari/537.36
.Accept-Encoding: gzip,deflate,sdch
.Accept-Language: en-US,en;q=0.8

Кто-нибудь может мне помочь? Что я делаю не так?

, 👍-1

Обсуждение

В вашем коде "маршрутизатора" вообще нет ничего, что касалось бы передачи каких-либо данных. Все, что вы сделали, это создали точку доступа, приняли подключения к порту, а затем проигнорировали все поступающие сообщения. Вам необходимо активно считывать данные с каждого подключенного клиента и отправлять эти данные всем другим подключенным клиентам., @Majenko

Попробуйте посмотреть на пример WiFiTelnetToSerial, но удалите из него последовательный аспект., @Majenko

спасибо за ответ, сэр, но этот пример предназначен для чтения данных через Serial, но я хочу прочитать данные из модуля Client Esp, так что же изменится в этом коде? этот код используется либо на стороне маршрутизатора, либо на стороне клиента, пожалуйста, помогите мне, @Amit Upadhyay

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

я получаю это сообщение в серийном номере клиента ESP, когда пытаюсь получить данные на мобильный телефон через ip после подключения к маршрутизатору ** Новый клиент: 0GET / HTTP/1.1 .Хост: 192.168.4.2 .Connection: поддержка активности .Cache-Control: max-age=0 .Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 .User-Agent: Mozilla/5.0 (Linux; Android 4.4.4; AO5510 Build/KTU84Q) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/36.0.1985.135 Mobile Safari/537.36 .Accept-Encoding: gzip, deflate, sdch .Accept-Language: en-US,en;q=0.8**, @Amit Upadhyay


1 ответ


1

Вы не можете делать то, что хотите, с имеющимся у вас кодом.

На данный момент все, что вы сделали, это написали точку доступа, это просто позволяет устройствам WIFI подключаться к «маршрутизатору». Вам нужно написать код, который читает то, что отправляет ваш клиент. Взгляните на примеры, там есть несколько примеров веб-серверов, которые вы можете изучить.

Забудьте пока о клиенте, просто используйте браузер для запроса ваших страниц, заставьте сервер работать, а затем запустите ваш клиент.

,