HC-06

Salve sono Riccardo, sono nuovo del forum e quindi non so bene come funziona, io ho un semplice problema cioè non riesco a stabile una connessione seriale stra il mio HC-06 e Arduino, mi spiego meglio: ho provato accendendo e spegnendo un led ma sul monitor seriale non compare la lettera che corrisponde al comando dell’ accensione e nemmeno quella dello spegnimento e per lo più il led non riceve i comandi.
Ho provato in vari modi, includendo la libreria SoftwareSerial ma niente!
Il prossimo passo era leggere la temperatura sul mio smartphone quindi vi chiedo se potete spiegarmi come fare sia per il led ma anche per la lettura della temperatura.
vi allego uno sketch di quelli provati, non voletemi male se vedete incoerenze ma sono alle prime armi.
Vi ringrazio in anticipo.

#include <SoftwareSerial.h>

int rxPin = 11;
int txPin = 10;
SoftwareSerial bluetooth(rxPin, txPin);

String message;
const int Led = 13;

void setup()
{
 Serial.begin(9600);
 bluetooth.begin(9600);
 pinMode(Led,OUTPUT);
}

void loop()
{
 while(bluetooth.available()){
   message+=char(bluetooth.read());
 }
 if(!bluetooth.available())
 {
   if(message!="")
   {
     if(message == "H"){
         digitalWrite(Led, HIGH);
         Serial.println("Led ON");
         delay(1000);
         message="";
      }
      else if(message == "L"){
         digitalWrite(Led, LOW);
         Serial.println("Led OFF");
         delay(1000);
         message="";
      }
   }
 }
}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Hai connesso il pin Rx del modulo al pin 10 (Tx) di Arduino ed il pin Tx del modulo al pin 11 (Rx) di Arduino?

Usando String nella ricezione, non è detto che contenga un solo carattere, quindi potresti controllare solo il primo:

if(message[0] == "H") ...

Il collegamento l'ho fatto giusto con tanto di resistenza sa 10kohm su tx del modulo, il mio problema è che la cummunicazione seriale proprio non parte, sullo sketch ho scritto bluetooth.begin (9600) che sarebbe il baud, ma se io mettessi solo quello è poi scrivo bluetooth.println(pronto) non me lo visulaizza sulla porta seriale, è come se bluetooth.begin (9600) non volesse dire niente! Adesso provo a inserire su messagge[0]. Però non mi spiego perché bluetooth.begin non faccia partire una comunicazione serial :( Ti ringrazio per la risposta comunque :) Spero di scoprire il problema!

Guarda,
il programma che segue è ultra-collaudato e, se cerchi qui sul forum, è stato usato decine di volte in casi come il tuo per … verificare i collegamenti:

// *****************************************************
//
//        Bluetooth module serial communication
//              Bluetooth <--> USB_Serial
//
// *****************************************************

#include <SoftwareSerial.h>

#define  BT_RX 10            // PIN to receive from bluetooth
#define  BT_TX 11            // PIN TO transmit to bluetooth

SoftwareSerial btSerial(BT_RX, BT_TX);

void setup()
{
  delay (2000);
  //
  Serial.begin(9600);        // Initialize USB Serial port
  //
    btSerial.begin(9600);    // Initialize Bluetooth SoftwareSerial port for selected data speed
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
  //
}

void loop()
{
  if (btSerial.available() > 0) Serial.write(btSerial.read());
  if (Serial.available() > 0) btSerial.write(Serial.read());
}

Quindi caricalo su Arduino, collega il modulo BT sui pin 10 e 11 (come da commento nel codice), collegati via terminale da PC e fai le prove.

Se non va … ho hai collegato male i fili o non hai accoppiato il modulo con l’oggetto con cui vuoi parlare.

Guglielmo

P.S: E, come ti è già stato detto, CORREGGI il tuo primo post e racchiudi il codice nei tag CODE (quelli fatti così </> quando sei in edit).

Ciao Guglielmo, intanto ti ringrazio per l'aiuto che mi stai dando e la pazienza, siccome sono quasi alle prime armi mi potresti dare qualche esempio di verifica però lo sketch che mi hai fornito? Sto cercando di capire come sistemare lo sketch sul post perché non riesco a fare come hai fatto te :( appena capisco lo sistemo :)

Riccardo

Riccardo, prima di sistemare qualsiasi cosa ... lo devi provare [u]così come è e DEVE funzionare[/u] !

Quindi ... devi fare il pairing con un qualche cosa dove puoi aprire un terminale seriale (es. un tablet, un telefonino, ecc), devi collegare sulla USB il PC ed aprire il monitor seriale e ... ciò che scrivi sul PC lo devi vedere sul device che hai accoppiato e viceversa.

Se non riesci in questa cosa basilare ... è inutile che vai avanti con altro ... queste sono le basi che devono funzionare. Solo dopo essere riuscito in questa comunicazione di base si può affrontare qualche altra cosa. :)

Guglielmo

Ciao Guglielmo, ho provato con i comandi AT ma non ricevo risposte tipo la versione o cambiare il nome! Penso che il problema sia proprio il modulo, ti allego un link ad un post dove il ragazzo aveva messo le foto del modulo che è uguale al mio, tra l'altro avevi partecipato alla disussione e quindi mi sai aiutare meglio se puoi. Un piccolo suggerimento che app o modo si potrebbe usare per visualizzare le cose che scrivo dal monitor seriale e visualizzarle sul cell come hai detto te?! Ti ringrazio per la pazienza ;)

http://forum.arduino.cc/index.php?topic=315856.0

No, frena, per mandare il modulo in modalità AT c’è una procedura e … in tale modalità, cambia anche il baud rate:

  1. bisogna collegare il pin KEY (o come si chiama sul tuo modulo) a +Vcc
  2. bisogna parlare con i modulo a 38.400 baud

Verifica che funzioni … sempre con il programma di cui sopra (cambiando la velocità della SoftwareSerial).

Guglielmo

P.S. : Che cellulare/tablet hai ? Perché puoi connettere solo cose Android, NON iOS.

Versione del codice prevista per poter essere usato sia per fare le prove in modalità comando che non :

// *****************************************************
//
//        Bluetooth module serial communication
//              Bluetooth <--> USB_Serial
//
// *****************************************************

#include <SoftwareSerial.h>

// #define  BT_CONTROLMODE      // Uncomment if you set the KEY pin to HIGH (Control mode)

#define  BT_RX 10            // PIN to receive from bluetooth
#define  BT_TX 11            // PIN TO transmit to bluetooth

SoftwareSerial btSerial(BT_RX, BT_TX);

void setup()
{
  delay (2000);
  //
  Serial.begin(9600);        // Initialize USB Serial port
  //
  #ifdef BT_CONTROLMODE
    btSerial.begin(38400);   // Initialize Bluetooth SoftwareSerial port for default control speed
  #else
    btSerial.begin(9600);    // Initialize Bluetooth SoftwareSerial port for selected data speed
  #endif
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
  //
  #ifdef BT_CONTROLMODE
    delay(1000);  
    btSerial.print("AT");
    btSerial.print("\r\n");
  #endif
}

void loop()
{
  if (btSerial.available() > 0) Serial.write(btSerial.read());
  if (Serial.available() > 0) btSerial.write(Serial.read());
}

Guglielmo

Ciao Guglielmo, intanto ti ringrazio per il codice della modalità AT :slight_smile: il problema è però che nel HC-06 che ho io non ho l’uscita KEY ma ho solo TX, RX, VCC E GND ti allego una foto!
Penso che sia da cestino il mio modulo :’(

Comunque ho il Samsung note3.

Riccardo.

Veramente vedo un pin di INPUT chiamato EN ... potrebbe essere quello ... prova a collegarlo HIGH e vedere se riesci a dare i comandi AT a 38400.

Prova SOLO comandi semplici, SENZA cambiare alcuna configurazione ... specie se non sai [u]esattamente[/u] quello che stai facendo !!!

Guglielmo

P.S: Su Android, un buon emulatore di terminale BT collaudato e funzionante è QUESTO ;)

Ciao Guglielmo, allora progressi 0 :frowning: ho cambiato il Serial.begin da 9600 a 38400, l’unica cosa che compare sul monitor seriale è: — Ports ready — mentre l’app che mi hai consigliato non si connette al modulo.
Come puoi vedere ho messo EN in HIGH ma nulla.
Non so proprio da che parte girarmi :frowning:
Se provo a prendere un nuovo modulo magari me lo consigli te?! :slight_smile:
Se funziona quello nuovo vuol dire che quello attuale ha dei problemi, sbaglio a parlare così?

Sono nelle tue mani :frowning:

P.S. quando mi connetto al modulo la luce da lampeggiante diventa fissa quindi la connessione c’è.

Riccardo

// *****************************************************
//
//        Bluetooth module serial communication
//              Bluetooth <--> USB_Serial
//
// *****************************************************

#include <SoftwareSerial.h>

// #define  BT_CONTROLMODE      // Uncomment if you set the KEY pin to HIGH (Control mode)

#define  BT_RX 10            // PIN to receive from bluetooth
#define  BT_TX 11            // PIN TO transmit to bluetooth

SoftwareSerial btSerial(BT_RX, BT_TX);

void setup()
{
  pinMode(12,OUTPUT); //uscita EN
 
  delay (2000);
  //
  Serial.begin(38400);        // Initialize USB Serial port
  //
  #ifdef BT_CONTROLMODE
    btSerial.begin(38400);   // Initialize Bluetooth SoftwareSerial port for default control speed
  #else
    btSerial.begin(9600);    // Initialize Bluetooth SoftwareSerial port for selected data speed
  #endif
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
  //
  #ifdef BT_CONTROLMODE
    delay(1000);  
    btSerial.print("AT");
    btSerial.print("\r\n");
  #endif
}

void loop()
{
  digitalWrite(12, HIGH);
  if (btSerial.available() > 0) Serial.write(btSerial.read());
  if (Serial.available() > 0) btSerial.write(Serial.read());
}

Emmm ... come ti ho detto in modalità normale parla a 9600 e in modalità AT a 38400. Il codice è scritto per funzionare O in un modo O in un altro, non simultaneamente nei due modi.

Ora, il pin EN mettilo HIGH collegandolo direttamente a +Vcc e NON ad un pin di Arduino (quindi togli quel digitalWrite() che hai messo) e poi ... per andare a 38400 devi TOGLIERE il commento (... c'è pure scritto) difronte alla "// #define BT_CONTROLMODE" (dopo l'include della SoftwareSerial), ovvero devi togliere il // che lo precede .... altrimenti sei sempre a 9600 !!!

Guglielmo

Guglielmo non volermi male ma avevo interpretato male i collegamenti :disappointed_relieved: :disappointed_relieved: allora i comandi AT non vanno amen! sono riuscito ad accendere un led per ora! Ti ringrazio all' infinito e ti chiedo scusa se ti ho fatto perdere tempo! :( :( Mi aiuteresti ora a leggere la temperatura sul mio cell?

Riccardo

Bisogna che procedi con metodo e facendo UNA cosa per volta ...

  1. fammi un disegno di come lo hai collegato
  2. se la lettera la vedi strana è sbagliata la velocità
  3. metti di nuovo il codice che stai usando SPECIFICANDO per fare cosa (visto che il codice è diverso nei due casi): a) collegarti con il telefono b) inviare comandi AT
  4. non devi dichiarare NE modificare nulla, il codice che ti ho dato FUNZIONA così come è: c'è solo una riga da commentare o meno a seconda se si usa in modalità terminale o AT

Guglielmo

In pratica …

PER COLLEGARTI CON IL TELEFONO:

● EN lasciato scollegato

// *****************************************************
//
//        Bluetooth module serial communication
//              Bluetooth <--> USB_Serial
//
// *****************************************************

#include <SoftwareSerial.h>

// #define  BT_CONTROLMODE      // Uncomment if you set the KEY pin to HIGH (Control mode)

#define  BT_RX 10            // PIN to receive from bluetooth
#define  BT_TX 11            // PIN TO transmit to bluetooth

SoftwareSerial btSerial(BT_RX, BT_TX);

void setup()
{
  delay (2000);
  //
  Serial.begin(9600);        // Initialize USB Serial port
  //
  #ifdef BT_CONTROLMODE
    btSerial.begin(38400);   // Initialize Bluetooth SoftwareSerial port for default control speed
  #else
    btSerial.begin(9600);    // Initialize Bluetooth SoftwareSerial port for selected data speed
  #endif
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
  //
  #ifdef BT_CONTROLMODE
    delay(1000);  
    btSerial.print("AT");
    btSerial.print("\r\n");
  #endif
}

void loop()
{
  if (btSerial.available() > 0) Serial.write(btSerial.read());
  if (Serial.available() > 0) btSerial.write(Serial.read());
}

PER LA MODALITA’ COMANDI (AT)

● EN collegato a +Vcc

// *****************************************************
//
//        Bluetooth module serial communication
//              Bluetooth <--> USB_Serial
//
// *****************************************************

#include <SoftwareSerial.h>

#define  BT_CONTROLMODE      // Uncomment if you set the KEY pin to HIGH (Control mode)

#define  BT_RX 10            // PIN to receive from bluetooth
#define  BT_TX 11            // PIN TO transmit to bluetooth

SoftwareSerial btSerial(BT_RX, BT_TX);

void setup()
{
  delay (2000);
  //
  Serial.begin(9600);        // Initialize USB Serial port
  //
  #ifdef BT_CONTROLMODE
    btSerial.begin(38400);   // Initialize Bluetooth SoftwareSerial port for default control speed
  #else
    btSerial.begin(9600);    // Initialize Bluetooth SoftwareSerial port for selected data speed
  #endif
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
  //
  #ifdef BT_CONTROLMODE
    delay(1000);  
    btSerial.print("AT");
    btSerial.print("\r\n");
  #endif
}

void loop()
{
  if (btSerial.available() > 0) Serial.write(btSerial.read());
  if (Serial.available() > 0) btSerial.write(Serial.read());
}

Guglielmo

Ho appena provato con il secondo sketch EN a vcc ma si ferma sempre a Ports ready.. che faccio? che collegamento volevi vedere quello del sensore di temp?

Riccardo

No, volevo vedere come era collegato il BT ad Arduino ... ::)

Comunque è veramente strano ... ... con EN a +Vcc e a 38400, dopo aver ricevuto il messaggio di "Ports Ready" (che viene dal codice), [u]dal terminale dell IDE di Arduino[/u] dovresti poter scrivere dei comandi AT e, sempre sul terminale di Arduino ricevere le risposte a detti comandi.

Guglielmo

Ho fatto delle foto che è meglio, il filo a EN è attaccato un pò alla buona non so se magari è quello il problema!
Più tardi faccio altre prove e poi ti so dire.

Riccardo