Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Hvem har aldri drømt om å reise hjem bare med en telefonapp, eller å kunne lytte til og kopiere datatrikk? Jeg er glad for å kunne dele med deg hva jeg innså, og hvordan jeg gikk frem. Jeg startet dette prosjektet etter at jeg glemte nøklene andre gang …
Selvfølgelig er kodingen, typen modulasjon, operatørens frekvens, informasjon om bluetooth-tilkobling og dataene jeg skal vise i eksemplet ikke originalene, jeg foretrekker å ikke ha besøk;-).
Denne applikasjonen gjelder ethvert objekt som er i stand til å motta digital informasjon med elektromagnetiske bølger (garasjeport, bil, noen skodder …). Hele systemet består av et objekt koblet via bluetooth til en telefon, dette objektet kan sende de samme bildene som fjernkontrollen knyttet til det vi ønsker å hacke. Jeg plasserte dette objektet i garasjen min, og jeg kan koble til det fra utsiden.
Trinn 1: Utstyr
Språk som brukes: C ++, MATLAB, Typescript, C, html.
Grunnleggende kunnskap innen digital elektronikk og telekommunikasjon/signalbehandling.
Kostnad: mindre enn $ 35.
Krav til maskinvare:
- NooELEC NESDR: for å fange dataene. Denne veldig billige modulen utfører en digital demodulering, derav dens høye portabilitet. Denne modellen er kompatibel med MATLAB. ($ 18,95)
www.nooelec.com/store/sdr/sdr-receivers/nes…
- Wemos Lolin32 lite: denne esp32 er en billig mikrokontroller, utstyrt med Wifi og Bluetooth. Vi vil ikke bruke Wifi i denne applikasjonen, men dette er stort sett tenkelig. ($ 4,74)
wiki.wemos.cc/products:lolin32:lolin32_lit…
- CDSENET cc1101: denne radiosenderen gir oss en ekstrem fleksibilitet, fra den valgte bærefrekvensen til typen modulasjon. ($ 2,63)
www.aliexpress.com/item/2PC-Lot-E07-868MS1…
- Ledninger, hoder, sveiseutstyr, 3,7V lipo -batteri for autonomi, muligens oscilloskop og/eller logisk analysator for feilsøking, og forøvrig en smarttelefon …
Programvarekrav:
- MATLAB/Simulink: for registrering av data. Andre gratis alternative programvarer kan brukes, som Audacity for datavisualisering. (tillatelse)
fr.mathworks.com/products.html?s_tid=gn_ps
- esp-idf verktøykjede: dette vil bli brukt til programmering av esp32. Arduino -ideen kan også brukes, men den tillater ikke så mye frihet som det vi vil bruke. (gratis)
esp-idf.readthedocs.io/en/latest/get-starte…
- TI SmartRF Studio: dette vil hjelpe oss med å konfigurere cc1101 -registerene, i henhold til våre spesifikasjoner. (gratis)
www.ti.com/tool/SMARTRFTM-STUDIO
- Ionisk: for å bygge appen. Du kan velge mellom å bygge innfødte apper, men Ionic lar oss kjøre appen vår på både Android- og IOS -enheter, med en eneste kode. Ytelsen er ikke søkt i vårt tilfelle. (gratis)
ionicframework.com/
- Din favoritt ide …
Trinn 2: Spionere fjernkontrollen
Vi starter med å observere dataene som kommandoene på fjernkontrollen produserer. For å gjøre dette, bruker vi en rtl-sdr dongle og antenne:
fr.mathworks.com/hardware-support/rtl-sdr….
Ved å følge denne lenken finner du MATLAB -pakken, i tillegg til en gratis bok som forklarer alle prinsippene med forklaringen. For å oppsummere det som angår oss, er transittdataene i form av et IQ-signal: en "I" -fasedata, kombinert med en "Q" -kvadraturdata. Denne metoden letter telekommunikasjon. Vi vil bare være interessert i å motta signalet i fase. Vi vil nå samle den fysiske og digitale informasjonen på fjernkontrollen. Hvis du finner dokumentasjon på den, blir det lettere. Jeg fant ingen. For å kunne observere signalet midlertidig må vi først vite hva som er frekvensbæreren til det utsendte signalet. Vi vil bruke eksemplet som følger med pakkedokumentasjonen "Spektralanalyse med RTL-SDR Radio", for å vite nøyaktig med hvilken frekvens vi observerer en toppeffekt når vi sender en kommando. I mitt tilfelle er det 868,22 MHz. "Standard" -frekvensene for denne typen applikasjoner er rundt 868 MHz.
Med disse indikasjonene vil vi kunne skrive en MATLAB -kode for å gjenopprette dataene. Denne er vedlagt på bildet og kommentert. Resultatet lar oss finne typen modulering: ved å hente råinformasjonen, vise resultatet like etter å ha gjenopprettet den virkelige delen av signalet, kan vi utlede at det er en ASK / OOK modulasjon. Faktisk observerer vi at frekvensen er variabel, men signalet har bare to amplituder: en null og en fast. Resten av koden lar oss gjenopprette konvolutten til det mottatte signalet, gjort lettere å lese for å kjenne tram. Når den er vist, kan vi bestemme basebåndsmoduleringen: dette er en Manchester -koding (se vedlagte bilde). Vi kan også utlede overføringshastigheten (symboler per sekund). All denne informasjonen som samles inn, vi kan kjenne datarammen. I mitt tilfelle er byteene som er funnet: 249, 39, 75, 178, 45, 200 og gjentatt flere ganger, for å sikre at kommandoen blir godt mottatt. Heldigvis ruller ikke koden, datarammen er alltid den samme.
Trinn 3: Send de samme datarammene
Texas Instruments cc1101 er så fleksibel at du fortsatt vil nå målet ditt, selv om innstillingene du fant i forrige trinn er helt forskjellige fra mine. Faktisk vil du se i dokumentasjonen, side 2 (https://www.ti.com/lit/ds/symlink/cc1101.pdf) at den tillater å utføre NRZ, Manchester, FSK, ASK/OOK -modulasjon for å nå frekvensene rundt 433 MHz eller 868 MHz, og mange andre ting. Jeg anbefaler deg å lese dokumentasjonen for å gjøre deg kjent med denne modulen.
På denne lenken finner du som et eksempel arbeidet til Loboris om konstruksjon av funksjoner ved hjelp av denne modulen:
github.com/loboris/ESP32_CC1101/tree/maste…
Vi skal skrive koden vår for esp32 med esp-idf verktøykjeden (se lenker til det første trinnet). Du kan legge til filene til lenken i komponentundermappen til prosjektet ditt. For å konfigurere cc1101 riktig må vi fikse registrene. Texas Instruments gir oss programvare som gir oss verdien av registerene i henhold til vår konfigurasjon: SmartRF Studio.
Når det gjelder meg, indikerer jeg for programvaren at jeg ønsker en Manchester -koding, at bærerfrekvensen min er 868,22 MHz, at min type modulasjon er ASK / OOK … Jeg lar deg angi parametrene dine. I tilfelle der basebåndkodingen din ikke er tilgjengelig, kan du vurdere NRZ -koding ved å øke overføringshastigheten på riktig måte og tilpasse dataene.
Når du har definert verdiene dine, har du flere valg angående bruken av modulen: du kan bruke funksjonene jeg har knyttet til deg, eller hva jeg gjorde, bare ta inspirasjon fra denne koden for å konfigurere alt på en mer brutal måte (se vedlagte bilder), og bare bruk det vi trenger.
Ettersom cc1101 -brikken kommuniserer med SPI, finner du i lenken til eksempelkoden toppteksten "spi_master_lobo.h", som inneholder flere enklere funksjoner for bruk av SPI enn om du måtte bruke den med bare verktøykjeden. Jeg blir med deg i fotoskjemaet for CC1101 -kommunikasjonen i SPI, bildet tatt fra side 30 i CC1101 -databladet. De fire ledningene som presenteres er: CS (Chip Select eller SS: Slave Select, eller her CSn), CLK (eller SCLK, klokken, levert av masteren), MISO (eller SO, Master In Slave Out) og MOSI (eller SI, Master Out Slave In). I vårt tilfelle er mesteren ESP32, og slaven er CC1101. Kommunikasjon starter generelt når CS -pinnen er lav.
Ikke glem å aktivere i kompilatoralternativene i menykonfigurasjonen C ++ - unntakene for kompilering.
Trinn 4: Koble til systemet
Hvis koden din fungerer, har du gjort det viktigste. I denne delen vil vi fokusere på hvordan du oppretter en telefonapp som er koblet til systemet. Den mest interessante løsningen er å koble til med bluetooth, fordi den tillater bruk av en lavstrømsprotokoll: Bluetooth Low Energy (BLE). Hierarkiprofilen er vist på tegningen vedlagt: vi vil lese og skrive kommandoen i en karakteristisk for en tjeneste. Og selvfølgelig er esp32 og smarttelefonen vår utstyrt med bluetooth.
Dette trinnet er delt inn i to deler: esp32 -delen og app -delen. Bildet vedlagt viser og forklarer hoveddelene i kodene.
Du kan generere UUID -er ved å følge denne lenken:
www.uuidgenerator.net/
Dette er identifikatorene som gir tilgang til tjenestene og funksjonene i vår BLE -profil.
Om esp32 BLE -koden gjorde Kolban et godt arbeid med å gjøre alle disse C ++ - funksjonene på høyt nivå kompatible:
github.com/nkolban/esp32-snippets/tree/mas…
Du kan sette disse filene i komponentundermappen. Ellers trenger du mer tid for å forstå hvordan du bruker BLE med esp-idf verktøykjeden.
I sammendrag av det du vil se i koden, oppretter vi en server, en tjeneste og en karakteristikk, med de tilknyttede UUID -ene, og vi legger til en omdefinert tilbakeringingsklasse, med en tilknyttet metode på skrive: når vi mottar "O" tegn, sender vi en skrivekommando til cc1101.
Selvfølgelig, ikke glem å aktivere Bluetooth i komponentkonfigurasjonen til Menuconfig.
Om appdelen vil vi bruke Framework Ionic. Du finner mer informasjon om det i lenken som ble presentert i det første trinnet, og for mer informasjon om hvordan du bruker BLE med Ionic:
ionicframework.com/docs/native/ble/
Og eksempler, skrevet av don:
github.com/don/ionic-ble-examples/tree/mas…
Du kan for eksempel redigere eksempelet "Koble til". Vi skanner enheter på en første side, og når en annen side hvis vi velger enheten vår. Vi får deretter tilgang til et grensesnitt der du kan legge til en knapp med metoden som presenteres på bildet: den sender kommandoen vår "O" med de riktige UUID -ene. Du kan også legge til konstruktøren på den første siden metoden "aktiver" og be om å aktivere bluetooth ved starten av programmet.
Jeg anbefaler deg på det sterkeste å utforske det ioniske nettstedet og oppdage alle komponentene (knapper, varsler, avmerkingsbokser …) for å forbedre applikasjonen din:
ionicframework.com/docs/components/#overvi…
Trinn 5: Optimaliser strømforbruket
Vi begynte å jobbe med lavt forbruk, så la oss jobbe videre.
Med esp-idf verktøykjeden kan vi bruke en konfigurasjons-GUI, menykonfigurasjonen: mange parametere kan senke esp32-forbruket. Først av alt, ettersom vi ikke trenger Wifi, kan vi deaktivere det i komponentkonfigurasjonen. I den samme mappen, i FreeRTOS, kan du velge "Kjør FreeRTOS bare på første kjerne. Deretter kan du i ESP-spesifikk senke CPU-frekvensen til 80 MHz. Alle funksjonalitetene fungerer fortsatt med denne klokkehastigheten. Til slutt kan du merk av for "Aktiver Ultra Low Power (ULP) coprocessor. Denne konfigurasjonen gjør at dagens forbruk går fra omtrent hundre mA til omtrent tretti mA. Dette er fortsatt for mye…
ESP32 kan håndtere dyp søvn. Bare lavenergikjernen er på og venter på en oppvåkning.
Se denne lenken nedenfor for mer informasjon:
esp-idf.readthedocs.io/en/latest/api-refere…
Dessverre, i den siste tilgjengelige versjonen av esp-idf verktøykjeden (3.0), er det eneste som våkner tilgjengelig av tidtakere og av GPIO-forstyrrelser. Heldigvis lover Espressif oss BLE våkne i neste versjon (3.1).
Du kan også sette CC1101 i hvilemodus ved å sende inn SPI den riktige kommandoen for å slå av enheten (se cc1101 -databladet, SPWD -kommandoen, side 51). For å sette enheten i hvilemodus eller for å vekke den, kan du sette Chip Select -pinnen på SPI -pinnene lavt og høyt (mer informasjon i databladet).
Disse siste konfigurasjonene skal kunne få forbruket til systemet til å passere under milliampere …
Til slutt, for å få systemet til å vare så lenge som mulig uten å lade opp, eller til og med nå en måned med autonomi, velger du 3,7V batteri med flest milliampere per time. Ved å måle strømforbruket til systemet ditt, med visning av en generator eller et amperemeter koblet i serie før + polen i systemet ditt, kan du anslå tiden systemet ditt vil vare!