Modulo HC-06 con Arduino: lampeggia, si associa ma non si connette

Salve a tutti, sono nuovo in questo forum e mi fa piacere prenderne parte. Ho acquistato da poco un modulo Bluetooth HC-06 per il mio Arduino. Sto provando uno sketch molto semplice, ovvero, quello per accendere e spegnere un LED. Ho preso il codice da Giuseppe Caccavalle, l'ho caricato e collegato al mio arduino. Il modulo lampeggia rosso, il cellulare trova il device, si associa ma non riesce a connettersi. Qual'è il problema? Ho sbagliato qualcosa?

GND -> GND
MASSA -> 5V
TX -> TX
RX -> RX

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

Puoi aiutarmi nel mio problema?

… allora, due cose:

1. Non so a che pin hai collegato il modulo, in ogni caso ti sconsiglio di usare i pin 0 ed 1 di Arduino, ovvero la Serial, dato che tale porta è collegata al convertitore seriale <-> USB e spesso serve usarla per fare il “debug”.

Usa la SoftwareSerial per creare una seriale da software su altri due pin (ti consiglio 10 RX e 11 TX).

2. TX e RX vanno incrociati …

TX HC-06 —> RX Arduino
RX HC-00 <— TX Arduino

Guglielmo

marcas97:
Puoi aiutarmi nel mio problema?

Un mio alunno che ha riscontrato, forse, questo stesso problema lo ha risolto utilizzando il vecchio cellulare con cui invece prima funzionava.

crc57:
Un mio alunno che ha riscontrato, forse, questo stesso problema lo ha risolto utilizzando il vecchio cellulare con cui invece prima funzionava.

Ovviamnete gli HC-06 sono dei moduli Bluetooth 2.x e quindi si accoppiano SOLO con cellulari che lo permettono, ovvero NO cellulari iOS che ammette solo il BLE (Bluetooth Low Energy 4.x).

Guglielmo

marcas97:
Sto provando uno sketch molto semplice, ovvero, quello per accendere e spegnere un LED. Ho preso il codice da Giuseppe Caccavalle, l'ho caricato e collegato al mio arduino. Il modulo lampeggia rosso, il cellulare trova il device, si associa ma non riesce a connettersi. Qual'è il problema? Ho sbagliato qualcosa?
GND -> GND
MASSA -> 5V
TX -> TX
RX -> RX

Come già ti hanno detto, spero che tu non stia usando un melafonino, quindi magari conferma la cosa.

Se così non fosse, allora scusa ma se hai seguito le istruzioni della pagina di Caccavale non ho capito che connessioni hai fatto!
Intanto che è sta cosa che hai messo MASSA a+5V???
Nella pagina c'è scritto chiaramente come va connesos:

HC-06 ARDUINO
VCC -> +3.3V
GND -> GND
TX -> 2
RX -> 3

Se hai fatto le connessioni "come capita" per forza che non funziona. Sempre se nel frattempo non hai danneggiato il modulo.

Quindi ora controlla bene passo-passo le cose scritte nella pagina che hai scelto di seguire, e dovrebbe funzionare.

Il mio modulo vicino ai PIN, porta il +5V

marcas97:
Il mio modulo vicino ai PIN, porta il +5V

Va bene +5V ... è un modulo HC-06 montato su una basetta adattatrice con il regolatore di tensione. Magari, per sicurezza, controlla che indichi gli stessi valori anche per i dati (TX e RX) e che non siano invece limitati a 3.3V

Dopo di che leggi bene i vari post, fai quanto ti è stato spiegato e vedi come va ...

Guglielmo

#include <SoftwareSerial.h>
 
int rxPin = 11;
int txPin = 10;
SoftwareSerial bluetooth(rxPin, txPin);
 
String message; //string that stores the incoming message
const int Led = 13;
 
void setup()
{
  Serial.begin(9600); //set baud rate
  bluetooth.begin(9600); //set baud rate
  pinMode(Led,OUTPUT);
}
 
void loop()
{
  while(bluetooth.available()){
    message+=char(bluetooth.read());
  }
  if(!bluetooth.available())
  {
    if(message!="")
    {//if data is available
      if(message == "H"){
          digitalWrite(Led, HIGH);
          Serial.println("Led ON"); //show the data
          delay(20);
          message=""; //clear the data
       }
       else if(message == "L"){
          digitalWrite(Led, LOW);
          Serial.println("Led OFF"); //show the data
          delay(20);
          message=""; //clear the data
       }
    }
  }
}

Questo è il codice che sto usando

Intanto, come ti ho detto nel post #3, usa per rxPin il 10 e per il txPin il 11 … dopo di che, hai verificato di aver incrociato i collegamenti come ti ho spiegato?

Altra cosa, per diagnostica, stampa quello che ricevi, così vedi se arriva quello che ti aspetti.

Infine … perché ustilizzi la classe “String” ? ? ? … come avrò scritto decine e decine di volte su questo forum, NON sei su un PC dove c’è un sistema operativo ed un “garbage collector”, sei su una piccola MCU con solo 2KBytes di SRAM, dove devi fare tutto tu e dove usare la classe “String”, a causa dell’allocazione e riallocazione dinamica della memoria, porta quasi sempre … a grossi problemi e sicuri mal di testa !!! :smiling_imp:

Impara ad usare le stringhe classiche del C … ovvero semplici array di char terminati dal carattere null (0x00) e le funzioni che trovi nella libreria standard (… che, oltretutto, è automaticamente inclusa dal IDE) AVR libc ed, in particolare, quanto è in <string.h>

Guglielmo

Sto usando ArduinoRC su Android. Mi dice connecting e si connette,ma il modulo fa 3 lampeggi e si spegne..se mando High o Low, non risponde. Sto usando RX e TX -> 10 e 11

gpb01:
Infine … perché ustilizzi la classe “String” ? ? ? …

Si, vero, è QUELLA pagina di Caccavale che fa sta caz… sciocchezza. Ma direi di affrontare un problema alla volta, per PRIMA cosa deve verificare di aver fatto bene i collegamenti.

marcas97:
Sto usando ArduinoRC su Android. Mi dice connecting e si connette,ma il modulo fa 3 lampeggi e si spegne…se mando High o Low, non risponde. Sto usando RX e TX → 10 e 11

Ma quale app esattamente usi, visto che ce n’è più di una con quel nome? Metti il link diretto all’app che usi.
E poi con l’app tu quali caratteri mandi esattamente per fare High e Low?
Io per sperimentare usavo QUESTA app…

I collegamenti sono giusti e l'APP è la stessa usata da te

marcas97:
I collegamenti sono giusti e l'APP è la stessa usata da te

Tre cose:

  1. Per i collegamenti veramente tu hai scritto prima una cosa diversa, e NON erano "giusti". Li hai rivisti quindi?
  2. Anche per l'App tu ne hai citata una (ArduinoRC) che è diversa da quella che ti ho indicato io (Arduino bluetooth controller) la quale tra l'altro è di fatto una sorta di "terminale" seriale su bluetooth.
  3. Non hai risposto alla domanda: "con l'app tu quali caratteri mandi esattamente per fare High e Low?"