Índice:
- Etapa 1: um pouco sobre o Bluetooth de baixa energia (BLE)
- Etapa 2: indicadores de verificação e conexão
- Etapa 3: decifrar eventos de joystick e botão
- Etapa 4: Operação da caixa VR: o joystick
- Etapa 5: Operação da caixa VR: botões de gatilho
- Etapa 6: Operação da caixa VR: botões A / B
- Etapa 7: Operação da caixa VR: botões C / D
- Etapa 8: Conclusão
Vídeo: ESP32 Bluetooth BLE Controle remoto: 8 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
Este projeto é um exemplo de como conectar um joystick Bluetooth BLE barato a um ESP32. O código foi escrito usando o Arduino IDE Ver 1.8.5 com o complemento ESP32. O joystick BLE usado é um dispositivo comercial que você pode comprar na Internet por menos de $ 20,00 ou em sua loja local fiveBELoW por $ 5,00.
O joystick que usei para este projeto é um Controle Remoto Bluetooth Spektrum VR Control. Ele está sendo comercializado para funcionar com tablets Android e IOS como um joystick / mouse para uso com fones de ouvido de realidade virtual.
O VR Control Bluetooth Remote Controller possui um único joystick com eixos X e Y, dois botões de gatilho na frente e seis botões na alça. Dois dos botões são para ligar / desligar e controle de modo. Os outros quatro botões podem ser usados para o que você quiser. Este projeto é um esqueleto ou estrutura que lida com toda a interface Bluetooth e decodificação dos botões e joystick. Tudo o que você precisa fazer é adicionar chamadas de função para controlar o que você deseja que os botões e o joystick façam. Você não precisa saber nada sobre Bluetooth para usar esta estrutura.
Existem vários sites da Web com instruções detalhadas para instalar o Arduino IDE e o complemento ESP32. Não vou tentar repetir essa informação aqui. Pesquise no Google e siga as instruções.
A estrutura é uma adaptação de um exemplo de cliente BLE publicado pela IoT Sharing. Você pode encontrá-lo aqui. Você pode estudar este código para ter uma ideia de como o BLE funciona. Expressif tem um exemplo completo para um cliente GATT BLE e explica a operação em detalhes (não escrito para Arduino IDE). Você pode obtê-lo aqui.
Este não é um tutorial BLE. Não vou explicar como o código funciona em detalhes. Usarei a terminologia BLE para descrever alguns dos recursos do joystick. A parte do código que você precisa modificar para seu projeto será explicada em detalhes para ajudá-lo a modificá-lo. O escopo é limitado para manter este Instructable curto e focado no uso do joystick.
Etapa 1: um pouco sobre o Bluetooth de baixa energia (BLE)
Este não se destina a ser um tutorial sobre BLE. Quando comecei este projeto, não sabia a diferença entre o BLE e o Bluetooth clássico. Eu só queria ver se conseguia fazer o joystick que comprei funcionar com o ESP32. No texto a seguir, estou usando a terminologia BLE para fornecer uma visão geral simplificada de como o BLE funciona.
O BLE usa uma arquitetura cliente / servidor. Um dispositivo é um servidor que fornece serviços. O outro dispositivo é um cliente que consome serviços. Para manter os requisitos de energia baixos, o BLE só transmite pequenos pacotes de informações quando ocorre uma alteração. No caso do joystick, o dispositivo do joystick é um servidor. Como servidor, ele se anuncia e transmite uma lista dos serviços que oferece, quando solicitado. O joystick anuncia cinco serviços. O único serviço no qual estamos interessados é o serviço BLE HID (Human Interface Device). Um serviço BLE tem o que é conhecido como Características associadas a ele. Uma característica é normalmente uma fonte de dados. O serviço HID do joystick possui dez características. Algumas das características são duplicadas e são ignoradas. Estamos interessados apenas nas características do relatório BLE que possuem recursos de leitura e notificação. Três das características atendem a esses requisitos e fornecem dados sobre a posição do joystick e o estado dos botões. Quando a notificação está habilitada, o servidor enviará pacotes de dados quando uma alteração for detectada na característica associada.
A estrutura verifica se o servidor que encontra tem o serviço BLE HID e, em seguida, habilita Notificações nas três Características de Relatório que fornecem informações de estado do joystick e do botão. Então, quando um botão é pressionado ou solto ou o joystick é movido, o ESP32 recebe um pacote de dados informando qual é a nova posição do joystick e / ou o estado de alguns botões.
Etapa 2: indicadores de verificação e conexão
A estrutura define dois LEDS, GREENLED e BLUELED e os atribui a dois dos pinos GPIO do ESP32. O VERDE acende quando o ESP32 está procurando o joystick BLE. Quando o joystick é encontrado, o VERDE é desligado e o AZULA se acende para indicar que a conexão foi estabelecida e que você está pronto para prosseguir. Se a ligação for perdida, o BLUELED é desligado, o ESP32 é reiniciado, o GREENLED acende-se e a digitalização começa novamente. Se o joystick não for encontrado em trinta segundos, a varredura será interrompida e o GREENLED será desligado. Após cinco segundos, a digitalização começa novamente e o GREENLED é ligado.
O resultado final é que o ESP32 continuará a procurar o joystick até encontrá-lo. Assim que a conexão for estabelecida, se ela for perdida, o ESP32 se reinicializará e começará a varredura novamente. O ESP32 é redefinido porque não há funções do ESP32 SDK para redefinir a pilha Bluetooth para reiniciar a varredura.
Etapa 3: decifrar eventos de joystick e botão
Um evento de retorno de chamada no ESP32 recebe três pacotes de dados diferentes do servidor para as três Características que foram configuradas para fornecer Notificações. Um pacote tem quatro bytes de comprimento. Três dos bytes contêm a posição do eixo X, a posição do eixo Y e os botões de disparo, que são mapeados em bits no byte. Os outros dois pacotes têm dois bytes cada e um único byte que possui o estado do botão mapeado em bits. Os pacotes recebidos são decodificados e copiados em uma matriz de bytes na memória. Os dados do eixo do joystick vão para os bytes de dados X e Y e cada um dos bytes de botão de três bits mapeados é direcionado para o byte apropriado para esses botões.
Uma tarefa FreeRTOS é criada para lidar com os dados recebidos pelas notificações. Uma tarefa para os botões de joystick e gatilho, uma tarefa para os botões A e B e uma tarefa para os botões C e D. Cada uma dessas tarefas tem áreas claramente marcadas onde você deve adicionar o código para fazer o que quiser com o evento. Procure o comentário "// ===== adicione seu código aqui =====" no corpo da tarefa e adicione seu código depois dele. Cada tarefa possui um comentário indicando para que é usada e usa um Serial.println () para imprimir uma mensagem sobre o evento ocorrido.
Aqui está um exemplo da tarefa do botão A / B;
void taskButtonAB (void * parâmetro) {botões uint8_t;
// ===== se a tarefa exigir uma inicialização única, coloque-a aqui =====
while (true) {// desista da CPU, aguarde novos dados vTaskSuspend (NULL); // acabamos de acordar, novos dados estão disponíveis buttons = VrBoxData [VB_BTNAB]; Serial.printf ("Botões A / B:% 02X / n", botões); if (botões & VB_BUTTON_A) {// botão A pressionado ou está sendo pressionado Serial.println ("Botão A"); // ===== adicione seu código aqui =====}
if (botões & VB_BUTTON_B)
{// botão B pressionado ou está sendo pressionado Serial.println ("Botão B");
// ===== adicione seu código aqui =====
}} // para} // taskButtonAB
Etapa 4: Operação da caixa VR: o joystick
Se o joystick for deixado na posição central, nenhuma notificação do joystick será enviada. Uma vez que o joystick é movido para fora do centro, uma mensagem de notificação com os dados do joystick e os dados do botão de disparo é enviada a cada 15 ms. Quando o joystick é movido de volta para o centro, uma notificação de que ele foi movido para o centro não é enviada. Em outras palavras, ele informa que o joystick saiu do centro, mas não que foi para o centro. O resultado final é que você recebe mensagens indicando que o joystick está se movendo em direção ao centro, mas não que atingiu o centro. Muito irritante. Os dois botões de disparo estão incluídos com os dados do joystick. Pressionar um dos botões de disparo após retornar o joystick ao centro atualizará a posição do joystick para zero. O Framework possui um temporizador de tempo limite integrado que simula automaticamente uma mensagem de notificação do joystick um pouco depois que todas as mensagens de notificação do joystick / botão de disparo param de chegar. O cronômetro define o joystick para zero. O joystick tem um alcance de cerca de +/- 25 em cada eixo.
Etapa 5: Operação da caixa VR: botões de gatilho
Os botões de disparo enviarão uma mensagem de notificação uma vez quando pressionados e novamente quando liberados. A mensagem de notificação pressionada indicará o botão que foi pressionado. A mensagem de notificação de liberação indica que ambos os botões foram liberados.
Segurar o botão disparador inferior impedirá que o servidor detecte que o botão disparador superior foi pressionado. Manter o botão disparador superior pressionado e pressionar o botão disparador inferior faz com que o servidor envie uma mensagem de notificação de que o botão disparador inferior foi pressionado (o botão disparador superior será zero!). Liberar o botão disparador inferior fará com que o servidor envie uma notificação de que o botão disparador superior foi pressionado e o disparador inferior foi liberado.
Em outras palavras, o botão de disparo inferior é dominante sobre o botão de disparo superior e o substituirá quando ambos forem pressionados. Você tem que determinar como lidar com o caso de ambos os botões serem pressionados.
Etapa 6: Operação da caixa VR: botões A / B
Os botões A e B atuam como o joystick e enviam continuamente mensagens de notificação quando pressionados e mantidos pressionados. As mensagens param quando o botão é liberado. Os botões A e B funcionam de forma semelhante aos botões Trigger, no sentido de que o botão A domina o botão B, assim como o botão acionador inferior domina o botão acionador superior.
Etapa 7: Operação da caixa VR: botões C / D
Os botões C e D enviam uma mensagem de notificação uma vez quando pressionados e novamente quando liberados. Se pressionado, nenhuma outra mensagem será enviada até que sejam liberadas. Manter um dos botões C ou D pressionado impedirá que o servidor detecte atividade no outro botão.
Etapa 8: Conclusão
O funcionamento dos botões é, na minha opinião, um pouco instável. O Framework fornece locais para colocar seu código para agir quando um botão é pressionado. Se você também precisa detectar a liberação de botões, resta descobrir como fazer.
Depende inteiramente de você determinar o que deseja que cada botão faça e o que mover o joystick deve fazer. Como você lida com as diferenças no acionador, nos botões A e B e C e D depende de você.
Procure no código o; taskJoyStick (), taskButtonAB (), taskButtonCD () funções e adicionar seu código após o comentário "// ===== adicionar seu código aqui =====".
Você precisará de até quatro funções para lidar com o joystick (para frente, para trás, direita e esquerda) e até seis funções para lidar com os vários botões. Implemente-os todos ou apenas o que você precisa. A escolha é sua.
Se você usar esta estrutura. Eu adoraria gritar para que você o usou e se você o achou fácil de usar.
Se você tiver dúvidas sobre como funciona ou precisar de ajuda para fazê-lo funcionar, entre em contato comigo.
O código está disponível no GitHub aqui.
Aproveitar.
Recomendado:
O controle remoto da TV se torna um controle remoto de RF -- NRF24L01 + Tutorial: 5 etapas (com imagens)
O controle remoto da TV se torna um controle remoto RF || NRF24L01 + Tutorial: Neste projeto vou mostrar como usei o popular IC nRF24L01 + RF para ajustar o brilho de uma faixa de LED sem fio por meio de três botões inúteis de um controle remoto de TV. Vamos começar
Kit de controle remoto comum transformado em controle remoto de brinquedo RC de quatro canais: 4 etapas
Kit de controle remoto comum transformado em controle remoto de brinquedo RC de quatro canais:改造 方法 非常 简单。 只需 准备 一些 瓦楞纸 板, 然后 按照 视频 教程 完成 这个 电子 项目 并 为 您 服务。 玩具 车船 提供 远程 无线 控制。
Converta seu controle remoto IR em RF remoto: 9 etapas (com imagens)
Converta seu Remoto IR em Remoto RF: No Instructable de hoje, vou mostrar como você pode usar um módulo RF genérico sem um microcontrolador, o que nos levará a construir um projeto onde você pode converter um Remoto IR de qualquer dispositivo em um RF Controlo remoto. A principal vantagem de converter um
Controle seus aparelhos elétricos com seu controle remoto de TV (ir remoto) com display de temperatura e umidade: 9 etapas
Controle seus aparelhos elétricos com o controle remoto da TV (ir remoto) com visor de temperatura e umidade: oi, sou Abhay e é meu primeiro blog no Instructables e hoje vou mostrar como controlar seus aparelhos elétricos com o controle remoto da TV construindo este projeto simples. obrigado ao atl lab pelo apoio e fornecimento do material
Olympus Evolt E510 Liberação de cabo remoto (versão 2 com foco automático no controle remoto): 6 etapas (com fotos)
Liberação de cabo remoto Olympus Evolt E510 (versão 2 com foco automático no controle remoto): Ontem eu construí um controle remoto simples de um botão para meu Olympus E510. A maioria das câmeras possui um botão de liberação do obturador (aquele que você pressiona para tirar uma foto) que possui dois modos. Se o botão for pressionado suavemente, a câmera fará o foco automático e medirá a luz