Tutorial de Ble Esptop 10 usando Arduino IDE

Tutorial de Ble Esptop 10 usando Arduino IDE
Esp32 é uma placa de microcontrolador baseada em IoT que vem com wifi pré-instalado e bluetooth duplo. Tanto o WiFi quanto o Bluetooth desempenham um papel crucial ao trocar dados entre os dispositivos sobre a comunicação sem fio.

O ESP32 tem suporte para Bluetooth Classic e Bluetooth Low Energy. Aqui vamos nos concentrar no Bluetooth Low Energy. Vamos ver em detalhes.

O que é Bluetooth Low Energy

BLE ou Bluetooth Low Energy é um modo de economia de energia do Bluetooth. Seu aplicativo principal inclui transferência de dados em distâncias curtas, como entrada de porta, relógios inteligentes, wearables, monitor de pressão arterial, segurança e automações domésticas. Ble pode transferir dados limitados.

Ao contrário do clássico Bluetooth, que permanece ativado o tempo todo, o ble permanece no modo de suspensão, exceto quando é chamado ou a conexão é iniciada. Isso torna o ble muito eficiente em termos de energia e consome 100 vezes menos energia do que o clássico.

Aqui está uma breve comparação do Bluetooth Classic com Bluetooth Low Energy:

Especificação Bluetooth Classic Bluetooth Low Energy/BLE
Taxa de transferência de dados 2-3Mbps 1Mbps
Faixa ~ 10-100m ~ 50m
Frequência de operação 79 RF 40 RF
Consumo de corrente de pico ~ 30Ma <15mA
Consumo de energia 1w 0.01-0.5W
Tempo total para enviar dados 100ms 3ms
Formulários Áudio, streaming de música Sensor, wearables

Para uma comparação mais detalhada, clique aqui para visitar o site oficial do Bluetooth.

Servidor e cliente BLE

Bluetooth Low Energy suporta o dispositivo de duas maneiras diferentes: servidor e cliente. O ESP32 pode atuar como servidor e cliente para Bluetooth de baixa energia.

Suporte a seguir os seguintes modos de comunicação:

  • Ponto a ponto: Comunicação entre dois pontos ou nós que são servidores e clientes.
  • Modo de transmissão: O servidor transmite dados para muitos dispositivos.
  • Malha de rede: Vários dispositivos conectados também conhecidos como muitos em muitas conexões.

Ao atuar como servidor, a ESP32 anuncia sua existência para dispositivos clientes próximos. Uma vez que os dispositivos clientes digitalizem os dispositivos Bluetooth disponíveis, o servidor estabelece a conexão entre eles e transfere os dados do servidor para o dispositivo cliente. Esta comunicação é chamada de ponto a ponto.

Neste tutorial, daremos um exemplo de comunicação ponto a ponto entre duas placas ESP32.

Termos importantes em ble

Aqui estão alguns termos importantes que devemos saber ao trabalhar com aplicativos ESP32 BLE:

Gatt: Atributos Gatt ou genéricos que definem uma estrutura hierárquica para transferências de dados entre dispositivos BLE usando serviço e característica. Ele define como dois dispositivos comunicam dados entre eles.

Serviço ble: Nível superior dentro da hierarquia gatt é um perfil que contém um ou mais serviços. Ble contém mais de um único serviço. Cada um desses serviços tem suas próprias características que também podem atuar como referência para outros serviços.

Característica ble A característica é um grupo de informações sempre pertencentes ao serviço; É onde os dados reais são armazenados na hierarquia (valor). Ele sempre contém dois atributos:

  • Declaração: Propriedades características, como localização, tipo, leitura, gravar e notificar.
  • Valor característico: Valor de dados de característica.

Uuid: UUID (identificador universalmente único) é um ID único dado a um serviço e característica. É um ID único de 128 bits que pode ser gerado usando qualquer gerador UUID online. Verifique este gerador uuid grátis. Uma amostra uuid se parece com o seguinte:

583F8B30-74B4-4757-8143-56048FD88B25

Um grupo universal de interesse especial do Bluetooth (SIG) predefinou alguns dos UUIDs reduzidos para diferentes tipos de serviços e perfil para lê -los clique aqui.

Configurar o BLE no ESP32 com Arduino IDE

Para entender o funcionamento do BL, usaremos duas placas ESP32 diferentes, uma delas agirá como servidor e anuncie um sinal Bluetooth enquanto o outro ESP32, que está agindo como um cliente Vou tentar conectar o servidor Bluetooth.

Arduino IDE tem exemplos separados para o scanner e o servidor.

Para ver como instalar um ESP32 com Arduino IDE no Windows, clique aqui.

Esp32 BLE Server

Primeiro, enviaremos o código de exemplo do servidor dentro de nossa primeira placa ESP32, que está atuando como um servidor.

Para abrir o exemplo do servidor, vá para: Arquivo> Exemplos> Esp32 Ble Arduino> ble_server:

O código dado abaixo será aberto no Arduino IDE.

Código do servidor

Carregue o código abaixo na placa ESP32 usando o Arduino IDE. Mas certifique -se de desconectar a segunda placa por um tempo para evitar o upload do mesmo código para uma única placa.

#incluir
#incluir
#incluir
#Define Service_uuid "4FAFC201-1FB5-459E-8FCC-C5C9C331914B"
#Define característica_uuid "BeB5483E-36E1-4688-B7F5-EA07361B26A8"
Void Setup ()
Serial.começar (115200);
Serial.Println ("Iniciando o trabalho ble!");
BLEDEVICE :: INIT ("ESP32");
Blesever *PSERVER = BLEDEVICE :: createServer ();
Bleservice *PSERVICE = PSERVER-> CreateService (Service_uuid);
BleCharacteristic *PCharacteristic = PSERVICE-> CreateCharacteristic (
Característica_uuid,
BleCharacteristic :: Property_read |
BleCharacteristic :: Property_write
);
PCharacteristic-> setValue ("Olá, diga Linuxhint.com ");
pService-> start ();
// bleadvertising*padvertising = pserver-> getAdvertising ();/*compatibilidade com versões anteriores*/
Bleadvertising *padvertising = bledevice :: getAdvertising ();
Padvertising-> addServiceUuid (Service_uuid);
padvertising-> setScanResponse (true);
padvertising-> setMinPreferred (0x06); // Funções para conexão para iPhone
padvertising-> setMinPreferred (0x12);
BLEDEVICE :: startAdVertising ();
Serial.println ("característica definida! Servidor ble pronto ");

Void Loop ()
Atraso (2000);

O código começa com a inclusão de arquivos necessários da biblioteca Bluetooth. Então uuid é definido para serviço e característica. Você pode ir com o UUID padrão ou pode gerar usando o gerador UUID gratuito. A próxima comunicação serial é inicializada definindo a taxa de transmissão.

Em seguida, criamos um dispositivo BLE chamado Esp32. Depois disso, definimos o dispositivo BLE como um servidor usando o CreateServer () função e mais tarde definimos o valor característico. Na etapa final, iniciamos o serviço anunciando -o para que outros dispositivos possam pesquisá -lo.

Esp32 Ble Scanner

Agora vamos fazer upload de um exemplo de varredura ESP32 na segunda placa ESP32. Para fazer isso, vá para: Arquivo> Exemplos> Esp32 Ble Arduino> ble_scan

O código abaixo será aberto no Arduino IDE Editor.

Código do scanner

#incluir
#incluir
#incluir
#incluir
int escantime = 5; //Em segundos
BLOCAN* PBLESCAN;
classe MyAdvertisedDeviceCallbacks: public bleadvertisedDevicecallbacks
Void onResult (bleadvertisedDevice anunciouDevice)
Serial.printf ("Dispositivo anunciado: %s \ n", anunciado.para sequenciar().c_str ());

;
Void Setup ()
Serial.começar (115200);
Serial.println ("Digitalização ...");
BLEDEVICE :: init ("");
pbleScan = Bledevice :: getScan (); // Crie nova varredura
pbleScan-> setAdvertisedDeviceCallbacks (new MyAdvertisedDeviceCallbacks ());
pbleScan-> setActivescan (true); // varredura rápida, mas mais energia usada
pbleScan-> setInterval (100);
pbleScan-> setWindow (99);

Void Loop ()
// Coloque seu código principal aqui, para executar repetidamente:
BLESCANRESULTS FoundDevices = pbleScan-> Start (Scantime, False);
Serial.print ("dispositivos encontrados:");
Serial.Println (FoundDevices.getCount ());
Serial.println ("Scan Concluído!");
pbleScan-> clearResults (); // Excluir resultados para a memória livre
Atraso (2000);

O código acima procurará o número total de dispositivos disponíveis para BLE e exibirá sua contagem total com endereços. Depois de fazer upload do código na placa de scanner Esp32, pressione o Habilitar Botão, a placa ESP32 pesquisará automaticamente os dispositivos disponíveis.

Saída

Depois que o ESP32 verifica os dispositivos disponíveis, o seguinte resultado aparecerá. Aqui, o ESP32 digitalizou 9 dispositivos entre os quais um é uma placa ESP32 com código ble_server e outro dispositivo é a banda Mi 6. Resto de todos os dispositivos está disponível perto do meu ESP32.

Como consertar a biblioteca de varredura ESP32 BLE não contando dispositivos

O exemplo da biblioteca de varredura ESP32 tem um bug de não contar o número total de dispositivos. Para corrigir esse problema, vá para o local mencionado e substitua o código abaixo.

C: \ Usuários \ Nome de usuário \ AppData \ Local \ Arduino15 \ Pacotes \ Esp32 \ Hardware \ Esp32 \ 1.0.6 \ bibliotecas \ ble \ src \ blascan.cpp

Lembrar de uncida Todas as pastas porque a pasta AppData dentro do diretório C permanece oculta por padrão. Depois de abrir o arquivo de origem ble_scan .cpp Substitua a condição abaixo dada dentro do código.

if (m_padvertisedDeviceCallbacks)
m_padvertisedDeviceCallbacks-> onResult (*anunciadoDevice);

se (!m_wantduplicates && !encontrado)
m_scanResults.m_vectorAdvertisedDevices.Inserir (STD :: Par (AdvertedAddress.tostring (), anunciado));
devedelete = false;

Testando o servidor esp32 ble com smartphone

A maioria dos smartphones modernos trabalha com a tecnologia BLE para se comunicar com diferentes dispositivos, como smartwatch, wearables, sensores e outros dispositivos de automação residencial. Aqui a placa ESP32 atuará como um ponto de acesso. Então, vamos conectar um telefone Android com uma placa ESP32.

Código do servidor ble para acesso ao smartphone ESP32

Carregue o código dado abaixo na placa ESP32.

#include /*biblioteca Bluetooth incluída* /
#incluir
#incluir
#Define Service_uuid "A484A399-7272-4282-91CF-9018E075FC35"
#Define característica_uuid "C7E084BD-5279-484D-8319-FFF7D917537D"
Classe MyCallbacks: Public BlecharacteristicCallbacks

Onwrite vazio (BleCharacteristic *PCharacteristic)

std :: string value = pCharacteristic-> getValue ();
if (valor.comprimento ()> 0)

Serial.print ("Valor característico atualizado:");
for (int i = 0; i createService (Service_uuid);
BleCharacteristic *PCharacteristic = PSERVICE-> CreateCharacteristic (
Característica_uuid,
BleCharacteristic :: Property_read |
BleCharacteristic :: Property_write
);
PCharacteristic-> setCallbacks (new MyCallbacks ());
PCharacteristic-> setValue ("Linuxhint.Com ");
pService-> start ();
Bleadvertising *padvertising = pserver-> getAdvertising ();
padvertising-> start ();

Void Loop ()

Atraso (2000);

Instalando o aplicativo BLE no smartphone Android

As etapas a seguir o guiarão a instalar aplicativos BLE em smartphones e ajudarão a interface os dispositivos móveis com as placas ESP32.

Passo 1: Open Google Play Store Install Scanner ble aplicativo.

Passo 2: Após a instalação, abra o aplicativo e permita toda a permissão necessária e lembre -se de ativar o celular Bluetooth.

Etapa 3: Agora digitalize os dispositivos Bluetooth disponíveis. Conecte a placa ESP32.

Passo 4: Depois que a placa ESP32 estiver conectada ao smartphone após a especificação da placa ESP32 aparecerá. Aqui podemos ver os endereços UUID e podemos ler e escrever novos valores característicos.

Etapa 5: Para ler o valor da característica salva clique R. Resultado será exibido.

Etapa 6: Para escrever qualquer novo valor de característica, clique C.

Etapa 7: Um novo pop -up aparecerá aqui, podemos escrever qualquer valor característico e clicar OK.

Etapa 8: Novo valor que está escrito aparecerá.

Etapa 9: Além disso, podemos ver o mesmo novo valor característico impresso no monitor serial do Arduino IDE.

Nós conectamos com sucesso um dispositivo com esp32 ble.

Conclusão

O ESP32 vem com Bluetooth duplo que é clássico e de baixa energia. Aqui neste artigo, discutimos BL e suas várias aplicações e trabalho. Mais tarde, configuramos o BLE com duas placas ESP32 diferentes com uma atuação como servidor e outra como scanner. Por fim, conectamos nosso smartphone com o servidor ESP32 e escrevemos um novo valor característico.