## Workshop Arduino 2017 ### Connettività con nodemcu Alessio Serraino serrainoalessio@gmail.com ![](assets/poul_logo.svg) --- ## Parte Teorica -- ## Nodemcu -- Cos'è una Nodemcu? Una nodemcu è una board elettronica che monta un microcontrollore ESP8266, una memoria flash (da 4M), e dell'elettronica per comunicare sulla porta USB. L'ESP8266 implementa tutti i circuiti necessari per connettersi al Wifi nativamente -- ## Una nodemcu
--- ### Una nodemcu può essere programmata dall'editor Arduino Per programmare una nodemcu dall'editro Arduino è necessario installare un plugin -- ## Demo installazione del plugin --- ### Uso con l'editor Adesso potete usare la Nodemcu come se fosse un Arduino, per esempio per l'output su un pin potete utilizzare il solito codice ``` digitalWrite(pin, HIGH); digitalWrite(pin, LOW); analogWrite(pin, duty_cycle); ``` --- ## Connettersi al Wifi (non funziona con Arduino!) ``` #include
#include
ESP8266WiFiMulti WiFiMulti; void setup() { WiFiMulti.addAP("SSID1", "pw1"); WiFiMulti.addAP("SSID2", "pw2"); // etc... add as many wifi network as you want while (WiFiMulti.run() != WL_CONNECTED) delay(500); // Wait some time before trying again // Ora siamo connessi ad una rete WiFi ! } ``` -- ### Spiegazione del codice Innanzitutto bisogna importare la libreria, e creare un oggetto `WiFiMulti`. Lo facciamo con il codice: ``` #include
#include
ESP8266WiFiMulti WiFiMulti; ``` -- ### Spiegazione del codice La libreria WifiMulti consente di avere un database di wifi/pw ai quali Connettersi La funzione ``` WiFiMulti.addAP("SSID", "pw"); ``` Aggiunge una rete Wifi alla lista di quelle note -- ### Spiegazione del codice Per connettersi bisogna chiamare la funzione `WifiMulti.Run()` ``` while (WiFiMulti.run() != WL_CONNECTED) delay(500); // Wait some time before trying again ``` È stata inserita all'interno di un ciclo per questioni di praticità. Se non ci si riesce a connettere entro il primo tentativo, allora si aspettano 500 millisecondi e si fa un secondo tentativo di connessione, poi un terzo, e così via... -- ### Spiegazione del codice Una volta connessi potrebbe essere utile stampare l'indirizzo IP della node Per ottenere l'indirizzo ip basta chiamare la funzione `WiFi.localIP()`, così: ``` Serial.print("Your IP address is "); Serial.println(WiFi.localIP()()); ``` Le `Serial.print` sono le classiche Serial di Arduino che scrivono sulla porta USB --- ## Filesystem (anche questo non funziona con Arduino!) ``` #include
void setup() { SPIFFS.begin(); // ... other inits ... } ``` -- ### Aprire un file l'apertura di un file avviene in un modo molto simile al C, con la funzione ``` SPIFFS.open(path, mode); ``` path è il percorso globale del file, mode può essere "r", "w", "r+", "w+", "a", "a+" esattamente come in C questi rappresentano il modo in cui il file viene aperto -- ### Altre utility: Verificare l'eseistenza di un file o di una cartella ``` SPIFFS.exists(path); ``` Rimuovere un file o una cartella ``` SPIFFS.remove(path); ``` Rinominare un file o una cartella ``` SPIFFS.rename(pathFrom, pathTo); ``` Reference: [http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html](http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html) -- ### Caricare un Filesystem Può essere fatto tramite l'editor, in genere è un operazione molto lenta Bisogna creare nella cartella dello sketch una cartella `data` ed inserire dentro il filesystem --- ## Webserver ``` #include
ESP8266WebServer webServer(80); void HandleQuest() { File file = SPIFFS.open("/index.html", "r"; size_t sent = webServer.streamFile(file, "text/html"); file.close(); } void setup() { webServer.onNotFound(HandleQuest); webServer.begin(); } void loop() { webServer.handleClient(); } ``` -- ### Spiegazione del codice Come al solito si include la libreria, e si crea un oggetto che rappresenta il web server ``` #include
ESP8266WebServer webServer(80); ``` 80 sarà la porta di ascolto per il server (default per HTTP) -- Nel setup dobbiamo dire cosa fare al webserver quando viene richiesta una pagina Visto che non ci sono regole ogni richiesta andrà in notfound ``` void setup() { webServer.onNotFound(HandleQuest); // Callback per le richieste non trovate webServer.begin(); // Inizializza il server } void loop() { webServer.handleClient(); // è necessario } ``` è necessario nel loop inserire il codice `webServer.handleClient()` -- La funzione indicata tra parentesi nel metodo `onNotFound` è una funzione callback, dobbiamo definire tale funzione Una callback è una funzione che viene eseguita in un particolare evento ``` void HandleQuest() { File file = SPIFFS.open("/index.html", "r"; size_t sent = webServer.streamFile(file, "text/html"); file.close(); } ``` Questa funzione legge il file `index.html` con il filesystem, dopodichè lo manda come risposta del server --- # Grazie per l'attenzione ![Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://licensebuttons.net/l/by-nc-sa/4.0/88x31.png)