ESP8266 WIFI Kit8 OLED wifi scan è un esempio e test sia delle funzionalità WiFi sia del display OLED
Il test usa lo script di esempio per le ESP8266 “WiFi Scan” per eseguire lo scan degli SSID presenti nell’area della board ed il display OLED come output visivo in aggiunta al monitor seriale.
Un esempio similare in cui utilizzi la WeMos ed un display OLED lo hai già letto in un mio precedente articolo.
Non ci sono particolari collegamenti da eseguire, l’unica connessione è quella con il cavetto Micro USB che userai sia per trasferire lo sketch sia per alimentare la board.
ESP8266 WIFI Kit8 OLED wifi scan su Arduino IDE
il passo più complesso della preparazione è certamente trovare che scheda selezionare tra quelle disponibili sull’IDE arduino che utilizzerai per programmare la WiFi Kit 8:
Tra le board seleziona la NodeMCU v.1.0, come nella figura sopra.
Warning!
Se non hai tra le tue schede la NodeMCU o tutta la famiglia ESP8266 puoi approfondire qui come aggiungere queste board al tuo IDE.
Seleziona quindi la porta seriale a cui ha collegato la ESP8266 WIFI Kit8 OLED wifi scan, dovrebbe essere simile a quella in figura, se usi un MAC:
per windows dovrai selezionare la porta COM? dove il “?” sarà sostituito da un numero.
A questo punto puoi scegliere l’esempio base da cui partire:
ed a cui dovrai applicare alcune modifiche per aggiungere la scrittura sul display OLED della board.
Modifica lo sketch ESP8266 WIFI Kit8 OLED wifi scan
lo sketch che puoi utilizzare per ottenere il risultato descritto sopra è:
#include "ESP8266WiFi.h" #include <U8g2lib.h> U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 5, /* data=*/ 4, /* reset=*/ 16); void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); Serial.println("Setup done"); u8g2.begin(); } void loop() { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_5x8_tr); writeText("scan start",0,1); int n = WiFi.scanNetworks(); writeText("scan done",50,1); delay(2000); if (n == 0) writeText("no networks found",0,1); else { writeText(String(n),0,1); writeText(" networks found ",8,1); for (int i = 0; i < n; ++i) { writeText(String(i+1),0,2+i); writeText(": ", 5,2+i); writeText(String(WiFi.SSID(i)), 7,2+i); delay(10); } } Serial.println(""); delay(5000); } void writeText( String text, byte pos, byte line ) { Serial.println(text); char c[text.length()+5]; text.toCharArray(c, text.length()+5); u8g2.drawStr(pos,(line*8),c); u8g2.sendBuffer(); delay(100); }
di cui spiegherò solo le linee che ho modificato o che hanno particolare importanza ai fini del test, lascio a te la curiosità di approfondire o rileggere le altre.
Linee 01-02: includi le librerie necessarie alla gestione della parte WiFi e del display, in particolare per il display usi la U8g2lib, di olikraus, già più volte descritta nei miei articoli;
linea 04: imposti il tipo di driver con cui controllare il display OLED, in questo caso SSD1306 in modalità I2C sui pin 5 sck, pin 4 per i dati e 16 per il reset;
Nella setup() l’unica linea nuova riguarada l’inizializzazione della comunicazione verso il display SSD1306 con il metodo begin() della libreria u8g2;
le linee 18-19
u8g2.clearBuffer(); u8g2.setFont(u8g2_font_5x8_tr);
ti servono per pulire il buffer, ossia il display ( 17 ), e per impostare il font da utilizzare;
linea 21: richiami una funzione definita da me con il nome writeText a cui passi sia la frase da visualizzare sia colonna e linea su cui vuoi vederla. La funzione te la descriverò alla linea 45, puoi intanto notare che il testo “scan start” sarà scritto alla posizione “0” della linea 1:
writeText("scan start",0,1);
il risultato sul display è il seguente:
linea 23: esegui lo scan degli SSID WiFI;
linea 24: come la precedente linea 21 scrive un testo sul display in posizione 50 e linea 1, avrai che il testo segue il precedente.
linee 27-39: se il risultato “n” della scansione è 0, ossia nessuna rete wifi è stata trovata scriverai sul display quanto definito alla linea 28:
writeText("no networks found",0,1);
mentre se hai trovato delle reti di cui mostrare i nomi esegui le linee seguenti:
writeText(String(n),0,1); writeText(" networks found ",8,1); for (int i = 0; i < n; ++i) { writeText(String(i+1),0,2+i); writeText(": ", 5,2+i); writeText(String(WiFi.SSID(i)), 7,2+i); delay(10); }
in cui oltre ai testi delle prime linee (31-32) scrivi per ogni network individuato il nome:
Nel mio caso ha trovato solo 3 SSID disponibili;
le linee 46-51 definiscono la funzione “writeText”:
Serial.println(text); char c[text.length()+5]; text.toCharArray(c, text.length()+5); u8g2.drawStr(pos,(line*8),c); u8g2.sendBuffer(); delay(100);
tale funzione nel progetto ESP8266 WIFI Kit8 OLED wifi scan ha lo scopo di semplificare l’invio dei messaggi ad un unica funzione che si preoccupa di visualizzarli sul display OLED e sul monitor seriale dell’IDE arduino.
Per funzionare è necessario convertire il dato in formato String, che ti arriva come primo parametro della funzione e che va bene per il monitor seriale, in char array usando la funzione toCharArray alla linea 48;
Il video dello sketch ESP8266 WIFI Kit8 OLED wifi scan
dopo aver caricato lo sketch della ESP8266 WIFI Kit8 OLED wifi scan sulla tua scheda puoi avviarla ed anche senza il monitor seriale vedrai comparire del testo sul display OLED come nel video:
6 commenti
Vai al modulo dei commenti
Buongiorno, Mauro
ho letto con molto interesse il tuo articolo sul modulo Nodemcu ESP8266 OLED che ho ricevuto qualche giorno fa, spinto dalla curiosità più che da una necessità.
Ha funzionato al primo colpo, ma ho un solo problema: rileva alcune reti di vicini di casa, ma non la mia e neppure il mio Tethering Android.
Ho testato un altro “Wifi scanner” già sperimentato su ESP8266-01 e -12 e -32 e tutti funzionano perfettamente, ma non su questo Nodemcu OLED .
Anche altri sketch già collaudati per Wifi-server funzionano perfettamente su tutti i vari modelli di ESP meno che sul “Nodemcu OLED” del tuo articolo.
Non si connette al Wifi di casa e nemmeno all’Hotspot Android del mio cellulare.
Ho pensato subito ad un differente “standard Wifi cinese” di canali, ma non ho trovato documentazione sull’argomento.
Ho provato anche suggerimenti trovati su forum americani, ma senza successo.
Sto aspettando un altro modulo già ordinato per escludere un guasto.
Al massimo lo userò come un Arduino con OLED incorporato.
Grazie per un eventuale suggerimento.
Roberto Pangallo
Graz
Austria
Autore
Ciao Roberto,
non saprei dirti come mai non rilevi proprio la tua rete, prova a chiedergli di connettersi senza fare prima lo scan.
Ricordati che non è e non sarà mai un Arduino resta un ESP8266 con OLED 🙂
Grazie comunque, Mauro.
Intendevo dire che lo posso utilizzare anche senza Wifi per applicazioni tipiche di un Arduino (configurato come Board ESP12, naturalmente), ma con il vantaggio di avere già “a bordo” un piccolo display di controllo.
L’ho provato anche con MicroPython e funziona egregiamente per pilotare mosfet, LED, Relé ecc.
Provo con il prossimo che mi arriva (sono pochi Euro risparmiati dalle sigarette che non fumo!) sperando in un guasto del primo.
Non ho trovato il minimo segno di “codice prodotto”, ma all’aspetto è identico alla tua foto.
Grazie ancora!
Saluti da Graz (Austria)
Autore
Ciao Roberto,
diciamo che non tutti gli sketch che puoi far girare su Arduino potrei eseguirli allo stesso modo su un ESP8266, se si tratta di semplici controlli I/O funzionano in modo similare ma quando inizia a scrivere codice complesso e usi più librerie insieme potresti trovarti a gestire dei conflitti.
Con micro Python hai provato anche la parte WiFi ? Potresti avere riscontro in merito al corretto funzionamento o meno.
Sì, Mauro, ho provato con Micropython con gli stessi risultati.
Ho capito oggi il problema.
Il microcontroller ESP8266 OLED 0.91 la cui sigla ufficiale è “Heltec WiFi Kit 8” non “vede” gli Access Point con WPA-PSK2, ma solo AP Open o forse solo WPA–PSK (non ho ancora provato).
Me lo hanno scritto con email dalla Heltec (Cina).
Sono stati molto gentili e veloci. Mi hanno assicurato che vedranno se si può fare qualcosa (ne dubito anche se magari hanno un firmware che si può sostituire a quelli che utilizziamo abitualmente).
Spero possa essere utile ad altri.
Grazie comunque per la tua cortesia e professionalità.
Autore
Grazie Roberto,
certamente una informazione importante per tutti coloro che desiderano applicare questo dispositivo nei propri progetti.