[RISOLTO] Modulo bluetooth HC-06 non funziona

Salve a tutti,

di recente ho acquistato un arduino, una piastra da 8 relè e un modulo bluetooth HC-06.

L'arduino e la piastra relè funzionano regolarmente.

Il modulo bluetooth non tanto bene: riesco a fare l'accoppiamento dal mio cell, trovando "HC-06", ma non riesco dal monitor seriale dell'IDE arduino a dare comandi o ricevere risposte.

In allegato ci sono le foto che mostrano i vari collegamenti fatti, e lo sketch caricato attualmente sull'arduino.

Praticamente se dal monitor seriale scrivo "AT", non ricevo nessuna risposta.

Cosa posso fare?

Grazie

Ho lo stesso problema con HC-05. Riesco a farlo funzionare, inviare e ricevere, ma non riesco a ricevere risposta ai comandi AT.

Ho seguto questo tutorial How to set AT Command mode for HC-05 Bluetooth module arduino 2017 - YouTube, cambando solo i pin RX e TX (i miei sono 2 e 3). Non riescoa ricevere risposta.

L'unica cosa che funziona è l'entrata in modalità AT, ovvero led del BT che lampeggia lentamente.

Io ho provato anche ad invertire i pin, ma niente.

Il lampeggio del led rosso sul modulo è sempre lo stesso.

Immagino abbiate provato con un semplice programmino come questo?
Verificate i pin.

#include <SoftwareSerial.h>

#define  BT_RX 10 // RX PIN riceve
#define  BT_TX 11 // TX PIN trasmette

SoftwareSerial btSerial(BT_RX, BT_TX);

void setup() {
  Serial.begin(9600);
  btSerial.begin(9600);
  
  Serial.println("--- Terminale AT ---");
  Serial.println("");
}

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

inoltre avete verificato che i segnali siano incrociati?

HC-05 TX ----> Arduino RX (SoftwareSerial)
HC-05 RX <---- Arduino TX (SoftwareSerial)

inoltre avete provato ad impostare il Monitor seriale in modo che invii "CR+LF"?

Federico

Il modulo risponde hai comandi AT SOLO quando è in modalità "comandi AT"(... modalità in cui, oltretutto, di default, colloquia a differente velocità) ... se non studi i datasheet e non vedi come si fa ad entrare in tale modalità ... difficilmente riceverai mai risposta ... ::slight_smile:

Guglielmo

gpb01:
Il modulo risponde hai comandi AT SOLO quando è in modalità "comandi AT"...

grazie, mi devo ricordare di metterlo nella mia lista verifiche :slight_smile:
però, se non ricordo male, HC-06 (che non compro più), è sempre in modalità AT se non accoppiato.

Federico

Federico66:
però, se non ricordo male, HC-06 (che non compro più), è sempre in modalità AT se non accoppiato.

Guarda, onestamente NON me lo ricordo perché NON uso mai gli HC-06 (che costano come gli HC-05 e fanno la metà delle cose) ... allego i datasheet ... dategli un occhiata :wink:
Guglielmo

HC-05 datasheet 201104 revised.pdf (634 KB)

HC-06 datasheet 201104 revised.pdf (757 KB)

HC-05 AT Commamd.pdf (83.7 KB)

... HC-06, capitolo 9, entra in modalità AT all'accensione se NON è accoppiato e resta in attesa di un comando AT per UN SECONDO, dopo di che esce. Se lo si vuole tenere in modalità AT occorre inviare "AT" almeno ogni secondo :wink:

Guglielmo

gpb01:
... HC-06, capitolo 9, entra in modalità AT all'accensione se NON è accoppiato e resta in attesa di un comando AT per UN SECONDO, dopo di che esce. Se lo si vuole tenere in modalità AT occorre inviare "AT" almeno ogni secondo :wink:

Infatti, adesso ricordo le maledizioni, poi ho scoperto, grazie a te gli HC-05 :wink:

Federico

Il mio sketch che attualmente risiede nell'arduino è in allegato al primo messaggio.

Inoltre, c'è un modo (quindi uno sketch) che mi tiene la modalità AT accesa sull'HC-06?

Devo solo vedere se funziona, impostare nome dispositivo e pin.

Purtroppo non sapevo che HC-06 avesse problemi, ma ora quello ho e mi devo arrangiare.

Grazie

dam034:
Devo solo vedere se funziona, impostare nome dispositivo e pin.
Purtroppo non sapevo che HC-06 avesse problemi, ma ora quello ho e mi devo arrangiare.

Non è che ha problemi, ma è un po' rognoso, inizialmente, se devi usare i comandi AT per configurarlo, ed inoltre è solo slave, cioè non puoi configuralo come master; come dice @Guglielmo, visto che HC-05 (master/slave) costa +o- uguale, conviene prendere quello.
Io, ho commesso lo stesso "errore" iniziale, ma lo uso comunque da vari mesi senza problemi.

Come dice il datasheet

The way to the AT command mode: supply power to the module, it will enter to the AT mode if it
needn’t pair. The interval of command is about 1 second.
Default parameter: Baud rate:9600N81, ID: linvor, Password:1234

quindi perchè non provare a farlo fare ad Arduino, io proverei così:

(NON testato)

#include <SoftwareSerial.h>

#define  BT_RX 10 // RX PIN riceve
#define  BT_TX 11 // TX PIN trasmette

SoftwareSerial btSerial(BT_RX, BT_TX);

char pin[5] = "0000";
char nome[10] = "NOME";

void setup() {
  Serial.begin(9600);
  btSerial.begin(9600);

  //Ping
  btSerial.println("AT");
  delay(5);
  if (btSerial.available()) {
    while (btSerial.available()) {
      Serial.write(btSerial.read())
      delay(5);
    }
  }
  delay(100);

  //Cambia nome
  btSerial.print("AT+NAME");
  btSerial.println(nome);
  delay(5);
  if (btSerial.available()) {
    while (btSerial.available()) {
      Serial.write(btSerial.read())
      delay(5);
    }
  }
  delay(100);

  //Cambia password
  btSerial.print("AT+PIN");
  btSerial.println(pin)
  delay(5);
  if (btSerial.available()) {
    while (btSerial.available()) {
      Serial.write(btSerial.read())
      delay(5);
    }
  }
  delay(100);
}

void loop() {}

Ricordati di verificare i pin e configurare a 9600 baud il monitor seriale,
Spero funzioni, perchè non ricordo come ho fatto io!

Federico

Nella sezione Megatopic c'e questo [HOWTO] Guida (più o meno) completa all'utilizzo di Moduli Bluetooth - Megatopic - Arduino Forum, e a quanto pare nel mio caso dovevo impostare i i caratteri di fine riga da monitor seriale.. in basso a destra. resta il fatto che mi risponde in byte e non a lettere come negli esempi.

EDIT: risolto cosi:

#include <SoftwareSerial.h>

#define bluetoothSerial_TX_PIN 3
#define bluetoothSerial_RX_PIN 2

SoftwareSerial bluetoothSerial =  SoftwareSerial(bluetoothSerial_RX_PIN, bluetoothSerial_TX_PIN);


void setup() {
  pinMode(9, OUTPUT);
  digitalWrite(9, HIGH);
  Serial.begin(9600);
  bluetoothSerial.begin(38400);
  
  Serial.println("Enter AT commands:");

}

void loop() {

  if (bluetoothSerial.available() > 0) {
    Serial.println(bluetoothSerial.readString());

  }

  if (Serial.available() > 0) {
    bluetoothSerial.write(Serial.read());
  }
}

mattoide:
... resta il fatto che mi risponde in byte e non a lettere come negli esempi.

Ehhhhh ? ? ? :o :o :o

Ma ti rendi conto che quelle che tu chiami lettere sono solo delle convenzioni e che, secondo uno standard, normalmente ASCII, ad ogni numero corrisponde una lettera? ... Esempio la lettera 'A' è il byte che vale, in esadecimale 0x41, in ottale 0101 ed in decimale 65 ... ma sempre la setssa cosa è !!!

Ora, se ti studi la classe Serial ti accorgi che sta a te scegliere la chiamata più opportuna per vedere quel byte visulalizzato come un numero o come un carattere!

Guglielmo

Scusa, sto lavorando e ho scritto di fretta e un po a cane :smiley: era solo per dire che nell'esempio (anzi in tutti gli esempi) fa vedere sempre che risponde con il codice ascii anche se usa la .read().

Comunque @dam034 a me era il carattere di terminazione da impostare da monitor seriale, facci sapere

mattoide:
Nella sezione Megatopic c'e questo https://forum.arduino.cc/index.php?topic=104903.0, e a quanto pare nel mio caso dovevo impostare i i caratteri di fine riga da monitor seriale.. in basso a destra.

...è cosa buona e giusta cercare nel forum, andrebbe sempre fatto prima di chiedere, ma se chiedi, devi leggere le risposte (#3) ... :wink:

Federico66:
inoltre avete provato ad impostare il Monitor seriale in modo che invii "CR+LF"?

Federico

mattoide:
... era solo per dire che nell'esempio (anzi in tutti gli esempi) fa vedere sempre che risponde con il codice ascii anche se usa la .read(). ...

Hai letto bene quanto ho scritto? ...

gpb01:
Ora, se ti studi la classe Serial ti accorgi che sta a te scegliere la chiamata più opportuna per vedere quel byte visualizzato come un numero o come un carattere!

Guglielmo

Allora, dato che non ho capito granché, e che sono alle prime armi con arduino, difficilmente riuscirò a fare qualcosa per configurare il modulo HC-06.

Ho capito che anche con la funzione read() rimane sempre l'ASCII, ma il resto no.

A me serve configurare il nome del dispositivo bluetooth e il pin, anche con uno sketch adatto, invece di usare il monitor seriale.

Dopo, vorrei fare un'altra cosa (se possibile): usare arduino e HC-06 come ponte di collegamento tra monitor seriale e telefonino, in modo tale da avere una cosa del tipo:

Telefonino (bluetooth) <----> HC-06 <----> arduino <----> computer (monitor seriale)

Tramite app sul cell (che so fare) voglio inviare una stringa, e visualizzarla nel monitor seriale del pc. Ma questo è da fare dopo, quando prendo un po' più pratica.

Per ora è possibile avere uno sketch che configura il nome del dispositivo bluetooth e il pin?

Grazie

dam034:
Allora, dato che non ho capito granché, e che sono alle prime armi con arduino, difficilmente riuscirò a fare qualcosa per configurare il modulo HC-06.
...
Per ora è possibile avere uno sketch che configura il nome del dispositivo bluetooth e il pin?

...ma li leggete i post o oggi sono invisibile!!!

Lo hai letto il mio post #10?
Hai provato se funziona?

Federico

@Federico66 e @gpb01 chiedo scusa, ero di corsa e ho letto e risposto di corsa.

@dam034 se anche con le guide non riesci, scrivimi in privato, che in questi giorni ho fatto quasi solo questo e mi farebbe piacere dare una mano. Sarebbe anche un modo per me per migliorare quello che ho capito :slight_smile:

Ho usato il codice del post #10, con qualche correzione, in quanto mancava qualche punto e virgola:

#include <SoftwareSerial.h>

#define  BT_RX 10 // RX PIN riceve
#define  BT_TX 11 // TX PIN trasmette

SoftwareSerial btSerial(BT_RX, BT_TX);

char pin[5] = "2222";
char nome[10] = "MPro";

void setup() {
  Serial.begin(9600);
  btSerial.begin(9600);

  //Ping
  btSerial.println("AT");
  delay(5);
  if (btSerial.available()) {
    while (btSerial.available()) {
      Serial.write(btSerial.read());
      delay(5);
    }
  }
  delay(100);

  //Cambia nome
  btSerial.print("AT+NAME");
  btSerial.println(nome);
  delay(5);
  if (btSerial.available()) {
    while (btSerial.available()) {
      Serial.write(btSerial.read());
      delay(5);
    }
  }
  delay(100);

  //Cambia password
  btSerial.print("AT+PIN");
  btSerial.println(pin);
  delay(5);
  if (btSerial.available()) {
    while (btSerial.available()) {
      Serial.write(btSerial.read());
      delay(5);
    }
  }
  delay(100);
}

void loop() {
  
  }

E ho anche provato ad invertire i numeri 10 e 11, ma non va niente.

Dal cell continua a vedere il nome "HC-06" e il pin è sempre 1234.