SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement

IoT prakticky - programovanie Raspberry Pi v Pythone, 2 časť: vstupy a výstupy

Mikrokontroléry
4

Tento mini seriál je zameraný na obsluhu hardvéru pripojeného na dosku Raspberry PI. V praktických  príkladoch ukážeme využitie GPIO portov ako výstupných, v najjednoduchšom príklade na blikanie LED diódou, aj ako portov vstupných napríklad na zistenie udalosti zatlačenia tlačidla. 

Príklady sú v vo videu

Pripomíname, že na Raspberry je potrebné nainštalovať len operačný systém Raspbian. Raspbian v najnovšej verzii obsahuje nielen interpreter Pythonu, ale aj populárne vývojové prostredia Mu a Thonny Python IDE. Len tak mimochodom „Pi“ v označení tejto mikropočítačovej dosky znamená, že doska bola od začiatku vyvíjaná s tým, že aplikácie pre ňu sa budú písať hlavne v Pythone. S implementáciou interpretera nie je problém, už prvé verzie Raspberry Pi disponovali 256 MB RAM, nové modely majú podstatne viac pamäti Raspberry 3 B+ má 1 GB a Raspberry Pi 4 podľa verzie ešte viac.. Operačný systém vrátane interpretera je umiestnený na pamäťovej karte, pričom ako rozumné minimum kapacity pre poslednú verziu operačného systému Raspbian sa uvádza 16 GB 

GPIO a špeciálne porty

Rozširujúce moduly sa pripájajú cez 40-pinový GPIO (General Purpose Input/Output) konektor. Obsahuje 26 vstupno – výstupných portov, pričom niektoré z nich sa dajú prekonfigurovať tak aby fungovali ako špeciálne porty (SPI, I2C, UART RS232...). Na konektore sú vyvedené aj napájacie napätia 3,3 a 5 V. 

GPIO porty môžu byť vstupné alebo výstupné, t.j. buď môžu snímať nejaký stav, napríklad z kontaktného spínača, či fotobunky, alebo je možné pomocou týchto portov niečo ovládať, napríklad rozsvietiť LED, prípadne generovať impulzy pre krokový motor a podobne. S výnimkou LED budete zariadenia ovládať cez vhodné výkonové prispôsobenie, napríklad relé, či polovodičové spínacie prvky.  Dôležité upozornenie: na vstupné porty môžete priviesť maximálne napätie 3,3 V. Ak na ne privediete výstup z TTL logiky, ktorá používa napätie 5V, určite ich odpálite.Opačne nie je problém, ak privediete 3,3 V výstup na vstup TTL bude to fungovať, pretože toto napätie je spoľahlivo identifikované ako logická jednotka. Mnohé piny majú alternatívne funkcie signálov komunikačných rozhraní I2C,  SPI (Serial Peripheral Interface) a UART. Vývojová doska Raspberry PI má jedno obmedzenie. Nemá analógové vstupy a výstupy, ktoré sú pre niektoré scenáre nasadenia kľúčové, nakoľko väčšina veličín charakterizujúca reálny svet, napríklad teplota, či intenzita osvetlenia je analógová. Našťastie sa spomínané obmedzenie dá jednoducho a lacno prekonať. Buď použijete niektorú rozširujúcu dosku s analógovo digitálnym prevodníkom, napríklad Explorer HAT, prípadne prevodník pre inú platformu, napríklad Arduino, alebo si môžete kvalitný AD prevodník postaviť sami napríklad na univerzálnej prepojovacej doske

Pripojenie hardvéru k doske Raspberry Pi popíšeme tak, aby ho zvládli aj úplní začiatočníci. Preto najskôr vysvetlíme ako funguje univerzálna prepojovacia doska. Má vo vnútri prepojené pre piny a drôtiky po jednotlivých stĺpcoch. Po okrajoch sú spravidla línie pinov s napájacím napätím a zemou, čiže GND.

Ku konektoru dosky Raspberry sa pripojíte buď drôtikmi, ktoré majú na jednom konci dutinky vhodné na nasunutie na piny konektora a na druhej strane piny, ktoré sa zasunú do prepojovacieho poľa.  Efektnejšie riešenie je prípravok T-Cobbler Breakout for Raspberry Pi, ktorý sa zasunie do prepojovacieho poľa a káblom sa spojí s Raspberry doskou.

Ukážeme aj dva jednoduché príklady. Prvým bude jednoduchá aplikácia, ktorá bude blikať LED diódami pripojenými na porty GPIO 2 a GPIO3. Tieto porty môžete použiť ako univerzálne vstupy a výstupy v prípade ak ste v konfigurácii operačného systému Raspbian nepovolili kominikáciu cez I2C. Implicitne je zakázaná.  Diódy sú na piny portu pripojené cez obmedzovacie rezistory 330 ohmov. Ak nastavíte na výstupnom porte hodnotu HIGH, čiže logickú jednotku bude na porte nastavené napätie približne 3.3 V, v opačnom prípade pri nastavenej hodnote LOW bude napätie na pine blízke 0V. Maximálny prúd, ktorý môže tiecť cez LED diódu je 10 – 20 mA, preto ak na pin pripájate LED diódu je potrebné  do série s diódou zapojiť obmedzovací rezistor, pre 3.3 V logiku môžete použiť rezistor s odporom 220 - 330 Ohm.

Príkazom import RPi.GPIO as GPIO importuje knižnica umožňujúca ovládať vstupno – výstupné piny dosky Raspberry Pi. 

import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)
GPIO.setup(3, GPIO.OUT)
 
for x in range (0,3):
   GPIO.output(2, GPIO.HIGH)
   GPIO.output(3, GPIO.LOW)
   time.sleep(1)
   GPIO.output(2, GPIO.LOW)
   GPIO.output(3, GPIO.HIGH)
   time.sleep(1)
GPIO.cleanup()

Tento kód stačí napísať, alebo skopírovať do editora Mu, ktorý nájdete v používateľskom rozhraní operačného systému Raspbian v hlavnom menu, v položke Programovanie.

Príkazom

GPIO.setmode(GPIO.BCM)

nastavíte aké označenie portov budete používať, buď Broadcom (BCM), čiže porty budú označené rovnako ako na SOC, alebo BOARD, kedy budú porty označené tak ako sú na doske. Port GPIO2 je na pine 3 a port GPIO3 na pine 5.

Takže pri značení portov ako sú na pinoch konektora by bol kód v tvare

import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BOARD)
GPIO.setup(3, GPIO.OUT)
GPIO.setup(5, GPIO.OUT)
 
for x in range (0,3):
   GPIO.output(3, GPIO.HIGH)
   GPIO.output(5, GPIO.LOW)
   time.sleep(1)
   GPIO.output(3, GPIO.LOW)
   GPIO.output(5, GPIO.HIGH)
   time.sleep(1)
GPIO.cleanup()

Vo všetkých príkladoch seriálu budeme používať konvenciu Broadcom (BCM)

V druhom príklade budeme najjednoduchším spôsobom zisťovať, či nebolo zatlačené tlačidlo. Test bude v hlavnej slučke a pre jednoduchosť nebudeme ošetrovať ani mechanické zákmity kontaktov tlačidla. V reálnej aplikácii by ste samozrejme zákmity ošetrili a kód akcie, ktorú je potrebné vykonať po zatlačení tlačidla by ste dali do procedúry na obsluhu udalosti privedenia napäťovej úrovne na príslušný port, v tomto príklade na GPIO 2

import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.IN)
 
while True:
    vstup = GPIO.input(2)
    if vstup == False:
       print("STLACENE")
       while vstup == False:
           vstup = GPIO.input(2)

 

Ostatné časti seriálu:

Programovanie Raspberry Pi v Pythone 1: Konfigurácia https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone---1-cast--konfiguracia

Programovanie Raspberry Pi v Pythone 2: Vstupy a výstupyhttps://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone---2-cast--vstupy-a-vystupy

Programovanie Raspberry Pi v Pythone 3: PWM výstup a ovládanie servomotorov https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone-3--PWM-vystup-a-ovladanie-servomotorov

Zobrazit Galériu

Luboslav Lacko

Všetky autorove články
Raspberry Pi Python IoT programovanie

4 komentáre

GPIO kniznica reakcia na: IoT prakticky - programovanie Raspberry Pi v Pythone, 2 časť: vstupy a výstupy

12.8.2019 09:08
gpiozero je jednoduhšia na takéto lahké ovládanie
Reagovať

RE: GPIO kniznica reakcia na: GPIO kniznica

12.8.2019 17:08
Áno máte pravdu, ale GPIO knižnica je už nainštalovaná a dostupná z Mu prostredia. Pre Mu som sa rozhodol preto, lebo z Raspberry budem v niektorom dieli priamo programovať dosku BBC Micro:bit
Reagovať

Ram reakcia na: IoT prakticky - programovanie Raspberry Pi v Pythone, 2 časť: vstupy a výstupy

11.8.2019 16:08
Zaujímavé, že 256GB je menej ako 1GB a ešte zaujímavejšie je, že mne prvú verziu predali s iba 256MB.
Reagovať

RE: Ram reakcia na: Ram

11.8.2019 17:08
Dakujem za upozornenie, má to byť samozrejme 256 MB, opravil som to :-)
Reagovať

Pridať komentár