Come utilizzare il classico strumento di sviluppo di Arduino per programmare la scheda ESP8266 di AZ-Delivery.
Nello scoso articolo abbiamo presentato la scheda di AZ-Delivery basata su ESP8266, con display OLED 128×32 da 0.91″, supporto batteria esterna e Wi-Fi.
Oggi ne analizzeremo il sistema di configurazione, per essere in grado di programmarne il display ed il sistema di comunicazione attraverso un Arduino IDE standard.
Iniziamo subito! ©.
Preparazione del software
Innanzi tutto occorre disporre di un Arduino IDE, il classico sistema di sviluppo offerto da Arduino. È possibile scaricarlo da questo link e scegliere il proprio sistema operativo.
Occorre inoltre aver installato il driver CP210x, che si trova in genere nello stesso pacchetto di installazione dell’IDE.
Se abbiamo già a disposizione entrambi, possiamo proseguire con la configurazione. Prima di tutto, l’IDE dovrà disporre di tutte le informazioni possibili relative alla scheda ESP8266. A questo fine provvederà il link seguente:
1 |
http://arduino.esp8266.com/stable/package_esp8266com_index.json |
Il contenuto del file .json è parzialmente riportato nell’immagine di presentazione, e riporta fedelmente le stringhe ed i parametri di riconoscimento di ciascuno dei numerosi modelli basati su ESP8266. Per configurare l’IDE e portarflo a riconoscere la famiglia di schede, dovremo procedere come segue:
Apriamo il menù File -> Impostazioni, ed inseriamo il link .json appena visto nella casella URL Aggiuntive per il Gestore schede:
Premiamo Aggiungi, quindi OK, e controlliamo che il link sia stato inserito nella lista. Nota: è possibile avere diversi file di configurazione, uno per ciascuna delle schede “Arduino-compatibili”.
A questo punto è consigliabile chiudere e riaprire l’IDE.
Passiamo ora alla voce di menù Strumenti -> Scheda -> Gestore schede. Nota: il menù scheda potrebbe avere già una opzione predefinita (tipicamente, “Arduino UNO”): procedete ugualmente, e cercate la libreria ESP8266 nel campo di ricerca del gestore, in alto a destra. Cliccate sul tasto Installa per installarla nell’IDE.
L’installazione richiederà qualche minuto. Al termine dell’installazione, sul record della scheda apparirà la dicitura “Installata“.
È giunto il momento di configurare la scheda corretta. La famiglia ESP8266 riconosce infatti diverse decine di schede simili, tutte basate sul medesimo controllore, ma con caratteristiche molto diverse tra loro. Nel nostro caso torniamo sul menù Strumenti -> Scheda, scegliamo NodeMCU 1.0 (ESP-12E Module) dalla sezione ESP8266, e controlliamo la opportuna Porta di comunicazione.
Nel frattempo notiamo la marea di opzioni disponibili, dalle funzioni di overclock alla gestione della memoria, dal controllo SSL al tipo di debug…
Test della scheda
Ora che la scheda è configurata, possiamo procedere al testing. Cercheremo la presenza di reti WiFi nei paraggi con un programma preso dal menù File -> Esempi -> ESP8266 -> ESPWiFi -> WiFiScan. Anche in questo caso potete notare la varietà e la molteplicità degli esempi presenti…).
Carichiamo e compiliamo il programma, quindi salviamolo sulla nostra scheda. Quando il trasferimento è completo al 100%, apriamo il Monitor Seriale.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
/* This sketch demonstrates how to scan WiFi networks. The API is almost the same as with the WiFi Shield library, the most obvious difference being the different file you need to include: */ #include <ESP8266WiFi.h> void setup() { Serial.begin(115200); Serial.println(F("\nESP8266 WiFi scan example")); // Set WiFi to station mode WiFi.mode(WIFI_STA); // Disconnect from an AP if it was previously connected WiFi.disconnect(); delay(100); } void loop() { String ssid; int32_t rssi; uint8_t encryptionType; uint8_t* bssid; int32_t channel; bool hidden; int scanResult; Serial.println(F("Starting WiFi scan...")); scanResult = WiFi.scanNetworks(/*async=*/false, /*hidden=*/true); if (scanResult == 0) { Serial.println(F("No networks found")); } else if (scanResult > 0) { Serial.printf(PSTR("%d networks found:\n"), scanResult); // Print unsorted scan results for (int8_t i = 0; i < scanResult; i++) { WiFi.getNetworkInfo(i, ssid, encryptionType, rssi, bssid, channel, hidden); Serial.printf(PSTR(" %02d: [CH %02d] [%02X:%02X:%02X:%02X:%02X:%02X] %ddBm %c %c %s\n"), i, channel, bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5], rssi, (encryptionType == ENC_TYPE_NONE) ? ' ' : '*', hidden ? 'H' : 'V', ssid.c_str()); delay(0); } } else { Serial.printf(PSTR("WiFi scan error %d"), scanResult); } // Wait a bit before scanning again delay(5000); } |
Nella sezione di Setup() apriamo la comunicazione con il monitor seriale a 115200 baud, attiviamo la scheda in modalità “station” e disconnettiamoci da ogni collegamento.
Nel Loop() eseguiremo una scansione della rete ogni 5 secondi, mostrando il risultato sul monitor seriale. Nella scansione saranno presenti il nome del canale, la potenza del segnale, la visibilità (V – N) e l’eventuale tipo di cifratura.
Per evitare gli scarabocchi presenti sulla prima riga, ricordatevi di configruare ANCHE il monitor seriale per un connessione a 115.200 baud!
Per oggi è tutto. Se l’articolo vi è piaciuto, scrivete nei commenti cos’altro vorreste sapere.
La prossima settimana inizieremo invece un breve corso sulla programmazione della scheda AZ-Delivrey SIM800L. Non mancate!
Link utili:
AZ-Delivery ESP8266 con display oled 0.91″
Ottima guida. Complimenti!
Nel mio caso, però, non riesco a caricare lo sketch sul mio AZ-Delivery ESP8266. L’unica porta che l’IDE mi segnala è la /dev/ttyS0 (sono su Linux).
Ma non riesco a comunicare con il microprocessore.
Non so se avete suggerimenti per superare l’ostacolo…
Grazie!
La comunicazione via seriale con l’8266 è sempre stata un po’ una spina nel fianco. Nel caso specifico, sotto Linux dovresti vedere la porta /dev/ttyUSB0 (testato or ora).
Prova a lanciare ‘IDE dopo aver inserito la scheda sulla porta USB, e/o a resettare la scheda durante l’avvio premendo l’apposito pulsantino.