Un ESP8266 può essere utilizzato per connettersi a un Roomba 761 e controllarlo tramite WiFi attraverso un’interfaccia seriale chiamata ROI.
Girellando sul blog denominato “Arduino, ESP8266, ESP32 & Raspberry Pi stuff” abbiamo trovato uno schema di base per pilotare la Roomba Open Interface con un semplice ESP8266 collegato tramite wifi. Vediamo come.
Requisiti
- ESP8266 (ad esempio, NodeMCU)
- Roomba 761
- Level shifter (per adattare i livelli di tensione tra Roomba ed ESP8266, se necessario)
- Connessione UART tra Roomba ed ESP8266
Passaggi
- Cablaggio dell’ESP8266 al Roomba:
- Collegare il pin TX dell’ESP8266 al pin RX del Roomba.
- Collegare il pin RX dell’ESP8266 al pin TX del Roomba.
- Assicurarsi che la terra (GND) dell’ESP8266 sia collegata al GND del Roomba.
- Impostazione del Roomba:
- Il Roomba deve essere in modalità provvisoria o modalità completa per accettare i comandi.
- La modalità predefinita all’accensione è la modalità passiva. Sarà necessario inviare un comando per commutarla.
- Programmazione dell’ESP8266:
- Il programma dovrebbe collegare l’ESP8266 a una rete WiFi e configurare un semplice server Web per ricevere comandi.
- Dovrebbe aprire una connessione seriale al Roomba e inviare i comandi appropriati in base alle richieste del server Web.
Codice sorgente
Ecco un programma di esempio per ESP8266 che utilizza l’IDE Arduino:
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 |
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> // Replace these with your WiFi network credentials const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; // Create an instance of the web server on port 80 ESP8266WebServer server(80); // Pin definitions for the Roomba connection #define ROOMBA_RX D2 #define ROOMBA_TX D1 // Function to send commands to the Roomba void sendRoombaCommand(byte command) { Serial.write(command); } void setup() { // Start the serial communication with the Roomba Serial.begin(115200, SERIAL_8N1, ROOMBA_RX, ROOMBA_TX); // Connect to WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Set up routes server.on("/", []() { server.send(200, "text/plain", "Roomba WiFi Controller"); }); server.on("/start", []() { sendRoombaCommand(128); // Start command sendRoombaCommand(131); // Set to Safe mode server.send(200, "text/plain", "Roomba started"); }); server.on("/stop", []() { sendRoombaCommand(133); // Dock command server.send(200, "text/plain", "Roomba stopped"); }); // Start the server server.begin(); Serial.println("Server started"); } void loop() { // Handle incoming client requests server.handleClient(); } |
Spiegazione
- WiFi Connection: ESP8266 si connette alla rete WiFi specificata.
- Web Server: ESP8266 imposta un server Web con endpoint /start e /stop per avviare e arrestare Roomba.
- Comunicazione seriale: la funzione sendRoombaCommand() invia comandi tramite la connessione UART a Roomba.
- Comandi Roomba:
128 è il comando per avviare Roomba in modalità passiva.
131 commuta Roomba in modalità provvisoria, consentendogli di ricevere comandi di movimento.
133 fa tornare Roomba alla sua base (fermandolo di fatto).
Note
- Questa è un’implementazione semplice; potresti dover regolare la velocità in baud se il tuo Roomba ne usa una diversa (il valore predefinito è solitamente 115200).
- Assicurati che ESP8266 e Roomba abbiano livelli di tensione compatibili, poiché ESP8266 funziona a 3,3 V e Roomba potrebbe usare 5 V.
- Puoi espandere il programma per includere funzionalità aggiuntive come modalità di pulizia o altri comandi specifici di Roomba.
Roomba 761 ha diverse modalità che controllano il suo comportamento, come definito dalla Roomba Open Interface (ROI). Ogni modalità consente diversi livelli di controllo e funzionalità. Ecco le modalità disponibili:
Modalità Spento
Roomba è completamente spento. Non risponde ad alcun comando in questo stato e devi premere manualmente il pulsante CLEAN per accenderlo.
Modalità Passiva (Default)
Quando accendi per la prima volta Roomba, entra in Modalità Passiva. In questa modalità:
- I sensori di Roomba possono essere letti.
- L’interfaccia seriale è attiva, quindi puoi comunicare con essa.
- Non puoi controllare direttamente i motori o gli attuatori di Roomba.
- Per uscire da questa modalità, devi inviare comandi specifici tramite l’interfaccia seriale.
Modalità Sicura
Questa modalità consente il controllo parziale di Roomba. Puoi:
- Guidare Roomba e controllare i suoi motori.
- Leggere i dati dei sensori.
- Controllare altri attuatori, come il motore dell’aspirapolvere e la spazzola laterale.
Roomba passerà automaticamente alla Modalità Passiva se:
- Rileva un dirupo (per evitare di cadere dalle scale).
- La tensione della batteria scende troppo.
- Rileva altre condizioni critiche. Questa modalità è più sicura per i test perché protegge automaticamente il dispositivo da condizioni potenzialmente dannose.
Modalità completa
Questa modalità ti dà il controllo completo sul Roomba. Puoi:
- Controllare tutti i suoi motori, sensori e attuatori senza alcun override di sicurezza automatico.
- Usa questa modalità per funzionalità avanzate, ma fai attenzione: poiché le funzioni di sicurezza come il rilevamento di dislivelli sono disabilitate, potrebbe uscire dai bordi o colpire ostacoli se non monitorato correttamente.
- Per attivare questa modalità, invia il comando 132 dopo essere entrato in Modalità provvisoria (131).
Modalità pulizia
Questa è la modalità di pulizia standard che il Roomba usa quando viene premuto il pulsante CLEAN. Il Roomba si muove autonomamente, evitando gli ostacoli e pulendo l’area.
In Modalità pulizia, il Roomba non accetta comandi di movimento tramite l’interfaccia seriale ma potrebbe comunque rispondere ad altri comandi ROI (ad esempio, verificando lo stato del sensore).
Modalità dock
Questa modalità viene attivata quando invii il comando Dock (133). Il Roomba cerca la sua docking station e tenta di agganciarsi. Come la modalità Clean, Roomba funziona in modo autonomo e non accetta comandi di movimento diretti.
Modalità Spot
In modalità Spot, Roomba si concentra su una piccola area, eseguendo un ciclo di pulizia completo. Questa modalità viene attivata manualmente tramite il pulsante SPOT o tramite comandi specifici.
Roomba funziona in modo autonomo e non risponde ai comandi di movimento in questa modalità.
Comandi per cambiare modalità
Per controllare queste modalità tramite l’interfaccia seriale:
- 128: Start (mette Roomba in modalità passiva)
- 131: Modalità sicura (consente un controllo limitato)
- 132: Modalità completa (consente un controllo completo senza limiti di sicurezza)
- 135: Modalità pulizia
- 143: Modalità dock (riporta Roomba alla base di ricarica)
- 134: Modalità spot (si concentra su un’area specifica per la pulizia)
Utilizzando questi comandi, puoi personalizzare il modo in cui ESP8266 interagisce con Roomba per sfruttare queste modalità e comportamenti.
Iscriviti ai nostri gruppi Telegram
Link utili
- Arduino UNO R3
- Elegoo UNO R3
- Arduino Starter Kit per principianti
- Elegoo Advanced Starter Kit
- Arduino Nano