Соединение сетей Wi-Fi на nodemcu: как настроить esp8266 в качестве расширителя Wi-Fi, простейший случай

Мне кажется, что в одной комнате в подвале моего дома повышается влажность. Чтобы временно отслеживать ситуацию, я хотел бы построить очень маленькую сеть Wi-Fi-ячеистой сети для обмена этими данными о влажности на локально установленный сервер малинового пирога. Большую часть времени сеть будет простаивать, каждые 5 минут отправляя данные датчика влажности через mqtt на сервер.

Какой самый простой код настраивает esp8266 для подключения к существующей сети Wi-Fi и работы в качестве точки доступа и удлинителя Wi-Fi на пару метров дальше?

Я попробовал этот код:

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

const char* ssid = "SSID_Internet";
const char* password = "qaz12345";

const char* newssid = "SSID_Extender";
const char* newpassword = "qaz12345";

void setup(void){
  Serial.begin(115200);
  Serial.println("");

  // установить и точку доступа, и станцию
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(newssid, newpassword);

  Serial.print(newssid);
  Serial.print(" server ip: ");
  Serial.println(WiFi.softAPIP());

  WiFi.begin(ssid, password);
  int wifi_it = 0;
  int wifi_status;
  while ((wifi_status = WiFi.status()) != WL_CONNECTED) {
    Serial.println("Trying to connect to wifi");

    wifi_it++;
    delay(500);
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  long rssi = WiFi.RSSI();
  Serial.print("Signal strength: ");
  Serial.print(rssi);
  Serial.println("dBm");
}

void loop(void){

}

Он успешно регистрирует esp8266 в сети Wi-Fi, настраивает точку доступа, но если я подключаюсь к SID_Extender с помощью мобильного телефона, интернет-трафик не перенаправляется дальше.

Есть проекты, которые позволяют настроить несколько esp в удобной для пользователя форме, но мне интересно, как настроить такой esp самостоятельно.

, 👍0

Обсуждение

это не роутер, это просто что-то подключенное к двум сетям. Мне никогда не удавалось получить ввод-вывод от обоих в такой ситуации (ap + sta), хотя я пытался получить доступ к внутреннему серверу, а не к Интернету. Единственный способ, которым я смог «соединиться», это через второй ESP и последовательную связь между ними, но, может быть, я чего-то не знаю..., @dandavis


1 ответ


Лучший ответ:

1

ESP8266 не будет соединять сети. Возможно, вы можете подключиться к вашему другому ep8266 на уровне TCP с помощью WiFiServer и WiFiClient. Отправьте значение датчика на среднюю точку доступа esp8266, на которой работает точка доступа, и она отправит значение в Raspberry.

С помощью MQTT вы можете создать прокси-сервер MQTT. Получите данные с помощью WiFiServer и перенаправьте их с помощью WiFiClient. без синтаксического анализа или чего-либо еще, только копирование символов между клиентом сервера и локальным клиентом в направлениях стенда

что-то вроде этого (не проверено):

void loop() {

  if (!serverClient || !serverClient.connected()) {
    serverClient = server.available();
  }
  if (!serverClient || !serverClient.connected()) {
    if (client.connected()) {
      client.stop();
    }
    return;
  }

  if (!client || !client.connected()) {
    if (!client.connect(raspiIP, MQTT_PORT)) {
      Serial.println("Can't connect to MQTT");
      delay(1000);
      return;
    }
  }

  while (serverClient.available() > 0) {
    client.write(serverClient.read());
  }
  while (client.available() > 0) {
    serverClient.write(client.read());
  }
}
,

https://www.youtube.com/watch?v=NH1rjk3Q_MU это, скорее всего, вы имеете в виду. Возможно, у вас есть код nodemcu C для этого?, @arthur

как вы отправляете и получаете значение датчика?, @Juraj

Как отправить значение датчика? Через MQTT. У меня есть брокер с поддержкой TLS на внутреннем сервере (малина) внутри «домашней сети»., @arthur

тогда вы можете создать прокси-сервер mqtt. получить сообщение mqtt от WiFiServer и переслать его с помощью WiFiClient. без синтаксического анализа или чего-либо еще, просто копирование символов между клиентом сервера и локальным клиентом в направлениях стенда, @Juraj

отличная идея. Как вы думаете, у вас есть готовый пример кода?, @arthur

Я добавил фрагмент кода для ответа, @Juraj

хороший!!!! (Я знаю, что не должен писать только хорошее, но я не могу остановиться), @arthur

@Артур, помогло?, @Juraj

в процессе :-), @arthur