«

»

Mar 19

Stampa Articolo

ESP8266 WIFI Kit8 OLED wifi scan

ESP8266 WIFI Kit8 OLED wifi scan è un esempio e test sia delle funzionalità WiFi sia del display OLED

ESP8266 WIFI Kit8 OLED wifi scan

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:

ESP8266 WIFI Kit8 OLED scan select NodeMCU

Tra le board seleziona la NodeMCU v.1.0, come nella figura sopra.

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:

ESP8266 WIFI Kit8 OLED scan select port

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:

ESP8266 WIFI Kit8 OLED scan example wifi scan

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:
ESP8266 WIFI Kit8 OLED start wifi scan

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:

ESP8266 WIFI Kit8 OLED scan wifi front

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:


Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/esp8266-wifi-kit8-oled-wifi-scan.html

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>