Проблема с ESP8266 в сети Eero

esp8266 network

У меня есть MCU узла ESP8266, и я учусь использовать его возможности Wi-Fi. В моем доме у меня есть маршрутизатор, предоставленный интернет-оператором, который управляет сетью, которую мы назовем "network1". У меня также есть ячеистая сеть Eero, которая работает в доме и называется "network2".

Когда я загружаю следующий минимальный пример и использую network1,

  1. мое устройство 8266 подключается к network1 (сообщения на последовательном мониторе подтверждают это) и
  2. Я могу использовать свой телефон и ноутбук для подключения к 8266, то есть я могу ввести IP-адрес в свой браузер и увидеть веб-страницу с сообщением "Привет, мир".

Однако у меня проблемы с network2, сетью Eero.

  1. Я могу подключить свое устройство 8266 к network2 (сообщения на последовательном мониторе подтверждают это). но
  2. Я не могу подключиться к устройству 8266 с помощью телефона / ноутбука. (Да, сначала я переключаю их на network2.) Я ввел новый IP-адрес в свой браузер, и мне сказали, что страница слишком долго не отвечает.

Я не сделал ничего особенного с моим маршрутизатором network1; все просто работало. С network2 я пробовал различные настройки с моим Eero - дал 8266 статический IP-адрес, включил переадресацию портов (на порт 80) и установил для него правило брандмауэра, но ничего не работает.

Я могу запускать много разных программ через network1, и в сети Eero ничего не работает. Есть какие-нибудь предложения по тому, как заставить все работать?

Мой минимальный рабочий пример:

#include <ESP8266WiFi.h>

const char* ssid = "network1"; // или "network2"
const char* password = "thepassword"; // реальный пароль, используемый в коде

WiFiServer server(80); // просто выберите любой номер порта, который вам нравится

void setup() {
  Serial.begin(115200);
  
  // Подключение к сети Wi-Fi
  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");

  // Запустить сервер
  server.begin();
  Serial.println("Server started");

  // Печать IP-адреса
  Serial.println(WiFi.localIP());
  //шлюз = WiFi.gatewayIP();
  Serial.print("GATEWAY: ");
  Serial.println(WiFi.gatewayIP());

  // печать маски подсети:
  //subnet = WiFi.SubnetMask();
  Serial.print("NETMASK: ");
  Serial.println(WiFi.subnetMask());
}

void loop() {
  // Проверьте, подключился ли клиент
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Подготовка ответа
  String s = "HTTP/1.1 200 OK\r\n";
  s += "Content-Type: text/html\r\n\r\n";
  s += "<!DOCTYPE HTML>\r\n<html>\r\n";
  s += "<head>\r\n";
  s+= "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n";
  s+= "<title>ESP Web Server</title>\r\n";
  s+= "</head>\r\n";
  s += "Hello World";
  s += "</html>\n";

  client.flush();

  // Отправить ответ клиенту
  client.print(s);
  delay(1);
}

, 👍1

Обсуждение

Я не совсем уверен, но вы успешно подключили какие-либо два устройства в сети Eero? Интересно, не могли бы вы добавить какой-нибудь Serial.println() в loop(), чтобы убедиться, что в network1 все работает так, как ожидалось, а затем посмотреть, где что-то ломается для network2., @garson

@garson Ты имеешь в виду подключить два ESP8266 и заставить их разговаривать друг с другом? Я делал такие вещи, как заставлял свой iPhone транслировать скринкаст на свой Roku; в этом смысле у меня были устройства в сети Eero, которые прекрасно взаимодействовали друг с другом. Но не любые устройства, которые я запрограммировал., @GregH

Да, именно это я и имел в виду. Хм. Это предполагает перезапуск eero. https://support.eero.com/hc/en-us/articles/207613706-Help-I-m-having-trouble-with-my-eeros . Печать подтверждений в журнале, когда кто-то обращается к ESP (в network1, а затем пытается подключиться к network2), может указать вам правильное направление, но я не уверен., @garson

несмотря ни на что, вы хотите использовать методы server.on() вместо этой болезненной низкоуровневой обработки пакетов в loop()., @dandavis

@dandavis Поможет ли это с проблемой Eero или просто улучшит создание страниц, когда я приступлю к созданию реальных приложений? На данный момент научиться писать хороший код вторично по отношению к тому, чтобы заставить _something_ работать., @GregH


1 ответ


1

Мне удалось найти ответ, хотя я не уверен, почему это работает. Все сводится к добавлению WiFi.mode(WIFI_STA); в настройках, как и в

void setup() {
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  ...
  }

Мне удалось повторить успех с другим файлом на устройстве ESP8266 и в сети Eero.

,