Kažkada rašiau apie tai, ką planuoju naudoti Raspberry Pi kaip žiniatinklio serverį, kuris valdo mano įrenginį. Atėjo laikas pagalvoti apie ryšio sąsają. Kūrėjas, norintis prijungti savo aparatūrą prie Avietinė yra du būdai: naudokite tam USB arba bendrosios paskirties terminalai ( GPIO). Su galimybėmis USB viskas apytiksliai aišku (ateityje pabandysiu parašyti įrašą apie darbą su išorine aparatūra per USB). APIE GPIO informacijos nėra daug, o naudojimo patirties nėra. Apskritai man įdomu GPIO ir jo galimybes. Straipsnyje daugiausia dėmesio bus skiriama bendro pobūdžio išvadoms Raspberry Pi - GPIO:
Uostas GPIO (trumpai Bendrosios paskirties įvesties išvestis) yra programine įranga valdomi bendrosios paskirties kaiščiai, kurie gali veikti kaip įvestis (signalui nuskaityti) arba išvestis (signalui perduoti). Įjungta Raspberry Pi jie pagaminti iš dviejų eilių kaiščių, kurių žingsnis yra 2,54 mm (jungtis PLD). Posakis „bendra paskirtis“ reiškia, kad vartotojas gali naudoti šiuos kaiščius savo reikmėms bet kokiu būdu, nes jie neatlieka jokių konkrečių užkoduotų funkcijų. Dirbant su GPIO tiesiog reikia turėti omenyje, kad tai skaitmeniniai išėjimai kurių maksimalus įtampos lygis yra 3,3 V, atitinkantis loginį. Todėl programiškai išvesti į GPIO analoginio signalo arba tiekti analoginį signalą į jį išoriškai vėlesniam skaitmeninimui.
Taigi, kas yra uostas? GPIO ir kokios jo galimybės? GPIO sujungia 26 išvadas, tarp kurių yra šios:
Pastaba: Tai žinomos sąvokos tiems, kurie patyrė mikrovaldiklių programavimą. Tiems, kurie su tuo nesusidūrė ir šiame etape vis dar nori tiesiog programiškai išvesti „1“ ir „0“ ant norimo kaiščio, žinių apie šias sąsajas nereikia. Todėl čia į tai nekreipsiu dėmesio. Pasakysiu tik tiek, kad tarp mikrovaldiklių ir kitų įrenginių (įvairių jutiklių, ADC, DAC, atminties lustų) tai yra labai dažnos sąsajos, todėl šių sąsajų kontaktų buvimas GPIO Raspberry esant reikalui leidžia labai lengvai ir su minimaliu programos kodu „išmokyti“. Avietinė„bendrauti“ su savo įrenginiu.
Kaip suprasti, kur yra išvestis? Tam jums reikia GPIO smeigtukas. Oficialioje dokumentacijoje parodytas skirtingų versijų išvados GPIO Raspberry Pi. Čia pateiksiu naujausią šio momento įrašą GPIO- Dėl Raspberry Pi Model B Rev.2:
Diagramoje skliausteliuose parodyta alternatyvi kiekvieno kaiščio funkcija:
Tai turbūt svarbiausias skyrius. Yra keletas dalykų, kuriuos reikia nepamiršti GPIO ir imtis tam tikrų atsargumo priemonių, kad nesugadintumėte dar 35-50 USD Avietinė. Žemiau pateikiamos tokios „kritinės savybės“, taip pat keletas niuansų, kurie gali būti tiesiog naudingi ir kuriuos patartina atsiminti kuriant.
Galbūt tai ir viskas... Na, apskritai, reikia tai atsiminti GPIO- tai yra kaiščiai, tiesiogiai prijungti prie procesoriaus Raspberry Pi, jie yra bendravimo su juo įrankis. Todėl neatsargus elgesys GPIO gali negrįžtamai pakenkti procesoriui. Čia aš baigiu „baliausėmis“. Pagrindinė ir paprasta taisyklė – nenaudoti aukštos įtampos ir nevartoti didelės srovės. Eikime prie reikalo.
Pastaba: Dirbti su GPIO Iš esmės yra du būdai:
1)
Naudojant bash ir failų sistema Rasbietė
Raspbian yra vienas iš paskirstymų Linux, ir koncepcija Linux daro prielaidą, kad bet kuris objektas yra failas. Tai leidžia jums išvesti ir skaityti signalus iš GPIOįprastos apvalkalo komandos bash tiesiai terminale! Loginio vieneto išvestis šiuo atveju atrodo kaip komanda įrašyti „1“ į failą, atitinkantį norimą išvestį. Pateikiami išsamūs pavyzdžiai.
2)
Naudojant programavimo kalbas (įvairios nuo Cį BASIC)
Tai lankstesnė ir našesnė parinktis, nes jai nereikia prieigos prie failų sistemos. Tuo pačiu metu bendrauti su GPIO Raspberry galima įvairiomis kalbomis, kurių įspūdingas sąrašas pateikiamas kartu su pavyzdžiais. Žemiau pažvelgsime į darbo pavyzdį GPIOįjungta Python.
0) Dirbti su GPIOįjungta Python reikia specialios bibliotekos RPi.GPIO. Dabar jį galima įdiegti tiesiai iš saugyklų, o ne atsisiųsti archyvą ir įdiegti rankiniu būdu, kaip buvo anksčiau. Pasinaudokime šia galimybe:
Sudo apt-get install python-rpi.gpio(arba python3-rpi.gpio 3-ajai Python versijai)
Pasirodo, kad naujajame paskirstyme Raspbian Jis jau įdiegtas, tad judėkime toliau.
0.5) GPIO yra sistemos elementas Raspbian, todėl reikia su juo dirbti tik pagal supervartotoją. Programą rašysime tiesiai konsolėje, todėl paleidžiame pitonas:
Sudo python
1) Importuokite biblioteką, su kuria norite dirbti GPIO:
Importuokite RPi.GPIO kaip GPIO
2) Nustatykite PIN numeravimo metodą GPIO.
Kam? Faktas yra tas, kad daugelyje šios bibliotekos funkcijų būtina nurodyti kaiščio, su kuriuo norime atlikti tam tikrą manipuliavimą, numerį. Tačiau nurodytą skaičių galima interpretuoti įvairiai: arba tai yra skaičius GPIO, arba tai yra PIN kodas (P1-26) lentoje Avietinė(žr. pinout). Kad nebūtų painiavos, iškart po importavimo patartina „nurodyti bibliotekai“, kokią numeraciją naudosime programoje.
GPIO.setmode(GPIO.BCM) #GPIO.BCM – bus naudojama GPIO numeracija
#
GPIO.BOARD - bus naudojamas kaiščių numeracija P1-26
3) Sukonfigūruokite kaiščius
Kadangi mes išvesime signalus į GPIO 7, sukonfigūruokite jį kaip išvestį ir GPIO 8- kaip įvestis:
GPIO.setup(7, GPIO.OUT)
GPIO.setup(8, GPIO.IN)
Pastaba: tiksliai įvykdžius šią komandą GPIO 7 nusistovi tiksliai iki 0 V, nes šis kaištis nebėra įvestis ir jame nėra slankiojo potencialo.
Pasirenkamo parametro naudojimas pull_up_down funkcijas sąranka taip pat galima konfigūruoti" pakelti"išėjimas į maitinimą arba įžeminimą:
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_UP) #traukite iki 3,3 V maitinimo šaltinio
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) #pritraukimas į žemę 0 V
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_OFF) #numatytasis režimas
4) Generuokite ir skaitykite signalus
Suformuojame "1" ir "0". GPIO 7 ir perskaitykite signalą iš GPIO 8:
GPIO.output(7, tiesa)
GPIO.output(7, klaidinga)
signalas = GPIO.input(8)
5) Užbaikite darbą
Atlikę visas būtinas operacijas, darbą baigiame teisingai:
GPIO.cleanup()
Atlikus šią operaciją bus grąžinti visi išėjimai GPIOį pradinę būseną.
Pastaba: jei neatliksite šios operacijos, tai net uždarius programą ir išėjus pitonas, išvados GPIO išliks tokios būklės, kokios buvo užbaigimo metu. Tai gali lemti tai, kad kai vėl bandysite dirbti su šiais kaiščiais, pasirodys pranešimas, nurodantis, kad kaištis jau naudojamas:"Įspėjimas: šis kanalas jau naudojamas ir vis tiek tęsiasi."
Visas pavyzdys visiškai :
importuoti RPi.GPIO kaip GPIO #prijunkite biblioteką
GPIO.setmode(GPIO.BCM) #nustatykite numeravimo režimą
GPIO.setup(7, GPIO.OUT) #konfigūruokite GPIO 7 kaip išvestį
GPIO.setup(8, GPIO.IN) #konfigūruoti GPIO 8 kaip įvestį
GPIO.output(7, tiesa) #išvesti loginį „1“ (3,3 V) į GPIO 7
GPIO.output(7, klaidinga) #išvesti loginį „0“ į GPIO 7
signalas = GPIO.input(8) #perskaitykite signalą iš GPIO 8 į signalo kintamąjį
GPIO.cleanup() #baigiamas darbas su GPIO
Mano nuomone, iš visų charakteristikų įdomiausi laiko parametrai GPIO, ty kaip greitai skaitmeninės išvesties būsena gali pasikeisti iš „1“ į „0“ ir atgal, jei prievadą valdo programinė įranga. Norėdami tai išbandyti, buvo naudojamas šis kodas:
importuoti RPi.GPIO kaip GPIOPastaba: Viršutinėse nuotraukose parodytų impulsų dažnis gali šiek tiek svyruoti. Taip yra dėl to, kad Linuxįjungta Avietinė atlieka daugybę užduočių ir ne visada visą procesoriaus laiką skiria mūsų programai. Taip pat turėtumėte nepamiršti, kad kilpoje reikia pridėti papildomų komandų kol gali žymiai padidinti kiekvieno impulso laiką.
Iš toliau pateiktų paveikslėlių galite įvertinti kaiščio perjungimo laiką GPIO iš vienos būsenos į kitą (kitaip tariant, perėjimo proceso trukmė) – tai maždaug 50 ns. Turiu pasakyti, gana geri rezultatai, tačiau jie negali konkuruoti greičiu su FPGA GPIO Raspberry Pi negali.
Pastaba: kokias trukmes galima pasiekti naudojant C, aprašyta.
Atkreipkite dėmesį, kad tie kaiščiai GPIO, kurie veikia nuosekliosios sąsajos režimu, leidžia pasiekti didelį greitį, kadangi nuosekliosioms sąsajoms veikiant dideliu greičiu, procesorius generuoja laikrodžio dažnius ir signalus aparatinėje įrangoje pagal konkrečios nuosekliosios sąsajos taisykles. Taigi, pavyzdžiui, naudojant išvestį GPCLK0 Galite gauti maždaug 100 MHz ir didesnio dažnio impulsus.
Kaip visa tai galima pritaikyti praktiškai? Kodėl išvesti "1" arba "0" į GPIO? Pavyzdžiui, galite mirksėti šviesos diodais! Pavyzdžiui, galite valdyti galios apkrovą ir įjungti/išjungti bet kokius buitinius prietaisus, veikiančius iš 220 V tinklo. Tam jums reikės Raspberry Pi ir tik 7 dalys. Tokio programinės įrangos „jungiklio“ schema parodyta žemiau:
Pastaba: optinio tvarkyklės lustas MOC3041M turi galvaninę maitinimo grandinių izoliaciją nuo silpnos srovės, todėl yra „saugos barjeras“ tarp Avietinė ir 220 V tinklo, jo gedimas nepakenks Avietinė. Kondensatorius C8 turi būti aukštos įtampos ir atlaikyti ~400 V įtampą.
Ši grandinė gali perjungti srovę iki 16A. Jis pilnai derinamas, išbandytas praktikoje ir užima labai mažai vietos (deja, neturiu įrenginio nuotraukų kur jis naudojamas). Įjunkite „1“. GPIO 7 Raspberry Pi suaktyvins optodriver ir atidarys triac V2, kuri per save pradės leisti iš 220 V tinklo į galios apkrovą ateinančią srovę. Įrenginys įsijungia. Kai tik GPIO 7 Pasirodo "0" - triac V2 užsidaro ir atsidaro apkrovos grandinė. Prietaisas išsijungia. Tai paprasta!
Paraiška yra tiksliai Raspberry Pi leidžia valdyti apkrovą programiškai, pagal grafiką, įvykus bet kokiems išoriniams įvykiams ar signalams (pvz., signalas iš nuotolinio valdymo pulto atidaryti vartus) ir net internetu (pavyzdžiui, per savo svetainę bėga tuo pačiu Avietės). Žodyje, Avietinė padeda lavinti vaizduotę.
Tai viskas. Kitame įraše apie Avietinė Pabandysiu apibūdinti darbą su UART Ir SPI.
Ką daryti, kai nėra ką veikti?
Išbandykite ką nors naujo!
Jei Raspberry Pi įsigijote tik iš smalsumo, nesuvokdami, kam tiksliai jo reikia, tuomet tikriausiai kasdien vis sunkiau jį rasti.
taikymas. Tu jau pakankamai žaidei su juo. Bandėme diegti įvairias operacines sistemas, klausėmės muzikos, žiūrėjome vaizdo įrašus, bandėme žaisti ir piešti... Ir turbūt nusivylę priėjome išvados – „Juk Raspberry Pi nelabai tinka naudoti kaip stalinį kompiuterį. “ Jis yra per lėtas ir apgalvotas, palyginti su įprastu kompiuteriu. Ir atrodo, kad nieko rimto su juo padaryti negalima. Belieka surasti jam panaudojimą kaip medijos centrą arba paprastą interneto serverį, o tai nėra baisu
palikite 24/7...
Tačiau vieną dalyką „Raspberry Pi“ gali atlikti daug efektyviau nei bet kuris namų kompiuteris – jis gali valdyti išorinius įrenginius. Prietaisai gali būti visiškai bet kokie – nuo paprastos lemputės iki nepilotuojamo orlaivio. Šiuo atveju Raspberry apimtį riboja tik jūsų vaizduotė ir žinios. Ir jei jūs niekada nieko panašaus nedarėte, bet tai jus domina, tada šis straipsnis skirtas jums. Taigi, pradėkime.
Norint susisiekti ir valdyti bet kokius išorinius įrenginius, Raspberry Pi turi sąsają, vadinamą GPIO. Tai yra santrumpa Bendrosios paskirties įvesties išvestis. O rusiškai tai žemo lygio tiesioginio valdymo įvesties-išvesties sąsaja. Raspberry lentoje jis yra kampe, 26 kaiščių šukos pavidalu, šalia vaizdo išvesties. Tie.
Per šią sąsają Raspberry gali klausytis ir duoti komandas bet kuriam išoriniam įrenginiui, pavyzdžiui, dronui. Tačiau šiandien mes nekursime drono, pradėsime nuo paprastos lemputės, tiksliau – LED, kuri atliks eksperimentinės lemputės vaidmenį. Mūsų užduotis yra padaryti, kad šviesos diodas, prijungtas prie Raspberry, įsijungtų ir išsijungtų pagal jo komandą. Be to, norėdami įsitikinti, kad šie įtraukimai atsiranda gana sąmoningai ir taip, kaip mes norime, o ne dėl kokių nors nesklandumų procesoriaus gilumoje, į savo programą įtrauksime elementą
bendravimas su mumis. Tie. sukurkime aiškią hierarchiją – Raspberry valdo šviesos diodą,
ir mes tvarkome pačią Raspberry. Dabar turime pasiruošti ir kur nors jį gauti
Keli dalykai. Pirma, jums reikia rasti Šviesos diodas:
Galite jį gauti iš seno sulūžusio žaislo, iš žiebtuvėlio su žibintuvėliu, paklauskite draugo radijo elektronikos srityje ir galų gale tiesiog nusipirkite.
Antra, jums reikės bet kokių laidų ir poros jungčių B.L.S.:
Tokias jungtis galima ištraukti iš seno sisteminio bloko kartu su laidais arba paprašyti iš kompiuterinio draugo, taip pat nusipirkti. Jie puikiai tinka prijungti prie Raspberry jungties. Pradėkime nuo naudojamų prievadų planavimo. Prievadas, grubiai tariant, yra jungties kaištis. Kadangi yra daug kaiščių (26), yra ir daug prievadų. Ir kad jie to nedarytų
Jei susipainiosite, kiekvienam prievadui priskiriamas atskiras numeris ir pavadinimas. Reikėtų pažymėti, kad ne visi šios jungties kaiščiai yra prievadai. Kai kurie smeigtukai
prijungti prie įtampos šaltinių, o kai kurie išvis niekur nėra prijungti (Tiesą sakant, jie vis dar yra prijungti, bet jų negalima naudoti, galite
nužudyk savo Malinką. Todėl geriau jų neliesti).
Būtent taip
Šie prievadai yra lentoje:
Kad šviesos diodas užsidegtų, turime jį prijungti prie maitinimo šaltinio. Pasirinkimas maitinti LED P1-01, viršutinis smeigtukas paveikslėlyje, ant kurio yra
įtampa 3,3v. Norėdami valdyti šviesos diodą, mums reikia vieno GPIO prievado. Galite pasirinkti bet kurį. Bet jei turite BLS jungtį, tokiu atveju patogiau naudoti prievadą, kuris yra prijungtas prie kaiščio P1-03 ir yra vadinamas GPIO 0. Šiuo atveju, naudodami vieną jungtį, galime prijungti savo LED. Taigi, mes prijungsime šviesos diodą tarp jungties kojų P1-01 Ir P1-03. Iš išvesties P1-01 LED maitinimui imame +3,3V, ir išėjimą P1-03 tai bus GPIO prievado valdymo kaištis. Visi šie prievadai fiziškai yra Raspberry Pi centriniame procesoriaus bloke, vadinamame BCM2835. Šis procesorius gali prijungti bet kurį prievadą prie 3,3 V įtampos šaltinio arba gali prijungti prievadą prie 0 maitinimo šaltinio (arba jis negali prisijungti niekur, bet apie tai vėliau). Jis atlieka šiuos jungiklius pagal duotą komandą. Tai reiškia, kad prievadą pajungus prie +3,3V įtampos, mūsų šviesos diodas neužsidega, nes srovė neturi kur dingti. Ir kai procesorius prijungs prievadą prie 0, mūsų šviesos diodas užsidegs, nes srovė eis nuo +3.3V iki 0 per šviesos diodą. Tai reiškia, kad mūsų programa turės duoti atitinkamas komandas procesoriui pagal mūsų pageidavimą.
Mažas, bet svarbus
atsitraukti. Tiesą sakant, neturėtume jungti šviesos diodo tiesiogiai tarp +3,3 V maitinimo šaltinio ir prievado kaiščio. To negalima padaryti dėl dviejų priežasčių. Viena priežastis: bet kuris šviesos diodas normaliai veikia esant tam tikram srovei. Jei per šviesos diodą teka didelė srovė (o +3.3V išėjimas gali tiekti iki 50mA), šviesos diodas perdegs. Jei srovė maža, šviesos diodas užsidegs per silpnai arba visai nedega. Daugumos įprastų šviesos diodų veikimo srovė yra 10–20 mA. Tai veda prie antrosios priežasties (nors šiuo atveju ji nėra svarbi). Jei per GPIO prievadą praleisime didelę srovę, sunaikinsime procesorių ir Raspberry mirs. Todėl turime užtikrinti, kad per uostą netekėtų didesnė nei leistina srovė. Nustatykime sau 16mA ribą, tad procesoriaus tikrai neišdeginsime. Kaip tai pasiekti? Labai paprasta! Mums reikia nuosekliai su LED
įjunkite srovės ribojimo rezistorių. O dabar apskaičiuosime.
Tarkime, kad šviesos diodo veikimo srovė yra 10 mA. Užtikriname, kad mūsų pasirinkta srovė neviršytų maksimalios leistinos 16 mA prievado srovės. Dabar žinodami, kad maitinimo įtampa yra 3,3 V, o darbinė srovė yra 10 mA, galime naudoti Ohmo dėsnį, kad apskaičiuotume reikalingą varžą. R=U/I=3,3/0,01=330 omų. Taigi turime rasti rezistorių, kurio varža 330 omų. Tiksliau, bent 330 omų varža. Galima ir daugiau. Šviesos diodas pastebimai šviečia net esant 1000 omų arba 1 kOhm varžai. Apskritai mūsų užduotis yra rasti rezistorių su
atsparumas nuo 330 omų iki 1 kOhm. Jei jį rasite, galite surinkti šią diagramą:
Geriau surinkti grandinę ant duonos lentos. Asmeniškai eksperimentams mano sūnus paskolino savo konstravimo rinkinį „Connoisseur“.
Štai kaip atrodo surinkta grandinė:
Taip prisijungiame prie Raspberry:
Ir čia yra bendras visos struktūros planas:
Kraštutiniu atveju galite tiesiog susukti elementų gnybtus. Tačiau šiuo atveju turite įsitikinti, kad nuogos elementų kojelės netyčia nepatenka ant Raspberry kontaktinių trinkelių. Tai gali jį nužudyti. Taip pat verta atkreipti dėmesį į tai, kad šviesos diodas turi būti prijungtas Anodasį + maitinimo šaltinį, t.y. mūsų atveju taip yra P1-01. Kaip rasti LED anodą? Labai paprasta! Iš bet kurio nuotolinio valdymo pulto paimkite 1,5 V bateriją ir prijunkite prie jo LED. Jei jis neužsidega, pakeiskite gnybtus. Jei jis užsidega, tada + baterijos bus šviesos diodo anodas.
Jei surinkote grandinę, kol kas atidėkite ją į šalį. Dabar pereisime prie antrosios užduoties dalies – programos, skirtos šviesos diodui valdyti, rašymo. Šią programą parašysime C kalba.
Kodėl C? Tiesiog todėl, kad aš nemoku kitų kalbų, o kadangi jūs skaitote šį straipsnį, greičiausiai jūs taip pat šiek tiek išmanote programavimą ir radijo elektroniką, o tai reiškia, kad jums nesvarbu, nuo kurios kalbos pradėti.
Paprastai programavimo kalbų mokymasis prasideda nuo „Hello World!“ programos rašymo, bet mes esame šaunesni už „tuos“ manekenus, todėl tuoj pat pradėsime nuo žemo lygio darbo su periferiniais įrenginiais. Be to, tai nėra daug sudėtingesnė nei HelloWorld. ;) Ko tau reikia? Mums reikia bet kokio teksto rengyklės, kurioje įvesime programą. „Raspbian“ turi puikų redaktorių. nano“ Reikia ir kompiliatoriaus, tai programa, kuri mūsų parašytą programą iš žmogui suprantamos kalbos verčia į kompiuteriui suprantamą kalbą. Tie. sukuria vykdomąjį failą iš mūsų programos, kurį vėliau paleisime Raspberry. Mes taip pat turime šį dalyką, jis vadinamas gcc. Šis kompiliatorius pateikiamas su visomis Linux sistemomis ir yra paruoštas naudoti.
Kaip matote, mes jau turime viską, ko mums reikia. Nors ne. Mums vis dar trūksta vieno dalyko. Mes jį paimsime iš interneto. Kalbame apie Raspberry GPIO prievadų valdymo funkcijų biblioteką, specialiai sukurtą malonaus žmogaus, kad mūsų programa savo paprastumu galėtų konkuruoti su Helloworld ir mums patiems nereikėtų sukti galvos tyrinėjant techninę procesoriaus ir procesoriaus dokumentaciją. darbo su ja viduriais protokolai. Pati biblioteka susideda iš antraštės failo, kuriame yra visi funkcijų pavadinimai su kintamomis struktūromis, ir pačių funkcijų bibliotekos failo. Šią biblioteką reikia atsisiųsti ir įdiegti, kad kompiliatorius galėtų su ja dirbti. Biblioteka vadinasi bcm2835-1,17. Paskutiniai bibliotekos pavadinimo skaitmenys rodo jos versiją. O kadangi biblioteka nuolat atnaujinama autoriaus, versijos keisis. Šiuo metu yra 1.17 versija. Naujausios versijos numerį galite rasti adresu: http://www.open.com.au/mikem/bcm2835/index.html Naudodami tą pačią nuorodą galite susipažinti su visomis funkcijomis, esančiomis šioje bibliotekoje.
Kol kas įdiegsime 1.17 versiją. Paleiskite terminalo langą ir įveskite
ten komanda:
wget http://www.open.com.au/mikem/bcm2835/bcm2835-1.17.tar.gz Biblioteka greitai atsisiunčiama. Norėdami jį įdiegti, pirmiausia turite jį išpakuoti. Tai atliekama naudojant šią komandą:
tar zxvf bcm2835-1.17.tar.gz
Dabar eikime į katalogą, kuriame įdiegta ši biblioteka:
cd bcm2835-1.17
Na, įdiekime:
./configure make
sudo atlikti patikrinimą
sudo make install
Tai viskas, dabar turime šią biblioteką, ji įdiegta ir mes, ir kompiliatorius, galime ja pasinaudoti savo naudai. Pradėkime rašyti programą. Grįžimas į pagrindinį katalogą: CD..
Čia galite sukurti aplanką mūsų eksperimentams bet kokiu pavadinimu, pavyzdžiui, myprog:
mkdir myprog
Eikime į šį aplanką:
cd myprog Ir mes pradedame rašyti savo programą: nanoGPIO-testas.c
Ši komanda paleidžia teksto rengyklę nano kuri sukuria tekstinį failą GPIO-testas.c.Dabar galite įvesti šią programą
(galite tiesiog nukopijuoti ir įklijuoti):
//GPIO-test.c
// Programa 1 sekundei įjungia šviesos diodą,
// prijungtas prie prievado P1_03
// Sukompiliuoti naudojant gcc -o GPIO-test GPIO-test.c -lrt -lbcm2835
#įtraukti
#define PIN RPI_GPIO_P1_03 // RPi versijai, v1
//#define PIN RPI_V2_GPIO_P1_03 // RPi versijai, v2
Int main ()
{
if (!bcm2835_init()) // GPIO inicijavimas
grąžinti 1; //Užbaigti programą, jei inicijavimas nepavyksta
Bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); //Nustatykite prievadą P1_03 į išvestį
bcm2835_gpio_write(PIN, LOW); // Nustatykite prievadą į 0, šviesos diodas dega
bcm2835_delay(1000); // Palaukite 1000 milisekundžių
bcm2835_gpio_write(PIN kodas, AUKŠTAS); // Nustatykite prievadą į 1, šviesos diodas išjungtas
grąžinti 0; // Išeikite iš programos
}
Atkreipkite dėmesį į #define linijas. Programoje yra 2 iš jų ir vienas iš jų yra komentuojamas. Viena eilutė skirta RPi v1 versijai, antra - RPi v2.
Jei turite v1, palikite viską taip, kaip yra. Jei turite RPi v2, pašalinkite pirmąją eilutę naudodami #define, o iš antrosios pašalinkite komentaro simbolį //.Ateityje visose kitose programose tiesiog prievado apibrėžime pridėkite _V2_ tarp RPI ir GPIO, jei jūsų plokštė yra RPi v2.
Išsaugokite mūsų programą ctrl-o ir išeikite iš teksto rengyklės ctrl-x. Dabar, jei įvesite komandą ls, pamatysite naujai sukurtą failą GPIO-test.c. Kad šis failas taptų veikiančia programa, jis turi būti sukompiliuotas. Mes rašome: gcc -o GPIO-testas GPIO-testas.c -lrt -lbcm2835šioje eilutėje: gcc yra kompiliatoriaus pavadinimas; -o GPIO-test GPIO-test.c Ši komanda nurodo kompiliatoriui, kad jis turi sukurti vykdomąjį failą pavadinimu GPIO-test iš tekstinio failo GPIO-test.c; -l (lot. mažasis l) bcm2835 praneša kompiliatoriui, kad visas mūsų programoje jam nežinomas funkcijas galima rasti įdiegtoje bcm2835 bibliotekoje. Jei kompiliatorius nepateikė jokių pranešimų, tada viskas pavyko. Jei duosi komandą dabar ls, tada pamatysime, kad kataloge atsirado kitas GPIO-testo failas, kuris pažymėtas žaliai. Tai rodo, kad failas yra
vykdomoji programa. Tereikia jį paleisti, bet prieš tai dar kartą patikriname savo grandinę su LED, kad viskas būtų teisingai surinkta ir prijungta prie kontaktų P1_01 Ir P1_03 GPIO jungtis. Jei klaidų nerasta, paleiskite programą: sudo ./GPIO testas Po to turėtų užsidegti šviesos diodas
lygiai 1 sekundę ir išeik. Jei taip atsitiko, aš jus sveikinu! Ką tik naudojote Raspberry Pi, kad per GPIO prievadą siųstumėte komandas į šviesos diodą: įjunkite, deginkite 1 sekundę ir išjunkite.
Dabar pakalbėkime apie tai, ką daro kiekviena mūsų programos eilutė.
Visi užrašai po dvigubo pasvirojo brūkšnio // yra komentarai ir niekaip neįtakoja programos vykdymo.
#įtraukti
>#define PIN RPI_GPIO_P1_03- čia mes sakome kompiliatoriui, kad visur, kur programoje jis mato PIN identifikatorių, jis turi jį pakeisti RPI_GPIO_P1_03 identifikatoriumi. Tai daroma tam, kad, jei pageidaujama, galėtume greitai pakeisti prijungto prievado numerį. Norėdami tai padaryti, pakanka pakeisti tik šią eilutę, o ne ieškoti visoje programoje, kurioje naudojome šį identifikatorių.
int main () Tai yra mūsų programos pradžia, pagrindinės funkcijos žymėjimas C.
if (!bcm2835_init())- ši dalis bando inicijuoti GPIO ir, jei nepavyksta,
grąžinti 1; tada ji sugenda programą ir išsiunčia 1 kodą.
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);- Ši funkcija nustato mūsų prievado P1_03 išvesties režimą. Tie. nurodo procesoriui, kad šis prievadas bus naudojamas išoriniam įrenginiui valdyti.
bcm2835_gpio_write(PIN, LOW);- nustatyti prievadą P1_03 į žemą būseną, t.y. procesorius prijungia jį prie 0. Po to užsidega šviesos diodas.
bcm2835_delay(1000);- Ši funkcija tiesiog laukia 1000 milisekundžių arba lygiai 1 sekundę. Visą šį laiką dega mūsų šviesos diodas.
bcm2835_gpio_write(PIN kodas, AUKŠTAS);- nustatyti prievadą P1_03 į aukštą būseną, t.y. procesorius jungia prie +3.3V. Šviesos diodas užgęsta.
B>grąžinimas 0; - Išeikite iš programos naudodami kodą 0.
Tie. algoritmas darbui su GPIO prievadu įrašymo režimu, t.y. išvestis atrodo taip:
1. Inicijuoti GPIO;2. Nustatykite pasirinkto prievado režimą į Output;
3. Dabar galime valdyti šį prievadą nustatydami aukštą arba žemą būseną. Atitinkamai, šiame prievade bus +3,3 V arba 0 V. Kuris atitinka atitinkamai loginį 1 ir loginį 0.
Pabaikime tai šiai dienai. Kitoje dalyje išmokysime savo LED šviesti naudingiau, taip pat išmoksime naudoti GPIO prievadus ne tik komandoms duoti kitam įrenginiui, bet ir jų klausytis. galite pradėti mokytis C kalbos. Taip pat pabandykite pakeisti šią programą, kad šviesos diodas būtų valdomas kitu prievadu, ir išbandykite.
Visavertis tylus banko kortelės dydžio kompiuteris su 64 bitų keturių branduolių ARM Cortex-A53 procesoriumi Broadcom BCM2837 vieno lusto luste.
„Raspberry Pi 3“ yra aprūpintas 64 bitų „Broadcom BCM2837“ procesoriumi, pagrįsta ARM Cortex-A53 architektūra, 1,2 GHz laikrodžio dažniu ir 1 GB RAM moduliu. Procesorius ir atmintis yra tiesiai ant procesoriaus, naudojant paketo ant pakuotės technologiją. BCM2837 taip pat turi dviejų branduolių „Video Core IV® Multimedia“ grafikos koprocesorių, kuris užtikrina „Open GL ES 2.0“, „Open VG“ aparatinės įrangos spartinimą ir 1080p30 H.264 dekodavimą.
Dėmesio! Skirtingai nuo „Arduino“ plokščių, „Raspberry Pi“ loginio lygio įtampa yra 3,3 V. Maksimali įtampa, kurią gali atlaikyti įvesties/išvesties, yra 3,3 V, o ne 5 V. Pajungus įtampą, pavyzdžiui, 5 V, galima sugadinti vieną plokštę.
Integruotas 802.11n Wi-Fi ir Bluetooth 4.1.
Jungtis skirta skaitmeniniam vaizdo ir garso išvedimui į daugialypės terpės įrenginius. Reikalingas bendravimui
3,5 mm lizdas su papildoma išvestimi į sudėtinį vaizdo išvestį, skirtą ausinėms ar kitiems garso atkūrimo įrenginiams ir televizoriams prijungti.
USB šakotuvas su keturiomis jungtimis, skirtas prijungti klaviatūrą, pelę, „flash drives“ ir kitus USB įrenginius.
15 kontaktų plokščia lanksti jungtis, universali didelės spartos sąsaja ekranams.
Fizinis PIN kodas: numeracija, atsakinga už fizinę kontakto vietą ant šukos.
GPIO: Broadcom procesoriaus PIN numeracija. Gali būti naudinga dirbant su Rpi.GPIO paketu.
Laidų Pi kaištis:„Wiring Pi“ paketo PIN numeracija. Tai į Arduino panaši biblioteka, skirta darbui su GPIO kaiščiais.
SPI: Prie SPI0 galima prijungti du pavaldinius įrenginius, o prie SPI1 – tris. Pasirinkimas atliekamas signalu ant CEx kaiščio.
SPI0: MOSI0 10, MISO0 9, SCLK0 11, CE0 8, CE1 7;
SPI1: MOSI1 20, MISO1 19, SCLK1 21, CE0 18, CE1 17, CE2 16.
UART: 14, 15. Asinchroninis protokolas nuosekliam duomenų perdavimui dviem laidais RX ir TX, kuris pašalina laikrodžio signalo poreikį.
Raspberry Pi 3 programavimas yra būtent tai, dėl ko dauguma žmonių renkasi šį vienos plokštės kompiuterį. Čia reikia nedelsiant pažymėti, kad šioje medžiagoje nebus instrukcijų, kuriose būtų išsamiai aprašyta, kaip ir ką reikia padaryti - jų yra daugybė tinkle. Tačiau rekomenduojama perskaityti oficialią dokumentaciją ir specializuotas formas. Vietoj to, šiame straipsnyje bus aptariami pagrindiniai dalykai, iš kurių paaiškės, kad programuoti Raspberry Pi nėra sunku.
Beveik visi Raspberry Pi savininkai supranta, ką reiškia pirmasis žodis vienos plokštės pavadinime - „avietė“. Tačiau daugelis žmonių neteisingai interpretuoja antrąjį.
Vieni mano, kad tai reiškia „Pi“ (3.14...), kiti mano, kad tai pirmosios dvi žodžio Pie (pie, ir tai turi prasmę – „aviečių pyragas“) raidės. Tačiau iš tikrųjų viskas yra kitaip.
Pi yra Python trumpinys, bet y pakeičiamas i. Tai dažnai daroma programuojant. Paimkime, pavyzdžiui, KDE, kur daugelyje programų vietoj C rašomas K (dėl stiliaus): Konsole (teisingai - Console), Konqueror (Conqueror) ir kt.
Tai yra, kaip galite atspėti, pagrindinė Raspberry kalba yra Python. Todėl „Malinos“ savininkui, dar nemokančiam jokios kalbos, rekomenduojama studijuoti būtent šią. Yra daug priežasčių, kodėl Raspberry Pi 3 programavimas Python yra geriausias sprendimas.
Štai tik keletas iš jų:
Čia dėl akivaizdžių priežasčių nekalbėsime apie kalbą ir programavimo joje ypatybes - tai galima ir reikia daryti naudojant oficialius išteklius (arba, jei prastos anglų kalbos žinios to neleidžia, apie specializuotus).
Vietoj to pažiūrėsime, kaip lengva programuoti Raspberry. Pavyzdžiui, paimkime Raspberry Pi 3 GPIO programavimą. Darykime prielaidą, kad viskas, ko reikia, yra: laidai, šviesos diodas, rezistorius ir kt., Taip pat yra supratimas apie pinout - kaiščių numeravimą. Taip pat tarkime, kad šviesos diodas prijungtas prie 11 prievado.
Žemiau pateiktas kodas įjungia lemputę 5 sekundėms ir tada išjungia:
# pirmiausia įtrauksime reikiamą biblioteką
importuoti RPi.GPIO kaip GPIO
# jums taip pat reikės bibliotekos, kuri yra atsakinga už laukimą (reikia nustatyti lemputės įjungimo ir išjungimo intervalą)
# norėdami paleisti GPIO, turite paleisti šią funkciją
GPIO.setmode(GPIO.BOARD)
# dabar Python žino apie GPIO ir gali pasakyti, su kuriuo prievadu jam reikės dirbti ir ką jis turėtų daryti (šiuo atveju - 11 ir jis veiks išėjime)
GPIO.output(11, 1)
# dabar išjunkite (0 reiškia klaidingą)
GPIO.output(11, 0)
Nurodytą kodą galima nukopijuoti, įklijuoti į dokumentą ir išsaugoti su plėtiniu .py, esančiu, pavyzdžiui, pagrindiniame kataloge. Tada turite jį paleisti su komanda: python ~./file_name.py.
Jei viskas veikia, vadinasi, įranga veikia tinkamai.
Reikėtų pažymėti, kad jei gerai nesuprantate aukščiau pateikto kodo, peržiūrėkite dokumentaciją ir išmokite Python programavimo pagrindus bei GPIO biblioteką. O jei bent elementariai suprasi bet kurią kalbą, suprasi, kad pateiktas pavyzdys itin paprastas.
C programavimas Raspberry Pi ar kitomis programavimo kalbomis yra beveik tas pats, kas kodo rašymas kitoms platformoms. Vienintelis dalykas – reikalingos specialios bibliotekos.
Jei jus domina Raspberry Pi programavimas C/C++ ir darbas su GPIO, tuomet į sistemą reikia tiesiogiai įdiegti patį gcc, o tada wiringPi biblioteką – ją rasite GitHub. Aprašyme yra naudojimo instrukcija.
Reikėtų pažymėti, kad norint įdiegti bibliotekas iš GitHub, reikalinga GIT programa. Jei sistema jo neturi, turėsite ją įdiegti iš saugyklos (pilnas pavadinimas: git-core).
Norintys programuoti Raspberry Pi Java programoje, turėtų atkreipti dėmesį į Pi4J – biblioteką, kuri sukurta specialiai darbui su Raspberry. Galite atsisiųsti ir sužinoti apie jo funkcijas oficialioje projekto svetainėje.
Įdomu tai, kad „Malina“ iš pradžių buvo sukurta specialiai vaikams mokyti programuoti. Šio įrenginio kūrėjas pastebėjo, kad šiuolaikinių studentų supratimo apie kompiuterių veikimą lygis yra daug žemesnis nei tų, kurie studijavo 90-aisiais. Tai jis aiškino tuo, kad skaičiavimo įrenginiai tapo itin paprasti: jei anksčiau elektronikai aistringi vaikai ir paaugliai turėdavo suprasti terminalų komandas ir net patys rašyti kodą, tai dabar viskas daroma paspaudus porą mygtukų.
Todėl natūraliai pateikiamas vizualinis Raspberry Pi programavimas. Visų pirma, tam naudojama „Scratch“ kalba su specialiu serveriu - GPIOSERVER. Internete yra daug vadovų, kurie padeda priprasti prie atitinkamų programų, todėl neverta jų svarstyti.
„Malinka“ galimybės neapsiriboja išvardytomis kalbomis. Galite bendrauti su ja naudodami PHP, Ruby, Perl ir kitas kalbas. Beveik kiekvienai populiariai kalbai yra, nors ir ne oficialių, veikiančių ir gana funkcionalių bibliotekų. Tačiau vėlgi reikia paminėti, kad Raspberry programavimui geriau naudoti Python.
Raspberry Pi 3 plokštės (toliau – Rpi3) skaičiavimo galimybių daugiau nei pakanka programoms kurti tiesiogiai tikslinėje sistemoje. Tačiau kūrimo procesą galima pagreitinti ir padaryti patogesnį, jei asmeniniame kompiuteryje kuriate programinę įrangą Rpi3.
Šiame straipsnyje aprašysiu kryžminio kompiliavimo „Eclipse“ sistemoje „Windows“ nustatymo procesą. Taip pat bus aprašytas „Eclipse“ nustatymas dirbti su nuotoline „Raspbian“ sistema Rpi3.
Jei „Eclipse“ naudojate pirmą kartą, naujausią versiją galite įdiegti naudodami „Eclipse CDT“ nuorodą.
„Java“ virtualią mašiną, reikalingą „Eclipse“ paleidimui, galima atsisiųsti iš JRE nuorodos.
Įdiegę aukščiau nurodytus komponentus, jūsų kompiuteryje bus galima paleisti „Eclipse CDT IDE“. Mes naudosime msys iš MinGW paketo kaip pagalbines paslaugas, todėl taip pat turite atsisiųsti MinGW.
Belieka įdiegti kryžminio kompiliavimo įrankius.
Norėdami tai padaryti, turite juos atsisiųsti iš toliau pateiktos nuorodos įrankių grandinės.
Šioje svetainėje taip pat pateikiamos instrukcijos anglų kalba, kaip įdiegti mokymo priemonių rinkinį.
Įdiegę įrankius, jūsų nurodytame kataloge TOOLS pakatalogyje taip pat bus papildomų paslaugų:
Jei ką tik įsigijote Rpi3 plokštę ir dar neįdiegėte operacinės sistemos atminties kortelėje, tai padaryti padės WinFlashTool programa.
Turite atsisiųsti Raspbian operacinės sistemos vaizdą iš oficialaus šaltinio.
Tada išpakuokite atsisiųstą vaizdą, įdėkite atminties kortelę į kortelių skaitytuvą ir įrašykite operacinės sistemos vaizdą naudodami WinFlashTool.
Naudodami „SmarTTY“ paslaugų programą, užmegzkite ryšį su plokšte. Tai būtina norint išvengti problemų nustatant nuotolinį ryšį „Eclipse“.
Sukurkite naują ryšį nurodydami plokštės IP adresą, prisijungimo vardą ir prisijungimo slaptažodį (numatytosios prisijungimo vardo ir slaptažodžio reikšmės atitinkamai pi ir raspberry).
Dabar reikia sinchronizuoti sysroot failų sistemą. Kam tai?
Įsivaizduokite situaciją, kai įdiegėte naujausią Raspbian vaizdo versiją ir nepavyko sinchronizuoti.
Naujoje versijoje antraštės failai ir bibliotekos failai buvo pridėti arba pakeisti. Dirbdami su kryžminiu kompiliatoriumi, naudojate senus antraštės ir bibliotekos failus iš sysroot katalogo, kurie nėra identiški naujausiai sistemos versijai. Todėl nėra garantijos, kad kompiuteryje sėkmingai sukompiliuota programa veiks RPi3 plokštėje.
Paleidžiame UpdateSysroot scenarijų ir stebime kompiuterio atnaujinimo failus (tai gali užtrukti kelias dešimtis minučių).
Atlikus manipuliacijas, skirtuke „Nuotolinės sistemos“, kuriame yra poskyriai, pasirodys naujas ryšys:
Taigi, naudodami skirtuką „Nuotolinės sistemos“, galime nukopijuoti kompiuteryje sukompiliuotas programas į Rpi3 failų sistemą, paleisti jas vykdyti per Ssh Shells ir ištrinti nereikalingus procesus skiltyje „Shell Processes“.
Dabar atėjo laikas sukurti naują projektą „Eclipse“ ir parašyti paprastą demonstracinę programą.
Sukurkite naują projektą iš pagrindinio meniu Failas->Naujas->C projektas.
.PHONY: bandomasis projektas yra švarus
Dabar turite įsitikinti, kad turite įrankių. Norėdami tai padaryti, turite paleisti komandą make test.
Tačiau pirmiausia turite pridėti visus keturis tikslus į skirtuką Padaryti taikinį dešinėje ekrano pusėje.
Dukart spustelėję bandymo tikslą, paleidžiame jį vykdyti ir konsolės lange matome kažką panašaus į šį:
Dabar sukurkime projekto viduje katalogo struktūrą dukart spustelėdami projekto tikslą (padaryti projektą).
Projekto katalogo struktūra yra tokia:
Naudodami šį Makefile galite kompiliuoti šaltinio failus, parašytus programavimo kalbomis, tokiomis kaip C, C++, Assembler. Tokiu atveju galite naudoti visas galimas programavimo kalbas, kad sukurtumėte vieną programą.
Kataloge /src sukurkite naują šaltinio failą main.c ir pridėkite prie jo šias eilutes:
#įtraukti
#įtraukti int main(int argc, char * * argv); int main (int argc, char * * argv) printf( „Sveiki atvykę į Raspberry Pi 3 programavimą\n“) ; grąžinti 0; ) /* pagrindinis */ |
sudo chmod 777 Rpi3_Project