Перейти до змісту

🎥 Камера та GPIO

Огляд апаратних можливостей Raspberry Pi: камера, GPIO піни та периферія.


Raspberry Pi Camera

Активуйте інтерфейс камери в налаштуваннях

  1. Підключіть камеру до CSI роз'єму (синя стрічка).
  2. Важливо: Для роботи libcamera на нових OS (Bookworm/Bullseye) НЕ вмикайте "Legacy Camera" в raspi-config. Цей інтерфейс має бути вимкнений. Перезавантажте систему після підключення камери.

Команди для роботи з камерою

Команда Опис
libcamera-hello Діагностика камери (відображення прев'ю на 5 секунд).
libcamera-still -o photo.jpg Зйомка фотографії.
libcamera-vid -t 10000 -o video.h264 Запис відео (тривалість 10с).

Версії OS

У застарілих версіях OS (Buster та старіші) використовувалися утиліти raspistill та raspivid. У версіях Bullseye та новіших — набір інструментів libcamera-* (або rpicam-* на останніх оновленнях).

Python (picamera2)

Встановлення бібліотеки:

sudo apt install python3-picamera2

Приклад використання:

from picamera2 import Picamera2
import time

camera = Picamera2()
camera.start()
time.sleep(2)  # Затримка для стабілізації експозиції
camera.capture_file("test.jpg")
camera.stop()
print("Фото збережено!")


🔌 GPIO (General Purpose Input/Output)

GPIO - інтерфейс введення-виведення загального призначення для підключення зовнішніх компонентів.

Нумерація пінів

Існує два стандарти нумерації контактів:

  1. BCM (Broadcom) - за логічними номерами GPIO (наприклад, GPIO17).
  2. BOARD - за фізичним розташуванням на платі (Pin 1, Pin 2...).

Стандарт BCM є рекомендованим.

Схема пінів (Pinout)

Виконайте команду:

pinout
Альтернативно, використовуйте інтерактивний ресурс: pinout.xyz

Python (gpiozero) - Рекомендовано

Бібліотека gpiozero є сучасною заміною для RPi.GPIO. Вона має простіший API та підтримується офіційно.

Встановлення (зазвичай вже є в Raspberry Pi OS):

sudo apt install python3-gpiozero

Приклад: Керування світлодіодом

from gpiozero import LED
from time import sleep

led = LED(17)  # GPIO17

for i in range(10):
    led.on()
    sleep(0.5)
    led.off()
    sleep(0.5)

Приклад: Зчитування стану кнопки

from gpiozero import Button

button = Button(27)  # GPIO27 з вбудованим pull-up

print("Очікування натискання...")
button.wait_for_press()
print("Подію зафіксовано!")

Python (RPi.GPIO) - Альтернатива

Сумісність та Raspberry Pi 5

Класична бібліотека RPi.GPIO не працює коректно на Raspberry Pi 5 через зміни в архітектурі. Для старих проєктів рекомендовано використовувати rpi-lgpio — сумісну заміну.

Встановлення (через системний менеджер пакетів):

sudo apt install python3-rpi-lgpio
Або, якщо ви використовуєте старіші моделі Pi:
sudo apt install python3-rpi.gpio

Приклад: Керування світлодіодом

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)

for i in range(10):
    GPIO.output(17, GPIO.HIGH)
    time.sleep(0.5)
    GPIO.output(17, GPIO.LOW)
    time.sleep(0.5)

GPIO.cleanup()  # Обов'язково!

Датчики (Sensors)

DHT11/DHT22 (Температура та вологість)

Python Virtual Environment

Сучасні версії OS вимагають використання віртуальних середовищ для бібліотек, встановлених через pip.

  1. Створіть віртуальне середовище:
    python3 -m venv ~/my-env
    source ~/my-env/bin/activate
    
  2. Встановіть бібліотеки у середовище:
    pip install adafruit-circuitpython-dht adafruit-blinka
    
  3. Встановіть системну залежність (потрібно зробити один раз):
    sudo apt install libgpiod2
    

Приклад коду:

import adafruit_dht
import board

sensor = adafruit_dht.DHT22(board.D4)  # GPIO4

try:
    temperature = sensor.temperature
    humidity = sensor.humidity
    print(f"Температура: {temperature}°C, Вологість: {humidity}%")
except RuntimeError as e:
    print(f"Помилка зчитування: {e}")


I2C та SPI (Протоколи зв'язку)

Протоколи для підключення цифрової периферії (дисплеї, сенсори).

Активація I2C/SPI

sudo raspi-config
Навігація меню: Interface OptionsI2C / SPIEnable.

Діагностика шини I2C

sudo apt install i2c-tools
i2cdetect -y 1
Виводить таблицю адрес виявлених пристроїв (наприклад, 0x27 для LCD дисплея).


Звук (Audio)

Відтворення звуку

# Встановити aplay (зазвичай вже є)
aplay sound.wav

# Або через mpg123 для MP3
sudo apt install mpg123
mpg123 music.mp3

Налаштування виходу (HDMI vs Jack)

# Найпростіший спосіб - через raspi-config
sudo raspi-config
Навігація: System OptionsAudio → Виберіть потрібний пристрій.

Для керування гучністю та виходами в терміналі (на нових OS з PipeWire) можна використовувати pactl або wpctl.