Цей посібник є в книзі Raspberry Pi Press «Проста електроніка з GPIO Zero». Ця книга, оновлена для останніх пристроїв Raspberry Pi, містить усю інформацію, необхідну для створення електронних проектів за допомогою контактів GPIO Raspberry Pi. Закодовані на Python з бібліотекою GPIO Zero, проекти включають світлодіодні ліхтарі, сигналізацію руху, далекомір, лазерну мережу та робота Raspberry Pi.
в Офіційний журнал Raspberry Pi №167, ми використали трюк із конденсатором, щоб отримати показання з аналогового датчика. Найкращий і найнадійніший спосіб для Raspberry Pi виявити аналогові входи — це використовувати мікросхему аналого-цифрового перетворювача (АЦП), наприклад MCP3008, яка пропонує вісім вхідних каналів для підключення датчиків та інших аналогових входів. Це не тільки усуває потребу в конденсаторі, але й дозволяє отримувати більш точні та миттєві показання в усьому діапазоні вихідних сигналів датчика.
У цьому підручнику ми підключимо потенціометр до MCP3008, щоб контролювати яскравість світлодіода, повертаючи ручку. Потім ми додаємо другий потенціометр і створюємо інтернет-радіо, використовуючи два потенціометри для зміни станції та регулювання гучності.

Увімкніть SPI
Аналогові значення з мікросхеми АЦП передаються на Raspberry Pi за допомогою протоколу SPI. Хоча це працює на GPIO Zero з коробки, ви можете отримати кращі результати, якщо ввімкнете повну підтримку SPI. По-перше, переконайтеся, що Python spidev пакет встановлено (він має бути за замовчуванням). Відкрийте вікно терміналу та введіть:
$ sudo apt install python3-spidev
Далі клацніть меню Raspberry Pi, виберіть Preferences і відкрийте Control Center, потім увімкніть SPI в розділі Interfaces. Натисніть OK і перезапустіть Raspberry Pi. Ви також можете використовувати інструмент командного рядка, запустивши sudo raspi-config з командного рядка перейдіть до параметрів інтерфейсу, увімкніть SPI та перезапустіть Raspberry Pi.
Підключіть АЦП
Як зазвичай, ви повинні вимкнути Raspberry Pi під час побудови схеми. Як з нього видно малюнок 1для підключення АЦП MCP3008 до контактів GPIO Raspberry Pi потрібно багато кабелів.
Спочатку розташуйте MCP3008 посередині макетної плати, вирівнявши її центральний паз. Тепер підключіть дроти-перемички, як показано на схемі. Два підключаються до шини живлення «+», яка підключається до контакту 3V3; інші два підключені до контакту GND через шлях «–». Середні чотири контакти АЦП підключені до GPIO 8 (CE0), 10 (MOSI), 9 (MISO) і 11 (SCLK).

Прочитайте значення
Підключивши АЦП до Raspberry Pi, ви можете підключити пристрої до його восьми вхідних каналів (номера від 0 до 7). Тут ми підключаємо перший потенціометр (крайній зліва), який є змінним резистором: коли ви повертаєте його ручку, Raspberry Pi зчитує напругу (від 0 В до 3,3 В). Ми можемо використовувати це для керування іншими компонентами, наприклад світлодіодами. Як в малюнок 1підключіть одну зовнішню ніжку потенціометра (внизу ліворуч) до шини живлення «+», іншу — до заземлюючої доріжки «–», а середню ніжку — до першого входу MCP3008: канал 0.
Тепер ми можемо прочитати значення потенціометра в Python. Створіть новий файл, а потім збережіть наступний код як test_pot.pyі зробіть це.
from gpiozero import MCP3008
pot = MCP3008(channel=0)
while True:
print(pot.value)
Вище ми імпортуємо MCP3008 класу GPIO Zero, потім налаштуйте pot змінної до каналу АЦП 0. A while True: потім коло безперервно показує на екрані значення потенціометра (від 0 до 1); спробуйте перетворити його під час виконання коду, щоб побачити зміну числа. натисніть на CTRL+C вийти
Засвітіть світлодіод
Далі ми додамо світлодіод до світлодіодної схеми малюнок 2підключення довшого (позитивного) плеча до GPIO 21, а його коротше плече через резистор до реле заземлення “–”. Створіть новий файл, введіть наступний код і збережіть програму як source_values.py.
from gpiozero import MCP3008, PWMLED
from signal import pause
pot = MCP3008(0)
led = PWMLED(21)
led.source = pot.values
pause()
Введіть пароль MCP3008 і PWMLED класи також signal мод pause функція В MCP3008 дозволяє контролювати яскравість світлодіода за допомогою широтно-імпульсної модуляції (ШІМ). Ми створюємо PWMLED на GPIO 21, призначте його led Ми встановлюємо наш потенціометр на канал 0, як і раніше. Нарешті, ми використовуємо інтелектуальну систему джерела та нульові значення GPIO для поєднання потенціометра зі світлодіодом, щоб постійно встановлювати рівень яскравості останнього на початкове значення. Запустіть код і поверніть ручку, щоб налаштувати яскравість світлодіода. натисніть на CTRL+C щоб вийти з програми.

Додайте другий горщик
Якщо ви ще цього не зробили, додайте другий потенціометр до нашої схеми, як у малюнок 2з його середньою ніжкою, підключеною до каналу 1 MCP3008. Тепер ми будемо використовувати обидва потенціометри для контролю частоти миготіння нашого світлодіода. У Thonny створіть новий файл, введіть наступний код і збережіть його як two_pots.py.
from gpiozero import MCP3008, PWMLED
pot1 = MCP3008(0)
pot2 = MCP3008(1)
led = PWMLED(21)
while True:
print(pot1.value, pot2.value)
led.blink(on_time=pot1.value)
off_time=pot2.value, n=1, background=False)
Тут ми створюємо два окремих pot1 і pot2 змінні, призначені каналам АЦП 0 і 1 відповідно. В а while True: циклу, ми потім друкуємо два значення на екран і блимає світлодіод, час увімкнення та вимкнення якого залежить від наших двох потенціометрів. Запустіть код і покрутіть обидві кнопки, щоб побачити, як він зміниться.
Встановіть VLC
Ми використовуємо ту саму схему для створення простого інтернет-радіо, де один потенціометр використовується для зміни станції, а інший для регулювання гучності. Якщо він не встановлений за замовчуванням, вам потрібно встановити медіаплеєр VLC, щоб мати можливість відтворювати потоки Інтернет-радіо M3U. Відкрийте вікно терміналу та введіть:
$ sudo apt install vlc
Зробіть радіо
Створіть новий файл, введіть показаний код radio_new.py вище та збережіть його під цим ім’ям.
Спочатку імпортуємо MCP3008 класу, разом з Popen, runі time; Popen дозволяє нам запускати та зупиняти VLC. Ми створюємо змінні для станцій і голосових номерів на каналах АЦП 0 і 1 відповідно. Потім ми призначаємо змінні двом URL-адресам радіопотоків (у цьому прикладі ми використовували SomaFM Groove Salad та Indie Pop).
Далі ми створимо деякі функції. по-перше, set_volumeвикористовує wpctl (інструмент керування командним рядком для WirePlumber, менеджер сеансів PipeWire) для керування звуком. по-друге, change_stationвключає в себе if Він працює лише тоді, коли станція, встановлена в першому положенні потенціометра, відрізняється від поточного вибраного положення (current_station). Якщо так, він зупинить поточний потік і відновить відтворення перед скиданням потоку current_station змінна до нього.
Нарешті, в a while True: кільце, всередині a try … except блоку, ми зчитуємо та використовуємо кожен потенціометр по черзі if умовні оператори для виклику пов’язаних функцій, set_volume і change_stationколи потрібно.
Запустіть код і спробуйте змінити обидва потенціометри, щоб змінити станцію та відрегулювати гучність. Для простоти ми використали лише дві радіостанції в цьому прикладі, але ви можете легко додати більше, station.dial.value відповідно мінімум.
Завдяки try … except блокувати, придушувати CTRL+C зупиняє радіопотік перед виходом з програми.
Завантажте повний код.
Проста електроніка з GPIO Zero

Цей посібник міститься в книзі Raspberry Pi Press, Проста електроніка з GPIO Zero. Ця книга, оновлена для останніх пристроїв Raspberry Pi, містить усю інформацію, необхідну для створення електронних проектів за допомогою контактів GPIO Raspberry Pi. Закодовані на Python з бібліотекою GPIO Zero, проекти включають світлодіодні ліхтарі, сигналізацію руху, далекомір, лазерну мережу та робота Raspberry Pi.