Moduli bluetooth

pitusso:
In ogni caso, il chip dovrebbe essere un CSR BC417143.
Se fai una ricerchina aggiungendo "arduino" :stuck_out_tongue: , di progettini/sketch ne troverai a fiumi..

Si! Sono csr bc417etc etc.... sono quelli lì! Ma non ci avevo pensato a mettere il nome del chips su google... che idiota!
uso windows 7

Ciao skazzo,
ho anch'io il tuo stesso problema.
Ho saldato i fili, ma non riesco a comunicare con l'antennina.
Sto provando sia a comunicare direttamente con l'antenna via seriale dal mac, sia connettendo l'antenna ad arduino, sempre via seriale, ma senza successo.

Personalmente, qualche piccolo passo avanti l'ho fatto. Riesco a scrivere e a leggere sulla seriale.
Riesco ad instaurare un ponte di comunicazione wireless, ma proprio non riesco a capire come far leggere/scrivere i comandi AT.
Vedo le print dei vari comandi AT ma il bluetooth non risponde ai comandi AT.
Ma se scrivo Serial.println("hello world") e ascolto la seriale con putty, leggo "hello world"...
Magari se hai msn ci aiutiamo a vicenda.

Msn no. Per chattare uso skype o google talk.

ciao

Vedo le print dei vari comandi AT ma il bluetooth non risponde ai comandi AT.

ci avevo provato anche io, a mio tempo, ma questi modulini non sembrano supportare comandi AT.. (riportato anche da Fabio per i suoi moduli bt).

Cosa ci devi fare, con i comandi AT? :smiley:

pitusso:
Cosa ci devi fare, con i comandi AT? :smiley:

Mi è stato fornito un pdf con i comandi AT, con qualche printscreen di un caso d'uso...
In realtà mi sono un pò affossato per via di questi comandi, so che non servono a molto ma... mi sono fissato :slight_smile:

Non riesco ad avere una connessione stabile con l'antenna.
Con il mac la rilevo, faccio il pairing con codice "1234" ma dopo circa 10s si disconnette.
Penso sia questo il mio problema principale.
Spero di aver capito il funzionameto:

  • connetto TX ed RX dell'antenna con RX e TX dell'arduino o sui pin scelti con NewSoftSerial
  • stabilisco una connessione con l'antenna
  • quello che mando alla seriale relativa all'antenna sul mac arriva alla seriale dell'arduino.
    Giusto?

Ti consiglio:
collega anche i pin 32 e 31 a due led connessi a gnd.
uno dei due lampeggia di continuo quando è in cerca di connessione, quando l'ha trovata rallenta il blinking e si accende l'altro fisso.
una volta collegato, devi distinguere tre porte com:

  1. dove è collegato arduino ed è la stessa dell'ide dell'arduino
  2. una dovrebbe essere la com del dispositivo bluetooth che hai sul pc (usb o interno)
  3. una porta com che bluesoleil associa al nuovo dispositivo

Io mi collego tramite putty alla porta del punto 3; unico problema è che quando apro putty durante la connessione avvenuta, il modulo si scollega dal pc.

domani faccio un video...

Ci sono riuscito con Mac OS X.
Il problema era che usavo il modulo MASTER invece di quello SLAVE.
Ho fatto così:
Connetto la TX e RX dell'antenna ad RX e TX sull'arduino usando NewSoftSerial con una connessione a 115200
Il mac rileva l'antenna e vi associa una porta seriale /dev/tty.BC-05-xxxx
Apro minicom sulla porta /dev/tty.BC-05-xxxx a 115200 e quello che scrivo viene trasmesso all'Arduino.

P.S. Per dare i comandi AT, bisogna mettere l'antenna in modalità AT, mettendo un valore di tensione alto (3.3V o 5V) sul pin 34.
Con questi comandi è possibile cambiare le configurazioni dell'antenna, per esempio è possibile convertire il MASTER in SLAVE e viceversa.

riddick86:
P.S. Per dare i comandi AT, bisogna mettere l'antenna in modalità AT, mettendo un valore di tensione alto (3.3V o 5V) sul pin 34.
Con questi comandi è possibile cambiare le configurazioni dell'antenna, per esempio è possibile convertire il MASTER in SLAVE e viceversa.

Ma il pin 34 deve stare fisso a 3.3v per abilitare la modalità AT?
Appena puoi posta il codice che hai usato che faccio un pò di prove... grazie!

Codice per dare il comando AT

#include <NewSoftSerial.h>

int pinRX = 6;
int pinTX = 5;
int pinAT = 12;

NewSoftSerial blue(pinRX, pinTX);

void setup()
{
  
  blue.begin(19200);
  Serial.begin(9600);
  pinMode(pinLed, OUTPUT);
  pinMode(pinAT, OUTPUT);
  digitalWrite(pinAT, HIGH);


}

void loop()
{
  //Comando AT
  //Risposta OK
  
  blue.print('A');
  blue.print('T');
  blue.print('\r');
  blue.print('\n');
 
//Leggo la risposta 
if(blue.available() > 0)
{
Serial.print(blue.read());
Serial.println(blue.read());
}
}

Per questo codice ho un problema:
dopo un paio di riposte OK, mi vengono ritornati caratteri strani.

ma il pin dell'AT, l'hai messo a 3.3v o hai messo qualche resistenza in serie?
appena lo metto a 3.3v non riesco più a farlo collegare al mio modulo bluetooth (del pc)...

prova a farlo girare a 115200 baud

  blue.begin(19200);

a

  blue.begin(115200);

Sono riuscito ad impartire un comando AT.
In particolare ho riportato l'antenna MASTER alle condizioni di default (SLAVE) con il comando:

AT+ORGL \r\n

Questo è il codice che ho utilizzato:

#include <NewSoftSerial.h>

int pinRX = 6;
int pinTX = 5;
int pinAT = 8;
NewSoftSerial blue(pinRX, pinTX);
int pinLed = 13;



void commandAT(char *v)
{
  int i=0;
  while(v[i] != '\n')
  {
    blue.print(v[i]);
    i++;
  }
  blue.print('\n');
}

void readResponse(int nchar)
{
  if(blue.available() > 0){ 
  for(int i=0; i < nchar; i++){
  
     char data = (char)blue.read();
   
    Serial.print(data);
    delay(100);
   
    }
  
  }
}

void setup()
{
  
  blue.begin(115200);
  Serial.begin(9600);
  Serial.println("Inizializzo sistema...");
  pinMode(pinLed, OUTPUT);
  pinMode(pinAT, OUTPUT);
  
  //Valore ALTO per switchare in modalità AT
  // il 34 sull'antenna 
  digitalWrite(pinAT, HIGH);
  Serial.println("pinAT attivo");
  
  //Comando AT da inviare
  char s[] = "AT+ORGL \r\n";
  Serial.print("Scrivo comando: ");
  Serial.print(s);
  
  delay(50);
  
  //Invio comando all'antenna
  commandAT(s);
  delay(50);
  
  //Leggo la risposta
  readResponse(2); 
}

void loop()
{
   
  
}

Con questo codice però non riesco a leggere la risposta, ma la configurazione dell'antenna è cambiata, quindi l'invio ha funzionato.

riddick86:
Con questo codice però non riesco a leggere la risposta, ma la configurazione dell'antenna è cambiata, quindi l'invio ha funzionato.

Bravo riddick!
Oggi/domani provo un pò il tuo codice, questi moduli sono davvero antipatici...

Questi moduli non vengono rilevati da LG Optimus One e HTC Desire HD.
Ho provato con vari altri cellulari e smartphone e vengono rilevati senza problemi.
Poichè ho un LG O1 devo capire se è un problema software o di incompatibilità dell'hardware.

Ciao riddik86,
io non ho fin'ora avuto problemi di riconoscimento, ho provato con Nokia (vari modelli), LG GT540, HTC G1.

devo capire se è un problema software o di incompatibilità dell'hardware.

Il Bluetooth è uno standard, non penso si possa parlare di incompatibilità :roll_eyes:
Nel senso che potrebbe non andare a buon fine il pairing, ma il modulo dovrebbe essere sempre visibile...

Forse il modulo bt era associato e connesso con altro device, quando effettuavi la ricerca con gli smartphone che hai citato?
(potrei aver detto una castronata, non ci ho provato)

pitusso:
Forse il modulo bt era associato e connesso con altro device, quando effettuavi la ricerca con gli smartphone che hai citato?
(potrei aver detto una castronata, non ci ho provato)

No, non era associato a nessun dispositivo, anche perchè non conoscevano il pin di connessione.
Poi le prove le ho fatte anche da solo con il mio Optimus One e non lo "vede".

Ho risolto!!!
In pratica ho cambiato il modo operativo dell'antenna, l'ho passata da SLAVE a SLAVE-LOOPBACK con questo codice:

#include <NewSoftSerial.h>

int pinRX = 6;
int pinTX = 5;
int pinAT = 8;
NewSoftSerial blue(pinRX, pinTX);
int pinLed = 13;



void commandAT(char *v)
{
  int i=0;
  while(v[i] != '\n')
  {
    blue.print(v[i]);
    i++;
  }
  blue.print('\n');
}

void readResponse()
{
  int a = blue.available();
  Serial.print("Caratteri disponibili: ");
  Serial.println(a);
  if(a > 0){ 
  for(int i=0; i < a; i++){
  
     char data = (char)blue.read();
   
    Serial.print(data);
    delay(100);
   
    }
  }
  

}

void setup()
{
  
  blue.begin(38400);
  Serial.begin(9600);
  Serial.println("Inizializzo sistema...");
  pinMode(pinLed, OUTPUT);
  pinMode(pinAT, OUTPUT);
  
  //Valore ALTO per switchare in modalità AT
  // il 34 sull'antenna 
  digitalWrite(pinAT, HIGH);
  Serial.println("pinAT attivo");
  
  //Comando AT da inviare
  char s[] = "AT+ROLE=2\r\n";
  Serial.print("Scrivo comando: ");
  Serial.print(s);
  
  delay(50);
  
  //Invio comando all'antenna
  commandAT(s);
  delay(50);
  
  //Leggo la risposta
  readResponse(); 
}

void loop()
{
   
  
}

Ora si riescono a leggere anche le risposte, bisogna che l'antenna sia connessa con qualche dispositivo via bluetooth, non basta la seriale di Arduino.
Ho fatto in questo modo:

Arduino <---> Modulo BT <----> MacBook PRO BT (connessione con minicom)

e magicamente il monitor seriale di Arduino stampa anche le risposte!!!

Ma quindi basta uno solo dei due moduli bluetooth ttl per comunicare da pc/cellulare con bluetooth ad arduino?

Ma quindi basta uno solo dei due moduli bluetooth ttl per comunicare da pc/cellulare con bluetooth ad arduino?

certamente