Sommario:
2025 Autore: John Day | [email protected]. Ultima modifica: 2025-01-13 06:57
Ciao, attualmente sto usando Windows 10, NodeMCU 1.0 ed ecco l'elenco dei software che ho usato e le guide di installazione che ho seguito:
- Arduino IDE
- Schede aggiuntive per esp8266
- Spiff
Biblioteca utilizzata:
Websocket
Ho usato NodeMCU come server per servire un file HTML che ho creato da questo tutorial. Per servire questo file, ho caricato il file nel file system nodemcu usando Spiffs. Il file HTML invia i dati al nodemcu utilizzando i websocket per essere stampati sul monitor seriale per questo. La comunicazione bidirezionale veloce tramite websocket del server e del client ha permesso di utilizzare questo come controllo remoto. Nei seguenti passaggi, spiegherò come funziona il mio codice
Forniture
NodoMCU
Passaggio 1: fallo funzionare
Ecco i passaggi su come funziona
- Scarica il file allegato e apri il file mousebot.ino
- Vai a schizzo> mostra la cartella dello schizzo e crea una nuova cartella denominata dati
- Salva il file html di questo tutorial nella cartella denominata. Ho chiamato il mio come "Joystick"
- Assicurati che il tuo spiff sia già funzionante andando su strumenti e vedendo il "caricamento dei dati dello schizzo esp8266"
- Carica il file html su nodemcu facendo clic su "esp8266 sketch data upload"
- Dopo il caricamento del file, carica su nodemcu il file mousebot.ino accedendo all'IDE di arduino e premendo ctrl U
Passaggio 2: come funziona il codice
Innanzitutto, includiamo le librerie che verranno utilizzate da questo codice
//per consentire all'ESP8266 di connettersi al WIFI
#include #include #include //Abilita ESP8266 ad agire come server #include //abilita la comunicazione con il server e il client (il tuo dispositivo connesso) #include #include //Per aprire il file caricato sul nodemcu #include
Imposta esp8266 come server web aperto sulla porta 80. Le porte sono percorsi attraverso i quali passeranno i dati. Come porta del server, invierà il file HTML al client (i dispositivi ad esso collegati).
Aggiunge una connessione websocket utilizzando la porta 81 per ascoltare i messaggi dal client
I websocket hanno il parametro num, WStype_t, payload e dimensioni. Il num determina il numero del client, il payload è il messaggio che invia, la dimensione è la lunghezza del messaggio e WStype_t è per diversi eventi come
- WStype_DISCONNECTED - alla disconnessione di un client.
- WStype_CONNECTED: - quando un client si connette
- WStype_TEXT - Dati ricevuti dal client
A seconda del tipo di evento vengono eseguite diverse azioni ed è commentato qui
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) {
switch (type) { case WStype_DISCONNECTED: Serial.printf("[%u] Disconnected!\n", num); //stampa i dati sul monitor seriale break; case WStype_CONNECTED: { IPAddress ip = webSocket.remoteIP(num); // ottiene l'IP del client Serial.printf("[%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], carico utile); webSocket.sendTXT(num, "Connesso"); //invia "connesso" alla console del browser } break; case WStype_TEXT: Serial.printf("[%u] Data: %s\n", num, payload); //stampa il numero del cliente in %u e i dati ricevuti come stringhe in %s\n break;}}
Passaggio 3: impostare NODEMCU come server
imposta l'ssid e la password che utilizzerai per connetterti ad esso in seguito
const char *ssid = "Prova";
const char *password = "12345678";
sulla configurazione, specifichiamo la velocità con cui comunicheranno il nostro nodemcu e il pc, che è 115200.
void setup(void){
Serial.begin(115200); Serial.print("\n");
impostato su true anche vedere l'output diagnostico wifi sul terminale serila
Serial.setDebugOutput(true);
initaliazzare il filesystem
SPIFFS.begin();
Imposta il nodemcu come accesspoint con ssid e password defiend in precedenza e stampa l'ip del nodemcu con cui ti connetterai in precedenza. per impostazione predefinita è 192.168.4.1
Serial.print("Configurazione punto di accesso…");
WiFi.mode(WIFI_AP); WiFi.softAP(ssid, password); IPAddress mioIP = WiFi.softAPIP(); Serial.print("Indirizzo IP dell'AP: "); Serial.println(mioIP);
Inizializza il websocket sul nodemcu, che è pur server
webSocket.begin();
Chiama la funzione webSocketEvent quando si verifica un evento websocket.
webSocket.onEvent(webSocketEvent);
Per il debug, stampa "Server WebSocket avviato" su una nuova riga. Questo serve per determinare la riga di codice che il nodemcu sta elaborando
Serial.println("Server WebSocket avviato.");
quando un client visita 192.168.4.1, chiamerà la funzione handleFileRead e invierà con essa l'URI del server dei parametri che in questo caso è la nostra informazione nodemcu. La funzione handleFileRead servirà il file html dal file system nodemcu
server.onNotFound((){
if(!handleFileRead(server.uri()))
se non può essere trovato mostrerà "FileNotFound"
server.send(404, "testo/normale", "FileNotFound");
});
Avvia il server e avvia il server HTTP di stampa.
server.begin(); Serial.println("Server HTTP avviato");
Nel nostro loop void, abilitiamo il server a gestire continuamente le comunicazioni del client e dei suoi websocket come segue:
ciclo vuoto(vuoto){
server.handleClient(); webSocket.loop();}
Passaggio 4: caricare il file HTML
useremo una funzione chiamata handleFileRead per aprire e il file html dal file system nodemcu. restituirà un valore booleano per determinare se è caricato o meno.
Quando "192.168.4.1/" è aperto dal client, impostiamo il percorso del file su "/Joystick.html, il nome del nostro file nella cartella dei dati
bool handleFileRead(String path){
Serial.println("handleFileRead: " + percorso); if(path.endsWith("/")) path += "Joystick.html"; if(SPIFFS.exists(percorso)){ File file = SPIFFS.open(percorso, "r"); size_t inviato = server.streamFile(file, "testo/html"); file.close(); restituire vero; } restituisce falso; }
Controlla se il percorso del file "/Joystick.html" esiste
if(SPIFFS.exists(percorso)){
Se esiste, apri il percorso con lo scopo di leggerlo che è specificato dalla "r". Vai qui per più scopi.
File file = SPIFFS.open(percorso, "r");
Invia il file al server come con un tipo di contenuto "testo/html"
size_t inviato = server.streamFile(file, "testo/html");
chiudi il file
file.close();
la funzione handleFileRead restituisce true
restituire vero;}
se il percorso del file non esiste, la funzione handleFileRead restituisce false
restituire vero; }
Passaggio 5: provalo
Connettiti al nodeMCU e vai su "192.168.4.1" e provalo!:)