Первый светодиод с gpiozero
Классическое "Hello World" железного мира — это не текст на экране, а мигающий светодиод в твоих руках.
Когда лампочка загорается от твоей строчки кода, происходит магия: программа впервые тронула физический мир. Это не забывается.
Светодиод (LED) — самый простой компонент: подал напряжение — горит. Но подключать его напрямую нельзя: нужен резистор на 330 Ом, который ограничивает ток и спасает и светодиод, и пин Pi.
Если до этого ты программировал только то, что живёт на экране — сайты, игры, ботов, — то первый светодиод ощущается совсем иначе. Текст в консоли можно стереть и забыть, а вот настоящая лампочка, которая загорается ровно тогда, когда ты этого захотел в коде, оставляет другое чувство. Это момент, когда ты понимаешь: программа — не просто буквы в редакторе, она может двигать вещами в реальном мире. С этого маленького мигания начинались карьеры инженеров, которые сейчас собирают роботов и спутники.
Как работает под капотом
У светодиода две ножки: длинная (анод, плюс) и короткая (катод, минус). Ток должен течь от GPIO-пина через резистор и светодиод к земле. Когда программа делает пин "высоким" (3.3В), появляется напряжение, ток течёт — светодиод горит.
GPIO17 (физ. 11)
|
[резистор 330 Ом]
|
[+ светодиод -] (длинная ножка к резистору)
|
GND (физ. 6)
Почему вообще нужен резистор и почему именно 330 Ом? Светодиод — жадный компонент: если дать ему течь свободно, он "выпьет" весь доступный ток и сгорит за доли секунды, а заодно может повредить пин Pi, который не рассчитан отдавать больше ~16 мА. Резистор работает как сужение в шланге: он намеренно "поджимает" поток до безопасного уровня. 330 Ом — золотая середина: светодиод горит ярко, но ток остаётся в безопасных рамках. Поставишь резистор больше — светодиод будет тусклее; поставишь сильно меньше или совсем уберёшь — рискуешь железом.
3.3В от пина резистор земля
+---------+ +--------+ +-------+
| поток | --> | сужение| --> | 0В |
| тока | | 330 Ом | | |
+---------+ +--------+ +-------+
ток ограничен -> светодиод цел
Библиотека gpiozero прячет всю сложность за простым классом LED. Но этот код использует железо, поэтому в браузере он не запустится — запускай его на самом Pi:
from gpiozero import LED
from time import sleep
led = LED(17) # GPIO17 по BCM
while True:
led.on()
sleep(1)
led.off()
sleep(1)
Обрати внимание на структуру: бесконечный цикл while True, внутри которого мы включаем светодиод, ждём секунду, выключаем и снова ждём. Именно паузы sleep делают мигание видимым — без них светодиод переключался бы миллионы раз в секунду, и глаз видел бы просто ровное свечение. Время в железных проектах так же важно, как и сами команды.
А вот логику мигания без железа можно отладить прямо здесь, в браузере, на чистом Python. Это полезно: сначала проверяем алгоритм, потом переносим на Pi. Попробуй сам ▶
# Симуляция мигания: печатаем состояние светодиода
def blink(times):
state = False
for tick in range(times):
state = not state # переключаем вкл/выкл
symbol = "ON " if state else "off"
print(f"тик {tick}: светодиод {symbol}")
blink(6)
Можно пойти дальше и смоделировать не просто мигание, а "дыхание" — когда яркость плавно нарастает и спадает. На настоящем Pi это делают через ШИМ (широтно-импульсную модуляцию), но саму идею легко проверить на чистых числах в браузере:
# Имитация плавной яркости (0..100 и обратно)
def breathe(steps):
for level in list(range(0, 101, 20)) + list(range(80, -1, -20)):
bar = "#" * (level // 10)
print(f"яркость {level:3}% | {bar}")
breathe(1)
Частые ошибки
- Светодиод не горит. Перепутаны ножки — переверни светодиод (длинная к плюсу).
- Забыли резистор. Без него светодиод и пин могут сгореть.
- Указали не тот пин. Помни про BCM:
LED(17)— это физический пин 11. - Светодиод горит еле-еле. Возможно, резистор слишком большой (например, 10 кОм вместо 330 Ом) — ток слишком зажат.
- Цепь собрана, но мертва. Проверь, что обе ножки действительно вставлены в макетную плату до контакта, а не "висят" над отверстиями.
Best practices
- Используй макетную плату (breadboard), чтобы не паять для экспериментов.
- Отлаживай логику отдельно от железа — как мы сделали выше.
- Для мигания есть готовый метод
led.blink()— не обязательно писать цикл вручную. - Держи под рукой несколько резисторов разного номинала и проверяй маркировку по цветным полоскам.
- Перед сборкой всегда обесточивай Pi, а перепроверяй схему уже после.
Итоги. Светодиод подключают через резистор 330 Ом от GPIO к земле — резистор ограничивает ток и спасает железо. Класс LED(17) из gpiozero включает и выключает его, а паузы sleep делают мигание видимым. Логику можно отлаживать на чистом Python в браузере. Дальше научимся читать кнопку.