Невозможно установить связь между модулем 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
Кто-нибудь может мне помочь? Что я делаю не так?
@Amit Upadhyay, 👍-1
Обсуждение1 ответ
Вы не можете делать то, что хотите, с имеющимся у вас кодом.
На данный момент все, что вы сделали, это написали точку доступа, это просто позволяет устройствам WIFI подключаться к «маршрутизатору». Вам нужно написать код, который читает то, что отправляет ваш клиент. Взгляните на примеры, там есть несколько примеров веб-серверов, которые вы можете изучить.
Забудьте пока о клиенте, просто используйте браузер для запроса ваших страниц, заставьте сервер работать, а затем запустите ваш клиент.
- Обнаружение ESP8266 в сети
- Проанализировать большой ответ json с помощью ESP8266
- Запрос POST (HTTPClient) с ESP8266, не работающим на локальном хосте (код http = -1)
- ESP8266 Одноранговая сеть с AP и STA — кэширование клиентов AP, очистка их запросов?
- ESP8266 загружает данные на облачную платформу Google
- Мобильная точка доступа с wemos d1 mini
- Wi-Fi-подключения теряются при сбросе подключения
- Каков наилучший способ инициализации Wi-Fi-связи между двумя устройствами (получить IP-адрес)?
В вашем коде "маршрутизатора" вообще нет ничего, что касалось бы передачи каких-либо данных. Все, что вы сделали, это создали точку доступа, приняли подключения к порту, а затем проигнорировали все поступающие сообщения. Вам необходимо активно считывать данные с каждого подключенного клиента и отправлять эти данные всем другим подключенным клиентам., @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