Go Down

Topic: Bluetooth HC-06 não envia e recebe dados (Read 12503 times) previous topic - next topic

sampaiopt

boas pessoal,
tenho o arduino pro mini ligado (http://www.inmotion.pt/store/arduino-pro-mini-328-5v-16mhz) com o hc-06 bluetooth (http://www.inmotion.pt/store/hc06-serial-bluetooth-brick), com as seguintes ligações:

Arduino -------------- HC-06

GND ------------------ G(GND)
pin11 --------------------- V
D0(TX)-----------------RXI
D1(RX) -----------------TX0

e com o seguinte codigo no arduino:

Code: [Select]


#include <SoftwareSerial.h>

const int rxpin = 0;
const int txpin = 1;
const int bluetoothpin = 11;
SoftwareSerial bluetooth(rxpin, txpin);

void setup(){
 pinMode(bluetoothpin, OUTPUT);
 digitalWrite(bluetoothpin, HIGH);
 Serial.begin(9600);
 bluetooth.begin(9600); // initialize the software serial port
 Serial.println("Serial ready");
 bluetooth.println("Bluetooth ready");
}

void loop(){
 if (bluetooth.available()){
   char c = (char)bluetooth.read();
   Serial.write(c);
 }
 if (Serial.available()) {
   char c = (char)Serial.read();
   bluetooth.write(c);
 }
}


o meu problema é que nao consigo receber dados no arduino,pelo bluetooth, comigo apenas conectar-me com ele

Mortis

Estas a alimentar o bluetoop com a porta digital 11? Cuidado, essas portas não são capazes de fornecer muita corrente e tu corres o risco de queimá-la  :(

Pelo que vi esse módulo funciona com 5v, então podes ligar no pino de saída 5v do promini.

vejo que usas os pinos 0 e 1, esses pinos já são TX e RX do arduino, ai tentas usar os mesmos pinos para o bluetooth, não tem como dar certo.

Liga o pro mini usando FTDI no computador (para que possas ver o que estás imprimindo no loop), liga o módulo nas portas 2 e 3 (ou outra que preferir) altera o código para usar essas portas no softserial e diz o que aconteceu.

Code: [Select]

#include <SoftwareSerial.h>

const int rxpin = 2;
const int txpin = 3;
SoftwareSerial bluetooth(rxpin, txpin);

void setup(){
  Serial.begin(9600);
  bluetooth.begin(9600); // initialize the software serial port
  Serial.println("Serial ready");
  bluetooth.println("Bluetooth ready");
}

void loop(){
  if (bluetooth.available()){
    char c = (char)bluetooth.read();
    Serial.write(c);
  }
  if (Serial.available()) {
    char c = (char)Serial.read();
    bluetooth.write(c);
  }
}

sampaiopt

boas,agora tenho assim...

Arduino -------------- HC-06

GND ------------------ G(GND)
VCC --------------------- V
D0(TX)-----------------2
D1(RX) -----------------3

tenho o arduino ligado com http://www.inmotion.pt/store/cp2104-usbtoserial-adapter-carrier e estou a programar com o IDE arduino 1.5.5. quando eu faço a ligacao entre o bluetooth e o telemovel o led do bluetooth deixa de piscar.
contudo no monitor de serie so aparece "Serial ready", nao deveria de aparecer tambem "Bluetooth ready" ?!?  :~
e tambem no monitor de serie nao consigo receber os dados que envio do bluetooth. para enviar os dados pelo bluetooth uso o https://play.google.com/store/apps/details?id=es.pymasde.blueterm&hl=pt_PT

Mortis

Não, aparece "Serial ready" porque quando você usa o Serial.println ele imprime na port TX do arduino, que por sua ver esta ligado ao conversor, que esta ligado no PC, certo?

"Bluetooth ready" teria de aparecer no serial monitor do celular. Não tenho o mesmo módulo que você (na verdade nem me lembro onde botei o meu HC-05), mas se o celular esta pareando com o bluetooth, deveria ser possível ao reiniciar o arguino você ler "Bluetooth ready".

Recordo-me de ter obtido um módulo serial que tinha as inscrições invertidas (no pino TX estava estampado RX, mas penso que quem fez a placa estava definindo o que conectar ali e não qual era aquele pino). Podes tentar inverter as portas tx e rx no software serial (ou os fios) e ver no que dá.

e altera de:
Serial.write(c);
bluetooth.write(c);

para:
Serial.println(c);
bluetooth.println(c);

Para descartar problemas com o software do celular (pois não o conheço e não consigo ver por aqui), você consegue parear o bluetooth com o computador? fazendo isso terá uma porta série para usar com o serial monitor do próprio Arduino, assim verás um serial monitor do lado do outro

sampaiopt

antes quero agradecer pelo tempo dispensado nas respostas a minha duvida  ;)

ja alterei o codigo para println, e conectei pelo computador atraves do putty http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html mas continuo com o mesmo problema, no monitor do arduino continua aparecer "serial ready" mas no monitor do putty nao aparece nada, aqui nao deveria de aparecer "bluetooth ready"?!? :smiley-eek:



tambem ja testei com a troca das portas tx e rx

Mortis

no putty você configurou corretamente o baud para 9600?

PUTS, acabo de perceber que no teu blurtooth o rate padrão é: "Default Baud rate: 38400 with 8 Data Bits, 1 Stop Bit, No Parity", o que significa que iniciar o software serial com 9600 vai resultar em nada (apenas barulho). mete ai
Code: [Select]

bluetooth.begin(38400)


creio que no putty (ou outro serial monitor) terás de definir o mesmo (38400)... podes alterar o baud do arduino também. para que as pontas conversem o baud deve ser o mesmo (exemplo arduino 9600, computador 9600 / bluetooth 38400, celular, computador, etc 38400)

Bom, para saber se o módulo esta bem, você pode testar enviando comandos AT, dá uma olhada nisto e veja se ajuda: http://www.comm2excel.com/projects/bluetooth_AT_Commands.php?id=17#

comandos at permitem uma série de configurações

abaixo um código que postei em outro tópico, para descobrir qual o baud que o bluetooth esta:
Code: [Select]

#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 10); // RX, TX

long BaudRate[] = {300,1200,2400,4800,9600,14400,19200,28800,38400,57600,115200,230400,460800,921600,1382400};

void setup()
{
  Serial.begin(9600);
  Serial.println("Finding Baud");
 
  for(int x=0; x < 15;x++){
    Serial.print("Baud: ");
    Serial.println(BaudRate[x]);   
   
    mySerial.begin(BaudRate[x]);
    delay(10);
    mySerial.write("AT");
    delay(1000);
   
    if (mySerial.available()){
     String strData;
      while (mySerial.available()){
        strData += (char)mySerial.read();
      }
      Serial.println(strData);
      break;
    }
    mySerial.end();
  }
  //mySerial.begin(1200);
  //mySerial.begin(2400);
  //mySerial.begin(4800);
  //mySerial.begin(57600);
  //mySerial.begin(19200);
  //mySerial.begin(38400);
  //mySerial.begin(57600);
  //mySerial.begin(115200);
  //mySerial.begin(230400);
  //mySerial.begin(460800);
  //mySerial.begin(921600);
  //mySerial.begin(1382400);
}

void loop()
{
  if (Serial.available()){
    mySerial.write(Serial.read());
  }
  if (mySerial.available()){
    Serial.write(mySerial.read());
  }
}


Perdoe-me por não ter percebido o baud padrão antes  :smiley-red:

sampaiopt

Obrigado pela dicas Mortis, desculpa a demora na reposta, mas durante esta semana tava empenhado noutra tarefa...
Tive a ver os comandos at e com o comando  AT+BAUD4, mudava o baud para 9600 (assim deveria dar tambem nao?!? computador, arduino e bluetooth 9600).
Contudo no IDE do arduino nao me aparece o baud 38400, para assim fazer os comandos at  :~ nao existe um programa em que eu possa executar os comandos at com o baud 38400?!?


Mortis

Para enviar comandos AT é necessário estar na mesma velocidade do módulo.

Você alterou o "mySerial(11, 10) para mySerial(3, 2)" no sketch que te passei? rodou ele e não teve nenhum "OK" impressona na serial?


Mortis

É, o teu bluetooth não esta respondendo ao comando AT em nenhuma velocidade, se os fios estão corretamente ligados isso pode ser um problema... tenho um danificado que tem esse mesmo comportamento.

Será que você pode tê-lo danificado?

A única coisa que penso é um reset, use um fiu ligado ao ground e encoste no pino reset do módulo soldado na placa:


Me desculpe, mas não sei mais como tentar ajudar =/

sampaiopt

bem, vou entao comprar outra placa bluetooth, tenho é uma duvida um pouco estupida, visto o meu arduino ser de 5v, posso ligar uma placa de 3.3v?!? tipo esta -> http://www.amazon.co.uk/Arduino-Wireless-Bluetooth-Transceiver-Module/dp/B0093XAV4U/ref=sr_1_1?ie=UTF8&qid=1390995983&sr=8-1&keywords=arduino+bluetooth

Mortis

Você tentou o reset e não funcionou?

No anuncio diz que o máximo é 4.2v, 5V está acima do limite.

O ideal é usar 3.3v e para os pinos TX/RX usar um divisor de tensão (que na maioria das aplicações não é o ideal) ou transistores para fazer a interface (se não quiser usar os componentes, pode comprar um desses conversores http://dx.com/p/178301).

Mas eu compraria um módulo 5V para dispensar os componentes adicionais.

amando

Bom Dia!
Tenho um projeto com arduino mega e bluetooth hc-06. Apos ligar o arduino mega tudo funciona perferitamente, o led o bluetooth fica piscando aguardando uma conexão, e permite a cenexão com o celular android e ha o trafego normal de informação entre ambos. O meu projeto o celular não fica o tempo todo conectado ao bluetooth, sendo assim, percebi que apos um grande intervalo de tempo (1 ou 2 horas) sem conexão o bluetooth hc-06 apaga o seu led como se ele se desligasse e não consigo fazer conexão apos isso, para resolver tenho q desligar o arduino mega da fonte e religa-lo para o bluetooth voltar a funcionar.

Não sei se isso seria um defeito, pois me parece um tipo de economia, tipo se ficar um determinado tempo sem conexão ira desligar.
Por favor peço a ajuda dos senhores pois não achei nada parecido na internet, gostaria de deixar meu Bluetooth pronto aguardando para se conectar durante todo o dia.

Grande abraço a todos.

WilsonGomes

Bom Dia!

Tenho um projeto com arduino mega e bluetooth hc-06 e não consigo receber dados de um aplicativo 

Apos ligar o arduino mega tudo funciona perferitamente, o led o bluetooth fica piscando aguardando uma conexão, e permite a cenexão com o celular android. Envio através do vários aplicativos tentei enviar números para o código arduíno, não dá nada. Poderiam me ajudar?


1. LIGACOES

Arduino -------------- HC-06

GND ----------------- GND
3.3V ----------------- +5V
8 (TX)---------------- RX
9 (RX) --------------- TX


2. SKETCH

#include <SoftwareSerial.h>

#define pinRele1 2
#define pinRele2 3
#define RX 8
#define TX 9

SoftwareSerial blueSerial(RX, TX); // RX, TX

void setup() {
  Serial.begin(9600);
  blueSerial.begin(9600);
 
  //pinMode(pinSom, INPUT);
  pinMode(pinRele1, OUTPUT);
  digitalWrite(pinRele1, HIGH);  // Desligado
  pinMode(pinRele2, OUTPUT);
  digitalWrite(pinRele2, HIGH);  // Desligado
}

void loop() {
  if (blueSerial.available())
  {
    char dados = blueSerial.read();
    Serial.println('Consegui');
    delay(1000);

    if (dados == '0')
    {
     digitalWrite(pinRele1, HIGH);
     digitalWrite(pinRele1, HIGH);
    }
    if (dados == '1')
    {
     digitalWrite(pinRele1, LOW);
    }
    if (dados == '2')
    {
     digitalWrite(pinRele1, HIGH);
    }
    if (dados == '3')
    {
     digitalWrite(pinRele2, LOW);
    }
    if (dados == '4')
    {
     digitalWrite(pinRele2, HIGH);
    }
    if (dados == '5')
    {
     digitalWrite(pinRele1, HIGH);
     digitalWrite(pinRele2, HIGH);
    }
  }

}

Desde já fico bem agradecido.

Go Up