Connessione Bluetooth 2 Arduino

Salve a tutti;
sicuramente la mia è una domanda ripetitiva, sono due giorni che cerco su internet e sul forum delle risposte, ho seguito molte guide ma a quanto pare mi rimane il problema:

Ho un Arduino UNO e un Arduino MEGA 2560, devo fargli scambiare dei dati fra loro tramite Bluetooth, essenzialmente ho collegato l'UNO ad una HC-05 tramite cavi (con alcuni sketch anche la KEY, con altri invece ho usato il pulsatino per entrare in AT mode) , questo funziona alla perfezione, vado sul serial monitor e riceve tutti i comandi AT, tranne quando arrivo all'AT+init, lì il led dell'HC-05 lampeggia velocemente e non riceve più comandi.

Ho letto su un vostro topic di seguire questa guida: Bluetooth HC05- How to pair two modules | alselectro

Quì è sorto il secondo problema, collegando come dice l'Arduino MEGA ad una HC-05 sempre, arrivato sul serial monitor del programma Tera Term (ma anche su quello del programma Arduino 1.0.1 base) non prende nessun comando AT e questo persiste anche con altre guide; la cosa mi serve per un progetto lavorativo, quindi sarei davvero felice se qualcuno mi aiutasse a risolvere o se avesse qualche idea a riguardo, grazie mille!

PS.: E' il primo topic che faccio, se servono più dettagli o le guide/sketch che ho seguito, ditemelo e posto tutto, grazie ancora!

LordProtoMan:
... quello del programma Arduino 1.0.1 base ...

Scusa ? ? ? :o :o :o ... ma di cosa stai parlando ? ? ? Cosa è la versione 1.0.1 ? ? ?

Spero bene che tu abbia installato l'ultima versione dell'IDE Arduino (1.8.6) e che le prove tu le faccia con il Serial Monitor di detta versione ... ::slight_smile:

Guglielmo

... detto questo, come hai collegato i moduli BT ? A quali pin ? Singolarmente (ovvero NON colegati in master-slave) ma come due "slave" riesci ad utilizzarli magari collegadoti con uno smatphone ?

Perché è del tutto inutile che tu cechi di fare le cose più complicate (master-slave) se non riesci neanche a far funzionare le cose base (slave ed esercizio per echo dei caratteri ricevuti) ... ::slight_smile:

Guglielmo

gpb01:
Scusa ? ? ? :o :o :o ... ma di cosa stai parlando ? ? ? Cosa è la versione 1.0.1 ? ? ?

Spero bene che tu abbia installato l'ultima versione dell'IDE Arduino (1.8.6) e che le prove tu le faccia con il Serial Monitor di detta versione ... ::slight_smile:

Guglielmo

Okay, scaricherò la versione da te detta, avevo preso la 1.0.1 perchè vedevo aveva la maggior parte delle compatibilità ma a quanto pare non è stata una buona idea, ahah!
Dici potrebbe essere legato anche a questo il mio problema?

gpb01:
... detto questo, come hai collegato i moduli BT ? A quali pin ? Singolarmente (ovvero NON colegati in master-slave) ma come due "slave" riesci ad utilizzarli magari collegadoti con uno smatphone ?

Perché è del tutto inutile che tu cechi di fare le cose più complicate (master-slave) se non riesci neanche a far funzionare le cose base (slave ed esercizio per echo dei caratteri ricevuti) ... ::slight_smile:

Guglielmo

gpb01:
... detto questo, come hai collegato i moduli BT ? A quali pin ? Singolarmente (ovvero NON colegati in master-slave) ma come due "slave" riesci ad utilizzarli magari collegadoti con uno smatphone ?

Perché è del tutto inutile che tu cechi di fare le cose più complicate (master-slave) se non riesci neanche a far funzionare le cose base (slave ed esercizio per echo dei caratteri ricevuti) ... ::slight_smile:

Guglielmo

Sì, quel test l'ho già fatto giorni fa, collegandomi al mio smartphone con l'Arduino UNO, accendendo un LED tramite Bluetooth, ecc... i moduli BT all'Arduino UNO (Slave) sono collegati:

BT RX - RX
BT TX - TX
GND - GND
VCC - 5v
KEY - 3.3v

Mentre il BT del MEGA (Master, ma che non riesco a farlo andare):

BT RX - TX
BT TX - RX
GND - GND
VCC - 5v
KEY - 3.3 (oppure niente KEY e uso il pulsantino dell'HC-05)

... se chiedo i pin a cui sono collegati mi devi mettere il NUMERO del pin altrimenti che vuoi che capisco ?

Anche quello che dovrà essere in futuro master, lo devi prima provare come slave e vedere se riesci a parlarci.

Guglielmo

gpb01:
... se chiedo i pin a cui sono collegati mi devi mettere il NUMERO del pin altrimenti che vuoi che capisco ?

Anche quello che dovrà essere in futuro master, lo devi prima provare come slave e vedere se riesci a parlarci.

Guglielmo

Hai ragione anche tu, perdonami;

L'UNO (Slave) :

BT RX - Pin 0 (RX)
BT TX - Pin 1 (TX)
GND - GND (Sotto il pin dei 5v)
VCC - 5v
EN (KEY) - 3.3v

Il MEGA (futuro Master) :

BT RX - Pin 18 (TX1)
BT TX - Pin 17 (RX1)
GND - GND (Sopra al pin 13)
VCC - 5v
EN (KEY) - 3.3v

Questi collegamenti sono stati fatti seguendo questa guida: Bluetooth HC05- How to pair two modules | alselectro

Intanto, se vuoi poter fare un "debug" decente, dimenticati di usare i pin 0 ed 1 (... che, per di più, spesso, con gli HC-05, danno anche problemi) ed usa, sulla UNO, una seriale virtuale creata con la libreria SoftwareSerial (es. 10 RX e 11 TX). In questo modo la porta USB (che è collegata ai pin 0 ed 1) resta libera e puoi fare il debug.

Sulla MEGA hai proprio sbagliato pin ... la porta Serial1 ha il RX è il pin 19 ed il TX è il 18 ... tu hai mischiato i pin di due porte seriali differenti (Serial2, RX è il 17 e TX è il 16).

Guglielmo

gpb01:
Intanto, se vuoi poter fare un "debug" decente, dimenticati di usare i pin 0 ed 1 (... che, per di più, spesso, con gli HC-05, danno anche problemi) ed usa, sulla UNO, una seriale virtuale creata con la libreria SoftwareSerial (es. 10 RX e 11 TX). In questo modo la porta USB (che è collegata ai pin 0 ed 1) resta libera e puoi fare il debug.

Sulla MEGA hai proprio sbagliato pin ... la porta Serial1 ha il RX è il pin 19 ed il TX è il 18 ... tu hai mischiato i pin di due porte seriali differenti (Serial2, RX è il 17 e TX è il 16).

Guglielmo

Dunque, per il SofwareSerial sto dando un'occhiata, ma devo capire bene come si usa, serve per poter usare qualsiasi Pin da come ho capito; riguardo la MEGA ho sbagliato io a scrivere, sto usando esattamente i pin 18 e 19

Ok, hai provato ad avere sulla MEGA il modulo configurato come SLAVE ed a vedere se il classico programmino di echo funziona ?

Guglielmo

gpb01:
Ok, hai provato ad avere sulla MEGA il modulo configurato come SLAVE ed a vedere se il classico programmino di echo funziona ?

Guglielmo

Sì, ho provato sia col serial monitor dell'applicazione Arduino Nightly, sia con Tera Term, in entrambi i casi al comando AT non ho risposta.

Mi chiedevo, secondo la guida che sto seguendo mi ha fatto mettere uno sketch vuoto per entrare in modalità AT, è corretto?
Inoltre qual'è la procedura migliore per entrare in questa modalità (premendo il tastino della HC-05 e poi collegare il VCC, ecc... ) ?

Ho risolto usando i pin RX0 e TX1 sia della UNO che della MEGA; ho anche usato SoftwareSerial per provare a cambiare i RX e TX da usare ma senza successo, non mi si avvia la AT mode, ovvero il serial monitor non risponde al comando AT.

Ho collegato in questo modo, usando un Arduino UNO:

BT RX - pin 3
BT TX - pin 2
GND - GND
VCC - 5v
EN - 3.3v

Utilizzando questo sketch:

/*
  Software serial multple serial test
 
 Receives from the hardware serial, sends to software serial.
 Receives from software serial, sends to hardware serial.
 
 The circuit: 
 * RX is digital pin 2 (connect to TX of other device)
 * TX is digital pin 3 (connect to RX of other device)
 
 created back in the mists of time
 modified 9 Apr 2012
 by Tom Igoe
 based on Mikal Hart's example
 
 This example code is in the public domain.
 
 */
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup()  
{
 // Open serial communications and wait for port to open:
  Serial.begin(57600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  
  Serial.println("Goodnight moon!");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);
  mySerial.println("Hello, world?");
}

void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

mySerial.begin(4800);

a 4800? ma sei sicuro che il bt sia settato così?

Patrick_M:
mySerial.begin(4800);

a 4800? ma sei sicuro che il bt sia settato così?

Infatti mi sembrava strano ma per sicurezza ho provato sul serial monitor sia a 4800, che a 9600 che a 38400 (cambiandolo anche nello sketch ovviamente) perchè lo sketch non l'ho fatto io , a quanto andrebbe impostato?

se non sbaglio i moduli bt di default sono settati a 115200 comunque provando con tera term cambi la velocità fino a quando non ti risponde...

Patrick_M:
se non sbaglio i moduli bt di default sono settati a 115200 comunque provando con tera term cambi la velocità fino a quando non ti risponde...

Di base gli HC-05 arrivano settati come slave e funzionanti a 9600 bps.

Guglielmo

allora è strano perchè a 9600 l'OP ha detto di aver provato...
anche se da quello che ho letto il collegamento era stato fatto
rx-->rx
tx-->tx

Ovviamente il collegamento deve essere ...

RX bluetooth <--- TX Arduino
TX bluetooth ---> RX Arduino
GND bluetooth <---> GND Arduino
Vcc bluetooth <---> +5V Arduino

... sempre che, la basetta adattatrice dove sono montati gli HC-05 abbia i convertitori di livello (il modulo HC-05 di per se è un modulo a 3.3V, ma le basette su cui lo vendono saldato normalmente ne permettono l'uso a 5V ... dipende da cosa ha comprato l'OP).

Guglielmo

... per capirci:

Questo è il modulo HC-05 come esce di fabbrica:

Queste sono le basette che normalmente vendono con il modulo montato (e con gli adattatori di livello):

Guglielmo

Io ho provato sia a 9600, sia a 115200, e sia sulla board UNO che MEGA non va in nessun caso (nemmeno con gli altri valori bps) , mentre se uso i pin 0 e 1 (RX e TX) va perfettamente ad entrambe; mi veniva quindi il dubbio che sia un errore di sketch

Guarda, per fare le prove usa questo programma che usano tutti e che è più che 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());
}

Il modulo lo devi connetetre ai due pin 10 e 11 (il 10 è RX su Arduino quindi ci devi collegare il TX del BT e l'11 è il TX di Arduino quindi ci devi collegare il RX del BT).

Quello che invii dal monitor seriale viene inviato al modulo BT, quello che il modulo BT invia viene visualizzato su monitor seriale.

Ricorda solo che in modalità "Comandi AT" il modulo lavora a 38'400 (... e quindi bisogna modificare la velocità della SoftwareSerial) mentre in modalità "normale" a 9'600.

Guglielmo