Como usar o Bluetooth no Arduino

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Em 1996, havia vários países envolvidos no desenvolvimento de links sem fio de curto alcance, e juntos eles queriam alguma unificação de padrões e um nome que simbolizasse a unidade. Intel, Ericsson e Nokia estavam envolvidas, e o nome Bluetooth foi sugerido para simbolizar a unidade. No século 10, o rei Harold, o Bluetooth, foi responsável por unificar a Escandinávia. O nome não era para ser permanente, mas ficou preso.

Anúncio PCBWay

O Bluetooth foi criado para trocar dados a curta distância sem a necessidade de fios como fones de ouvido, monitores cardíacos e sensores. Funciona na banda ISM de 2,4 GHz. Os dados são divididos em um dos 79 slots entre 2,4 e 2,4835 GHz nas bandas de 1 MHz. O Bluetooth LE (baixa energia) era uma nova versão. Diferentemente do Bluetooth padrão anterior, o LE não exige contratos ou problemas no desenvolvimento de aplicativos, e você pode distribuir pela Play Store; também requer muito pouca energia, por isso é muito adequado para operação com bateria.

Opções do Arduino Bluetooth

Enquanto algumas placas do Arduino possuem Bluetooth integrado, alguns projetos podem exigir o uso de módulos Bluetooth externos. O módulo transceptor Bluetooth HC-05 é comum, mas, ao contrário do módulo Bluetooth nRF8001 usado aqui, ele tem um consumo de energia significativo e não pode ser vinculado a smartphones.

Visão Geral do Projeto

Vamos conectar um UNO do Arduino ao módulo nRF8001 e enviar e receber dados de / para ele como se fosse uma porta serial. Em outras palavras, usaremos a capacidade integrada de agir como um UART. Adicionaremos um LED vermelho, verde e azul e, enviando um ‘r’ ou ‘b’ ou ‘g’, pulsaremos esse LED por alguns mS. Também digitaremos as strings no console serial e as enviaremos de volta para o telefone celular.

Leia Também  Como configurar a comunicação UART para Arduino

Nota: só testei tudo isso em um telefone Android (Samsung Galaxy J3)

Como o nRF8001 funciona

Um dos recursos interessantes do nRF8001 é que sua interface com o usuário é um UART. Em outras palavras, simples serial antigo Tx e Rx, o que facilita muito o uso. Os três primeiros pinos no PCB são a interface SPI, SCK é apenas um relógio, MISO é Master In Slave Out e MOSI é Master Out Slave In. Esses quatro pinos devem ir ao Arduino conforme mostrado e não são negociáveis. REQ sinaliza ao nRF que o Arduino tem algo a dizer e RDY diz ao Arduino que o nRF tem algo a dizer e deve ir a um dos pinos de solicitação de interrupção do Arduino, ou seja, 2 ou 3. RST é o pino de redefinição e redefine o NRF na inicialização. O REQ é usado de maneira semelhante ao SS que você pode encontrar em outros aplicativos SPI. A Adafruit tem mais detalhes sobre o seu nRF8001 aqui.

nRF8001 Pinagem e diagrama de fiação

Como usar o Bluetooth no Arduino 1
nRF8001Arduino uno
Vinho 5V
GND GND
SCK 13
MISSÔ 12
DAWDLE 11
REQ 10
RST 9
RDY 2
AJANão usado
Como usar o Bluetooth no Arduino 2

Instalando as Bibliotecas

É necessária apenas uma biblioteca – a biblioteca SPI que é instalada automaticamente com o Arduino IDE. Mas se você não o tiver, faça o download aqui.

Você também precisará baixar e instalar o aplicativo nRF UART 2.0 da Nordic na Play Store do seu telefone Android. Não tenho um iPhone para testá-lo, mas também deve funcionar em dispositivos Apple.

Como usar o Bluetooth no Arduino 3

Notas sobre o programa

Embora o nRF8001 seja um dispositivo de 3,3V, os pinos Vcc e de dados são tolerantes a 5V, portanto você pode usá-lo. O esboço para demonstrar o projeto é baseado no exemplo fornecido na biblioteca em “exemplos” como “echodemo”. Depois de carregar o design e abrir a janela serial, você deverá ver algo assim abaixo. Tente digitar algum texto e pressione “enviar” e ele aparecerá na janela serial. Digite o texto na janela serial e envie-o, e ele aparecerá no seu telefone.

Leia Também  Koko Analytics vs. Statify - Erfahrungen, Vergleiche, Tipp

No exemplo modificado abaixo, adicionei um LED vermelho, verde e azul à placa, e você pode piscá-los inserindo um r ou b ou g no telefone. Digitar uma palavra com todos os três, como “agarrar”, piscará todos os três. Meu telefone é um Samsung Galaxy mais antigo e funcionou perfeitamente.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Como usar o Bluetooth no Arduino 4
Como usar o Bluetooth no Arduino 5

Código Arduino

  //an adaptation of the "echodemo" example in the library examples folder
  #include <SPI.h>
  #include "Adafruit_BLE_UART.h"
  //On UNO & compatible: CLK = 13, MISO = 12, MOSI = 11
  #define BLE_REQ 10
  #define BLE_RDY 2 // This should be an interrupt pin, on Uno thats #2 or #3
  #define BLE_RST 9
  Adafruit_BLE_UART BTLE = Adafruit_BLE_UART(BLE_REQ, BLE_RDY, BLE_RST);
  #include <LiquidCrystal_I2C.h>
  #define  BL_ON  1
  #define  BL_OFF  0
  #define ADDRESS 0x38
  LiquidCrystal_I2C lcd(ADDRESS, 16, 2);  // set the LCD I2C address 
  byte blueLED = 3;
  byte redLED = 5;
  byte greenLED = 4;
  aci_evt_opcode_t laststatus = ACI_EVT_DISCONNECTED;
  ////////////////////////////////////////////////////////////////
  void setup(void)
  {
  lcd.init();     // initialize the lcd  
  lcd.setBacklight(BL_ON);
  lcd.setCursor(0,0); //col, row    
  lcd.print("Bluetooth tests "); 
  Serial.begin(9600);
  Serial.println(F("Bluefruit LE nRF8001 UART demo"));
  BTLE.setDeviceName("Arduino"); /* 7 characters max! */
  BTLE.begin();
  
  pinMode(blueLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  pinMode(greenLED, OUTPUT);
  
  //pre test flash LEDs:
  digitalWrite(redLED, HIGH);
  delay(200);
  digitalWrite(redLED, LOW);
  delay(200);
  digitalWrite(greenLED, HIGH);
  delay(200);
  digitalWrite(greenLED, LOW);
  delay(200);
  digitalWrite(blueLED, HIGH);
  delay(200);
  digitalWrite(blueLED, LOW);
  delay(200);
  }
////////////////////////////////////////////////////////
void loop()
{
  // Tell the nRF8001 to do whatever it should be working on.
  BTLE.pollACI();
  // Ask what is our current status
  aci_evt_opcode_t status = BTLE.getState();
  
  // If the status changed....
  if (status != laststatus) 
    {
    // print it out!
    if (status == ACI_EVT_DEVICE_STARTED) {
    Serial.println(F("Advertising started"));
    }
    if (status == ACI_EVT_CONNECTED) 
      {
      Serial.println(F("Connected!"));
      }
    if (status == ACI_EVT_DISCONNECTED) 
      {
      Serial.println(F("Disconnected or advertising timed out"));
      }
    // OK set the last status change to this one
    laststatus = status;
    }  
    
  if (status == ACI_EVT_CONNECTED) 
    {
    // Lets see if there's any data for us!
    if (BTLE.available()) 
      {
      Serial.println();
      Serial.print(BTLE.available()); //gets number of bytes available
      Serial.println(F(" bytes available from BTLE"));
      }
    // OK while we still have something to read, get a character and print it out
    //lcd.clear();
    lcd.setCursor(0,1); //col, row  
    while (BTLE.available()) 
      {
      char c = BTLE.read();
      Serial.print(c);
        
      lcd.write(c); 
      if(c == 'r')
        {
        digitalWrite(redLED, HIGH);
        delay(800);
        digitalWrite(redLED, LOW);
        }
      if(c == 'g')
        {
        digitalWrite(greenLED, HIGH);
        delay(800);
        digitalWrite(greenLED, LOW);
        }
       if(c == 'b')
        {
        digitalWrite(blueLED, HIGH);
        delay(800);
        digitalWrite(blueLED, LOW);
        }
       if(c == 'c')
        {
        lcd.setCursor(0,1); //col, row 
        lcd.print("                "); //clear 2nd line
        }
      }
    // Now see if we have any data from Arduino keybd/Serial console
    if (Serial.available()) 
      {
      // Read a line from Serial
      Serial.setTimeout(100); // 100 millisecond timeout
      String s = Serial.readString();
      // We need to convert the line to bytes, no more than 20 at this time
      byte sendbuffer[20];
      s.getBytes(sendbuffer, 20);
      char sendbuffersize = min(20, s.length());
      Serial.print(F("nSending -> "")); 
      Serial.print((char *)sendbuffer); 
      Serial.println(""");
      // write the data:
      BTLE.write(sendbuffer, sendbuffersize);
      }
    }
  }
////////////////////////////////////////////////////////

Saída da janela serial

Como usar o Bluetooth no Arduino 6

O Projeto Concluído

Como usar o Bluetooth no Arduino 7

Como usar o Bluetooth no Arduino 4
Leia Também  11 podcasts em espanhol que você não vai querer perder
cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br