Inhoudsopgave:
- Stap 1: Uitrusting
- Stap 2: De afstandsbediening bespioneren
- Stap 3: Stuur dezelfde gegevensframes
- Stap 4: Maak verbinding met het systeem
- Stap 5: Stroomverbruik optimaliseren
Video: Hack je garagedeur: 5 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
Wie heeft er nooit van gedroomd om alleen met een telefoon-app naar huis te gaan, of datatrams te kunnen beluisteren en kopiëren? Ik ben blij om met u te kunnen delen wat ik me realiseerde en hoe ik te werk ben gegaan. Ik begon dit project na de tweede keer dat ik mijn sleutels vergat…
Natuurlijk zijn de codering, het type modulatie, de frequentie van de drager, de bluetooth-verbindingsinformatie en de data die ik ga laten zien in bijvoorbeeld niet de originelen, ik heb liever geen bezoekers;-).
Deze toepassing is van toepassing op elk object dat digitale informatie kan ontvangen door elektromagnetische golven (garagedeur, auto, sommige luiken …). Het hele systeem bestaat uit een object dat via bluetooth is verbonden met een telefoon, waarbij dit object dezelfde frames kan verzenden als de afstandsbediening die is gekoppeld aan wat we willen hacken. Ik heb dit object in mijn garage geplaatst en ik kan er van buitenaf verbinding mee maken.
Stap 1: Uitrusting
Gebruikte talen: C++, MATLAB, Typescript, C, html.
Basiskennis digitale elektronica en telecommunicatie/signaalverwerking.
Kosten: minder dan $ 35.
Hardwarevereisten:
- NooELEC NESDR: voor het vastleggen van de gegevens. Deze zeer goedkope module voert een digitale demodulatie uit, vandaar de hoge draagbaarheid. Dit model is compatibel met MATLAB. ($ 18,95)
www.nooelec.com/store/sdr/sdr-receivers/nes…
- Wemos Lolin32 lite: deze esp32 is een goedkope microcontroller, uitgerust met Wifi en Bluetooth. We zullen in deze applicatie geen gebruik maken van Wifi, maar dit is grotendeels denkbaar. ($ 4,74)
wiki.wemos.cc/products:lolin32:lolin32_lit…
- CDSENET cc1101: deze radiozender geeft ons een extreme flexibiliteit, van de gekozen draaggolffrequentie tot het type modulatie. ($ 2,63)
www.aliexpress.com/item/2PC-Lot-E07-868MS1…
- Draden, headers, lasapparatuur, 3.7V lipo batterij voor autonomie, eventueel oscilloscoop, en/of logic analyzer voor debuggen, en overigens een smartphone…
Softwarevereisten:
- MATLAB/Simulink: voor het vastleggen van de gegevens. Andere gratis alternatieve software kan worden gebruikt, zoals Audacity voor datavisualisatie. (vergunning)
fr.mathworks.com/products.html?s_tid=gn_ps
- esp-idf toolchain: deze wordt gebruikt voor het programmeren van de esp32. De Arduino ide kan ook worden gebruikt, maar deze biedt niet zoveel vrijheid als wat we zullen gebruiken. (vrij)
esp-idf.readthedocs.io/en/latest/get-starte…
- TI SmartRF Studio: dit helpt ons bij het configureren van de cc1101-registers, volgens onze specificaties. (vrij)
www.ti.com/tool/SMARTRFTM-STUDIO
- Ionic: voor het bouwen van de app. Je kunt de keuze maken om native apps te bouwen, maar Ionic stelt ons in staat om onze app op zowel Android- als IOS-apparaten te draaien, met een enige code. De prestatie wordt in ons geval niet gezocht. (vrij)
ionicframework.com/
- Je favoriete idee…
Stap 2: De afstandsbediening bespioneren
We beginnen met het observeren van de gegevens die de commando's van de afstandsbediening produceren. Om dit te doen, gebruiken we een rtl-sdr-dongle en antenne:
fr.mathworks.com/hardware-support/rtl-sdr….
Door deze link te volgen, vindt u het MATLAB-pakket, evenals een gratis boek waarin alle prijzen met hun uitleg worden uitgelegd. Om samen te vatten wat ons bezighoudt, de transitgegevens hebben de vorm van een IQ-signaal: een "I" in-fase-gegevens, gecombineerd met een "Q"-kwadratuurgegevens. Deze methode vergemakkelijkt de telecommunicatie. We zijn alleen geïnteresseerd in het ontvangen van het signaal in fase. We zullen nu de fysieke en digitale informatie over de afstandsbediening verzamelen. Als u er documentatie over kunt vinden, zal het gemakkelijker zijn. Ik heb er geen gevonden. Om het signaal tijdelijk waar te kunnen nemen, moeten we eerst weten wat de frequentiedrager is van het uitgezonden signaal. We zullen het voorbeeld gebruiken dat bij de pakketdocumentatie "Spectral Analysis with RTL-SDR Radio" wordt geleverd, om precies te weten op welke frequentie we een piekvermogen waarnemen als we een commando sturen. In mijn geval is dat 868,22 MHz. De "standaard" frequenties voor dit soort toepassingen liggen rond de 868 MHz.
Met deze indicaties kunnen we een MATLAB-code schrijven om de gegevens te herstellen. Deze is op foto bijgevoegd en becommentarieerd. Het resultaat stelt ons in staat om het type modulatie te vinden: door de onbewerkte informatie op te halen en het resultaat weer te geven net nadat we het echte deel van het signaal hebben hersteld, kunnen we afleiden dat het een ASK / OOK is modulatie. We zien inderdaad dat de frequentie invariant is, maar het signaal heeft slechts twee amplitudes: een nul en een vast. De rest van de code stelt ons in staat om de envelop van het ontvangen signaal te herstellen, gemakkelijker te lezen om de trame te kennen. Eenmaal weergegeven, kunnen we de basisbandmodulatie bepalen: dit is een Manchester-codering (zie bijgevoegde foto). We kunnen ook de baudrate (symbolen per seconde) afleiden. Als al deze informatie wordt verzameld, kunnen we het dataframe kennen. In mijn geval zijn de gevonden bytes: 249, 39, 75, 178, 45, 200 en meerdere keren herhaald om ervoor te zorgen dat het commando goed wordt ontvangen. Gelukkig rolt de code niet, het dataframe is altijd hetzelfde.
Stap 3: Stuur dezelfde gegevensframes
De Texas Instruments cc1101 is zo flexibel dat je je doel nog steeds zult bereiken, zelfs als de instellingen die je in de vorige stap hebt gevonden compleet anders zijn dan de mijne. U zult inderdaad in de documentatie, pagina 2 (https://www.ti.com/lit/ds/symlink/cc1101.pdf) zien dat het mogelijk is om NRZ, Manchester, FSK, ASK / OOK modulatie uit te voeren, om de frequenties rond 433 MHz of 868 MHz, en vele andere dingen. Ik raad je aan om de documentatie te lezen om je vertrouwd te maken met deze module.
Op deze link vindt u als voorbeeld het werk van Loboris betreffende de constructie van functies met behulp van deze module:
github.com/loboris/ESP32_CC1101/tree/maste…
We gaan onze code voor onze esp32 schrijven met de esp-idf toolchain (zie links van de eerste stap). U kunt de bestanden van de link toevoegen in de submap componenten van uw project. Om onze cc1101 correct te configureren, moeten we de registers repareren. Texas Instruments levert ons software die ons de waarde van de registers geeft volgens onze configuratie: SmartRF Studio.
Wat mij betreft, geef ik aan de software aan dat ik een Manchester-codering wens, dat mijn draaggolffrequentie 868,22 MHz is, dat mijn type modulatie ASK / OOK is … Ik laat je je parameters invoeren. In het geval dat uw basisbandcodering niet beschikbaar is, kunt u NRZ-codering overwegen, door de baudrate op de juiste manier te verhogen en de gegevens aan te passen.
Als je eenmaal je waarden hebt gedefinieerd, heb je verschillende keuzes met betrekking tot het gebruik van de module: je kunt de functies gebruiken die ik aan je heb gekoppeld, of wat ik heb gedaan, alleen inspiratie halen uit deze code, om alles in een meer brute manier (zie bijgevoegde foto's), en gebruik alleen wat we nodig hebben.
Omdat de cc1101-chip via SPI communiceert, vindt u in de link van de voorbeeldcode het headerbestand "spi_master_lobo.h", dat meer eenvoudigere functies bevat om de SPI te gebruiken dan wanneer u het alleen met de toolchain zou moeten gebruiken. Ik sluit me bij je aan op de foto van het schema van de CC1101-communicatie in SPI, foto genomen vanaf pagina 30 van het CC1101-gegevensblad. De vier gepresenteerde draden zijn: CS (Chip Select, of SS: Slave Select, of hier CSn), CLK (of SCLK, de klok, geleverd door de master), MISO (of SO, Master In Slave Out) en MOSI (of SI, Master Uit Slave In). In ons geval is de master de ESP32 en de slave de CC1101. De communicatie begint in het algemeen wanneer de CS-pin laag is.
Vergeet niet om in de compiler-opties van het menuconfig de C++-uitzonderingen voor compileren in te schakelen.
Stap 4: Maak verbinding met het systeem
Als je code werkt, heb je het essentiële gedaan. In dit deel zullen we ons concentreren op het maken van een telefoon-app die op het systeem is aangesloten. De meest interessante oplossing is om verbinding te maken via bluetooth, omdat het gebruik van een low-power protocol mogelijk maakt: Bluetooth Low Energy (BLE). Het hiërarchieprofiel wordt weergegeven in de bijgevoegde tekening: we lezen en schrijven de opdracht in een kenmerk van een service. En natuurlijk zijn onze esp32 en onze smartphone uitgerust met bluetooth.
Deze stap is verdeeld in twee delen: het esp32-gedeelte en het app-gedeelte. De bijgevoegde foto toont en verklaart de belangrijkste onderdelen van de codes.
U kunt uw UUID's genereren door deze link te volgen:
www.uuidgenerator.net/
Dit zijn de ID's die toegang geven tot de diensten en functies van ons BLE-profiel.
Over de esp32 BLE-code heeft Kolban geweldig werk geleverd door al deze C++-functies op hoog niveau compatibel te maken:
github.com/nkolban/esp32-snippets/tree/mas…
U kunt deze bestanden in de submap componenten plaatsen. Anders heeft u meer tijd nodig om te begrijpen hoe u BLE kunt gebruiken met de esp-idf-toolchain.
Samenvattend van wat u in de code zult zien, creëren we een server, een service en een kenmerk, met de bijbehorende UUID's, en we voegen een opnieuw gedefinieerde callback-klasse toe, met een bijbehorende methode bij schrijven: wanneer we de "O" ontvangen teken, sturen we een schrijfopdracht naar de cc1101.
Vergeet natuurlijk niet om Bluetooth in te schakelen in de Component config van de Menuconfig.
Over het app-gedeelte zullen we het Framework Ionic gebruiken. U kunt er meer informatie over vinden in de link die in de eerste stap wordt gepresenteerd, en voor meer informatie over het gebruik van BLE met Ionic:
ionicframework.com/docs/native/ble/
En voorbeelden, geschreven door don:
github.com/don/ionic-ble-examples/tree/mas…
U kunt bijvoorbeeld het voorbeeld "Verbinden" bewerken. We scannen apparaten op een eerste pagina en komen op een tweede pagina als we ons apparaat selecteren. We krijgen dan toegang tot een interface waar je een knop kunt toevoegen met de methode die op de foto wordt weergegeven: het stuurt ons commando "O" met de juiste UUID's. U kunt ook in de constructor van de eerste pagina de methode "inschakelen" toevoegen, waarbij u aan het begin van de applicatie vraagt om de bluetooth te activeren.
Ik raad je ten zeerste aan om de Ionic-website te verkennen en alle componenten (knoppen, waarschuwingen, selectievakjes…) te ontdekken om je applicatie te verbeteren:
ionicframework.com/docs/components/#overvi…
Stap 5: Stroomverbruik optimaliseren
We begonnen te werken aan een laag verbruik, dus laten we doorwerken.
De esp-idf toolchain stelt ons in staat om een configuratie-GUI te gebruiken, de menuconfig: veel parameters kunnen het esp32-verbruik verlagen. Allereerst, omdat we geen wifi nodig hebben, kunnen we het uitschakelen in de Component-configuratie. In dezelfde map, in FreeRTOS, kun je "Run FreeRTOS only on first core" selecteren. Vervolgens kun je in ESP-specifiek de CPU-frequentie verlagen tot 80 MHz. Alle functionaliteiten werken nog steeds op deze kloksnelheid. Ten slotte kun je vink "Enable Ultra Low Power (ULP) Coprocessor aan. Door deze configuratie gaat het stroomverbruik van ongeveer honderd mA naar ongeveer dertig mA. Dit is nog te veel…
ESP32 kan diepe slaap aan. Alleen de energiezuinige kern staat aan en wacht op een wake-up.
Zie deze link hieronder voor meer details:
esp-idf.readthedocs.io/en/latest/api-refere…
Helaas, in de laatst beschikbare versie van de esp-idf toolchain (3.0), is de enige beschikbare wake-up door timers en door GPIO's-onderbrekingen. Gelukkig belooft Espressif ons BLE wake up in de volgende versie (3.1).
U kunt de CC1101 ook in de slaapstand zetten door SPI het juiste commando te sturen om het apparaat uit te schakelen (zie cc1101-datasheet, het SPWD-commando, pagina 51). Om het apparaat in de slaapstand te zetten of om het wakker te maken, kunt u de Chip Select-pin van de SPI-pinnen laag en dan hoog zetten (meer info in de datasheet).
Deze laatste configuraties zouden in staat moeten zijn om het verbruik van het systeem onder de milli-ampère te laten komen…
Ten slotte, om het systeem zo lang mogelijk te laten meegaan zonder op te laden, of zelfs een maand autonomie te bereiken, kies je de 3,7 V-batterij met de meeste milli-ampère per uur. Door het stroomverbruik van uw systeem te meten, met het display van een generator of een ampèremeter die in serie is geschakeld vóór uw + pool van uw systeem, kunt u inschatten hoe lang uw systeem meegaat!
Aanbevolen:
Alexa gecontroleerde garagedeur met Arduino Esp8266 - Ajarnpa
Alexa gecontroleerde garagedeur met Arduino Esp8266: het idee voor dit project kwam naar mij van een oud project waar ik een tijdje geleden aan had gewerkt. Ik had een eenvoudig drukknopcircuit aangesloten dat een LED zou inschakelen wanneer er op een knop werd gedrukt bij de garagedeur. Deze methode bleek onbetrouwbaar en niet zo nuttig
Onzichtbare garagedeur afstandsbediening - Ajarnpa
Onzichtbare afstandsbediening voor garagedeur: een keer lieten we onze auto buiten de garage staan en een dief sloeg een raam in om bij de afstandsbediening van de garagedeur te komen. Daarna openden ze de garage en stalen ze enkele fietsen. Dus besloot ik de afstandsbediening te verbergen door hem in de asbak van de auto te bouwen. Het werkt door om
Garagedeur Status Light Hack - Ajarnpa
Garagedeur Status Light Hack: Ik woon in een huis waar het niet gemakkelijk is om te zien of de garagedeur open of gesloten is. We hebben een knop in huis, maar de deur is uit het zicht. De gedachte om een soort schakelaar en voeding te engineeren was onwenselijk vanwege de hoge pr
Een draadloze versie van Is mijn garagedeur open of gesloten? - Ajarnpa
Een draadloze versie van… Is mijn garagedeur open of gesloten?: We wilden een eenvoudig, goedkoop en betrouwbaar indicatiesysteem dat ons liet zien of onze garagedeuren open of gesloten waren. Er zijn tal van "Is mijn garagedeur open" projecten. De overgrote meerderheid van deze projecten is hard wired. In mijn geval rennen
Eenvoudige garagedeur-hack: 4 stappen (met afbeeldingen)
Eenvoudige garagedeur-hack: nadat ik meer dan eens per ongeluk mijn huis had buitengesloten, besloot ik dat er een betere manier moest zijn om mijn huis binnen te gaan zonder inbraak (en zonder ergens een sleutel buiten te verbergen). een kijkje nemen op mijn g