Ciao a tutti,
Sto cercando di usare hc-05 o hc-06 per la comunicazione bluetooth con arduino pro micro.
Ho collegato tutto correttamente utilizzando la libreria SoftwareSerial.h:
RX (pin 7) Arduino -> TX hc
TX (pin 3) Arduino -> RX hc
Ho anche provato a collegarmi con un terminale bluetooth da android, il risultato è che hc-05 riesce a scrivere correttamente sul terminare con il comando:
hc05.println("prova");
ma quando mando valori dal terminale bluethooth android ad hc-05 non ricevo nulla su arduino.
In particolare i comandi:
non funzionano.
Ho la sensazione che arduino non capti i segnali lanciati sul tx di hc-05, quindi sul pin 7 di arduino.
Ho provato in AT mode prima con boundrate 38400 e poi con tutti gli altri possibili ma niente.
Il problema vale sia per hc-05 che per hc-06, ho provato più dispositivi.
Come faccio a verificare che effettivamente il segnare sul pin 7 del mio arduino stia arrivando? Se mi mettessi in ascolto con un digitalread() sul pin 7 cosa mi dovrei aspettare? ho già provato e ricevo solo 1.
Nel caso il problema sia proprio questo come immagino, quale potrebbe essere la corretta soluzione?
Grazie in anticipo per il vostro tempo, spero sia stato chiaro. In caso di dubbi chiedete pure e cercherò di essere quanto più espressivo possibile.
/**********************************************
* Load this sketch to communicate with *
* hc-06 or hc-05 modules in AT mode *
* *
* EsperienzeElettroniche 2020 *
**********************************************/
#include <SoftwareSerial.h>
/* Pins used for software serial connection */
#define rxPin 7
#define txPin 3
/* Try other values if it doesn't work */
#define baudrate 38400
SoftwareSerial hc06(rxPin, txPin);
void setup() {
Serial.begin(baudrate);
hc06.begin(baudrate);
}
void loop() {
if(hc06.available()){
Serial.write(hc06.read());
}
if(Serial.available()){
hc06.write(Serial.read());
}
}
invece per comunicare con altro dispositivo bluetooth il seguente:
/**********************************************
* Control an LED using bluetooth *
* serial commands. *
* 1 turns LED on, 0 turns it off *
* *
* EsperienzeElettroniche 2020 *
**********************************************/
#include <SoftwareSerial.h>
/* Pins used for software serial connection */
#define rxPin 7
#define txPin 3
/* Set serial connection speed */
#define baudrate 57600
#define ledPin 8
SoftwareSerial hc06(rxPin, txPin);
int counter=0;
char data;
void setup() {
hc06.begin(baudrate);
hc06.println("********************************");
hc06.println(" Bluetooth led controller");
hc06.println("Esperienze Elettroniche 2022");
hc06.println("********************************");
pinMode(ledPin, OUTPUT);
}
void loop() {
while(!hc06.available());
data=hc06.read();
if(data == '1'){
digitalWrite(ledPin, 1);
hc06.println("Led on");
}
if(data == '0'){
digitalWrite(ledPin, 0);
hc06.println("Led off");
}
}
Compila tutto correttamente.
Il mio circuito è come il seguente solo che invece del collegamento TX di hc-05 e D2 è fatto con TX di hc-05 e D7 e il 5V è preso direttamente da arduino:
Il motivo è perchè il primo riguarda la comunicazione in AT mode che avviene a 38400 invece il secondo riguarda la comunicazione con altri dispositivi che di default avviene a 9600, infatti con 57600 non funziona, funziona solo con 9600.
però il problema è un altro, come posso fare a capire che la comunicazione TX da hc-05 e RX di arduino su pin 7 stia funzionando?
Nel vostro codice state utilizzando 57600 per configurare il tasso di comunicazione con il vostro HC-06. Se non è stato preconfigurato in precedenza per funzionare a questa velocità, la comunicazione con l'HC-06 sarà impossibile. (La velocità predefinita è di 9600 bps)