Posso usare il wifi di un esp32 per 2 funzionalità?

Salve a tutti
Era da un po' che non passavo da qui, volevo esporvi l'ennesimo quesito piu' grande di me :sweat_smile:
Come ho già raccontato in un altro thread, ho un esp32 dev kit che controlla una batteria di un piccolo impianto fotovoltaico e ne trasmette i dati su app IOT di Arduino,

adesso volevo ampliare il mio progetto aggiungendo (ed ecco qui il problema) uno di questi


la mia situazione attuale e che sono riuscito a realizzare l'interfaccia grafica


ma ho letto tanto online ma non ho capito se esp32 dev kit può collegarsi in wifi sia al cloud che al esp32 dev module
Quindi:
esp32 dev kit (MASTER)
esp32 dev kit (CLOUD)
esp32 dev module (SLAVE)

  1. quel esp con display è un ESP32 come "ESP32 dev kit", perchè usare 2 esp e non fare tutto con solo questo con display?
  2. se anche i vari ESP32 ti colleghi alla rete wifi di casa, puoi comunicare tra gli esp32 tramite rete wifi, ad esempio usando UDP.

Sinceramente non ho capito cosa fa il terzo, "esp32 dev module"
Scusa ma non vado a cercarmi i tuoi vecchi thread per capire come e cosa fanno i tuoi vari esp32. In questo thread spieghi solo cosa fa "esp32 dev kit"

Innanzitutto grazie per la tua risposta.
Cerco di spiegarmi meglio;
I device sono solo 2, il dev kit montato lontano sotto i pannelli solari e il secondo il dev module (quello nuovo) lo vorrei installare in casa.
Quindi il dev kit è collegato al router che adesso trasmette all'appIOT, quindi vorrei trasmettere i dati anche al dev module.
Ora mi documento sul UDP

Quel "dev module" lo chiamano amichevolmente yellow :grinning:

Grazie mille per la "dritta" con 4 righe ho risolto tutto
Questo è il risultato

Dopo qualche giorno di test mi sono accorto che c'è un problema, praticamente dopo 1h circa il display e come se si "blocchi", si azzera la cifra e non si ripristina più se non con un rst.
il loop sono sicuro che funzioni perchè ogni 300 millis lampeggia un led e un altro led che ho dedicato alla ricezione dei dati che smette di flippare.
Non so più che pesci pigliare :exploding_head:

void loop() 
{
  lv_task_handler();  // let the GUI do its work
  lv_tick_inc(5);     // tell LVGL how much time has passed
  delay(5);           //let this time pass
  
  int packetSize = udp.parsePacket();
  if(packetSize)
  {
    int len = udp.read(packetBuffer, 8);
    if(len > 0) packetBuffer[len] = 0;
    value_volt = atof(packetBuffer);  
    state_pack = !state_pack;
    udp.endPacket();
  }
  digitalWrite(ledRed, state_pack);
unsigned long t0 = millis() - t1;
if(t0 >= 300)
{
  digitalWrite(ledBlu, state)
  state = !state;
  t1 = millis();
}
.........

Aggiungo solo che sono sicuro che esp client funzioni perchè quando sul display faccio il rst inizia di nuovo a leggere i dati inviati

Perchè usi questo comando ?
dalla documentazione udp:
"Called after writing buffered UDP data using write() or print()"
Stai leggendo non scrivendo.

Effittivamente nell'esempio trovato in rete ho visto che c'era e l'ho lasciato, ma non credo che il problema sia quello perchè per più di un ora il display legge e non si azzera

Qui c'e' un errore. Hai lasciato un ; di troppo

L'ho trascritto ora a mano e non ho fatto caso che ho messo ";" in più
Ma può essere che va in una sorta di sleep?

Rieccomi dopo ancora qualche altra prova:
Ho aggiunto del codice per vedere che succede

    Serial.println(udp.remotePort());
    Serial.println(udp.remoteIP());
    Serial.println(value_volt, 2);

praticamente quando visualizza 00.00V ho riscontrato che stampando sia remotePort e remoteIP, i numeri non corrispondono piu'!!!
La porta è settata con unsigned long a 9999 e l'IP è impostato dinamico 192.168.1.108 ma quando va a zero si legge la porta 50040 e l'IP 182.168.1.103 e questi valori cambiano a ogni azzeramento.
Il router e un Tplink.

C'è un metodo per riavviare il wifi senza riavviare il modulo?
Ho letto la libreria wifi e ho fatto qualche prova ma senza successo

buon pomeriggio
Per non aprire un nuovo trhead chiedo qui
Ok sono riuscito a farlo funzionare anche se ho usato

 ESP.restart();

Ora ho un altro dei miei problemini; sto cercando di inviare due dati tramite udp ma qualcosa non torna perchè uno dei dati li contiene tutti e due, allego scketh

parte Client

typedef struct
{
  char valuedato[4];
  char valuedato1[3];
} 
dataS;
union gestData
{
  dataS myData;
  char packetBuffer[7]; 
} 
dataU;

float value = 10.5;
int dato = 100;
void setup()

void loop()
....
      dtostrf(value, 4, 1, dataU.myData.valuedato);
      sprintf(dataU.myData.valuedato1, "%d", dato1);
      udp.beginPacket("192.168.1.117", localPort);
      udp.printf(dataU.packetBuffer);
      udp.endPacket();

Invece parte server

typedef struct
{
  char valuedato[4];
  char valuedato1[3];
} 
dataS;
union gestData
{
  dataS myData;
  char packetBuffer[7]; 
} 
dataU;

void loop()
......

   int packetSize = udp.parsePacket();
  if (packetSize) 
  {
    int len = udp.read(dataU.packetBuffer, 7);
    if (len > 0) dataU.packetBuffer[len] = 0;
    Serial.println(packetSize);
    Serial.println(dataU.myData.valuedato);
    Serial.print("% ");
    Serial.println(dataU.myData.valuedato1);

il risultato a monitor è
valuedato 10.5100
valuedato1 100