Comunicazione tra 2 arduino via bluetooth

Ciao!

in questo post vedremo come far comunicare 2 moduli bluetooth tra loro.

Per il master ho utilizzato il modulo HC-05 (che avevamo già visto in questo post), per lo slave si possono utilizzare vari moduli, ma vi consiglio comunque di utilizzare un HC-05





Dovete fare attenzione al fatto che i moduli bluetooth hc-05, in genere, non accettano i 5v sui segnali. Quindi se utilizzate una scheda tipo Arduino Uno (che lavora a 5v) dovrete inserire un level converter (o un partitore di tensione come nello schema sopra) tra scheda e modulo bluetooth. In alternativa potete usare una scheda Wemos con chip ESP8266 che lavora già a 3.3v

Collegate il PIN EN del modulo bluetooth al 3v3 di Arduino per far entrare il modulo in modalià AT, (dopo aver configurato il tutto, alla fine del tutorial, questo collegamento andrà rimosso) il led lampeggerà lentamente (circa 0.5hz). se il led non dovesse lampeggiare lentamente, premete anche il pulsante sul modulo bluetooth prima di alimentarlo.

Dopo aver collegato il modulo HC-05 al Wemos, caricate questo sketch e aprite il serial monitor


  1. #include <SoftwareSerial.h>
  2. #define BAUD_RATE 38400
  3.  
  4. SoftwareSerial Bluetooth (D7, D8); // RX, TX
  5.  
  6. void setup() {
  7.  
  8.   Serial.begin(BAUD_RATE);
  9.   Bluetooth.begin(BAUD_RATE);
  10.   delay(5000);
  11.  
  12.   Serial.print("Waiting for HC05 in AT mode... ");
  13.   Bluetooth.println("AT");
  14. }
  15.  
  16. void loop() {
  17.  
  18.   if (Serial.available()) {
  19.     Bluetooth.write(Serial.read());
  20.   }
  21.  
  22.   if (Bluetooth.available()) {
  23.     Serial.write(Bluetooth.read());
  24.   }
  25. }

Potrebbe essere che il modulo abbia un baudrate diverso (probabilmente 9600) nel caso potete modificarlo alla seconda riga dello sketch sopra.

CONFIGURAZIONE DEL MODULO SLAVE

Inviando il comando "AT" il modulo bluetooth risponderà "OK", 
fate attenzione a come è impostato il serial monitor (riga in basso)



Il comando AT+ADDR restituirà l'indirizzo Bluetooth del dispositivo, appuntatelo, ci servirà in seguito.




lanciare anche i seguenti comandi

AT+ROLE=0                                
(imposta modalità slave)

AT+UART=38400,0,0                   
(imposta baud rate per la comunicazione tra i moduli)

AT+CMODE=0 
(imposta la connessione solo con i dispositivi accoppiati)

AT+PSWD=1234
(imposta password/PIN, deve essere uguale a quello del modulo master. Con alcune versioni di moduli HC05 questo comando vi darà errore, provate AT+PSWD="1234")


CONFIGURAZIONE DEL MODULO MASTER

Ora passiamo alla configurazione dell'altro modulo bluetooth, il modulo master.

Caricate lo stesso sketch nell'Arduino collegato a questo modulo.
Aprite il serial monitor e dare tutti i seguenti comandi:

AT+ROLE=1                         
(imposta modalità master)

AT+UART=38400,0,0                   
(imposta baud rate per la comunicazione tra i moduli)

AT+CMODE=0 
(imposta la connessione solo con i dispositivi accoppiati)

AT+PSWD=1234 
(imposta password/PIN, deve essere uguale a quello del modulo slave. Con alcune versioni di moduli HC05 questo comando vi darà errore, provate AT+PSWD="1234")

AT+RMAAD 
(elimina eventuali dispositivi accoppiati in precedenza)

AT+RESET
(resetta il modulo, necessario dopo alcuni comandi)

AT+INQM=0,5,9
(imposta parametri per la modalità di ricerca dei dispositivi)

AT+INIT
(avvia la modalità SPP, se avete già dato questo comando riceverete l'errore 17, quindi siete già ok)

AT+INQ
(avvia la ricerca dei dispositivi nelle vicinanze, alimentate anche il modulo slave prima di dare questo comando, in modo da poterlo trovare)

dopo quest'ultimo comando, vi verrà restituita la lista dei dispositivi trovati, ad esempio:


Con la versione di firmware del modulo 3.0-20170601 (date il comando AT+VERSION? per sapere la versione) questo comando restituirà l'errore 1F. Seguite questa soluzione.

Come vedete il terzo modulo trovato è il nostro modulo slave, potete ricevere anche il nome con il comando:

AT+RNAME?INDIRIZZO (es: AT+RNAME?98d3,31,20a358) 



Ora date i comandi:

AT+PAIR=INDIRIZZO,TIMEOUT (es: AT+PAIR=98d3,31,20a358,9) 
per accoppiare i dispositivi, se tutto è andato a buon fine vi verrà restituito ok.

AT+BIND=INDIRIZZO (es: AT+BIND=98d3,31,20a358)

AT+LINK=INDIRIZZO (es: AT+LINK=98d3,31,20a358)

Fine!
Ora i due dispositivi saranno accoppiati, alla prossima riaccensione eseguiranno automaticamente la connessione, quindi quello che invierà un modulo verrà ricevuto dall'altro e viceversa.

Potete provare la connessione lasciando un modulo collegato ad Arduino.
L'altro modulo è sufficiente che lo alimentiate e i pin TX e RX dovranno essere uniti tra loro.
Ciò che scriverete sul serial monitor vi dovrà tornare come risposta.

Questo è tutto,
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!


LINK UTILI:

fonte1

2 commenti:

  1. Buonasera Daniele, quando parla della versione del firmware che restituisce l'errore 1F e precisamente:
    "Con la versione di firmware del modulo 3.0-20170601 (date il comando AT+VERSION? per sapere la versione) questo comando restituirà l'errore 1F. Seguite questa soluzione."
    Il link alla soluzione rimanda a questa stessa pagina. Potrebbe inserire il link corretto? Sto proprio cercando di risolvere l'errore ma senza successo.
    grazie

    RispondiElimina
    Risposte
    1. Ciao Roberto, ho corretto il link, purtroppo non avevo modo di verificare la soluzione personalmente ma dovrebbe andare.

      Elimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post