collegamento tra arduino, hc06 e app su smartphone

Salve a tutti, è da più di due mesi che sto cercando di far comunicare arduino e lo smartphone tramite il modulo bluetooth hc06. Volevo come prima cosa accendere un led tramite app, ma già da subito sono sorti i primi problemi. Uso la softwareSerial per lasciare liberi i pin 0 e 1 di arduino e provo a configurare il modulo per capire se almeno funzioni con questo sketch:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 4);

void setup() {
  Serial.begin(9600); 
  Serial.println("Modalita' AT per HC-06:");
  mySerial.begin(9600);
}

void loop() {

  if(mySerial.available()) {
    Serial.write(mySerial.read());
  }

  if(Serial.available()) {
    mySerial.write(Serial.read());
  }
}

invio il comando “AT” e mi compare “OK” sul monitor seriale cosi come per il comando “AT+VERSION” mi compare “OKlinvorV1.8”. In seguito prendo lo smartphone e faccio l associazione del dispositivo che va a buon fine e tramite l app ArduinoRC mi connetto al modulo bluetooth e apro il terminale ma inviando un carattere tramite app verso il monitor seriale o viceversa dal monitor seriale all’app non succede assolutamente nulla e non capisco il perchè. Grazie mille a chi vorrà aiutarmi.

— ti ricordo che da REGOLAMENTO, si può fare “up” solo dopo almeno 48 ore dall’ultimo post. - gpb01

Cercando in rete ho letto che:

In modalità AT il modulo HC comunica a 38400 baud.

Quindi la riga della mySerial deve diventare: mySerial.begin(38400);

Ciao e grazie della risposta. Purtroppo il problema persiste anche cambiando il baudrate a 38400. Riesco solo ad inviare i comandi "AT" per verificare se la connessione c'è e mi da "OK" cosi come per i comandi "AT+VERSION" e "AT+BAUDx" e "AT+NAMEstring" funzionano tutti. Se però voglio inviare un carattere tutto tace e non succede nulla. :'(

prova a seguire questo tutorial

e mi raccomando.... attenzione alle tensioni di alimentazione e del pin tx di arduino (che è 5V)

Ho letto e seguito il tutorial scrupolosamente, così come per altri tutorial che ho trovato in rete, ma il risultato non cambia: il modulo si connette al bluetooth dello smartphone, ma comunque non invia nulla. :'( :'( :'( Grazie per la risposta

Scusa la domanda, perché ti serve mandare comandi AT? Ossia, chi master in questa comunicazione (ossia chi è che riceve i tentativi di pairing)? Il tuo HC-06 può essere solo slave quindi vuoi veramente connetterti al tuo smartphone, che deve quindi fare da master?

Perché invece non ti semplifichi la vita ed usi un HC-05 che si può configurare sia come master sia come slave? E quindi configurato come master il programma diventa semplicissimo e la connessione la fai dal tuo smartphone come fai con qualsiasi auricolare:

#include <SoftwareSerial.h>
/* 
Collegare il modulo BT:
TXD <--> Pin 9 (Rx)
RXD <--> Pin 8 (Tx)
VCC <--> 5V
GND <--> GND

Un LED e resistenza tra massa e positivo e pin 13
*/
#define LED 13
SoftwareSerial HC05(8, 9); // TX, RX

void setup ()
{
  Serial.begin(115200);
  HC05.begin(9600);
  pinMode (LED, OUTPUT);
  Serial.println("INIT");
}
void loop ()
{
  if ( HC05.available() ) {
    char c = HC05.read();
    Serial.print(c);
    Serial.println(" ricevuto");
    if (c == 'A') {
      digitalWrite(LED, HIGH);
      Serial.println("ON");
    }
    if (c == 'a') {
      digitalWrite(LED, LOW);
      Serial.println("OFF");
    }
    delay(100);
  }
}

Avevo scelto l’hc06 proprio perchè ha solo la funzione di slave e quindi uso lo smartphone per inviare comandi (tipo l’accensione di un led) ma ovviamente non funziona. Sconfortato da ciò ho provveduto ad acquistare un AT09 con cui i problemi sono arrivati ancora prima perchè non riesco nemmeno ad effettuare il pairing con lo smartphone (il modulo viene visto ma non riesce ad associarlo) e mi da sempre questa schermata in allegato.

... se non vado errato, l'AT09 è un BLE (Bluetooth Low Energy v4.x) e ... si usa in tutt'altro modo !

L'hanno chiamato Bluetooth per la tecnologia, ma con il modo di funzionamento del classico Bluetoot V2.x NON ha nulla a che vedere.

Guglielmo

Il HC-06 DEVE funzionare così come è, di default … NON dovevi andare a toccare nulla con i comandi AT, lo dovevi collegare ed usare …

Esempio di programma che permette di fare le prove (programma ampiamente collaudato):

#include <SoftwareSerial.h>

#define  SS_RX 10            // RX PIN to receive  data
#define  SS_TX 11            // TX PIN to transmit data

SoftwareSerial ssSerial(SS_RX, SS_TX);

void setup()
{
  delay (2000);
  //
  Serial.begin(9600);        // Initialize USB Serial port
  ssSerial.begin(9600);      // Initialize SoftwareSerial port
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
}

void loop()
{
  if (ssSerial.available() > 0) Serial.write(ssSerial.read());
  if (Serial.available() > 0) ssSerial.write(Serial.read());
}
  • Colleghi il TX del BT al pin 10
  • Colleghi il RX del BT al pin 11
  • Colleghi l’alimentazione ed il GND

Fai il “pairing” e tutto quello che scrivi sul terminale seriale sul telefonino lo vedi su Arduino e viceversa.

Per fare le prove ti consiglio il SEGUENTE programma (Android).

Guglielmo

lyon25: Avevo scelto l'hc06 proprio perchè ha solo la funzione di slave e quindi uso lo smartphone per inviare comandi (tipo l'accensione di un led)

Scusa, ma ancora hai un poco di confusione secondo me...

Non è che si decide chi sia master e chi slave in base a chi manda comandi... La questione distingue solamente CHI SI CONNETTE (slave, generalmente lo smartphone) ed invece CHI RICEVE LE CONNESSIONI (master, generalmente l'apparato come auricolari, lo stereo dell'auto, le casse, e nel tuo caso Arduino). Una volta instaurata la connessione (tramite pairing) è come se avessi una seriale tra smartphone e Arduino. Se Arduino manda un byte lo riceve lo smartphone, così come se lo smartphone manda un byte lo riceve Arduino.

Quindi dammi retta, prendi un HC-05 e risolvi tutto (il listato che ti ho postato è una delle prove che efci anche io i primi tempi di "smanettamenti" e test vari e ti assicuro che funziona, senza comandi AT o altre pippe mentali... ;) ).

gpb01: Per fare le prove ti consiglio il SEGUENTE programma (Android).

Guglielmo

il link punta ad una pagina inesistente...

Patrick_M: il link punta ad una pagina inesistente...

... acc ... lo hanno tolto dallo store :( ... era uno dei migliori terminali ... va beh, c'è sempre QUESTO ;)

Guglielmo

:D si questo lo uso anch'io