ESP, IoT Прошу совета по организации обмена информацией между двумя ESP

Alex P.

✩✩✩✩✩✩✩
22 Сен 2022
3
0
Уважаемые коллеги, прошу помочь советом с такой ситуацией:

ESP8266 одна стоит в одном конце дома, к ней подключен датчик температуры (удаленный термометр)

ESP8266 вторая стоит в другом конце дома, и на ней есть определенные алгоритмы управления нагревательным котлом.
Сейчас обе ESPшки подключаются по WiFi к роутеру, и далее по MQTT передают на брокера данные.

Посоветуйте пожалуйста, как бы из данной схемы исключить WiFi роутер для обмена температурой между ними ?
Чтобы я по прежнему мог подключиться на IP адрес второй ESP, выполнить какие то настройки, но при этом обмен данными о температуре происходил напрямую между ESP минуя роутер?

Если я правильно понимаю, я одну из них могу сделать одновременно и точкой доступа и клиентом?
В таком случае датчик температуры подключится к точке доступа.

Но каким протоколом передать значение температуры между ними? Не хватает опыта и понимания. Благодарю за внимание и любые советы.
 

Alex P.

✩✩✩✩✩✩✩
22 Сен 2022
3
0
Normalek
благодарю за совет


Столкнулся с такой проблемой:
ESP8266 sender+ ESP32 Recv

Всё работает на базовых примерах, но если я добавляю на приемник библиотеку ГайверПортал - она работает, а espNow уже нет.
Не подскажите в какую сторону копать?
Ниже код приемника, ESP32

ESP32 Recv:
// ESP Board MAC Address:  08:3A:F2:A9:B1:78

#include <Arduino.h>

#include <GyverPortal.h>

#define AP_SSID "ssid"
#define AP_PASS "pass"


#ifdef ESP8266
#include <ESP8266WiFi.h>
#elif ESP32
#include <WiFi.h>
#endif
#include "ESPNowW.h"

uint8_t mac[] = {0x08, 0x3a, 0xf2, 0xa9, 0xb1, 0x78};

GyverPortal portal;

void onRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
    char macStr[18];
    snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
             mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4],
             mac_addr[5]);
    Serial.print("Last Packet Recv from: ");
    Serial.println(macStr);
    Serial.print("Last Packet Recv Data: ");
    // if it could be a string, print as one
    if (data[data_len - 1] == 0)
        Serial.printf("%s\n", data);
    // additionally print as hex
    for (int i = 0; i < data_len; i++) {
        Serial.printf("%x ", data[i]);
    }
    Serial.println("");
}


// конструктор страницы
void build() {
  BUILD_BEGIN();
  GP.THEME(GP_DARK);
  GP.TITLE("Welcome! v1");
  BUILD_END();
}

void setup() {
  Serial.begin(115200);
  Serial.println("ESPNow receiver Demo");
#ifdef ESP8266
    WiFi.mode(WIFI_STA); // MUST NOT BE WIFI_MODE_NULL
#elif ESP32
    WiFi.mode(WIFI_MODE_STA);
#endif
    ESPNow.set_mac(mac);
    //WiFi.disconnect();
    ESPNow.init();
    ESPNow.reg_recv_cb(onRecv);


  WiFi.mode(WIFI_STA);
  WiFi.begin(AP_SSID, AP_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println(WiFi.localIP());

  // подключаем конструктор и запускаем
  portal.attachBuild(build);

  portal.start();
  portal.enableOTA();   // без пароля
  //portal.enableOTA("admin", "pass");  // с паролем
}

void loop() {
  portal.tick();
}
 
Изменено:

rkit

★★★✩✩✩✩
5 Фев 2021
508
127
В сторону отключения портала копай. У контроллера только два mac-интерфейса.
 
  • Лойс +1
Реакции: Alex P.

Alex P.

✩✩✩✩✩✩✩
22 Сен 2022
3
0
@rkit,ну без портала - ESP NOW работает.
но у меня уровень программирования не позволяет с нуля сделать базовый интерфейс, который позволяет сделать портал.
А в портале не хватает возможности получить данные с другой ESPхи.

Имеете ввиду, что одна из библиотек использует сеть, и вторая уже не может?

Может предложите какой то вариант в связи с вышеописанной задачей? Благодарю

@rkit,
вот тут например приводится пример, как можно сделать одновременно и веб сервер и ESP NOW
вероятно в гайвер портале что то конфликтует с ESP NOW ....