INHOUDSOPGAWE:
- Stap 1: Die opstel van die ontvanger -eenheid
- Stap 2: Snuif die handsetkodes
- Stap 3: Transkribeer die gevolglike sein
- Stap 4: Die opstel van die sender -eenheid
- Stap 5: Die oordrag van seine met behulp van die Pi
- Stap 6: 'n Opmerking oor akkuraatheid van tydsberekening
- Stap 7: Gevolgtrekking
Video: Super eenvoudige Raspberry Pi 433MHz Tuisautomatisering: 7 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
Hierdie handleiding is een van die vele oor die gebruik van 'n Raspberry Pi om draadlose toestelle in die huis te beheer. Soos baie ander, sal dit u wys hoe u 'n goedkoop sender/ontvanger -paar wat op u Pi gekoppel is, kan gebruik om met toestelle te werk wat op die algemeen gebruikte 433MHz radiofrekwensieband werk. Dit sal u spesifiek wys hoe u 'n elektriese toestel met u Pi kan aan- of uitskakel deur opdragte na 'n stel afstandbeheerde stopkontakte van 433 MHz oor te dra.
Waarom het ek hierdie tutoriaal geskep as daar al soveel bestaan? Hoofsaaklik omdat al die ander tutoriale wat ek teëgekom het, dinge blykbaar te ingewikkeld het, veral aan die sagtewarekant. Ek het opgemerk dat hulle sterk staatmaak op derdeparty-biblioteke, skrifte of kodebrokkies om al die werk te doen. Baie sal nie eens verduidelik wat die onderliggende kode doen nie - hulle sou u net vra om twee of drie stukke sagteware op u Pi te druk en 'n klomp opdragte uit te voer, sonder om vrae te vra. Ek wou regtig probeer om my Pi te gebruik om elektriese toestelle in en om my huis aan te skakel met 'n stel afstandsbedieningsaansluitings van 433 MHz, maar ek wou my eie weergawe van die stelsel skep wat ek kon verstaan, en hopelik die noodsaaklikheid om gebruik iemand anders se biblioteke of skrifte.
Dit is waaroor hierdie tutoriaal handel. Die sagteware -kant van hierdie stelsel bestaan uit twee baie eenvoudige Python -skrifte - een vir die ontvangs en opneem van seine, en een vir die oordrag van hierdie seine na die draadlose kragpunte. Die werklike ontvangs/oordrag van die sein is slegs afhanklik van die maklik om te gebruik RPi. GPIO-biblioteek, wat ten minste vir my vooraf geïnstalleer is met Raspbian. Hierdie biblioteek kan ook direk in Python ingevoer word.
Vir hierdie projek benodig u:
'N Framboos Pi. Elke model behoort te werk; ek het 'n alles-in-een-aansitstel gebruik, maar miskien het u slegs die sentrale eenheid nodig
'N 433MHz sender/ontvanger -paar. Diegene wat die meeste in hierdie tipe projekte gebruik word, blyk hierdie te wees. As u 'n pakkie van vyf koop, soos die een wat gekoppel is, verseker u dat u 'n paar onderdele het
'N Stel 433 MHz-afstandsbeheer-stopcontacte. Ek het dit gebruik wat ek sterk aanbeveel, maar daar is talle modelle beskikbaar. Maak net seker dat hulle op hierdie frekwensie werk
'N Paar bykomstighede vir die bou van stroombane. Ek beveel aan dat u 'n broodbord en 'n paar springkabels gebruik om die baanbouproses so maklik as moontlik te maak.
[As u besluit om een van hierdie produkte te koop, sal ek dit baie waardeer as u toegang tot die volledige lys kry met die bogenoemde skakels - op hierdie manier kry ek 'n klein deel van die wins sonder ekstra koste!]
Stap 1: Die opstel van die ontvanger -eenheid
Voordat u u Pi kan gebruik om opdragte na die afstandbeheerde voetstukke te stuur, moet u weet op watter spesifieke seine hulle reageer. Die meeste afstandbeheerde voetstukke word voorsien van 'n toestel wat gebruik kan word om spesifieke eenhede aan of uit te skakel. In die geval van die wat ek gekoop het, het die toestel vier rye gekoppelde AAN/UIT -knoppies, wat elkeen 'n AAN- of UIT -sein na 'n spesifieke sokeenheid stuur.
Dit laat 'n vraag ontstaan - hoe weet ons watter knoppies ooreenstem met watter aansluiting? Dit hang eintlik af van die model wat u het. Een van die belangrikste redes waarom ek my spesifieke aansluitingstyl gekies het (in die inleiding genoem), is dat die eenhede met 'n fisiese skakelaar gekonfigureer kan word om 'n spesifieke aansluiting op 'n spesifieke stel AAN/UIT -knoppies op die toestel te laat reageer. Dit beteken ook dat u die voetstukke kan ontkoppel en in die huis kan skuif met die wete dat elke eenheid altyd op dieselfde AAN/UIT seine sal reageer.
Nadat u agtergekom het hoe u voetstukke met die handset in wisselwerking tree, moet u u 433MHz -ontvanger -eenheid (foto hierbo) gebruik om die kodes wat deur die toestel gestuur word, te 'snuif'. Sodra u die golfvorms van hierdie kodes aangeteken het, kan u dit met Python herhaal en dit met die sender -eenheid stuur.
Die eerste ding wat u hier moet doen, is om die penne op u ontvanger aan die korrekte GPIO -penne op die Pi te koppel. Die ontvanger -eenheid het vier penne, maar slegs drie is nodig. Ek dink dat beide die sentrale penne dieselfde uitset lewer, dus u hoef slegs aan een daarvan te koppel (tensy u die ontvangde seine na twee afsonderlike GPIO -penne wil stroom).
Die prent hierbo gee 'n opsomming van die bedrading. Elke pen op die ontvanger kan direk aan die ooreenstemmende pen op die Pi gekoppel word. Ek gebruik 'n broodbord en springkabels om die proses 'n bietjie meer elegant te maak. Let daarop dat u enige GPIO -datapennetjie kan kies om met een van die sentrale ontvangerpenne aan te sluit. Ek gebruik die pen wat op die Pi gemerk is as '23'.
BELANGRIK: As u die pen gemerk '3v3' in die bostaande prent aansluit op 'n pen met 'n hoër spanning op die Pi (bv. 5v), sal u die Pi waarskynlik beskadig, aangesien die GPIO -penne nie spanning bo 3v3 kan verdra nie. Alternatiewelik kan u dit met 5v voed en 'n spanningsverdeler instel om 'n veilige spanning na die DATA -pen te stuur.
Die omvang van die ontvanger sal by hierdie spanning nie baie groot wees nie, veral as 'n antenna nie gekoppel is nie. U het egter nie 'n lang afstand hier nodig nie - solank die ontvanger die seine van die toestel kan optel as dit langs mekaar gehou word, is dit al wat ons nodig het.
Stap 2: Snuif die handsetkodes
Noudat u ontvanger aan die Pi gekoppel is, kan u die eerste opwindende fase van hierdie projek begin - die snuif. Dit behels die gebruik van die aangehegte Python -script om die sein op te neem wat deur die toestel gestuur word wanneer elke knoppie ingedruk word. Die draaiboek is baie eenvoudig, en ek beveel sterk aan dat u dit eers bekyk voordat u dit begin - die punt van hierdie projek is immers dat u nie net die kode van iemand anders blindelings sal bestuur nie!
Voordat u met hierdie proses begin, moet u seker maak dat u die Python -biblioteke het wat u benodig om die sniffer -script uit te voer. Hulle word bo -aan die draaiboek gelys:
vanaf datetime invoer datetime
invoer matplotlib.pyplot as pyplot invoer RPi. GPIO as GPIO
Die RPi. GPIO- en datetime -biblioteke is by my Raspbian -verspreiding ingesluit, maar ek moes die matplotlib -biblioteek soos volg installeer:
sudo apt-get install python-matplotlib
Hierdie biblioteek is 'n algemeen gebruikte grafiekplotbiblioteek wat baie nuttig is, selfs buite hierdie projek, dus dit kan beslis nie skade doen om dit te installeer nie! Sodra u biblioteke op datum is, is u gereed om data op te neem. Hier is hoe die skrif werk:
As dit uitgevoer word (met die opdrag 'python ReceiveRF.py'), stel dit die gedefinieerde GPIO -pen as 'n data -invoer op (standaard pin pin 23). Dit sal dan voortdurend 'n monster van die pen neem en aanteken of dit 'n digitale 1 of 0. ontvang. Dit duur 'n vaste duur (standaard 5 sekondes). As hierdie tydsbeperking bereik is, sal die script stop met die opname van data en die GPIO -invoer sluit. Dit verwerk dan 'n bietjie na-verwerking en teken die ontvangen insetwaarde op teen tyd. Weereens, as u vrae het oor wat die skrif doen, kan u dit waarskynlik self beantwoord nadat u gekyk het hoe dit werk. Ek het probeer om die kode so leesbaar en eenvoudig moontlik te maak.
Wat u moet doen, is om uit te kyk wanneer die script aandui dat dit ** begin het met opnames **. Sodra hierdie boodskap verskyn, moet u een van die knoppies op die toestel ongeveer 'n sekonde ingedruk hou. Hou dit naby die ontvanger. Sodra die script klaar is met opnames, sal dit matplotlib gebruik om 'n grafiese golfvorm te teken van die sein wat dit tydens die opname -interval ontvang het. Let op: as u met 'n SSH -kliënt soos PuTTY aan u Pi gekoppel is, moet u ook 'n X11 -toepassing oopmaak sodat die golfvorm kan verskyn. Ek gebruik xMing hiervoor (en vir ander dinge, soos om op my Pi te werk). Om die plot te laat vertoon, begin u met xMing voordat u die script uitvoer en wag totdat die resultate verskyn.
Sodra u matplotlib -venster verskyn, moet die belangstelling in die plot redelik duidelik wees. U kan met die kontroles aan die onderkant van die venster inzoomen totdat u die hoogte- en laagtepunte van die sein wat deur die handset oorgedra word, kan bepaal terwyl die knoppie ingedruk gehou is. Sien die prent hierbo vir 'n voorbeeld van 'n volledige kode. Die sein sal waarskynlik uit baie kort pulse bestaan, geskei deur soortgelyke tydperke waar geen sein ontvang word nie. Hierdie blok kort pulse sal waarskynlik gevolg word deur 'n langer tydperk waar niks ontvang word nie, waarna die patroon sal herhaal. Nadat u die patroon van 'n enkele voorbeeld van die kode geïdentifiseer het, neem u 'n kiekie bo -aan hierdie bladsy en gaan u na die volgende stap om dit te interpreteer.
Stap 3: Transkribeer die gevolglike sein
Noudat u die blok periodieke hoogte- en laagtepunte identifiseer wat ooreenstem met die sein van 'n spesifieke knoppie, moet u dit stoor en interpreteer. In die bogenoemde seinvoorbeeld, sal u opmerk dat daar slegs twee unieke patrone is wat die hele seinblok uitmaak. Soms sien jy 'n kort hoogtepunt gevolg deur 'n lang laagtepunt, en soms is dit die teenoorgestelde - 'n lang hoogtepunt gevolg deur 'n kort laagtepunt. Toe ek my seine transkribeer, het ek besluit om die volgende benamingskonvensie te gebruik:
1 = short_on + long_off0 = long_on + short_off
Kyk weer na die benoemde golfvorm, en u sal sien wat ek bedoel. Nadat u die ekwivalente patrone in u sein geïdentifiseer het, hoef u slegs die 1's en 0's te tel om die ry op te stel. As dit getranskribeer word, kan die bogenoemde sein soos volg geskryf word:
1111111111111010101011101
U hoef net hierdie proses te herhaal om die seine wat ooreenstem met die ander knoppies op u toestel op te neem en te transkribeer, en u het die eerste deel van die proses voltooi!
Voordat u die seine weer met die sender kan stuur, moet u nog 'n bietjie werk doen. Die tydsberekening tussen die hoogte- en laagtepunte wat ooreenstem met 'n 1 of 'n 0 is baie belangrik, en u moet seker maak dat u weet hoe lank 'n 'kort_aan' of '' 'n lang af '' eintlik duur. Vir my kodes was daar drie stukke tydsinligting wat ek moes haal om die seine te herhaal:
- Die duur van 'n 'kort' interval, dit wil sê die begin van 'n 1 of die einde van 'n 0.
- Die duur van 'n 'lang' interval, dit wil sê die einde van 'n 1 of die begin van 'n 0.
- Die duur van 'n 'verlengde' interval. Ek het opgemerk dat daar 'n 'verlengde -af' -tydperk was tussen elke herhaalde geval van die seinblok toe ek 'n knoppie op die toestel ingedruk gehou het. Hierdie vertraging word gebruik vir sinchronisasie en het 'n vaste duur.
Om hierdie tydsberekeningwaardes te bepaal, kan u die zoomfunksie op die matplotlib -venster gebruik om heeltemal in te zoem en die wyser oor die relevante dele van die sein te plaas. Deur die wyser van die wyser aan die onderkant van die venster moet u kan bepaal hoe breed elke deel van die sein is wat ooreenstem met 'n lang, kort of uitgebreide interval. Let daarop dat die x-as van die plot tyd verteenwoordig, en die x-komponent van die wyser van die wyser is in eenhede van sekondes. Vir my was die breedtes soos volg (in sekondes):
- kort vertraging = 0.00045
- long_delay = 0.00090 (twee keer so lank as 'n 'short')
- verlengde vertraging = 0.0096
Stap 4: Die opstel van die sender -eenheid
Sodra u u kodes en tydsberekeningdata versamel het, kan u die ontvanger -eenheid ontkoppel, aangesien u dit nie meer nodig het nie. U kan die sender dan direk aan die relevante Pi GPIO -penne koppel, soos in die prent hierbo getoon. Ek het gevind dat die penne op die sendereenhede gemerk is, wat die proses makliker maak.
In hierdie geval is dit goed om die eenheid met die 5v -voeding van die Pi aan te dryf, aangesien die DATA -pen nie seine na die Pi sal stuur nie, slegs deur hulle te ontvang. 'N 5V -kragtoevoer bied ook 'n groter oordragreeks as die gebruik van die 3v3 -toevoer. Weereens kan u die DATA -pen aan enige gepaste pen op die Pi koppel. Ek gebruik pen 23 (dieselfde as vir die ontvanger).
'N Ander ding wat ek aanbeveel om te doen, is om 'n antenna by die klein gaatjie regs bo op die sender te voeg. Ek het 'n stuk reguit draad van 17 cm lank gebruik. Sommige bronne beveel 'n opgerolde draad van dieselfde lengte aan. Ek weet nie wat die beste is nie, maar die reguit draad bied genoeg bereik sodat ek die voetstukke vanaf enige plek in my klein woonstel aan/uit kan skakel. Dit is die beste om die antenna te soldeer, maar ek het net 'n deel van die plastiek van die draad verwyder en die koper deur die gat gedraai.
Sodra die sender aangeskakel is, is al die hardeware -opstelling gedoen! Die enigste ding wat u nou moet doen, is om u voetstukke om die huis te sit en na die senderprogram te kyk.
Stap 5: Die oordrag van seine met behulp van die Pi
Dit is waar die tweede Python -script inkom. Dit is ontwerp om net so eenvoudig soos die eerste te wees, indien nie meer nie. Laai dit weer af en kyk na die kode. U moet die script wysig om die korrekte seine oor te dra volgens die data wat u in stap 3 opgeteken het, dus dit is 'n goeie tyd om vinnig daarna te kyk.
Die biblioteke wat nodig was om hierdie script uit te voer, was almal vooraf geïnstalleer op my Pi, dus was geen verdere installasie nodig nie. Hulle word bo -aan die draaiboek gelys:
invoer tyd
invoer sys invoer RPi. GPIO as GPIO
Onder die biblioteekinvoer is die inligting wat u sal moet wysig. Hier is hoe dit standaard lyk (dit is die inligting wat ooreenstem met my voetstukke, soos bepaal met behulp van stap 3):
a_on = '1111111111111011011001101'
a_off = '1111111111111010101010111' b_on = '1111111111101110101011101' b_off = '1111111111101110101010111' c_on = '1111111111101011101011101' c_off = '11111111111010111010111' d_on = '1111111111101010111011101 '110011101110110011101100110011001100110011001?
Hier het ons agt kode snare (twee vir elke paar aan/af knoppies op my selfoon - u kan meer of minder kodes hê) gevolg deur die drie stukkies tydsinligting wat ook in stap 3 bepaal word. Neem die tyd om seker te maak dat u hierdie inligting korrek ingevoer.
As u tevrede is met die kodes/vertragings wat u in die script ingevoer het (u kan die veranderlike van die kode string verander as u wil), is u redelik gereed om die stelsel te probeer! Kyk eers na die funksie transmit_code () in die script. Dit is waar die werklike interaksie met die sender plaasvind. Hierdie funksie verwag dat een van die kode -snare as 'n argument gestuur moet word. Dit maak dan die gedefinieerde pen oop as 'n GPIO -uitset en loop deur elke karakter in die kode string. Dit skakel die sender dan aan of af volgens die tydsinligting wat u ingevoer het om 'n golfvorm op te stel wat ooreenstem met die kode string. Dit stuur elke kode verskeie kere (standaard 10) om die kans te verminder dat dit gemis word, en laat 'n verlengde_vertraging tussen elke kodeblok, net soos die toestel.
Om die script uit te voer, kan u die volgende opdrag sintaksis gebruik:
python TransmitRF.py kode_1 kode_2 …
U kan meer as een kode snare stuur met 'n enkele skripsie. Om byvoorbeeld voetstukke (a) en (b) aan en aansluiting (c) uit te skakel, voer die script uit met die volgende opdrag:
python TransmitRF.py a_on b_on c_off
Stap 6: 'n Opmerking oor akkuraatheid van tydsberekening
Soos genoem, is die tydsberekening tussen die gestuurde aan/af -pulse redelik belangrik. Die TransmitRF.py -script gebruik die funksie time.sleep () van python om die golfvorme met die korrekte polsintervalle op te bou, maar daar moet op gelet word dat hierdie funksie nie heeltemal akkuraat is nie. Die lengte waarvoor dit die script laat wag voordat die volgende operasie uitgevoer word, kan afhang van die verwerkerlading op die gegewe oomblik. Dit is nog 'n rede waarom TransmitRF.py elke kode verskeie kere stuur - net as die funksie time.sleep () nie 'n gegewe voorbeeld van die kode behoorlik kan opstel nie.
Ek het persoonlik nog nooit probleme met time.sleep () gehad tydens die stuur van die kodes nie. Ek weet egter dat my time.sleep () 'n fout van ongeveer 0.1 ms het. Ek het dit bepaal met behulp van die aangehegte SleepTest.py -script, wat gebruik kan word om 'n skatting te gee van hoe akkuraat jou Pi se time.sleep () -funksie is. Vir my spesifieke afstandbeheerde voetstukke was die kortste vertraging wat ek moes implementeer 0,45 ms. Soos ek gesê het, het ek nie probleme gehad met voetstukke wat nie reageer nie, so dit lyk asof 0.45 ± 0.1ms goed genoeg is.
Daar is ander metodes om te verseker dat die vertraging meer akkuraat is; u kan byvoorbeeld 'n toegewyde PIC -chip gebruik om die kodes te genereer, maar sulke dinge is buite die omvang van hierdie tutoriaal.
Stap 7: Gevolgtrekking
Hierdie projek het 'n metode voorgestel om enige elektriese toestel te beheer met behulp van 'n Framboos Pi en 'n stel afstandsbediende voetstukke van 433 MHz, met die fokus op eenvoud en deursigtigheid. Dit is die opwindendste en buigsame projek waarvoor ek my Pi gebruik het, en daar is onbeperkte toepassings daarvoor. Hier is 'n paar dinge wat ek danksy my Pi kan doen:
- Skakel 'n elektriese verwarmer langs my bed 'n halfuur aan voordat my alarm afgaan.
- Skakel die verwarmer af 'n uur nadat ek gaan slaap het.
- Skakel my bedliggie aan as my alarm afgaan, sodat ek nie weer kan slaap nie.
- en nog vele meer…
Vir die meeste van hierdie take gebruik ek die crontab -funksie in Linux. Hiermee kan u outomatiese geskeduleerde take instel om die TransmitRF.py -script op spesifieke tye uit te voer. U kan ook die Linux at command gebruik om eenmalige take uit te voer (wat vir my afsonderlik geïnstalleer moes word met 'sudo apt-get install at'). Om my verwarmer byvoorbeeld 'n halfuur aan te skakel voordat my alarm die volgende oggend afgaan, hoef ek net te tik:
om 05:30
python TransmitRF.py c_on
U kan hierdie projek ook saam met my Dropbox -huismoniteringstelsel gebruik om toestelle via die internet te beheer! Dankie dat u gelees het, en as u iets wil verduidelik of u mening wil deel, plaas 'n opmerking!
Aanbeveel:
NODE MCU-LED-beheer (eenvoudige tuisautomatisering): 5 stappe
NODE MCU-LED Control (Simple Home Automation): Hallo ouens, in hierdie instruksie kan ons sien hoe u 'n LED-gloeilamp met u slimfoon kan beheer. Ons sal Node-MCU vir hierdie projek gebruik. Verwys na die onderstaande skakel om Node MCU te installeer biblioteke (ESP-biblioteke) in u Arduino IDE.NODE MCU-BASICS {Volg Ste
N Uiters eenvoudige manier om aan die gang te kom met tuisautomatisering met behulp van selfdoenmodules: 6 stappe
N Uiters eenvoudige manier om met tuisautomatisering aan die gang te kom met behulp van selfdoenmodules: Ek was aangenaam verras toe ek besluit het om 'n paar DIY -sensors by die huisassistent te voeg. Die gebruik van ESPHome is uiters eenvoudig en in hierdie pos leer ons hoe u 'n GPIO -pen kan beheer en ook die temperatuur kan kry & humiditeitsdata van 'n draadlose n
Eenvoudige tuisautomatisering (persoonlike Bluetooth -toepassing): 6 stappe
Eenvoudige tuisautomatisering (pasgemaakte Bluetooth -toepassing): in hierdie tutoriaal gaan ek u wys hoe u 'n eenvoudige tuisautomatisering kan bou (dit is om ons huistoestelle met ons slimfoon te beheer)
RF 433MHZ radiobeheer met HT12D HT12E - Maak 'n RF -afstandsbediening met HT12E en HT12D met 433mhz: 5 stappe
RF 433MHZ radiobeheer met HT12D HT12E | Maak 'n RF -afstandsbediening met behulp van HT12E en HT12D met 433mhz: In hierdie instruksies sal ek jou wys hoe om 'n RADIO -afstandsbediening te maak met 'n 433mhz sender -ontvanger module met HT12E -kodeer & HT12D -dekodeerder IC.In hierdie instruksies kan u data stuur en ontvang met baie goedkoop komponente soos: HT
Eenvoudige tuisautomatisering met behulp van Raspberry Pi3 en Android Things: 5 stappe (met foto's)
Eenvoudige tuisautomatisering met behulp van Raspberry Pi3 en Android Things: Die idee is om 'n slim HUIS te ontwerp ” waarin u huishoudelike toestelle kan beheer met behulp van Android Things en Raspberry Pi. Die projek bestaan uit die beheer van huishoudelike toestelle soos lig, waaier, motor, ens. Vereiste materiaal: Raspberry Pi 3HDMI Ca