Почему я не могу управлять Wemos D1 mini через точку доступа?

У меня возникают проблемы с управлением микроконтроллером (МК) через точку доступа. В последний раз, когда я тестировал плату, она успешно работала с Wi-Fi, который раздавался с моего телефона. 

Сейчас я подключаюсь к точке доступа с телефона и ввожу "http://192.168.4.1/запрос", но получаю ошибку ERR_CONNECTION_REFUSED ("Не удаётся получить доступ к сайту"). 

Ниже приведён код, который я использовал, чтобы проверить, получится ли установить плату как точку доступа Wi-Fi. 

```cpp
#include <ESP8266WiFi.h>

class WiFiSetup
{
  ...
};

// Подготавливаем объекты
WiFiSetup wifiSetup;
WiFiServer server(wifiSetup.PORT);

void setup() {
  // Подготавливаем AP
  Serial.begin(115200);
  Serial.println("===PROGRAMM STARTED!===");
  WiFi.mode(WIFI_AP);
  WiFi.softAP(wifiSetup.NAME, wifiSetup.PASS);
  wifiSetup.StatsShow();
  

  // Готовим Пины
  pinMode(D4, OUTPUT);
  digitalWrite(D4, 0);
  delay(500);
  digitalWrite(D4, 1);
  delay(500);
  digitalWrite(D4, 0);
}

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

  while(!client.available()){
    delay(1);
  }

  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();

  if(req == "1")
  {
    digitalWrite(D4, 0);
    delay(1000);
    digitalWrite(D4, 1);
  }
  else if (req == "2")
  {
    digitalWrite(D4, 0);
    delay(250);
    digitalWrite(D4, 1);
    delay(250);
    digitalWrite(D4, 0);
    delay(250);
    digitalWrite(D4, 1);
  }

  else
  {
    digitalWrite(D4, 1);
  }

  client.flush();
  client.print("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n <!DOCTYPE HTML>\r\n<html> OK!");
}
```

Какова может быть причина того, что я не могу получить доступ к плате через указанный адрес?
  • 26 декабря 2024 г. 19:23
Ответы на вопрос 2
Существует несколько возможных причин, по которым вы не можете получить доступ к Wemos D1 Mini через точку доступа. Давайте рассмотрим основные моменты:

1. **Запуск сервера**: Вы не инициализировали сервер в вашем коде. После создания объекта `WiFiServer server(wifiSetup.PORT);`, необходимо вызвать метод `server.begin();` в функции `setup()`. Так будет запущен сервер, ожидающий входящих подключений. Ваш `setup` должен выглядеть так:

   ```cpp
   void setup() {
     // Подготавливаем AP
     Serial.begin(115200);
     Serial.println("===PROGRAMM STARTED!===");
     WiFi.mode(WIFI_AP);
     WiFi.softAP(wifiSetup.NAME, wifiSetup.PASS);
     wifiSetup.StatsShow();
     
     // Запуск сервера
     server.begin();
     
     // Готовим Пины
     pinMode(D4, OUTPUT);
     digitalWrite(D4, 0);
     delay(500);
     digitalWrite(D4, 1);
     delay(500);
     digitalWrite(D4, 0);
   }
   ```

2. **Проверка IP адреса**: Убедитесь, что вы подключаетесь к правильному IP адресу. По умолчанию, при создании точки доступа, Wemos D1 Mini получает IP 192.168.4.1. Убедитесь, что ваше устройство подключено к этой точке доступа.

3. **Правильные запросы**: В вашем коде вы проверяете запросы, но они должны совпадать с форматом HTTP. Убедитесь, что вы отправляете правильный запрос. Например, если вы хотите включить LED (на D4), используйте такой URL: `http://192.168.4.1/1` или `http://192.168.4.1/2` для другого действия. Если вы используете браузер, просто введите `http://192.168.4.1/1`.

4. **Кодировка ответа**: Обратите внимание на формат вашего ответа. Вы возвращаете HTML, но не указываете нужные заголовки. Ваш текущий ответ может работать, но лучше убедиться, что он полностью должным образом. Например, отформатируйте ответ:

   ```cpp
   client.print("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>OK!</html>");
   ```

5. **Проблемы с подключением**: Убедитесь, что ваш телефон корректно подключен к точке доступа Wemos D1 Mini и может отправлять запросы. Вы можете использовать такие инструменты, как `curl` или Postman для отправки HTTP-запросов на устройство.

Попробуйте внести изменения, указанные выше, и проверьте, открывается ли ссылка `http://192.168.4.1/1`. Если проблема сохраняется, проверьте последовательный вывод для любых ошибок или отладочных сообщений, чтобы лучше понять, что происходит.
Кратко: забыл запустить сервер. 
Подробнее: [напишу позже]
Похожие вопросы