Modulo WiFi+Bt ESP32

Mi è arrivato il modulo, la scansione delle reti funziona ma non mi si connette all'access point, cui altri moduli ESP8266 si connettono senza problemi. Potrebbe essere colpa dell'AP ma non ho avuto tempo di indagare.
Si tratta di una revisione 1.

zoomx:
Mi è arrivato il modulo, la scansione delle reti funziona ma non mi si connette all'access point, cui altri moduli ESP8266 si connettono senza problemi. Potrebbe essere colpa dell'AP ma non ho avuto tempo di indagare.
Si tratta di una revisione 1.

Grazie, tienici aggiornati sugli sviluppi!

Funziona! A casa mi si è connesso regolarmente, al lavoro invece non si è connesso all'AP costituito da un pennino WiFi e Virtual Router, forse ho sbagliato qualcosa perché di solito le difficoltà di connessione le ho nell'assegnazione dell'IP ma in questo caso nel Virtual Router Manager vedo la connessione lo stesso e in questo caso non ho visto nulla.

A questo punto mi scarico il PDF di Neil Kolban, che ha già scritto quello sull'ESP8266 (solo in inglese), che dovrebbe riportare tutto quello che si conosce su questo chip. Su GitHub ho visto degli esempi e la libreria BLE è la sua.

Io ho installato il core manualmente senza git.
Ho scaricato il repository da GitHub e l'ho decompresso in hardware/espressif/esp32 se lo mettete in un'altra cartella l'IDE non lo vede. La cartella hardware è una sottocartella di quella dove stanno i vostri sketch, dove c'è anche la libraries.
Poi ho scaricato la singola libreria BLE dal sito di Neil usando downGit che ti permette di scaricare una singola parte di un repository e l'ho decompressa in hardware/espressif/esp32/libraries/BLE
Se non lo fate il core funziona lo stesso ma ovviamente non potete usare il BLE e l'IDE vi darà continuamente errore sulla libreria perché vede la cartella ma dentro non c'è nulla.
Infine vado nella cartella hardware/espressif/esp32/tools e lancio get.exe come amministratore. Questo programma scaricherà il compilatore, un paio di file zip.

L'unico sketch che ho provato è quello che fa uso dei server NTP per sincronizzare l'orologio interno ed avere l'ora esatta tenendo conto di fuso orario e ora estiva ed invernale.

La storia che bluetooth e wifi non possono funzionare contemporaneamente è seccante. Il vantaggio di questo affare è che ci sono 2 core di cui uno gestisce il WiFi come l'ESP8266 mentre l'altro può fare... altro senza essere interrotto.

Rev1 l'hai testato con l'apposito comando ?

Affermativo!
Più precisamente con quello modificato da te.

Quindi funziona :slight_smile:
Puoi postare il link per comprarne uno che i miei sono tutti Rev0 anche avendo preso degli Adafruit

Funziona si, quello precedente, per dire, non funziona perché c'è qualcosa non dichiarato.
A scanso di equivoci allego lo sketch.

L'ho preso da Aliexpress
https://www.aliexpress.com/item/LOLIN32-Wifi-Bluetooth-Development-Board-Antenna-ESP32-ESP-32-REV1-CH340-CH340G-MicroPython-Micro-USB-Lithium/32846143452.html
Ma devo ancora capire cosa farci perché i progetti che ho visto finora sono fattibili anche con un ESP8266 mentre questo affare ha molte più caratteristiche interessanti.

ESP32_getChipRevision.ino (1.02 KB)

In effetti anch'io ho questo "problema": L'ESP8266 è già più che sufficiente per praticamente ogni progetto. Prendere un ESP32, che costa di più, ha un core meno maturo, ha alcuni problemi hardware (sulla Rev.0 almeno)... Chi me lo fa fare?

Possibili usi da verificare: gestione di moduli video (l'OV7670) e forse comunicazioni cifrate. La memoria RAM in più dovrebbe essere utile.
Ci sarebbe anche anche la generazione di segnali video anche se si spreca la parte WiFi.

C'è il discorso https, qui la cifratura è inyegrata in HW.
Poi il bluetooth, Sia Classic che Ble

Poi c'è il coprocessore, che può fare gestione di sensori tenendo spente le due Cpu.

Il problema è il core Arduino, che pur essendo Ufficiale è indietro anni luce.
Ad esempio il dns server è stato integrato da pochissimo solo grazie ai tipi di wifimanager coi quali ho collaborato rompendo le palle con issue e test :slight_smile:
Mentre il Webserver non c'è ancora, sei costretto ad usare webserver modificati da terzi.

Nemmeno il board manager è presente, purtroppo sembra che aver deciso di creare ufficialmente un core arduino invece di velocizzare le cose le rallenta

Le comunicazioni cifrate le avevo dimenticate. Se non sbaglio sull'ESP8266 sono possibili ma consumano un sacco di risosrse.
L'installazione manuale è un po' particolare, come ho scritto sopra non basta decomprimere il repository come succedeva con altri core. Installando git, come consigliato da expressif si risparmia lo scaricamento della sola libreria BLE e un po' si automatizza l'aggiornamento.

Buona giornata ragazzi
spero di non commettere cavolate ponendo qui la mia domanda,
visto che ci sono 180 topic pero mi trovo sul primo, non so come funziona,

la mia domanda, più cortesemente una richiesta di aiuto,
qui si parla della ESP8266 ma io credo sia molto simile alla ESP32 che io posseggo,
il problema e il seguente:
dopo molte ricerche sono riuscito a scrivere un file per una specie di telecomando via WiFi,
il tutto funziona correttamente fin tanto che la ESP si trova all'interno "ovviamente" del segnale WiFi,
ma se per un qualsiasi motivo perde il segnale, ovvio si di sconnette, ma poi anche se sono molto vicino al ruter ed ovviamente il segnale e presente lei non si connette più, perché si riconnetta la devo resettare,

vorrei postare il file ma non so se sia corretto farlo qui,
se posso lo posto volentieri

mille grazie a chi mi può dare qualche suggerimento per risolvere l'inghippo

Si che puoi postarlo, se non è troppo lungo mettilo in un post tra i tag [ code ] altrimenti mettilo come file allegato.

Ho spostato io gli ultimi due post nel thread dedicato al ESP32.

Guglielmo

Come ho scritto su, io ho avuto problemi banali di connessione che, con l'ESP8266 non ho mai avuto.
Non ho mai provato quel che capita a te ma posso confermare che con l'ESP8266 non succede, se perde la connessione poi evidentemente prova finché si riconnette. Ma è una cosa che fa la parte di firmware che non vediamo e che è curata da Espressif.
Qui sarà la stessa cosa ma temo che ancora il firmware sia immaturo, nonostante l'esperienza ESP8266.

Io metto comunque un controllo sulla connessione, e se é disconnesso provo a riconnettere.
Così hai la gestione di tutto senza affidarti a cose che non vedi

scusate il ritardo, ma viene prima la famiglia,
non ne combino una di giusta,
grazie Guglielmo di aver sistemato,
bene veniamo al problema della riconnessione posto il file

/***************************
 Telecomando con ESP32
 via WiFi
****************************/

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>

#define I2C_ADDR        0x27 // <<- indirizzo del PCF8574
#define Rs_pin          0
#define Rw_pin          1
#define En_pin          2
#define BACKLIGHT_PIN   3
#define D4_pin          4
#define D5_pin          5
#define D6_pin          6
#define D7_pin          7
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin,
 D7_pin);

#define btn1 5
#define btn2 23
#define btn3 14
#define btn4 12
#define led     18

boolean PB1_Flag;
boolean PB2_Flag;
boolean PB3_Flag;
boolean PB4_Flag;
unsigned long headLunga = 0;
unsigned long totLunga = 0;

// WiFi parametri
const char* ssid = "Mia_Linea";   //  <<- definite la vostra rete WIFI
const char* password = "Mia_Password";  //  <<- e la vostra password

// Si crea un' instance di server
WiFiServer server(80);

void DisplayClear(void) {
 int i;
 for (i = 0; i < 4; i++) {
 lcd.setCursor(0, 0);
 lcd.print("                ");
 }
}

//*******************************************************************
void setup() {
 // Viene inizializzato il display
 lcd.begin(20, 4, LCD_5x10DOTS);      // LCD 16x4 e formato caratteri
 lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
 lcd.setBacklight(HIGH);       // accende Bachkight

 // Si definiscono le porte e le condizioni iniziali
 pinMode(btn1, OUTPUT);
 digitalWrite(btn1, LOW);
 pinMode(btn2, OUTPUT);
 digitalWrite(btn2, LOW);
 pinMode(btn3, OUTPUT);
 digitalWrite(btn3, LOW);
 pinMode(btn4, OUTPUT);
 digitalWrite(btn4, LOW);

 pinMode(led, OUTPUT);
 digitalWrite(led, LOW);

 // Start Seriale
 Serial.begin(115200);
 delay(10);

 WiFi.begin(ssid, password);  // inizializza la connessione WIFI

 // Verifica lo stato fino a connessione avvenuta.
 while (WiFi.status() != WL_CONNECTED) {
 lcd.setCursor(0, 0);
 lcd.print("  CONNESSIONE   ");
 lcd.setCursor(0, 1);
 lcd.print("   IN CORSO     ");
 Serial.print(".");
 delay(500);
 }

 DisplayClear();
 lcd.setCursor(0, 0);
 lcd.print("CONNESSO A:     ");
 lcd.setCursor(0, 1);
 lcd.print("                ");
 lcd.setCursor(0, 1);
 lcd.print(ssid);
 lcd.setCursor(0, 2);
 lcd.print("INDIRIZZO IP:   ");
 lcd.setCursor(0, 3);
 lcd.print(WiFi.localIP());

 // Start del server
 server.begin();

}

void loop() {
 while (WiFi.status() != WL_CONNECTED) {
 WiFi.reconnect();
 digitalWrite(led, HIGH);
 }
 digitalWrite(led, LOW);

 // Verifica se un client si è connesso
 WiFiClient client = server.available();
 if (!client) {
 return;
 }
 // Attende di ricevere qualche dato
 while (!client.available()) {
 delay(1);
 }

 // Legge la richiesta fino a r, poi con client.flush elimina eventuali caratteri
 // ricevuti ma non letti.
 String req = client.readStringUntil('\r');
 client.flush();
 Serial.println(req);

 //se viene ricevuta "GET/favicon.ico HTTP/1.1" risponde che non trova jl file
 if (req.indexOf("favicon.ico") != -1) {
 client.flush();
 client.print("HTTP/1,1 404 Not Found\r\n");
 Serial.println("Non Trovato");
 delay(1);
 } else {
 if (req.indexOf("PB1ON") != -1) {
 digitalWrite(btn1, HIGH);
 PB1_Flag = true;
 }
 if (req.indexOf("PB1OFF") != -1) {
 digitalWrite(btn1, LOW);
 PB1_Flag = false;
 }

 if (req.indexOf("PB2ON") != -1) {
 digitalWrite(btn2, HIGH);
 PB2_Flag = true;
 }
 if (req.indexOf("PB2OFF") != -1) {
 digitalWrite(btn2, LOW);
 PB2_Flag = false;
 }

 if (req.indexOf("PB3ON") != -1) {
 digitalWrite(btn3, HIGH);
 PB3_Flag = true;
 }
 if (req.indexOf("PB3OFF") != -1) {
 digitalWrite(btn3, LOW);
 PB3_Flag = false;
 }

 if (req.indexOf("PB4ON") != -1) {
 digitalWrite(btn4, HIGH);
 PB4_Flag = true;
 }
 if (req.indexOf("PB4OFF") != -1) {
 digitalWrite(btn4, LOW);
 PB4_Flag = false;
 }

 String buff = "HTTP/1.1 200 OK\r\n Content-Type:text/html\r\n content-lenght:2166\r\n\r\n";
 headLunga = buff.length();

 buff += "<html>";
 buff += "<head><title>TETECOMANDO</title>";
 buff += "<style type=\"text/css\">";
 buff += "td{align:center;width:auto;height:70px;}";
 buff += "</style></head>";
 buff += "<body style=\"width:99,99%;height:99,99%\">";

 buff += "<div align=\"center\">";

 buff += "<table style=\"width:auto;background-color:#dcdcdc\">";

 buff += "<thead style=\"width:100%;background-color:#6699FF\">";
 buff += "<tr><th colspan=\"5\"style=\"font-weight:bold;font-size:2em\">TELECOMANDO</th></tr></thead>";

 buff += "<tr>";
 if (PB1_Flag) {
 buff += "<td><a href=\"/?PB1ON\"><button style=\"background-color:#008000;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>&nbsp;ON&nbsp;</font></button></a></td>";
 buff += "<td><a href=\"/?PB1OFF\"><button style=\"background-color:#ffff66;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>OFF</font> </button></a></td>";
 } else if (!PB1_Flag) {
 buff += "<td><a href=\"/?PB1ON\"> <button style=\"background-color:#ffff66;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>&nbsp;ON&nbsp;</font></button></a></td>";
 buff += "<td><a href=\"/?PB1OFF\"><button style=\"background-color:#cc0000;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>OFF</font></button></a></td>";
 }
 buff += "<td><h3>LUCE GIARDINO</h3></td></tr>";

 buff += "<tr>";
 if (PB2_Flag) {
 buff += "<td><a href=\"/?PB2ON\"><button style=\"background-color:#008000;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>ON</font></button></a></td>";
 buff += "<td><a href=\"/?PB2OFF\"><button style=\"background-color:#ffff66;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>OFF</font></button></a></td>";
 } else if (!PB2_Flag) {
 buff += "<td><a href=\"/?PB2ON\"><button style=\"background-color:#ffff66;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>ON</font></button></a></td>";
 buff += "<td><a href=\"/?PB2OFF\"><button style=\"background-color:#cc0000;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>OFF</font></button></a></td>";
 }
 buff += "<td><h3>LUCE INGRESSO</h3></td></tr>";

 buff += "<tr>";
 if (PB3_Flag) {
 buff += "<td><a href=\"/?PB3ON\"><button style=\"background-color:#008000;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>ON</font></button></a></td>";
 buff += "<td><a href=\"/?PB3OFF\"><button style=\"background-color:#ffff66;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>OFF</font></button></a></td>";
 } else if (!PB3_Flag) {
 buff += "<td><a href=\"/?PB3ON\"><button style=\"background-color:#ffff66;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>ON</font></button></a></td>";
 buff += "<td><a href=\"/?PB3OFF\"><button style=\"background-color:#cc0000;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>OFF</font></button></a></td>";
 }
 buff += "<td><h3>LUCE NOTTURNA</h3></td></tr>";

 buff += "<tr>";
 if (PB4_Flag) {
 buff += "<td><a href=\"/?PB4ON\"><button style=\"background-color:#008000;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>ON</font></button></a></td>";
 buff += "<td><a href=\"/?PB4OFF\"><button style=\"background-color:#ffff66;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>OFF</font></button></a></td>";
 } else if (!PB4_Flag) {
 buff += "<td><a href=\"/?PB4ON\"><button style=\"background-color:#ffff66;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>ON</font></button></a></td>";
 buff += "<td><a href=\"/?PB4OFF\"><button style=\"background-color:#cc0000;width:99%;height:99%;border-radius:15px\">";
 buff += "<font size=\"6\"><b>OFF</font></button></a></td>";
 }
 buff += "<td><h3>LUCE SCALA</h3></td></tr>";

 buff += "</table></div></body></html>";

 totLunga = buff.length();
 Serial.print("lunghezza intestazione = ");
 Serial.println(headLunga);
 Serial.print("lunghezza totale = ");
 Serial.println(totLunga);

 // Invia la risposta al client
 client.print(buff);

 delay(1);
 }

}

spero che qualcuno mi possa dare qualche dritta
toni

Ciao ragazzi, è da un pò che ci smanetto con l'esp32, ma ora mi sono bloccato a un progetto,

  1. volevo avere una connessione diretta wifi tra due esp32 senza l'uso di un access point (accendere un led)
  2. avere una connessione diretta tra esp32 e android (accendendo un led)

Ci smanetto da vari giorni, ho impostato un esp32 in modalità softAP nel loop ho messo questo e non funziona

void loop(){
WiFiClient client = server.available();  
 if (client) {                           
   Serial.println("New Client.");          
   String currentLine = "";                
   while (client.connected()) {            
     if (client.available()) {             
       char c = client.read();             
       Serial.write(c);                    
       if (c == '\n') {                          
         if (currentLine.length() == 0) {
           
           client.println("HTTP/1.1 200 OK");
           client.println("Content-type:text/html");
           client.println();

           client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 5 on.
");
           client.print("Click <a href=\"/L\">here</a> to turn the LED on pin 5 off.
");

           
           client.println();
           
           break;
         } else {    
           currentLine = "";
         }
       } else if (c != '\r') {  
         currentLine += c;      
       }

       
       if (currentLine.endsWith("GET /H")) {
         digitalWrite(5, HIGH);    }           

       if (currentLine.endsWith("GET /L")) {
         digitalWrite(5, LOW);              
       }
     }
   }
   
   client.stop();
   Serial.println("Client Disconnected.");
 }
}

>andrea1201: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

gpb01:
>andrea1201: ti ricordo che in conformità al regolamento, punto 7, .....

Grazie l'avevo dimenticato :smiley: