Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Quem nunca sonhou em voltar para casa apenas com um aplicativo de telefone, ou poder ouvir e copiar novamente os bondes de dados? Fico feliz em poder compartilhar com vocês o que percebi e como procedi. Comecei este projeto depois da segunda vez que esqueci minhas chaves …
Claro que a codificação, o tipo de modulação, a frequência da portadora, as informações de conexão bluetooth e os dados que vou mostrar no exemplo não são os originais, prefiro não ter visitantes;-).
Esta aplicação aplica-se a qualquer objeto capaz de receber informação digital por ondas eletromagnéticas (porta de garagem, carro, algumas venezianas …). Todo o sistema consiste em um objeto conectado por bluetooth a um telefone, podendo este objeto enviar os mesmos frames que o controle remoto associado ao que queremos hackear. Coloquei este objeto na minha garagem e posso conectá-lo do lado de fora.
Etapa 1: Equipamento
Linguagens utilizadas: C ++, MATLAB, Typescript, C, html.
Conhecimentos básicos em eletrônica digital e telecomunicações / processamento de sinais.
Custo: menos de $ 35.
Requisitos de hardware:
- NooELEC NESDR: para capturar os dados. Este módulo muito barato realiza uma demodulação digital, daí sua alta portabilidade. Este modelo é compatível com MATLAB. ($ 18,95)
www.nooelec.com/store/sdr/sdr-receivers/nes…
- Wemos Lolin32 lite: este esp32 é um microcontrolador barato, equipado com Wifi e Bluetooth. Não usaremos Wifi neste aplicativo, mas isso é amplamente concebível. ($ 4,74)
wiki.wemos.cc/products:lolin32:lolin32_lit…
- CDSENET cc1101: este rádio transmissor nos dá uma flexibilidade extrema, desde a frequência da portadora escolhida até o tipo de modulação. ($ 2,63)
www.aliexpress.com/item/2PC-Lot-E07-868MS1…
- Fios, cabeçalhos, equipamento de soldagem, bateria lipo 3,7 V para autonomia, possivelmente osciloscópio e / ou analisador lógico para depuração e, aliás, um smartphone …
Requisitos de software:
- MATLAB / Simulink: para capturar os dados. Outros softwares alternativos gratuitos podem ser usados, como o Audacity para visualização de dados. (licença)
fr.mathworks.com/products.html?s_tid=gn_ps
- Conjunto de ferramentas esp-idf: será usado para programar o esp32. O ide Arduino também pode ser usado, mas não permite tanta liberdade quanto o que iremos usar. (gratuitamente)
esp-idf.readthedocs.io/en/latest/get-starte…
- TI SmartRF Studio: ajudará na configuração dos registradores cc1101, de acordo com nossas especificações. (gratuitamente)
www.ti.com/tool/SMARTRFTM-STUDIO
- Ionic: para construir o aplicativo. Você pode fazer a escolha de construir aplicativos nativos, mas o Ionic nos permite rodar nosso aplicativo em dispositivos Android e IOS, com um único código. O desempenho não é procurado em nosso caso. (gratuitamente)
ionicframework.com/
- Seu ide favorito …
Etapa 2: espionando o controle remoto
Começaremos observando os dados que os comandos do controle remoto produzem. Para fazer isso, usaremos um dongle rtl-sdr e uma antena:
fr.mathworks.com/hardware-support/rtl-sdr….
Seguindo este link, você encontrará o pacote MATLAB, bem como um livro gratuito explicando todos os preços com suas explicações. Para resumir o que nos preocupa, os dados de trânsito estão na forma de um sinal de QI: um dado em fase "I", combinado com um dado de quadratura "Q". Este método facilita as telecomunicações. Só estaremos interessados em receber o sinal em fase. Agora vamos reunir as informações físicas e digitais do controle remoto. Se você puder encontrar alguma documentação sobre ele, será mais fácil. Eu não encontrei nenhum. Para ser capaz de observar temporariamente o sinal, devemos primeiro saber qual é a portadora de freqüência do sinal emitido. Usaremos o exemplo fornecido com a documentação do pacote "Análise Espectral com Rádio RTL-SDR", para saber exatamente em qual frequência observamos uma potência de pico quando enviamos um comando. No meu caso, é 868,22 MHz. As frequências "padrão" para este tipo de aplicações giram em torno de 868 MHz.
Com essas indicações, poderemos escrever um código MATLAB para recuperar os dados. Este está anexado na foto e comentado. O resultado nos permite encontrar o tipo de modulação: recuperando a informação bruta, exibindo o resultado logo após ter recuperado a parte real do sinal, podemos deduzir que é um ASK / OOK modulação. De fato, observamos que a frequência é invariante, entretanto, o sinal tem apenas duas amplitudes: uma nula e uma fixa. O resto do código nos permite recuperar o envelope do sinal recebido, facilitando a leitura para conhecer o trame. Uma vez exibida, podemos determinar a modulação da banda base: esta é uma codificação Manchester (veja a foto em anexo). Também podemos deduzir a taxa de transmissão (símbolos por segundo). Todas essas informações sendo coletadas, podemos conhecer o quadro de dados. No meu caso, os bytes encontrados são: 249, 39, 75, 178, 45, 200 e repetidos várias vezes, para garantir que o comando seja bem recebido. Felizmente, o código não está rolando, o quadro de dados é sempre o mesmo.
Etapa 3: enviar os mesmos frames de dados
O Texas Instruments cc1101 é tão flexível que você ainda alcançará seu objetivo, mesmo que as configurações encontradas na etapa anterior sejam completamente diferentes das minhas. Na verdade, você verá na documentação, página 2 (https://www.ti.com/lit/ds/symlink/cc1101.pdf) que permite realizar modulação NRZ, Manchester, FSK, ASK / OOK, para alcançar as frequências em torno de 433 MHz ou 868 MHz e muitas outras coisas. Aconselho você a ler a documentação para se familiarizar com este módulo.
Neste link você encontrará como exemplo o trabalho de Loboris referente à construção de funções a partir deste módulo:
github.com/loboris/ESP32_CC1101/tree/maste…
Vamos escrever nosso código para nosso esp32 com a cadeia de ferramentas esp-idf (veja os links da primeira etapa). Você pode adicionar os arquivos do link no subdiretório de componentes do seu projeto. Para configurar adequadamente nosso cc1101, precisaremos consertar seus registros. A Texas Instruments nos fornece um software que nos dá o valor dos registros de acordo com nossa configuração: SmartRF Studio.
Quanto a mim, indico ao software que desejo uma codificação Manchester, que a minha frequência portadora é de 868,22 MHz, que o meu tipo de modulação é ASK / OOK … deixo-vos inserir os vossos parâmetros. No caso em que sua codificação de banda base não estiver disponível, você pode considerar a codificação NRZ, aumentando adequadamente a taxa de transmissão e adaptando os dados.
Depois de definir seus valores, você tem várias opções quanto ao uso do módulo: você pode usar as funções que eu vinculei a você, ou o que fiz, apenas se inspire neste código, para configurar tudo de uma forma mais forma brutal (ver fotos em anexo), e só usamos o que precisamos.
Como o chip cc1101 se comunica por SPI, você encontrará no link do código de exemplo o arquivo de cabeçalho "spi_master_lobo.h", contendo funções mais fáceis de usar o SPI do que se você tivesse que usá-lo apenas com o conjunto de ferramentas. Acompanho vocês na foto o esquema da comunicação CC1101 no SPI, foto tirada da página 30 da ficha CC1101. Os quatro fios apresentados são: CS (Chip Select, ou SS: Slave Select, ou aqui CSn), CLK (ou SCLK, o Clock, fornecido pelo mestre), MISO (ou SO, Master In Slave Out) e MOSI (ou SI, Master Out Slave In). Em nosso caso, o mestre é o ESP32 e o escravo é o CC1101. As comunicações começam quando o pino CS está baixo, em geral.
Não se esqueça de habilitar nas opções do compilador do menuconfig as exceções C ++ para compilar.
Etapa 4: Conecte-se ao sistema
Se seu código funcionar, você fez o essencial. Nesta parte, vamos nos concentrar em como criar um aplicativo de telefone conectado ao sistema. A solução mais interessante é conectar por bluetooth, pois permite a utilização de um protocolo de baixa potência: Bluetooth Low Energy (BLE). O perfil da hierarquia é mostrado no desenho anexo: vamos ler e escrever o comando em uma Característica de um Serviço. E, claro, nosso esp32 e nosso smartphone estão equipados com bluetooth.
Esta etapa é dividida em duas partes: a parte esp32 e a parte do aplicativo. A foto anexa mostra e explica as principais partes dos códigos.
Você pode gerar seus UUIDs seguindo este link:
www.uuidgenerator.net/
Estes são os identificadores que fornecerão acesso aos serviços e recursos de nosso perfil BLE.
Sobre o código esp32 BLE, Kolban fez um ótimo trabalho tornando todas essas funções C ++ de alto nível compatíveis:
github.com/nkolban/esp32-snippets/tree/mas…
Você pode colocar esses arquivos no subdiretório de componentes. Caso contrário, você precisará de mais tempo para entender como usar o BLE com a cadeia de ferramentas esp-idf.
Em resumo do que você verá no código, criamos um Servidor, um Serviço e uma Característica, com os UUIDs associados, e adicionamos uma classe de retorno de chamada redefinida, com um método associado na gravação: quando recebemos o "O" personagem, enviamos um comando de escrita para o cc1101.
Claro, não se esqueça de habilitar o Bluetooth na configuração do componente do Menuconfig.
Sobre a parte do aplicativo, usaremos o Framework Ionic. Você pode encontrar mais informações sobre isso no link apresentado na primeira etapa, e para obter mais detalhes sobre como usar BLE com Ionic:
ionicframework.com/docs/native/ble/
E exemplos, escritos por don:
github.com/don/ionic-ble-examples/tree/mas…
Você pode editar, por exemplo, o exemplo "Conectar". Nós digitalizamos dispositivos em uma primeira página e alcançamos uma segunda página se selecionarmos nosso dispositivo. Em seguida, acessamos uma interface onde você pode adicionar um botão com o método apresentado na foto: envia nosso comando "O" com os UUIDs apropriados. Você também pode adicionar no construtor da primeira página o método "enable", pedindo para ativar o bluetooth no início do aplicativo.
Eu recomendo fortemente que você explore o site da Ionic e descubra todos os componentes (botões, alertas, caixas de seleção …) para aprimorar seu aplicativo:
ionicframework.com/docs/components/#overvi…
Etapa 5: otimizar o consumo de energia
Começamos a trabalhar com baixo consumo, então vamos trabalhar.
O conjunto de ferramentas esp-idf nos permite usar uma GUI de configuração, o menuconfig: muitos parâmetros podem diminuir o consumo de esp32. Em primeiro lugar, como não precisamos de Wifi, podemos desabilitá-lo na configuração do componente. Na mesma pasta, em FreeRTOS, você pode selecionar "Executar FreeRTOS apenas no primeiro núcleo. Em seguida, no ESP-específico, você pode diminuir a frequência da CPU para 80 MHz. Todas as funcionalidades ainda funcionam nesta velocidade de clock. Finalmente, você pode marque "Habilitar Coprocessador Ultra Low Power (ULP). Essa configuração faz com que o consumo de corrente vá de cerca de cem mA a cerca de trinta mA. Isso ainda é muito …
ESP32 pode lidar com o sono profundo. Apenas o núcleo de baixa energia está ligado e aguarda um despertar.
Veja este link abaixo para mais detalhes:
esp-idf.readthedocs.io/en/latest/api-refere…
Infelizmente, na última versão disponível da cadeia de ferramentas esp-idf (3.0), os únicos acordes disponíveis são por temporizadores e por interrupções de GPIOs. Felizmente, o Espressif nos promete BLE acordar na próxima versão (3.1).
Você também pode colocar o CC1101 em modo de espera, enviando no SPI o comando adequado para desligar o dispositivo (consulte a ficha técnica do cc1101, o comando SPWD, página 51). Para colocar o dispositivo em modo de espera ou para acordá-lo, você pode colocar baixo e depois alto o pino Chip Select dos pinos SPI (mais informações na ficha técnica).
Essas últimas configurações devem ser capazes de fazer o consumo do sistema passar abaixo dos mili-amperes …
Por fim, para fazer com que o sistema dure o máximo possível sem recarregar, ou mesmo chegar a um mês de autonomia, escolha a bateria de 3,7 V com o máximo de miliamperes por hora. Medindo o consumo de energia do seu sistema, com o display de um gerador ou amperímetro conectado em série antes do pólo + do seu sistema, você pode estimar o tempo que o seu sistema vai durar!