Acasă / Recenzii / Programarea Raspberry Pi este ușoară, mai ales în Python. Pini GPIO Raspberry Pi și utilizarea lor de la curentul de tensiune Python Raspberry pi 3 gpio

Programarea Raspberry Pi este ușoară, mai ales în Python. Pini GPIO Raspberry Pi și utilizarea lor de la curentul de tensiune Python Raspberry pi 3 gpio

Raspberry Pi este o platformă puternică pentru procesarea informațiilor primite de la o varietate de dispozitive. Acest microcomputer poate deveni baza pentru crearea sistemelor inteligente de casă și a dispozitivelor de recunoaștere a imaginii. Cel mai convenabil și popular mediu de programare pentru Raspbian este Python. În acest articol vom afla cum să configurați Python pe Raspberry Pi și cum să instalați biblioteca RPI.GPIO pentru a lucra cu porturile GPIO.

Instalarea și configurarea Python pe Raspbian

Piton este unul dintre cele mai cunoscute și utilizate limbaje de programare. Python a fost inițial destinat să fie limbajul de programare principal pentru Raspberry Pi. În microcomputerul Raspberry Pi este folosit pentru a lucra cu senzori prin GPIO folosind o bibliotecă specială. Pachetul Python este deja instalat în sistem de operare Raspbian în două versiuni - 2 și 3. Fiecare element din sistemul Raspbian are prefixul „python-” înaintea numelui său.

Instalarea și instalarea pachetelor se realizează folosind utilitarul apt sau pip.

Puteți instala pachetul folosind utilitarul apt folosind comenzile:

sudo apt-get update

sudo apt-get install python3-picamera

Aceasta este una dintre cele mai bune metode de instalare software. Datorită acestei instalări, programul poate fi actualizat cu ușurință la cea mai recentă versiune - pentru aceasta, utilizați comenzile sudo apt-get update și sudo apt-get upgrade.

Puteți elimina elementele inutile rulând comanda sudo apt-get remove python3-rpi.gpio.

Eliminarea completă se poate face prin adăugarea terminației –purge la comandă:

sudo apt-get remove python3-rpi.gpio –purge.

Instalarea pachetelor prin PIP. Acest instrument este necesar atunci când este imposibil să găsiți pachetul necesar sau a acestuia ultima versiune. În acest caz, instalarea se realizează prin PyPI - directorul pachetului Python. Instalarea este la fel de ușoară ca și în cazul precedent. Mai întâi trebuie să instalați pachetul prin apt:

sudo apt-get install python3-pip (folosind exemplul celei de-a treia versiuni)

Comanda pip-3.2 instalează documentele și fișierele necesare pentru python. De exemplu, puteți instala orice bibliotecă după cum urmează:

pip-3.2 instalați biblioteca

Șterge - folosind comanda

dezinstalare pip-3.2.

Limbajul de programare Python în sine este caracterizat printr-o sintaxă simplă și o funcționalitate ridicată, acceptă gestionarea automată a memoriei, multi-threading de calcule și gestionarea excepțiilor. Există un număr mare de biblioteci pentru acest limbaj pentru o mare varietate de aplicații. Există extensii pentru crearea de jocuri - Pygame, pentru lucrul cu multimedia, procesare grafică și diverse calcule.

Instalarea bibliotecii RPi.GPIO

Biblioteca RPi.GPIO este scrisă special pentru gestionarea porturilor GPIO în python. Aceste porturi vă permit să colectați date de la senzori, motoare de control, chei, relee și alte dispozitive folosind programul.

În primul rând, trebuie să descărcați arhiva de pe site-ul oficial. Pe pagină puteți vedea un număr mare de versiuni ale bibliotecii. Trebuie să selectați cea mai recentă versiune.

Arhiva va fi descărcată în folderul de descărcare la /home/pi/Downloads. Trebuie să intrați în ea, să găsiți arhiva descărcată, să faceți clic dreapta și să selectați Extract Here din meniul pop-up.

Această comandă va dezarhiva biblioteca în folderul în care se află arhiva. Alături va fi adăugat un nou folder numit RPi.GPIO-0.6.3.

Următorul pas este să instalați python-dev. Terminalul este lansat și comanda este introdusă în el

sudo apt-get install python-dev

Va fi pusă întrebarea „Doriți să continuați?” ", trebuie să apăsați „Da” și Enter.

În fereastra va apărea un raport care indică faptul că instalarea a avut succes.

Pentru a instala biblioteca RPi.GPIO, trebuie să o deschideți și să mergeți la folderul care a fost dezambalat înainte.

cd /home/pi/Downloads/RPi.GPIO-0.6.3

Apoi trebuie să rulați comanda:

python setup.py build

Un raport de progres va apărea pe ecran.

După aceasta, trebuie să începeți instalarea bibliotecii folosind comanda

sudo python setup.py install

După instalarea cu succes, pe ecran va apărea un nou raport.

Biblioteca este instalată, puteți începe să lucrați.

Pe lângă biblioteca RPi.GPIO descrisă mai sus, există și altele. Biblioteca WiringPi este, de asemenea, utilizată pentru a accesa pinii GPIO. Această bibliotecă este scrisă în C și este folosită în medii C, C++ și RTB (BASIC) și altele. A fost creat similar cu biblioteca Wiring de pe Arduino.

Pentru a programa și configura contacte împreună cu biblioteca, se folosește utilitarul gpio pentru linia de comandă. Vă permite să scrieți, să citiți și să gestionați date din porturi.

Raspberry PI este un dispozitiv care are performanțe suficiente pentru ca pe baza acestuia să poată fi construiți roboți capabili să recunoască imagini, să efectueze muncă umană și alte dispozitive similare pentru automatizarea și efectuarea de acțiuni complexe de calcul. Deoarece Viteza de ceas al procesorului Raspberry PI 3 m.b. 1,2 GHz și capacitatea sa de biți este de 32 de biți, apoi Raspberry PI 3 este semnificativ superior Arduino obișnuit, care are de obicei o frecvență de ceas de 16 MHz și lățimea de biți a microcontrolerului este de 8 biți, cu siguranță Arduino își ia locul în efectuarea operațiunilor care nu nu necesită performanțe ridicate, dar atunci când Raspberry PI nu mai este suficient pentru „vine în ajutor” și acoperă o gamă atât de mare aplicatii posibile că poți fi absolut sigur de oportunitatea achiziționării acestui computer Raspberry PI 3 singleboard (poate fi comandat prin link). Deoarece Raspberry PI este un computer pentru a-l folosi, trebuie să instalați un sistem de operare pe el (deși există soluții, este totuși mai bine și mai ușor să instalați un sistem de operare (OS de mai jos)). Există multe sisteme de operare care pot fi instalate pe Raspberry Pi, dar unul dintre cele mai populare (pentru utilizarea cu Raspberry Pi) și cel mai potrivit pentru începători este sistemul de operare Raspbian. Pentru a instala sistemul de operare pe Raspberry Pi, veți avea nevoie de un card micro SD cu un expander, astfel încât să poată fi introdus într-un computer obișnuit și să înregistrați sistemul de operare pe acesta. Cardul SD trebuie să aibă cel puțin 4 GB de memorie la instalarea versiunii complete de Raspbian și cel puțin 8 GB pentru instalarea versiunilor minime de Raspbian. Este posibil ca versiunile minime să nu aibă (și cel mai probabil să nu aibă) o interfață grafică și o mulțime de alte lucruri care pot fi considerate inutile și ocupă spațiu. Pentru a evita problemele cu fișierele necesare lipsă, puteți seta versiunea completă. Puteți utiliza un card SD de clasa 10 cu 32 GB de memorie (testat pentru a funcționa (a se vedea videoclipul de mai jos)). După achiziționarea unui card de memorie, trebuie să îl introduceți în computer în slotul corespunzător, apoi priviți cu ce litera apare discul în secțiunea „calculatorul meu” și amintiți-vă, apoi trebuie să descărcați sistemul de operare de pe site-ul oficial https ://www.raspberrypi.org/downloads/raspbian / făcând clic pe butonul „Download ZIP” de sub „RASPBIAN JESSIE” pentru a descărca versiunea completă sau sub „RASPBIAN JESSIE LITE” pentru a descărca versiunea ușoară, dar pentru începători, este mai bine sa selectezi "RASPBIAN JESSIE" i.e. versiunea completă. După descărcarea arhivei „RASPBIAN JESSIE”, trebuie să o dezarhivați, apoi să descărcați programul (sau de aici https://yadi.sk/d/SGGe1lMNs69YQ), să o instalați, să o deschideți, apoi trebuie să indicați litera unității (amintit mai devreme) în colțul din dreapta sus, găsiți imaginea dezarhivată a sistemului de operare

Și apăsați butonul „scriere”.

După care va apărea o fereastră de avertizare și în această fereastră trebuie să faceți clic pe butonul „Da”,

După ce înregistrarea este finalizată și apare o fereastră care indică o înregistrare reușită (Write Successful), trebuie să faceți clic pe butonul „Ok” din această fereastră.

Apoi închideți programul, scoateți cardul SD într-un mod sigur și introduceți-l în Raspberry Pi.

Apoi, puteți conecta o tastatură USB (sau ps2 prin intermediul) la Raspberry Pi, un mouse USB și un monitor sau televizor prin cablu hdmi sau puteți conecta un cablu ethernet (dar acesta este pentru utilizatorii experimentați, așa că vom lua în considerare prima opțiune de mai jos). După aceasta, trebuie să conectați alimentarea prin micro usb, de exemplu de la încărcător de pe un smartphone. După conectarea la alimentare, va începe instalarea sistemului de operare. De regulă, în noile versiuni de SO (la momentul scrierii acestui articol) capacitatea de a comunica cu Raspberry Pi prin SSH este deja configurată și, prin urmare, pentru a seta comunicarea cu Raspberry Pi 3 prin wifi este suficient să configurați numai wifi Pentru a face acest lucru, există o pictogramă în colțul din dreapta sus al ecranului pe care trebuie să faceți clic și să selectați wifi,

Apoi introduceți parola pentru acest wifi în câmpul de text care apare,

După acești pași, wifi-ul pe Raspberry Pi 3 va fi configurat și apoi puteți programa Raspberry Pi 3 de la distanță prin wifi fără a utiliza fire. După configurarea Raspberry Pi 3, îl puteți opri introducând linie de comandă(în programul LXTerminal care poate fi deschis făcând dublu clic pe pictograma programului) comanda sudo stop sau făcând clic pe butoanele de oprire corespunzătoare din modul grafic, după oprirea finală, puteți opri alimentarea și data viitoare când porniți Raspberry Pi 3 porniți cu wifi. Acum, pentru a programa Raspberry Pi 3 prin wifi, trebuie să aflați care este adresa lui IP. Pentru a face acest lucru, trebuie să furnizați energie Raspberry Pi 3, așteptați ca sistemul de operare să se încarce, mergeți la interfața web a routerului (introducând 192.168.1.1 în linia browserului sau ceea ce aveți nevoie pentru a intra în interfața web, introduceți numele și parola), găsiți fila DHCP Leasing sau ceva similar, găsiți acolo o linie cu raspberry și adresa IP a Raspberry Pi 3.

Apoi, trebuie să deschideți programul PuTTY (dacă nu există, descărcați (sau) și instalați-l mai întâi), setați portul 22, conectați prin SSH, introduceți adresa IP a Raspberry Pi 3 în „Nume gazdă ( sau Adresa IP)” câmp,

Apoi faceți clic pe butonul „Deschide” din partea de jos a ferestrei, apoi va apărea o fereastră neagră care vă va cere să introduceți datele de conectare. Conectarea implicită este „pi” – trebuie să o introduceți și să apăsați enter. Apoi trebuie să introduceți o parolă, implicit este „zmeura”. Când introduceți parola, aceasta nu este afișată - este normal. După ce parola este introdusă cu litere invizibile, trebuie să apăsați enter și dacă totul a fost făcut corect, atunci vom obține acces la Raspberry Pi 3, dacă nu, atunci trebuie să repetați pașii. După ce ați obținut acces la Raspberry Pi 3, îl puteți programa, mai întâi trebuie să intrați în folderul „pi”, pentru a face acest lucru trebuie să introduceți comanda

Și apăsați enter (trebuie să fie un spațiu după cd).
Acum poți deschide editor de text nano. Nano este un editor de text special care este disponibil pe majoritatea sistemelor de operare precum Linux și în care puteți scrie un program pentru Raspberry Pi. Pentru a deschide acest editor și, în același timp, a crea un fișier cu numele „first” și extensia „py” trebuie să introduceți comanda

Și apăsați enter. Se va deschide editorul nano și vei observa că interfața sa este puțin diferită, dar practic este același câmp negru în care trebuie să introduci comenzi. Deoarece dorim să controlăm porturile generale de intrare/ieșire (GPIO), apoi înainte de a rula programul pentru a controla aceste porturi, trebuie să conectăm un dispozitiv la ele, astfel încât să putem vedea că controlul a fost realizat. De asemenea, trebuie remarcat faptul că pinii configurați ca ieșiri pe Raspberry Pi pot produce un curent foarte mic (presupun că până la 25mA) și având în vedere că Raspberry Pi încă nu este cel mai ieftin dispozitiv, este recomandat să vă asigurați că încărcarea pe pini nu este prea mare. LED-urile indicatoare de putere redusă pot fi utilizate în general cu Raspberry Pi, deoarece... Un curent mic este suficient pentru ca ei să strălucească. Pentru prima dată, puteți realiza un dispozitiv cu un conector, două LED-uri back-to-back conectate în paralel și un rezistor cu o rezistență de 220 Ohm conectat în serie cu LED-urile. Deoarece Rezistența rezistorului este de 220 Ohm, curentul trece neapărat prin acest rezistor și nu există căi paralele pentru trecerea lui, tensiunea la bornele este de 3,3V, atunci curentul nu va fi mai mare de 3,3/220 = 0,015 A = 15 mA. Puteți conecta acest lucru la GPIO-uri gratuite, de exemplu la 5 și 13 ca în diagramă

(pinout luat de pe https://en.wikipedia.org/wiki/Raspberry_Pi), ar putea arăta cam așa:

După ce totul este atent și corect conectat și sunteți încrezător că nimic nu se va arde, puteți copia primul program simplu în Python în editorul NANO

Importați RPi.GPIO ca GPIO
timpul de import
GPIO.setmode(GPIO.BCM)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(5, GPIO.OUT)
GPIO.output(13, adevărat)
GPIO.output(5, False)
timp.somn(1)
GPIO.output(13, False)
GPIO.output(5, adevărat)
timp.somn(1)
GPIO.output(13, adevărat)
GPIO.output(5, False)
timp.somn(1)
GPIO.output(13, False)
GPIO.output(5, adevărat)
timp.somn(1)
GPIO.output(13, adevărat)
GPIO.output(5, False)
timp.somn(1)
GPIO.output(13, False)
GPIO.output(5, adevărat)
timp.somn(1)
GPIO.cleanup()

Apoi faceți clic

După ce părăsiți editorul NANO, puteți introduce comanda

Sudo python first.py

După care LED-urile vor clipi de câteva ori. Aceste. a reușit să gestioneze porturile de intrare/ieșire de uz general prin wifi! Acum să ne uităm la program și să aflăm cum a ieșit.
Linia:

Importați RPi.GPIO ca GPIO

Aceasta este o conexiune la biblioteca „GPIO” pentru controlul pinului.
Linia:

Aceasta este o conexiune la biblioteca „timp” pentru întârzieri.
Urmează setarea modului GPIO:

GPIO.setmode(GPIO.BCM)

Configurarea pinii 5 și 13 ca ieșiri:

GPIO.setup(13, GPIO.OUT)
GPIO.setup(5, GPIO.OUT)

Setarea unuia logic la pinul 13, setarea unui zero logic la pinul 5:

GPIO.output(13, adevărat)
GPIO.output(5, False)

Întârziere

Setarea unui zero logic pe pinul 13, setarea unuia logic pe pinul 5:

GPIO.output(13, False)
GPIO.output(5, adevărat)

Returnează toți pinii la starea lor inițială și programul se termină. Că. poți controla orice pin liber prin wifi și dacă faci alimentarea cu 5V dintr-o baterie, atunci poți deja să faci un fel de robot sau dispozitiv autonom care nu este legat prin fire de ceva staționar. Limbajul de programare Python este diferit de C limbi similare, de exemplu, în loc de punct și virgulă, pentru a finaliza o comandă, Python folosește un avans de linie în loc de acolade, se folosește o indentație de la marginea din stânga, care se face cu tasta Tab. În general, Python este un limbaj foarte interesant care produce cod simplu, ușor de citit. După ce lucrați (sau jucați) cu Raspberry PI 3, îl puteți opri cu comanda

Și după ce ați oprit complet, opriți alimentarea. Când este aplicată alimentarea, Raspberry PI 3 se pornește și poate fi folosit (sau redat) din nou. Puteți comanda Raspberry pi 3 prin linkul http://ali.pub/91xb2. Puteți vedea cum să configurați Raspberry PI 3 și să-i gestionați pinii în videoclip:

Odată ce LED-urile au clipit cu succes, puteți începe explorarea la scară completă. a acestui calculatorși creați proiecte folosind capacitățile Raspberry PI 3 care sunt limitate doar de imaginația dvs.!

În 2011, computerul cu o singură placă Raspberry Pi a fost lansat pentru cei care s-au săturat să caute soluții gata făcute și au decis să creeze singuri un mediu tehnologic. În timp ce Arduino este mai mult o jucărie pentru cei cărora le place să lucreze cu mâinile lor, produsul „zmeură” este un antrenament pentru programatori.

În doar 6 ani, aproape toate limbajele de programare populare au fost adaptate pentru Raspberry. Unele au limitări semnificative, în timp ce altele lucrează la potențialul lor maxim. Să luăm în considerare 9 reprezentanți ai celei de-a doua categorii.

Zgâria

Site-ul web oficial sugerează ca utilizatorii Raspberry să apeleze mai întâi la Scratch. Sursele de limbă sunt deja incluse în sistemul de operare standard Raspbian. Atât un specialist adult, cât și un copil pot începe să creeze IoT folosind Scratch. Nu este de mirare că în doar 10 ani a devenit una dintre primele 20 de limbi în ceea ce privește numărul de interogări în motoarele de căutare.

Piton

Poate fi o surpriză pentru tine, dar Pi din nume nu este o constantă matematică, ci o referire la Python. IDLE, mediul standard de dezvoltare Raspberry, funcționează în limbajul șarpelui. Pe site-ul oficial în secțiunea documentație veți găsi un ghid de bază. În plus, datorită jocurilor Python și surselor acestora, vă veți familiariza cu capacitățile limbajului.

HTML5 și CSS3

Calculatoarele Raspberry Pi sunt potrivite pentru construirea de sisteme IoT, iar browserul Epiphany încorporat este o interfață client adecvată. Aceasta înseamnă că nu puteți face fără limbile web. HTML5 și CSS3 vă vor permite să rezolvați problema creării unui shell virtual pentru o casă inteligentă cu timp minim și restricții minore.

JavaScript

JavaScript este puterea dinamică a Raspberry Pi. Puteți lucra cu el datorită platformei Node.js, care vă permite să creați aplicații desktop și web. Nu uitați de biblioteca jQuery, care funcționează în orice browser și o umple cu funcții dinamice familiare.

Java

Capacitatea de a rula cod Java pe orice platformă este conceptul de bază al limbajului. Și acest concept este util în special pentru platforme precum Raspberry Pi. Mai întâi veți depana codul pe un sistem de operare „mare”, apoi îl veți transfera în Raspbian. În același timp, dezvoltarea aplicațiilor în Java în interiorul unui sistem „zmeură” este dificilă - nu există un mediu cu drepturi depline pentru acest limbaj.

CU

Deoarece Raspbian este un sistem de operare Unix, așa cum limbajul de bază Aici intervine C. Cu ajutorul lui, veți obține performanță maximă fără a utiliza comenzile mașinii. Acest lucru este deosebit de important pentru sistemele de server din IoT. Un superset al limbajului, Objective-C, este folosit pentru a scrie aplicații pentru iPhone și iPad, care pot fi utile și pentru Raspberry.

C++

C++ este util acolo unde este nevoie de viteză, securitate și claritate în lucru. Gama de sarcini este incredibil de largă - de la lucrul direct cu hardware-ul până la organizarea interacțiunii dintre dispozitive și clienți. C++ va schimba partea „zmeură” a dezvoltatorilor cu experiență din secolul trecut și a celor care au scris anterior cod numai pentru microcontrolere.

Perl

Perl pierde treptat teren în lumea mașinilor mari, dar în Raspberry Pi este încă unul dintre instrumentele principale. Iese din cutie, are multe extensii și completări și poate fi folosit pentru a colecta informații sau pentru a rescrie un program C. Acest lucru va afecta performanța, dar lucrul cu un astfel de cod este mult mai ușor.

Erlang

Erlang este un limbaj de programare pentru crearea de sisteme complexe. Să presupunem că dezvoltați o centrală nucleară sau o rețea de calcul neuronal pe prietenul dvs. cu o singură placă. C++ sau alt limbaj de aplicație nu va funcționa. Dar Erlang vă va permite să minimizați erorile și să profitați la maximum de Raspberry Pi. Desigur, dacă ajungi la acest nivel.

După cum înțelegeți, limbajul de dezvoltare pentru Rasberry Pi are o importanță secundară. Alegerea depinde de preferințele de gust, de tipul de problemă rezolvată și de experiența dumneavoastră. Aceasta înseamnă că Rasberry Pi va deveni partenerul tău fidel de programare, indiferent de calea pe care o alegeți.

Într-o postare destul de veche dedicată Raspberry Pi, acest dispozitiv era considerat exclusiv ca un computer mic și foarte ieftin. Fără îndoială, Raspberry Pi este. Dar, pe lângă aceasta, Raspberry Pi are și 26 de pini GPIO (General Purpose Input Output), ceea ce este foarte util în lumina pasiunii mele recente pentru electronică. De ce? Să ne dăm seama.

Remarc că tot ce este scris mai jos este adevărat pentru Raspberry Pi 2 Model B. Dacă aveți o altă zmeură, atunci locația pinilor și alte detalii pot diferi. Prin urmare, asigurați-vă că verificați documentația oficială. Ca sistem de operare, am folosit versiunea Raspbian din 28-09-2016, care poate fi . Nu-mi plac versiunile ulterioare, deoarece au decis să dezactiveze SSH în mod implicit din motive de securitate. Ceea ce este destul de amuzant, pentru că au decis să includă Adobe Flash în aceeași versiune.

Această imagine arată clar unul dintre colțurile dispozitivului (stânga sus), așa că este destul de dificil să numerotați din greșeală pinii cu susul în jos. Este foarte interesant ce fumau băieții care au decis să fumeze Aşa pini de număr. Daca stie cineva raspunsul, va rog sa-mi spuneti in comentarii. Pentru a deruta complet pe toată lumea, au decis să facă două numere. Cele de mai sus este numerotarea „logică”. Sub aceste numere, pinii sunt vizibili pentru sistemul de operare. Există, de asemenea, o numerotare „fizică”, despre care puteți citi la linkul de mai sus. În cadrul acestei note, este utilizată doar numerotarea „logică” prezentată în imagine.

Să presupunem că vrem să controlăm programatic tensiunea furnizată celui de-al doilea pin. Cel mai simplu mod de a face acest lucru este prin sysfs.

În primul rând, „exportăm” pinul, fără acest pas nu va fi posibil să îl gestionăm:

echo 2 > / sys/ class/ gpio/ export

Îl facem un out-pin, adică va furniza sau nu o tensiune de 3,3 volți:

echo out > / sys/ class/ gpio/ gpio2/ direction

Aplicați tensiune:

ecou 1 >

Oprim alimentarea cu tensiune:

echo 0 > / sys/ class/ gpio/ gpio2/ valoare

Să aflăm dacă acum se aplică tensiune:

cat / sys/ class/ gpio/ gpio2/ valoare

Odată ce lucrarea este finalizată, puteți dezexporta pinul:

echo 2 > /sys/class/gpio/unexport

Și iată un script Python care, atunci când apăsați un buton, stinge LED-ul curent și îl aprinde pe următorul:

#!/usr/bin/env python

importați RPi.GPIO ca GPIO
timpul de import

# Folosiți numere pin „logice”.
GPIO.setmode (GPIO.BCM)

# Dezactivează avertismentele „Acest canal este deja în uz”.
GPIO.setwarnings (fals)

# LED-uri de configurare: 2 - verde, 3 - galben, 4 - roșu
pentru i în intervalul (2, 5):
GPIO.setup (i, GPIO.OUT )
GPIO.output(i, False)

Current_led = 2
GPIO.output(current_led, True)

# Pregătiți-vă să citiți starea butonului
BUTON = 5
PRESSED_CODE = 0
GPIO.setup (BUTTON, GPIO.IN, pull_up_down= GPIO.PUD_UP)

în timp ce este adevărat:
# GPIO.wait_for_edge(BUTON, GPIO.FALLING)
# print("Buton apăsat")
# GPIO.wait_for_edge(BUTON, GPIO.RISING)
# print("Buton eliberat")
timp .somn (0,05 )
dacă GPIO.input (BUTON) == PRESSED_CODE:
GPIO.output (curent_led, False)
curent_led = max (2 , (curent_led + 1 ) % 5 )
GPIO.output(current_led, True)
timp .somn (0,1)

Din punct de vedere empiric, a fost posibil să se selecteze întârzieri la care LED-urile comută exact așa cum se așteaptă utilizatorul. Metoda wait_for_edge comentată în codul de mai sus funcționează complet imprevizibil în practică. De exemplu, dacă țineți apăsat butonul timp de câteva secunde, apăsările ulterioare vor face ca LED-urile să se aprindă într-o ordine aproape aleatorie.

Am scris odată despre ce plănuiesc să folosesc Raspberry Pi ca un server web care controlează dispozitivul meu. Este timpul să ne gândim la interfața de conectare. Un dezvoltator care vrea să-și conecteze hardware-ul la Zmeură există două moduri: utilizați pentru aceasta USB sau terminale de uz general ( GPIO). Cu posibilitati USB totul este aproximativ clar (în viitor voi încerca să scriu o postare despre lucrul cu hardware extern prin USB). DESPRE GPIO nu există prea multe informații și nu există experiență în utilizarea lor. In general, ma intereseaza GPIOși capacitățile sale. Articolul se va concentra pe concluzii cu scop general Raspberry Pi - GPIO:

  • posibilităților GPIO
  • pinout GPIO
  • cum să lucrezi cu GPIO pe Piton
  • caracteristici GPIO(în primul rând indicatoare de viteză)
  • exemplu de utilizare GPIO Zmeura

Port GPIO- concluzii cu scop general Raspberry Pi

În primul rând, nu vreau să conectez monitorul și tastatura de fiecare dată. Prin urmare, în starea inițială trebuie să Zmeură Există doar două „fire” conectate: alimentare și cablu de rețea pentru a vă conecta la router. Deși acest lucru nu este de o importanță fundamentală: tot ceea ce este descris mai jos va fi adevărat, ca și în cazul lucrului cu consola Zmeură prin SSH, și când utilizați o tastatură conectată.

Port GPIO (Prescurtare de la Intrare de uz general Ieșire) sunt pini de uz general controlați prin software care pot acționa ca intrări (pentru a citi un semnal) sau ieșiri (pentru a transmite un semnal). Pe Raspberry Pi sunt realizate sub forma a două rânduri de știfturi cu pasul de 2,54 mm (conector PLD). Expresia „scop general” înseamnă că utilizatorul poate folosi acești pini în scopuri proprii în orice mod dorește, deoarece nu îndeplinesc nicio funcție specifică codificată. Când lucrezi cu GPIO trebuie doar să ai în vedere că asta iesiri digitale cu un nivel maxim de tensiune de 3,3 V, corespunzător unuia logic. Prin urmare, ieșiți programatic către GPIO semnal analogic sau este imposibil să-i furnizeze un semnal analogic extern pentru digitizarea ulterioară.

Deci, ce este un port? GPIO si ce capacitati are? GPIO combină 26 de concluzii, printre care se numără următoarele:

  • 2 pini cu un nivel de tensiune constant de 5 V
  • 2 pini cu un nivel de tensiune constant de 3,3 V
  • 5 pini comune (împământare)
  • 17 pini controlați prin software digital
Fiecare dintre acești 17 pini poate acționa fie ca intrare, fie ca ieșire. Cu toate acestea, pe lângă aceasta, unele dintre aceste concluzii pot servi alternative opțional funcții. Ce înseamnă? Fiecare dintre acești pini, în funcție de setările software-ului, poate funcționa fie ca ieșire obișnuită, fie ca ieșire a uneia dintre interfețele seriale. Cu ajutorul unor astfel de concluzii GPIO alternativ, pot fi implementate interfețe seriale I2C, SPIși alte interfețe seriale prin UART.

Nota: Acestea sunt concepte familiare celor care au experimentat programarea cu microcontrolere. Pentru cei care nu s-au confruntat cu acest lucru și în această etapă încă doresc să scoată pur și simplu programatic „1” și „0” pe pinul dorit, nu este necesară cunoașterea acestor interfețe. Prin urmare, nu voi acorda atenție acestui lucru aici. Permiteți-mi să spun doar că printre microcontrolere și alte dispozitive ( diverși senzori, ADC, DAC, cipuri de memorie) acestea sunt interfețe foarte comune, deci prezența pinilor acestor interfețe în GPIO Zmeura dacă este necesar, vă permite să „predați” foarte ușor și cu un minim de cod de program Zmeură„comunicați” cu dispozitivul dvs.

Cum să înțelegeți unde se află ce ieșire? Pentru asta ai nevoie Pinout GPIO. Documentația oficială arată pinout-ul versiuni diferite GPIO Raspberry Pi. Aici o voi da pe cea mai recentă în acest moment pinout GPIO- Pentru Raspberry Pi Model B Rev.2:

Diagrama arată funcția alternativă a fiecărui pin între paranteze:

  • S.D.A., SCL- pini de interfață I2C
  • TXD, RXD- concluzii UART
  • MOSI, MISO, SCLK, CE0, CE1- pini de interfață SPI
  • GPCLK0 - (Ceas de uz general) ieșire pentru formarea unei variabile frecvența ceasului Pentru dispozitive externe
  • PCM_CLK, PCM_DOUT- pini de interfață audio I2S

Ce este IMPORTANT să știți înainte de a lucra cu GPIO Raspberry Pi

Aceasta este poate cea mai importantă secțiune. Sunt câteva lucruri de reținut GPIOși luați anumite măsuri de precauție pentru a nu mai zbura 35-50 USD fără a deteriora Zmeură. Mai jos sunt astfel de „trăsături critice”, precum și câteva nuanțe care pot fi pur și simplu utile și pe care este recomandabil să le amintiți atunci când dezvoltați.

  • Curentul total maxim al ambilor pini de 3,3 V este de 50 mA! Prin urmare, acești pini pot fi utilizați pentru alimentarea dispozitivelor externe numai dacă consumul lor de curent este mai mic de 50 mA.
  • Curentul total maxim al ambilor pini de 5 V este de 300 mA! Acești pini pot fi folosiți și pentru alimentarea dispozitivelor externe numai dacă consumul lor de curent este mai mic de 300 mA.
  • Nu este permis GPIO tensiune de alimentare mai mare de 3,3 V! Ieșiri digitale GPIO au niveluri de tensiune 0 - 3,3 V și incompatibil cu niveluri tradiționale de tensiune 0 - 5V! Prin urmare, nu vă puteți conecta direct Raspberry PiŞi dispozitive digitale, lucrând cu TTL-niveluri de 5 V. Dacă se aplică la GPIO concluzie Zmeură unitate logică reprezentând 5 V mai degrabă decât 3,3 V - pinul poate eșua.
  • Concluzii GPIO 14Şi GPIO 15în mod implicit efectuează o funcție alternativă și sunt ieșiri UART - RXDŞi TXD. Prin urmare, după pornire, acestea sunt prezente nivel înalt 3.3 V. Pot fi reconfigurate programatic în ieșiri obișnuite. pe toți ceilalți GPIO după pornire Zmeurăîndeplinește funcția principală și funcționează ca ieșiri digitale obișnuite.
  • Toate ace personalizate GPIO sunt intrări implicite.Și, prin urmare, au o impedanță de intrare mare. În același timp, tragerea la nivel logic nu este activată, concluziile „atârnă în aer”, deci după pornire Zmeură tensiunea de pe ele poate „pluti”. E bine. Singurele excepții sunt următoarele 2 ieșiri:
  • Concluzii GPIO 0 (SDA)Şi GPIO 1 (SCL) implicit sunt „atașați” de nutriție. Prin urmare, după pornire Zmeură au o tensiune logică (3,3 V).
  • Semnalul de pe oricare dintre pinii digitali poate servi ca sursă externă de întrerupere. Oricine a mai întâlnit microcontrolere înainte va înțelege cât de util poate fi acest lucru. Cum să folosiți întreruperile în Raspberry Pi- deocamdată aceasta este o idee pentru următoarea postare.

Poate asta e tot... Ei bine, în general, trebuie să-ți amintești asta GPIO- aceștia sunt pinii conectați direct la procesor Raspberry Pi, sunt un instrument de interacțiune cu el. Prin urmare, manipulare neglijentă GPIO poate provoca daune ireversibile procesorului. Aici termin cu „speriioarele”. Regula principală și simplă este să nu aplicați tensiuni înalte și să nu consumați curent ridicat. Să trecem la treabă.

Cum să lucrezi cu GPIO pe Piton

Nota: Lucrați cu GPIO Practic, există două moduri:

1) Folosind bashși sistem de fișiere Rasbian
Raspbian este una dintre distribuții Linux, și conceptul Linux presupune că orice obiect este un fișier. Acesta este ceea ce vă permite să scoateți și să citiți semnale de la GPIO comenzi shell obișnuite bash chiar in terminal! Ieșirea unei unități logice în acest caz arată ca o comandă pentru a scrie „1” în fișierul corespunzător rezultatului dorit. Sunt date exemple detaliate.

2) Folosind limbaje de programare (diverse de la C la BASIC)

Aceasta este o opțiune mai flexibilă și mai performantă, deoarece nu necesită acces la sistem de fișiere. În același timp, interacționați cu GPIO Zmeura posibil într-o varietate de limbi, o listă impresionantă a cărora este dată împreună cu exemple. Mai jos vom analiza un exemplu de lucru cu GPIO pe Piton.


Să presupunem că trebuie să scoatem un „1” sau „0” logic la GPIO 7 si citeste semnalul de la GPIO 8.

0) Pentru a lucra cu GPIO pe Piton nevoie de o bibliotecă specială RPi.GPIO. Acum poate fi instalat direct din depozite, mai degrabă decât descărcarea arhivei și instalarea manuală, așa cum era înainte. Să profităm de această oportunitate:

Sudo apt-get install python-rpi.gpio(sau python3-rpi.gpio pentru a treia versiune de Python)

Se dovedește că în noua distribuție Raspbian Este deja instalat, așa că să mergem mai departe.

0.5) GPIO este element de sistem Raspbian, așa că trebuie să lucrați cu el numai sub superutilizator. Vom scrie programul direct în consolă, așa că rulăm piton:

Sudo python

1) Importați biblioteca cu care să lucrați GPIO:

Importați RPi.GPIO ca GPIO

2) Setați metoda de numerotare a pinului GPIO.
Pentru ce? Faptul este că în multe funcții ale acestei biblioteci este necesar să se indice numărul pinului pe care dorim să efectuăm un fel de manipulare. Cu toate acestea, numărul indicat poate fi interpretat în diferite moduri: fie este un număr GPIO, sau acesta este numărul pin (P1-26) de pe placă Zmeură(vezi pinout). Pentru a evita confuzia, imediat după import este indicat să „indicați bibliotecii” ce numerotare vom folosi în program.
GPIO.setmode(GPIO.BCM) #GPIO.BCM - se va folosi numerotarea GPIO

# GPIO.BOARD - se va folosi numerotarea pinului P1-26

3) Configurați pinii
Deoarece vom trimite semnale către GPIO 7, configurați-l ca ieșire și GPIO 8- ca intrare:
GPIO.setup(7, GPIO.OUT)
GPIO.setup(8, GPIO.IN)

Nota: exact după executarea acestei comenzi pe GPIO 7 se va stabili exact la 0 V, deoarece acest pin nu mai este o intrare și nu există potențial de plutire pe el.

Folosind un parametru opțional pull_up_down funcții înființat poate fi si configurat" lift"ieșire la putere sau la masă:
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_UP) #trageți o sursă de alimentare de până la 3,3 V
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) #tragere la masă 0 V
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_OFF) #mod implicit

4) Generați și citiți semnale
Formăm „1” și „0” pe GPIO 7 si citeste semnalul de la GPIO 8:

GPIO.output(7, adevărat)

GPIO.output(7, False)
semnal = GPIO.input(8)

5) Terminați treaba
După toate operațiunile necesare, terminăm treaba corect:
GPIO.cleanup()

Efectuarea acestei operațiuni va returna toate ieșirile GPIO la starea sa originală.

Nota: dacă nu efectuați această operațiune, atunci chiar și după închiderea programului și ieșirea piton, concluzii GPIO vor rămâne în starea în care se aflau la momentul finalizării. Acest lucru poate duce la faptul că atunci când încercați să lucrați din nou cu acești ace, va apărea un mesaj care indică faptul că pinul este deja în uz:"RuntimeWarning: acest canal este deja în uz, continuând oricum."

Exemplu întregîn întregime :
importați RPi.GPIO ca GPIO #conectați biblioteca
GPIO.setmode(GPIO.BCM) #setează modul de numerotare
GPIO.setup(7, GPIO.OUT) #configurează GPIO 7 ca ieșire
GPIO.setup(8, GPIO.IN) #configurează GPIO 8 ca intrare
GPIO.output(7, adevărat) #output logic „1” (3,3 V) la GPIO 7

GPIO.output(7, False) #output logic „0” la GPIO 7
semnal = GPIO.input(8) #citește semnalul de la GPIO 8 în variabila semnal
GPIO.cleanup() #terminarea lucrărilor cu GPIO


Caracteristici GPIO

După părerea mea, dintre toate caracteristicile, cele mai interesante sunt parametrii de timp GPIO, și anume cât de repede se poate schimba starea ieșirii digitale de la „1” la „0” și înapoi dacă portul este controlat de software. Următorul cod a fost folosit pentru a testa acest lucru:

importați RPi.GPIO ca GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(7, GPIO.OUT)
în timp ce (1):
GPIO.output(7, adevărat)
GPIO.output(7, False)

Nota: Frecvența impulsurilor afișată în imaginile de sus poate fluctua ușor. Acest lucru se datorează faptului că Linux pe Zmeură multitasking și nu dedică întotdeauna tot timpul procesorului programului nostru. De asemenea, ar trebui să rețineți că adăugarea de comenzi suplimentare într-o buclă în timp ce poate crește semnificativ timpul fiecărui puls.

Din imaginile de mai jos puteți estima timpul de comutare a pinului GPIO de la o stare la alta (cu alte cuvinte, durata procesului de tranziție) - este de aproximativ 50 ns. Trebuie să spun că rezultate destul de bune, totuși, nu pot concura în viteză cu FPGA-urile GPIO Zmeura Pi nu pot.

Nota: ce durate pot fi realizate folosind C este descris în.

Vă rugăm să rețineți că acele ace GPIO, care funcționează în modul interfață serială, vă permit să atingeți viteze mari, deoarece atunci când interfețele seriale funcționează la viteze mari, hardware-ul procesorului generează vitezele ceasuluiși semnale conform regulilor unei anumite interfețe seriale. Deci, de exemplu, folosind ieșirea GPCLK0 Puteți primi impulsuri cu o frecvență de aproximativ 100 MHz și mai mare.

Exemplu de utilizare GPIO Zmeura

Cum pot fi puse toate acestea în practică? De ce scoateți „1” sau „0” la GPIO? De exemplu, puteți clipi LED-urile! De exemplu, puteți controla sarcina de alimentare și puteți porni/opri orice aparat electrocasnic care funcționează dintr-o rețea de 220 V Raspberry Piși doar 7 părți. Diagrama unui astfel de „comutator” software este prezentată mai jos:

Nota: cip optodriver MOC3041M are izolarea galvanică a circuitelor de putere de cele cu curent scăzut, prin urmare este o „barieră de siguranță” între Zmeurăși o rețea de 220 V, eșecul acesteia nu va dăuna Zmeură. Condensator C8 trebuie să fie de înaltă tensiune și să reziste la o tensiune de ~400 V.

Acest circuit poate comuta curenți de până la 16A. Este complet depanat, testat în practică și ocupă foarte puțin spațiu (din păcate, nu am nicio fotografie cu dispozitivul unde este folosit). Feed "1" la GPIO 7 Raspberry Pi va declanșa optodriverul și va deschide triacul V2, care va începe să treacă prin el însuși curentul care vine din rețeaua de 220 V către sarcina de putere. Dispozitivul pornește. De îndată ce GPIO 7 Apare „0” - triac V2 se închide și se deschide circuitul de sarcină. Dispozitivul se oprește. Este simplu!

Aplicația este exact Raspberry Pi vă permite să controlați sarcina în mod programatic, conform unui program, la apariția oricăror evenimente sau semnale externe (de exemplu, un semnal de la o telecomandă pentru a deschide o poartă) și chiar prin Internet (de exemplu, prin propriul site web). alergând pe aceeași Zmeură). Într-un cuvânt, Zmeură ajută la dezvoltarea imaginației.

Asta e tot. În următoarea postare despre Zmeură Voi încerca să descriu munca cu UARTŞi SPI.