Cum să utilizați butoanele cu pinii GPIO Raspberry Pi

Pushbutton Breadboard Feature Image
⏱️ 12 min read

Dacă ați folosit vreodată un LED cu un Raspberry Pi, atunci probabil știți cum funcționează ieșirile GPIO. Codul face ca electricitatea să circule prin pinii de intrare/ieșire de uz general (GPIO), trece prin LED-uri și luminează lucrurile. Dar ai încercat vreodată să faci invers? Cu butoanele, puteți face exact invers. Acest tutorial vă arată cum să transformați un pin GPIO într-un pin de intrare, ascultând fiecare apăsare de buton pe care o faceți!

Cum funcționează butoanele

Un buton este un tip de comutator. Are doi pini conductori separați care împiedică un circuit complet, fiind separați unul de celălalt. Când apăsați pe un buton, de fapt împingeți cei doi pini împreună, completând circuitul. Dar dacă dai drumul, există un mecanism asemănător cu un arc care separă din nou știfturile.

Buton de pe Breadboard Solo

Butoane cu 4 pini

Butonul tipic din seturile de senzori are patru pini, fiecare știft fiind separat de ceilalți. O placă de metal în mișcare se află chiar sub zona butonului, care coboară și conectează toți ceilalți pini atunci când butonul este apăsat în jos.

Butonul din spate
Un buton cu 4 pini are patru pini sub buton.

Veți găsi două plăci în interiorul unui buton cu 4 pini. Fiecare este conectat la doi pini externi. Ambele plăci sunt menținute separate una de cealaltă și pot fi conectate doar prin apăsarea pe o a treia placă – placa metalică de sub buton.

Pinout pentru buton cu 4 pini
Pinout-ul unui buton cu 4 pini. Un comutator conectează cele două perechi de pini împreună.

Într-un fel, există întotdeauna doi pini conectați într-un buton. Când apăsați butonul cu 4 pini, conectați toți cei patru pini împreună.

Utilizarea butoanelor cu pinii GPIO Raspberry Pi

De data aceasta, facem ca pinii Raspberry Pi GPIO să detecteze o apăsare de buton de la un buton. Când electricitatea trece prin el, Raspberry Pi va tipări un mesaj care vă spune că funcționează.

Lucruri de care veți avea nevoie

  • Buton (4 pini)
  • Rezistor (unul între 100Ω și 1000Ω ar trebui să funcționeze)
  • Fire jumper
  • Voltmetru (optional)
  • Raspberry Pi
  • Monitor și tastatură (sau SSH)

Cum să utilizați butoanele

  1. Deschideți editorul de cod ales și inserați următorul cod:
import RPi.GPIO as GPIO
from time import sleep
 
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
 
while True:
  if GPIO.input(7) == GPIO.HIGH:
    print("Pin 7 is HIGH!")
  elif GPIO.input(7) == GPIO.LOW:
    print("Pin 7 is LOW...")
  sleep(0.15)
  1. Salvați ca „rpi-pushbutton.py” (sau orice nume doriți, atâta timp cât extensia fișierului este aceeași).
  1. Construiți circuitul. Pe un pin al butonului, conectați-l la pinul 7 și un rezistor în paralel. Atașați un fir jumper la un pin GND (pinii 6, 7, 14, 20, 25, 30, 34 sau 39) de cealaltă parte a acestui rezistor, apoi atașați un alt fir jumper la un pin de 3,3 V (pinii 1 sau 17). ) pe un ac de buton separat.
Pushbutton Schematic And Breadboard Ver
Stânga: Schema schematică a circuitului butoanelor. Dreapta: Buton activ de pe placa. Desemnarea culorii firului jumper: roșu = 3,3 V, maro = pin 7 și negru = GND.

Bacsis: pentru a găsi numărul corect de pin, țineți Raspberry Pi-ul astfel încât pinii GPIO să se afle în colțul din dreapta sus. Pinul din stânga sus este pinul 1, iar în dreapta acestuia este pinul 2. Sub pinul 1 este pinul 3, în dreapta este pinul 4 și așa mai departe.

Pinout pentru Raspberry Pi
Pinout-ul Raspberry Pi
  1. Porniți Raspberry Pi și deschideți terminalul. Utilizare cd pentru a muta în directorul scriptului Python, apoi intrați python3 rpi-pushbutton.py. Dacă ați folosit un alt nume de fișier, utilizați-l în loc de „rpi-pushbutton”.
Terminal Cd Buton Python3 Rpi
  1. Ar trebui să vedeți o nouă linie de text care spune Pin 7 is LOW... la fiecare 0,15 secunde pe terminal. Dacă apăsați butonul, noua linie va fi Pin 7 is HIGH!.

Dacă comutați pinii GND și 3.3V, cu 3.3V pe rezistor și GND pe cealaltă parte a butonului, veți inversa logica butonului. Va ieși Pin 7 is HIGH! tot timpul și devin Pin 7 is LOW când apăsați butonul.

Rezistori de tragere cu buton în sus Vs de tragere în jos
Stânga: Un rezistor de tragere în jos este realizat prin conectarea unui pin GND (negru) 7 (maro). Dreapta: conectarea 3,3V (roșu) la pinul 7 (maro) face în schimb o rezistență de tragere.

Hardware pe butoane

Butoanele folosesc două tipuri de rezistențe: pull-up și pull-down. Cel cu 3,3V conectat la rezistor este un rezistor pull-up. Acesta trage tensiunea în sus. Între timp, rezistențele de tragere în jos trage tensiunea în jos, având un pin GND conectat la ele.

Puteți folosi în continuare un buton fără rezistor, dar dacă faceți acest lucru, vă lăsați pinul GPIO pe float. Un pin GPIO plutitor nu primește nicio sarcină electrică directă, așa că caută încărcări peste împrejurimile sale. Dacă există un câmp electromagnetic puternic lângă el, de exemplu, acesta va măsura în schimb.

Circuit de buton fără rezistor
Pinul 7 (maro) devine un pin plutitor atunci când 3,3 V (roșu) este separat de acesta.

De aceea ai nevoie de un punct de referință. Dacă conectați pinul GPIO la 0V (GND) în mod implicit, atunci acesta va măsura 0V în timp ce butonul nu este apăsat. Dar dacă nu, valoarea pinului GPIO poate fi oriunde – chiar și volți negativi!

Totuși, știfturile plutitoare pot face unele lucruri interesante. Dacă lăsați un știft plutitor, acesta poate simți diferența de tensiune în aer, măsurând chiar și efectul de a vă mișca degetul în apropierea știftului. Este ca un prezența electromagnetică senzor sau ceva.

Păcat că nu poți face asta doar pe Raspberry Pi, totuși. Pentru ca acest lucru să fie util, veți avea nevoie de pini analogici, iar Raspberry Pi nu îi are.

Cod pentru butoane

Știind asta, ar trebui să înțelegeți că pinul 7 simte dacă trece 3,3V sau 0V prin el. Dacă detectează 3,3 V, atunci se raportează ca fiind HIGH. Dar dacă sesizează 0V, atunci este LOW.

Să împărțim codul în trei părți: comenzi de import, comenzi de configurare și comenzi în buclă.

Import comenzi

Folosim două comenzi de import:

import RPi.GPIO as GPIO
from time import sleep

import RPi.GPIO as GPIO importă modulul RPi.GPIO, care vă permite să faceți lucruri cu pinii GPIO de la Raspberry Pi. Prin adăugarea în as GPIO la sfârșit, îi spui lui Python să spună că tastează GPIO este echivalent cu tastarea RPi.GPIO. Puteți chiar să îl înlocuiți cu alte șiruri de caractere, iar codul ar trebui să funcționeze în continuare atâta timp cât îl formatați corect.

Pe de altă parte, from time import sleep importă doar o parte din modulul de timp al lui Python. Vă permite să utilizați sleep() funcţie.

Comenzi de configurare

Lucrăm cu cele trei comenzi din modulul RPi.GPIO la comenzile de configurare pentru a remedia unele setări.

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

Modulul RPi.GPIO afișează în mod normal un mesaj care vă avertizează cu privire la utilizarea pinilor GPIO de îndată ce porniți scriptul Python. GPIO.setwarnings(False) împiedică acest lucru să se întâmple.

GPIO.setmode(GPIO.BOARD) este o altă comandă din modulul RPi.GPIO. Îi spune lui Python că utilizați pinout-ul „BOARD”. Există două tipuri de pinout în RPi.GPIO: BOARD și BCM. BOARD vă permite să alegeți ace utilizând numerele de pin. BCM (prescurtare de la „Broadcom”) vă permite să alegeți pini cu canalul lor individual Broadcom SOC. BOARD este mult mai ușor de utilizat, deoarece este întotdeauna același, indiferent de tipul de placă Raspberry Pi pe care îl utilizați. Pinout-ul BCM se poate schimba în funcție de modelul pe care îl utilizați.

În cele din urmă, GPIO.setup(7, GPIO.IN) vă permite să setați pinul 7 ca pin de intrare. Acesta folosește .setup() funcţionează şi citeşte 7 ca pinul pe care încercați să-l alegeți. GPIO.IN înseamnă că încercați să setați asta ca pin de intrare.

Comenzi în buclă

Sistemele încorporate folosesc în mod normal doar câteva linii de cod și le fac bucla la nesfârșit. Diferite limbaje de programare folosesc moduri diferite de a face acest lucru. Dar conceptul este același: folosesc un fel de buclă. Pentru Python, asta e while True:.

while True:
  if GPIO.input(7) == GPIO.HIGH:
    print("Pin 7 is HIGH!")
  elif GPIO.input(7) == GPIO.LOW:
    print("Pin 7 is LOW...")
  sleep(0.15)

while True: vă permite să buclați codul pe termen nelimitat. Tot ceea ce ai plasat în el va funcționa pentru totdeauna atâta timp cât există electricitate pe placă.

if GPIO.input(7) == GPIO.HIGH: este o declarație if. Se spune că dacă pinul 7, care este un pin de intrare, se citește ca HIGHatunci ar trebui să facă totul în interiorul ei.

print("Pin 7 is HIGH!") se află în interiorul unei declarații if. Tot ce face este să imprime Pin 7 is HIGH! pe consolă. Puteți înlocui asta cu orice șir, număr sau variabilă care le conține.

Următorul este elif GPIO.input(7) == GPIO.LOW:. Practic este la fel ca if GPIO.input(7) == GPIO.HIGH: cu excepţia primei părţi: foloseşte elif în loc de if. Codul elif reprezintă Else If. Ceea ce spune este că, dacă tot restul codului de mai sus returnează false, atunci Python ar trebui să ruleze această instrucțiune else-if.

În cele din urmă, sleep(0.15) întrerupe codul timp de 0,15 secunde. De ce să întrerup codul? Este mai ales pentru probleme de performanță. Raspberry Pi va trimite codul de ieșire atât de repede încât va face GUI-ul să întârzie puțin. Este și mai pronunțat dacă utilizați Raspberry Pi prin SSH. Va exista o întârziere vizibilă care se va agrava în timp. Întreruperea codului îl încetinește pentru a evita problemele de performanță.

întrebări frecvente

Este sigur să schimbați pinii pe Raspberry Pi?

Schimbarea la cald sau înlocuirea pinii lui Raspberry Pi când este pornit, este în general o idee proastă. Este întotdeauna mai sigur să îl scoateți de la sursa de alimentare înainte de a comuta.

Ce face ca butoanele cu 4 pini să fie mai bune decât butoanele cu 3 pini?

În ceea ce privește utilitatea, ele sunt practic la fel. Dar având patru pini vă permite să conectați butonul cu 4 pini la un alt buton dintr-un circuit în serie.

Pot activa orice pin de pe Raspberry Pi ca pin de intrare?

Raspberry Pi poate avea 40 de pini, dar doar 27 dintre ei sunt GPIO. Puteți programa doar pinii GPIO în pinii de intrare și de ieșire. Majoritatea IDE-urilor nu vă vor permite să reprogramați un pin non-GPIO într-un pin de intrare.

Toate fotografiile și capturile de ecran de Terenz Jomar Dela Cruz

Join our Newsletter and receive offers and updates! ✅

0 0 votes
Article Rating
Avatar of Routech

Routech

Routech is a website that provides technology news, reviews and tips. It covers a wide range of topics including smartphones, laptops, tablets, gaming, gadgets, software, internet and more. The website is updated daily with new articles and videos, and also has a forum where users can discuss technology-related topics.

You may also like...

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x