[HOWTO] Guida (più o meno) completa all'utilizzo di Moduli Bluetooth

TESTATO :slight_smile:

Non ho trovato per ora nessuna differenza tra HC-06 ed il mio HC-07, se non il fatto che il chip e' unico, ed e' un diverso modello.
Il tutto e' sottolineato dalla versione che risulta essere "Linvor V1.6", probabilmente un'aggiornamento soltanto tecnico, per supportare il nuovo chip.

Cosa aggiungerei quindi alla guida per quanto riguarda HC06/07 :

  • Bluetooth name standard: linvor
  • Possibilita' di settaggio della Parita'
    AT+PN -> None
    AT+PE -> Even
    AT+PO -> Odd
  • nelle versioni Master c'e' una funzione KEY (su pin 26) per cancellare il pairing, perche' questi moduli una volta che si sono accoppiati non si lasciano piu'. Solo mettendo ad High (+3,3V) questo pin il modulo inizia una nuova ricerca, altrimenti cerca solo e soltanto il modulo accoppiato.

in generale per tutti i moduli aggiungerei questo:

  • Il Reset pin 11 puo' essere lasciato float senza problemi, perche' ha una pullup interna

Spero che sia questi miei test, che le note precedenti, possano essere utili alla causa.
tanto era dovuto, porgo distinti saluti :slight_smile:

Ciao,
grazie dei feedback.

@Testato:
il chipset è diverso, e anche se dovrebbe rientrare nella serie BC4, vorrei approfondire similitudini e differenze rispetto agli HC05 e HC06.
Quindi sto rimuovendo il modulo HC07 dalla guida, fino alla raccolta di maggiori informazioni.

EDIT: leggo nel mentre la tua risposta

Cosa aggiungerei quindi alla guida per quanto riguarda HC06/07 :

  • Bluetooth name standard: linvor

pure pr HC07? :stuck_out_tongue:

  • Possibilita' di settaggio della Parita'
    AT+PN -> None
    AT+PE -> Even
    AT+PO -> Odd

questo non c'è su HC06

  • nelle versioni Master c'e' una funzione KEY (su pin 26) per cancellare il pairing, perche' questi moduli una volta che si sono accoppiati non si lasciano piu'.

ma la modalità di HC07 non è aggiornabile via AT?

Solo mettendo ad High (+3,3V) questo pin il modulo inizia una nuova ricerca, altrimenti cerca solo e soltanto il modulo accoppiato.

relativamente agli HC06 non ho esperienza, avendo solo slave.
Per quel che riguarda HC05, non ci son questi problemi :grin:

in generale per tutti i moduli aggiungerei questo:

  • Il Reset pin 11 puo' essere lasciato float senza problemi, perche' ha una pullup interna

certo, qualche post fa ho ammesso di aver trascurato una descrizione approdondita dei moduli, che ho cmq pronta - si parla di consumi, classe (e quindi portata), etc

Poi:

  • perche' non fai un unico PDF con i vari capitoli, invece di tanti pdf separati ?

li ho lavorati separatamente, e così li ho tenuti per comodità prima di tutto mia, poi per permettere di scaricare solo la parte di interesse.
In realtà sto spostando le guide su blog, in modo da gestire aggiornamenti più velocemente, e lì manterranno tale divisione.

  • lo schema in nero nella pirma pagina e' inguardabile, puoi invertirlo con un programma di grafica se non hai il file eagle

l'ho rimpicciolito, è uno degli schemi distribuiti dai vendor.
Posso invertire nero con bianco, anche se la resa dubito sarà buona , ma provo a breve.

  • quando scrivi: inviare LF e CR (\r\n), lo cambierei in "inviare CR e LF (\r\n)"

hai pienamente ragione, me lo son perso nella rilettura (almeno, ne ho trovato solo 1)!

  • errore a pagina8 programmazione: per ottenerne la versione di fw (comando: AT+NAME?\r\n) mettere VERSION al posto di NAME

altra cosa persa! Segnato e pronto all'aggiornamento!

  • e' da chiarire quando dici che la velocita' standard degli HC05 e' 38400, in realta' la velocita' di comunicazione settata di fabbrica e' uguale per tutti i moduli e cioe' 9600, e' la velocita' da usare per la programmazione AT che e' 38400. Per spiegarmi meglio, se tu prendessi un modulo HC05 e lo lasciassi cosi' come da fabbrica, per collegarti dovresti usare 9600.

uhm questa è da approfondire. La velocità di default è quasi per tutti 9600 - quella dell' HC05, avendoci fatto parecchie modifiche, non me la ricordavo e avevo ritrovato il datasheet del venditore, in cui era segnato appunto 38400.

In realtà, cambiando baudrate, se reimpostavo la seriale a cui era connesso il modulo (es. con adattatore usb2serial), mettendo la nuova velocità la comunicazione avveniva senza problemi. Viceversa no.
Quindi quel che ne deduco è che esiste una sola velocità, che vale sia per la seriale via bt che quella "fisica".

Infine, in risposta alle considerazioni condivise con dab77, ho aggiornato la breakout base, che allego in pdf.
Sostanzialmente ho eliminato dal connettore il pin AT; la programmazione viene gestita con un jumper sulla board stessa.
Inoltre, ipotizzando di usare la board indistintamente con HC05 e HC06, ho messo un solder jumper per gestire il diverso pin del led pairing.

Metto qui pure il link del repository di queste board:

la v06 è quella di cui parlo sopra, e che è allegata come pdf.
Ce ne sono poi altre spiegate nel readme, in particolare la v01 è una breakout completa (ovvero, tutti i pin del modulo vanno all' header).

Altra eventuale modifica è gestire anche i pin CTS e RTS, in modo che il modulo possa essere utilizzato anche per l'upload di sketch su Arduino :wink:

v06.pdf (11.9 KB)

Ciao,
qui: controllare accensione led via bluetooth - #10 by pictux - Generale - Arduino Forum
primo abbozzo di tutorial (solo immagini e codice Arduino) per la creazione della prima App per Android con AppInventor

grazie dei feedback.

e' un piacere, anzi scusa se rispondo solo ora ma mi ero perso il topic

Quindi sto rimuovendo il modulo HC07 dalla guida, fino alla raccolta di maggiori informazioni.

Per quel che vale la mia opinione non sono daccordo, il mio HC07 ha funzionato grazie alla tua guida, differenze davvero non ce ne sono molte, cmq nessuna che giustifichi la rimozione dalla guida

Cosa aggiungerei quindi alla guida per quanto riguarda HC06/07 :

  • Bluetooth name standard: linvor
    pure pr HC07? :stuck_out_tongue:

yes, a conferma che e' tutto molto simile/uguale, hanno cambiato chip ma il sw e le funzioni restano

  • Possibilita' di settaggio della Parita'
    AT+PN -> None
    AT+PE -> Even
    AT+PO -> Odd

questo non c'è su HC06

Hai provato fisicamente ? ho trovato questa info proprio su test eseguiti sul 06, provandolo sul mio 07 ha funzionato, con AT+PN -> None (Risponde OK None)

  • nelle versioni Master c'e' una funzione KEY (su pin 26) per cancellare il pairing, perche' questi moduli una volta che si sono accoppiati non si lasciano piu'.
    ma la modalità di HC07 non è aggiornabile via AT?

per aggiornabile intendi "configurabile in master ?" no, si vendono gia' master o slave

Solo mettendo ad High (+3,3V) questo pin il modulo inizia una nuova ricerca, altrimenti cerca solo e soltanto il modulo accoppiato.
Per quel che riguarda HC05, non ci son questi problemi :grin:

Non e' un problema, e' una feature (secondo me), faccio un esempio, io ho un autoradio bluetooth, accoppiato al mio fidato androide, quando entro in macchina automaticamente si aggancia all'autoradio. Il bluetooth dell'autoradio cerca solo il mio cell, se entri tu con me ed hai il BT acceso l'autoradio non crea fastidio ad esempio chiedendoti se vuoi connetterti o no.

Altra eventuale modifica è gestire anche i pin CTS e RTS, in modo che il modulo possa essere utilizzato anche per l'upload di sketch su Arduino :wink:

Questa essere buonissima idea, ci ho pensato anche io, credi siano attivi questi segnali ? a noi basta solo RTS

Ciao a tutti.. Nonostante sia facile, io non ci ho capito na mazza!! ...Mi direste di preciso quali pin del BT vanno collegati ad arduino?? e come? Grazie...
(ho già provato a guardare il pdf... ma niente... : ( )
Dopo essermi inca**ato ho riletto il pdf e ho capito cosa collegare.. ho fatto le prime prove (dal serial monitor) e ho cambiato nome al modulo (é un HC-05) ho verificato la versione del fw ma non sono riuscito a cambiare il pin... come mai? Il comando l'ho copiato dal pdf.. AT+PINe pin nuovo ma niente...
Spero nel vostro aiuto : ) Grazie, come al solito... :slight_smile:

Ragazzi in qualche post di questo topic si parlava di AppInventor... Qualcuno mi saprebbe aiutare?? Non mi apre il Blocks Editor... Resta su "Scaricamento Applicazione" come posso fare?? Grazie!!

capitava anche a me, prova a reinstallare la versione di Java che hai, con la 6 funziona di sicuro con la 7 mi dava problemi

valvale97:
capitava anche a me, prova a reinstallare la versione di Java che hai, con la 6 funziona di sicuro con la 7 mi dava problemi

Ciao, ho gia provato a reinstallare.. dovrei provare con quella vecchia. Domani provo :wink: grazie!!
Ho provato con la 6 e ora va!! :smiley: Grazie!!

pitusso:

  • e' da chiarire quando dici che la velocita' standard degli HC05 e' 38400, in realta' la velocita' di comunicazione settata di fabbrica e' uguale per tutti i moduli e cioe' 9600, e' la velocita' da usare per la programmazione AT che e' 38400. Per spiegarmi meglio, se tu prendessi un modulo HC05 e lo lasciassi cosi' come da fabbrica, per collegarti dovresti usare 9600.

uhm questa è da approfondire. La velocità di default è quasi per tutti 9600 - quella dell' HC05, avendoci fatto parecchie modifiche, non me la ricordavo e avevo ritrovato il datasheet del venditore, in cui era segnato appunto 38400.

In realtà, cambiando baudrate, se reimpostavo la seriale a cui era connesso il modulo (es. con adattatore usb2serial), mettendo la nuova velocità la comunicazione avveniva senza problemi. Viceversa no.
Quindi quel che ne deduco è che esiste una sola velocità, che vale sia per la seriale via bt che quella "fisica".

Ho fatto dei test sulla velocita' delle due seriali.
Sul mio HC-07 si comporta cosi':

  • settata con comandi AT seriale modulo a 19200
  • lancio due terminali uno sulla Com seriale HW del modulo, e l'altro sulla seriale BT del modulo.
  • Se cambio le impostazioni del terminal usato sulla com hw, settandolo ad esempio 11500, non mi funziona piu' la connessione.
  • Se cambio le impostazioni del terminal usato sulla com bt, funziona.

Lato seriale BT si puo' usare indifferentemente qualsiasi velocita'. E' forse un comportamento comune per tutti gli aggeggi con profilo SPP ?

ciao a tutti, ho creato l'app consigliatami da pitusso seguendo una guida, lo scaricata nel cellulare, ho caricato lo sketch sull'arduino.
riesco a connettere il cellulare al modulo bluetooth pero' quando premo su led on non si accende il led 13.
non riesco a capire quale' il problrma, mi aiutate a capire cosa devo fare?!? appena comprato bisogna impostare via codice il modulo bluetooth? in modalita' master o slave forse?

con blueterm riesco solo a vedere cio' che viene scritto sul serial monitor non riesco a controllare niente.
ciao

Ciao
il tuo modulo dovrebbe già essere impostato a slave, altrimenti non lo vedresti neppure.

La connessione è corretta, secondo quanto riportato nella guida (magari posta pure una foto)?

in che senso e' corretta??

per connessione corretta intendi il circuito o la connesione via bluetooth??

Ciao, intendo il circuito, scusa per la poca chiarezza :stuck_out_tongue:

Cmq, il pairing da smartphone a modulo è avvenuto senza problemi?
Riesci a vedere e selezionare il modulo, usando "Choose BT device" nella app?

@pitusso
anche io ho provato con la tua app e facendo il serial print di quello che riceve l'arduino non ottengo nulla, però con Blueterm installato sul mio tablet riesco ad accendere e spegnere il led.

allora, il cicuiti mi sembra giusto, ho collegato il primo pin tx al rx e il secondo pin rx al tx. poi vcc al 3.3v e gnd a gnd. poi 2 pin a 2 led per vedere lo stato e il pio11(quello dell'AT) non lo collegato a niente.
il pairing avviene senza problemi anche perche' il secondo led non lampeggia piu' e il primo rima acceso fisso.
si riesco a vedere e selezionare il modulo, usando "Choose BT device" nella app.

io con blueterm riesco solo a leggere cio' che viene scritto su serialmonitor, ad esempio con lo sketch sotto riesco a vedere solo "arduino led on" e "arduino led off" .

void setup(){
  //make sure your bluesmirf module is
  //configured at 115200 baudrate setting
  Serial.begin(9600);
  //let's test arduino led
  pinMode(13, OUTPUT);
}

void loop(){
  if(Serial.available()){
    //read first characer received
    unsigned char charreceived = Serial.read();
    
    switch(charreceived){
      case 'a':
        digitalWrite(13, HIGH);
        Serial.println("Arduino Led On");
        break;
      case 'b':
        digitalWrite(13, LOW);
        Serial.println("Arduino Led Off");
        break;
      default:
        break;
    }
    
    //flush remaining characters
    //we only want first character
    Serial.flush();
  }
  delay(10);
}

Ciao,

facendo il serial print di quello che riceve l'arduino non ottengo nulla

l'applicazione prevede che, prima di accendere / spegnere il led, si effettui la connessione (pulsante in alto, e selezione device BT di cui preventivamente è stato fatto il pairing).

L'app è molto base ed è fatta per avvicinare i profani :stuck_out_tongue_closed_eyes:, percui non ci son controlli sull'effettiva connessione.
L'avvenuta connessione però è verificabile tramite il led di controllo sul modulo stesso.

@yassino
mi sa che stai facendo unpoca di confusione, hai preso lo sketch da qualche altra parte: quello non può funzionare con la app che ho postato :~
Inoltre ti consiglio di mettere perlomeno una resistenza da 2k2 tra rx del modulo e tx di arduino (come riportato nella parte di guida relativa alla connessione hw)

@pitusso
no no quello sketch che ho postato e' quello che ho usato con blueterm.
con l'app ho usato questo sketch:

 #include <NewSoftSerial.h>    //IDE <= 0023

const int rxPin = 2;
const int txPin = 3;
const int ledPin = 13;
byte btval = 0;


NewSoftSerial bluetooth(rxPin, txPin);   //IDE <= 0023

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

  pinMode(ledPin,OUTPUT);
}

  
void loop() {

  if (bluetooth.available()) {  
    btval = bluetooth.read();
    if (btval == 1) {
       digitalWrite(ledPin, HIGH);
    } else {
        digitalWrite(ledPin, LOW);
    }
  }
}

per rx del modulo ho usato un partitore di tensione.

Scusate se interrompo le spiegazioni a @yassino ...
Domanda: Ma tutti quei "pin" del modulo bluetooth cosa sono?? A parte, ovviamente, quelli che gia conosciamo/conosco: AT, alimentazione e tx/rx ...
Tutti gli altri pin a cosa servono??

il chip contiene un suo fw, ed in base a quello i pin sono questo o quello. Ci sono foto, mi sembra anche nella guida, che danno dei nomi ai pin, sembrano esserci ad esempio gli altri segnali seriali, mentre per tutti i pin IO dipende dal firmware.
Mi sembra di aver visto progetti che usano il solo modulo, programmato dall'utente. Forse ha un suo IDE gratuito ?