[RISOLTO] Problema BT Shield con Arduino Leonardo

Ciao a tutti,

espongo subito il mio problema:

Ho acquistato la shield BT dell’Itead (http://imall.iteadstudio.com/im120417006.html) da montare sul mio Arduino Leonardo.

Carico uno sketch di prova su Arduino:

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

void loop()
{
  Serial.println("Ciao");
  delay(1000);
}

Monto la shield e faccio il pairing con il mio notebook che ha BT interno.
Avvio la connessione con la porta seriale su COM9.

Apro PuTTY o TeraTerm imposto la COM9 e non riesco a vedere nulla.

Lo sketch provato senza shield sul monitor seriale di arduino funziona e mi scrive tanti “Ciao”.
Inserito lo shield il suo led di stato lampeggia in attesa di apertura della seriale. Connetto la porta dopo il pairing e il led di stato diventa fisso, mettendosi in ascolto. Ma non riesco a fare nient’altro.

Dove sbaglio?

Potrebbe essere colpa dello shield?
PS: è solo slave.

Grazie in anticipo per chiunque risponderà, sto impazzendo

Soluzione:
Come suggerito da dancol90 Arduino Leonardo possiede due seriali: una su USB e una sui pin 0/1(http://arduino.cc/en/Guide/ArduinoLeonardo#toc6).
Per utilizzare la seconda seriale si usa la classe Serial1 (http://arduino.cc/en/Reference/serial). Per cui lo sketch da provare diventa:

void setup()
{ 
 Serial1.begin(9600);
}

void loop()
{
  Serial1.println("Ciao");
  delay(1000);
}

Ciao
domanda base: sullo shield vedo degli switch relativi alla seriale.
Li hai spostati nella posizione "Board"?

Hai provato lo sketch che propongono di esempio?
ftp://imall.iteadstudio.com/IM120417006_BT_Shieldv2.1/DC_IM120417006_BT_Shield_Slave.zip

Ciao pitusso,

grazie innanzitutto per il supporto.

Gli switch li ho impostati:

  • 5v (alimentazione arduino)
  • 'To board' per inviare il flusso seriale alla board

Ho provato anche ad impostare 'To FT232' mettendo uno sketch vuoto su Leonardo per provare ad inviare comandi AT direttamente allo shield ma non ci sono riuscito.

Ho provato a cambiare il baudrate nello sketch senza successo. Ho provato anche diversi sketch fatti da me che scrivevano o leggevano dalla seriale, ma nulla.

La mappatura dei piedini è per Arduino Uno, ma da quanto ne so non dovrebbe essere differente dal Leonardo. Rimangono comunque scoperti da un lato due piedini (IOREF e vuoto) e dall'altro altri due (SCL e SDA) tutti non esistenti nell'UNO.

Stasera in ogni caso provo lo sketch di esempio che mi hai postato e ti faccio sapere.

Grazie ancora

Ciao!

La leonardo ha due seriali: quella via Usb, chiamata Serial, e quella "classica" hardware ai pin 0 e 1, chiamata Serial1.

Mentre il Serial monitor comunica con la seriale usb, per comunicare con periferiche esterne come i moduli bt, devi usare Serial1: http://arduino.cc/en/Guide/ArduinoLeonardo#toc6

Grazie mille Dancol, è proprio quello che cercavo e non riuscivo a trovare.
C'è una serie di link in loop che danno informazioni generica senza i dettagli.
Sono riuscito grazie a te a venirne a capo, almeno spero.

Stasera appena torno a casa provo a buttar su questo sketch e vi faccio sapere

void setup()
{ 
 Serial1.begin(9600);
}

void loop()
{
  Serial1.println("Ciao");
  delay(1000);
}

Provato lo sketch base e anche quello demo consigliato da pitusso, modificato come segue per compatibilità con Leonardo.

void setup()
{
  Serial1.begin(9600);
  
  while(1)
  {
    if (Serial1.available() > 0 )
    {
      Serial1.print("Communicazione pronta");
    }
  }
}

void loop()
{
Serial1.print("Ciao!");
}

Problema risolto. Grazie mille ragazzi!
Provvedo ad aggiornare il titolo del post e a mettere la soluzione in alto.

:smiley:

Un ultima domanda. Il mio shield è slave. Stavo leggendo che potrei trasformarlo in master ma non colgo il reale bisogno di questo cambiamento.
Avete un esempio pratico dove lo slave non è abbastanza?

Ciao
innanzitutto il tuo shield monta un modulo con fw HC-06, il che significa che non puoi portarlo a modalità Master.
Per un approfondimento su questi moduli, puoi leggere qui:

Avete un esempio pratico dove lo slave non è abbastanza?

tutti i casi in cui deve essere Arduino ad instaurare la connessione, con un altro device Slave.
Per esempio con un'antenna GPS:

o anche con un'altra Arduino

@dancol90
grazie della info relativa alla seriale su Leonardo, davvero non mi ci ero ancora imbattuto :stuck_out_tongue:

Grande pitusso, ora è tutto più chiaro. Diciamo che come interfaccia di un singolo dispositivo va benissimo uno slave. Se voglio in un qualche modo condividere servizi e quindi fare una rete BT avrò bisogno dei master. Sa quasi di Server/Client. Non sapevo della limitazione del mio hc-06.

Leggo subito gli approfondimenti postati e mi aggiorno,

grazie ancora!