Skip to main content

🎯 GPIOzero - программирование IoT как конструктор Lego

📋 Паспорт спринта

Параметр Значение
Предмет Интернет вещей (элективный курс)
Класс 9 класс
Спринт № 5 из 36
Тип занятия Практический спринт с библиотеками
Продолжительность 90 минут
Формат Быстрое прототипирование + сравнительный анализ

🎯 Цели спринта (Sprint Goals)

Основная цель:

Освоить библиотеку gpiozero для быстрого и элегантного программирования IoT-устройств

Конкретные результаты спринта:

  • Понимают философию “Zero boilerplate” в программировании
  • Сравнивают RPi.GPIO vs gpiozero подходы на практике
  • Используют готовые классы для LED, Button, PWM устройств
  • Программируют композитные устройства (LEDBoard, ButtonBoard)
  • Применяют функциональное программирование для IoT (callbacks, decorators)
  • Создают элегантный и читаемый код для сложных взаимодействий

🔄 Sprint Retrospective предыдущего спринта (0-5 мин)

Демонстрация домашних проектов:

1🏆 ВЫСТАВКА ПЕРСОНАЛЬНЫХ ГАДЖЕТОВ:
2- "Покажите свои устройства - что получилось?"
3- "Какая техническая проблема была самой интересной?"
4- "Что хотели бы улучшить, но не хватило знаний?"

Анализ технических проблем:

  • Сколько строк кода получилось в среднем?
  • Какие части кода повторялись чаще всего?
  • Где была самая сложная логика?

Мостик к новой теме: “Вы написали много низкоуровневого кода. А что, если те же задачи можно решить в 3 раза меньшим количеством строк?”


🕐 Sprint Timeline (90 минут)

⚡ SPRINT START (0-10 мин): “Битва подходов”

Демонстрация контраста:

1. “Старый способ” с RPi.GPIO (4 мин):

1Показать код мигающего LED с прошлого спринта:
2- 15+ строк кода
3- Множество imports
4- Ручное управление состояниями
5- Обязательная очистка GPIO

2. “Новый способ” с gpiozero (3 мин):

1Показать эквивалентный код с gpiozero:
2- 3 строки кода
3- Один import
4- Автоматическое управление
5- Встроенная очистка

3. Проблемный вопрос (3 мин):

1🤔 "Какой подход лучше и когда?
2Всегда ли 'проще' означает 'лучше'?"

📚 THEORY BLOCK (10-25 мин): Философия Zero Boilerplate

Микро-блок 1 (10-15 мин): Что такое “boilerplate code”

 1🔩 BOILERPLATE CODE = "шаблонный код"
 2Код, который приходится писать снова и снова:
 3• Настройка GPIO пинов
 4• Проверка состояний
 5• Очистка ресурсов
 6• Обработка ошибок
 7
 8ПРОБЛЕМЫ:
 9• Много кода для простых задач
10• Легко делать ошибки
11• Сложно читать основную логику
12• Повторение одного и того же
13
14🎯 ФИЛОСОФИЯ gpiozero:
15"Убрать всё лишнее, оставить только суть"

Аналогия с Lego:

  • RPi.GPIO = делать кубики Lego с нуля
  • gpiozero = использовать готовые блоки Lego

Микро-блок 2 (15-20 мин): Объектно-ориентированный подход

 1🏗️ ОБЪЕКТНАЯ МОДЕЛЬ gpiozero:
 2
 3LED = объект со свойствами и методами
 4• led.on() вместо GPIO.output(pin, HIGH)
 5• led.off() вместо GPIO.output(pin, LOW)  
 6• led.blink() вместо while True: on/off/sleep
 7
 8Button = умный объект с событиями
 9• button.when_pressed = функция
10• button.when_released = функция
11• button.hold_time для долгих нажатий
12
13PWM = плавное управление
14• led.pulse() для автоматического затухания
15• servo.angle = 90 для позиционирования

Микро-блок 3 (20-25 мин): Композитные устройства и события

 1🎛️ КОМПОЗИТНЫЕ УСТРОЙСТВА:
 2LEDBoard = группа LED как один объект
 3• leds = LEDBoard(2, 3, 4, 5)
 4• leds.on() включает все сразу
 5• leds[0].on() включает первый
 6
 7ButtonBoard = группа кнопок
 8• buttons = ButtonBoard(10, 11, 12)
 9• buttons.wait_for_press() ждет любую
10
11⚡ СОБЫТИЙНОЕ ПРОГРАММИРОВАНИЕ:
12Вместо бесконечных циклов:
13• button.when_pressed = led.on
14• button.when_released = led.off
15• Программа реагирует на события автоматически

Псевдокод событийной программы:

1led = LED(18)
2button = Button(2)
3
4button.when_pressed = led.on
5button.when_released = led.off
6
7# Программа ждет событий автоматически
8pause()  # Вместо while True

☕ BREAK (25-30 мин): Техническая пауза

🛠️ ПРАКТИЧЕСКИЙ БЛОК (30-80 мин): Рефакторинг и новые возможности

Этап 1: Миграция с RPi.GPIO на gpiozero (30-40 мин)

Задание “Переписать старый код”:

Цель: Взять программу с прошлого спринта и переписать её с gpiozero

Алгоритм работы:

1🔄 ПРОЦЕСС РЕФАКТОРИНГА:
21. Выбрать рабочую программу с прошлого спринта
32. Определить используемые компоненты (LED, Button, PWM)
43. Заменить импорты и инициализацию
54. Переписать логику с использованием gpiozero методов
65. Сравнить количество строк кода
76. Протестировать функциональность

Ожидаемый результат:

  • Код стал короче минимум в 2 раза
  • Логика стала понятнее
  • Функциональность осталась той же
  • Появились новые возможности

Этап 2: Событийное программирование (40-50 мин)

Задание “Умный светофор”:

Цель: Создать светофор с кнопкой пешехода используя события

Алгоритм программы:

 1🚦 ПСЕВДОКОД СВЕТОФОРА:
 2red_led = LED(18)
 3yellow_led = LED(19) 
 4green_led = LED(20)
 5pedestrian_button = Button(2)
 6
 7def normal_cycle():
 8    # Обычный цикл светофора
 9    green_led.on()
10    sleep(10)
11    yellow_led.on()
12    sleep(3)
13    red_led.on()
14    sleep(7)
15
16def pedestrian_request():
17    # Досрочное переключение на красный
18    print("Пешеход нажал кнопку!")
19    # Логика досрочного переключения
20
21pedestrian_button.when_pressed = pedestrian_request
22# Запустить нормальный цикл в фоне

Ожидаемый результат:

  • Светофор работает в обычном режиме
  • Кнопка пешехода прерывает цикл
  • События обрабатываются корректно
  • Система возвращается к нормальной работе

Этап 3: Композитные устройства (50-60 мин)

Задание “LED-панель управления”:

Цель: Создать панель из множества LED с групповым управлением

Алгоритм программы:

 1💡 ПСЕВДОКОД LED-ПАНЕЛИ:
 2led_panel = LEDBoard(18, 19, 20, 21, 22, 23)
 3control_buttons = ButtonBoard(2, 3, 4)
 4
 5def pattern_1():
 6    # Последовательное включение
 7    for led in led_panel:
 8        led.on()
 9        sleep(0.5)
10
11def pattern_2():
12    # Мигание всех
13    led_panel.blink(on_time=0.5, off_time=0.5)
14
15def pattern_3():
16    # Случайное мигание
17    led_panel.pulse(fade_in_time=1, fade_out_time=1)
18
19control_buttons[0].when_pressed = pattern_1
20control_buttons[1].when_pressed = pattern_2  
21control_buttons[2].when_pressed = pattern_3

Ожидаемый результат:

  • Панель из 6+ LED работает как единое целое
  • Каждая кнопка запускает свой паттерн
  • Паттерны можно переключать на лету
  • Код читается как естественный язык

Этап 4: Продвинутые техники (60-70 мин)

Задание “Музыкальный светомузыка”:

Цель: Создать устройство, где LED реагируют на виртуальную “музыку”

Алгоритм программы:

 1🎵 ПСЕВДОКОД СВЕТОМУЗЫКИ:
 2leds = LEDBoard(18, 19, 20, 21)
 3tempo_button = Button(2)
 4
 5class MusicVisualizer:
 6    def __init__(self, leds):
 7        self.leds = leds
 8        self.tempo = 120  # BPM
 9        
10    def beat_pattern(self):
11        # Паттерн под ритм
12        beat_time = 60 / self.tempo
13        # Логика визуализации
14        
15    def change_tempo(self):
16        self.tempo += 20
17        if self.tempo > 200:
18            self.tempo = 60
19
20visualizer = MusicVisualizer(leds)
21tempo_button.when_pressed = visualizer.change_tempo

Ожидаемый результат:

  • LED создают визуальные паттерны
  • Кнопка изменяет скорость воспроизведения
  • Использованы продвинутые возможности gpiozero
  • Код структурирован объектно-ориентированно

Этап 5: Свободное творчество (70-80 мин)

Задание “Мини-проект на выбор”:

Варианты проектов:

 1🎨 ВЫБЕРИТЕ ПРОЕКТ:
 2
 31. "ИГРА САЙМОН"
 4   - Последовательность LED
 5   - Повторение кнопками
 6   - Усложнение с каждым уровнем
 7
 82. "ДОМАШНЯЯ СИГНАЛИЗАЦИЯ"
 9   - PIR датчик (симуляция кнопкой)
10   - Сирена (LED + звук)
11   - Постановка/снятие с охраны
12
133. "УМНЫЙ БУДИЛЬНИК"
14   - Плавное включение "солнца" (PWM)
15   - Кнопка отсрочки
16   - Режимы выходного дня
17
184. "СИСТЕМА ГОЛОСОВАНИЯ"
19   - Кнопки для вариантов ответа
20   - LED индикация результатов
21   - Сброс и новое голосование

🎯 DEMO TIME (80-87 мин): Презентация элегантных решений

Формат: “Конкурс элегантности кода”

Структура демо (1.5 мин на проект):

  1. Демонстрация работы (45 сек)

    • Показать все функции устройства
    • Подчеркнуть плавность и отзывчивость
  2. Показ кода (30 сек)

    • Сколько строк получилось?
    • Самая красивая строчка кода
  3. Техническая изюминка (15 сек)

    • Какая возможность gpiozero произвела впечатление?

Номинации зрительского голосования:

  • 🏆 Самый элегантный код (минимум строк, максимум функций)
  • 🎨 Лучший пользовательский опыт (плавность, отзывчивость)
  • 💡 Самое креативное использование библиотеки
  • 🔧 Лучшая техническая реализация

🔄 SPRINT RETRO (87-90 мин): Сравнительный анализ

Техника “До и После”:

 1📊 СРАВНЕНИЕ ПОДХОДОВ:
 2
 3RPi.GPIO (спринты 3-4):
 4✅ Полный контроль
 5✅ Понимание низкого уровня
 6❌ Много boilerplate кода
 7❌ Легко ошибиться
 8
 9gpiozero (спринт 5):
10✅ Быстрая разработка
11✅ Читаемый код
12✅ Меньше ошибок
13❌ Меньше контроля
14❌ Скрытая сложность

Вопросы для обсуждения:

  1. Когда использовать каждый подход? (1 мин)
  2. Что понравилось больше в gpiozero? (1 мин)
  3. Готовы ли к первому большому проекту? (1 мин)

📝 Sprint Backlog (Домашнее задание)

Подготовка к проекту “Умная лампа” (Спринт 6-9)

User Story: Как будущий создатель умной лампы, я хочу спроектировать архитектуру системы и выбрать оптимальные технологии.

Уровень 1: Техническое планирование (обязательно)

 1📋 ЗАДАНИЕ "АРХИТЕКТОР УМНОЙ ЛАМПЫ":
 2
 31. АНАЛИЗ ТРЕБОВАНИЙ:
 4   Изучите примеры умных ламп (Philips Hue, Xiaomi, LIFX)
 5   Составьте список из 10 функций, которые хотели бы реализовать
 6
 72. ВЫБОР ТЕХНОЛОГИЙ:
 8   Для каждой функции определите:
 9   - Какие датчики/актуаторы нужны?
10   - RPi.GPIO или gpiozero использовать?
11   - Какие дополнительные библиотеки понадобятся?
12
133. СХЕМА СИСТЕМЫ:
14   Нарисуйте блок-схему умной лампы:
15   - Входы (кнопки, датчики, сеть)
16   - Обработка (Raspberry Pi + алгоритмы)
17   - Выходы (LED, дисплей, уведомления)
18
194. ПЛАН РЕАЛИЗАЦИИ:
20   Разбейте проект на 4 этапа (по спринтам):
21   - Спринт 6: Базовое управление
22   - Спринт 7: Датчики окружения
23   - Спринт 8: Сетевое управление
24   - Спринт 9: Интеграция и тестирование

Уровень 2: Прототипирование (продвинутый)

 1🔧 ЗАДАНИЕ "ПЕРВЫЙ ПРОТОТИП":
 2
 31. Создайте упрощенную версию умной лампы:
 4   - 1 RGB LED или 3 обычных LED (красный, зеленый, синий)
 5   - 2 кнопки (режим, яркость)
 6   - Минимум 5 режимов работы
 7
 82. Используйте только gpiozero
 93. Код должен быть максимально читаемым
104. Добавьте комментарии к каждой функции
11
125. Протестируйте стабильность работы:
13   - Работает ли без сбоев 10 минут?
14   - Корректно ли переключаются режимы?
15   - Нет ли конфликтов между функциями?

Уровень 3: Исследование (для энтузиастов)

 1🔬 ЗАДАНИЕ "ТЕХНОЛОГИЧЕСКИЙ СКАУТ":
 2
 31. ИССЛЕДОВАНИЕ БИБЛИОТЕК:
 4   Найдите и протестируйте дополнительные библиотеки:
 5   - colorzero (работа с цветами)
 6   - pigpio (альтернатива RPi.GPIO)
 7   - flask (веб-интерфейс)
 8
 92. ИЗУЧЕНИЕ ДАТЧИКОВ:
10   Найдите информацию о датчиках для умного дома:
11   - Датчик освещенности (фоторезистор, BH1750)
12   - Датчик движения (PIR)
13   - Датчик звука (микрофон)
14
153. АНАЛИЗ КОНКУРЕНТОВ:
16   Изучите 3 коммерческих умных лампы:
17   - Какие функции есть у каждой?
18   - Какие технологии используются?
19   - Что можем сделать лучше/дешевле?
20
214. СОЗДАЙТЕ ПРЕЗЕНТАЦИЮ:
22   - 5 слайдов о будущей умной лампе
23   - Конкурентные преимущества
24   - Технический стек

Формат отчета:

 1ПРОЕКТ: Архитектура умной лампы v1.0
 2====================================
 3
 4👤 АВТОР: [ваше имя]
 5📅 ДАТА: [дата завершения]
 6
 7🎯 КОНЦЕПЦИЯ:
 8[Какую проблему решает ваша умная лампа?]
 9
10⚙️ ПЛАНИРУЕМЫЕ ФУНКЦИИ:
111. [Функция 1] - [технология реализации]
122. [Функция 2] - [технология реализации]
13...
1410. [Функция 10] - [технология реализации]
15
16🏗️ АРХИТЕКТУРА:
17[Схема или описание компонентов системы]
18
19📊 ТЕХНОЛОГИЧЕСКИЙ СТЕК:
20• Аппаратная платформа: Raspberry Pi 4
21• Основные библиотеки: [список]
22• Датчики и актуаторы: [список]
23• Протоколы связи: [выбор и обоснование]
24
25📅 ПЛАН РЕАЛИЗАЦИИ:
26• Спринт 6 (базовое управление): [задачи]
27• Спринт 7 (датчики): [задачи]
28• Спринт 8 (сеть): [задачи]  
29• Спринт 9 (финализация): [задачи]
30
31🔍 ИССЛЕДОВАНИЯ:
32[Что изучили дополнительно]
33
34💡 ИННОВАЦИИ:
35[Чем ваша лампа будет лучше существующих]

📊 Sprint Metrics (Оценивание)

Критерии оценки практической работы:

Критерий Отлично (5) Хорошо (4) Удовлетворительно (3)
Освоение gpiozero Использует продвинутые возможности библиотеки Основные функции освоены Базовые возможности работают
Качество кода Элегантный, читаемый код с минимумом строк Хороший код с небольшими недочетами Работающий код
Событийное программирование Эффективно использует callbacks и события Понимает концепцию, небольшие проблемы Базовое понимание
Сравнительный анализ Четко понимает различия подходов Понимает основные различия Видит поверхностные различия
Техническое творчество Создает оригинальные и сложные решения Добавляет собственные улучшения Следует инструкциям

Формирующее оценивание:

  • Library Mastery: Глубина освоения gpiozero
  • Code Elegance: Красота и читаемость решений
  • Architectural Thinking: Понимание системного подхода
  • Problem Decomposition: Умение разбивать сложные задачи
  • Technology Assessment: Способность выбирать подходящие инструменты

Sprint Badges:

  • 🎯 gpiozero Master - за освоение продвинутых возможностей библиотеки
  • 📐 Code Architect - за элегантные и структурированные решения
  • Event Wizard - за мастерство событийного программирования
  • 🎨 UX Designer - за лучший пользовательский опыт
  • 🔄 Refactoring Pro - за эффективную миграцию старого кода
  • 🏗️ System Planner - за качественную архитектуру умной лампы
  • 💡 Innovation Award - за самое креативное применение технологий

🎒 Sprint Resources

Технические требования:

Основное оборудование (то же, что в спринте 4):

  • Raspberry Pi 4 с настроенной системой
  • Breadboard и соединительные провода
  • LED различных цветов (включая RGB, если есть)
  • Кнопки и резисторы
  • Потенциометры (для продвинутых заданий)

Дополнительные компоненты (желательно):

  • Servo мотор для демонстрации PWM
  • Buzzer для звуковых эффектов
  • Больше LED для панелей и матриц
  • PIR датчик (для имитации умного дома)

Программное обеспечение:

1📦 PYTHON БИБЛИОТЕКИ:
2 gpiozero (основная для спринта)
3 colorzero (работа с цветами RGB)
4 signal (обработка системных сигналов)
5 threading (параллельные процессы)
6 random (для эффектов)

Методические материалы:

  • Сравнительная таблица RPi.GPIO vs gpiozero
  • Каталог всех классов gpiozero с примерами
  • Руководство по событийному программированию
  • Шаблоны кода для типовых IoT-задач
  • Чек-лист проектирования IoT-систем

Резервные планы:

Если gpiozero не установлен:

  • Быстрая установка: sudo apt install python3-gpiozero
  • Работа через документацию и псевдокод
  • Симуляция на компьютерах класса

Если не хватает компонентов:

  • Симуляция недостающих компонентов в коде
  • Групповая работа с поочередным использованием
  • Больше времени на планирование будущих проектов

🔧 Sprint Facilitation Tips

Методические акценты:

Подчеркивание элегантности:

1🎨 КРИТЕРИИ КРАСИВОГО КОДА:
2• Читается как естественный язык
3• Минимум повторений
4• Ясная структура
5• Интуитивно понятная логика
6• Легко модифицировать

Сравнительный анализ:

  • Постоянно сравнивать с предыдущими решениями
  • Показывать количество сэкономленных строк
  • Обсуждать trade-offs (компромиссы)
  • Подчеркивать момент “озарения”

Поддержка разных уровней:

Для быстро усваивающих:

  • Дополнительные вызовы с композитными устройствами
  • Исследование продвинутых возможностей библиотеки
  • Роль менторов для одноклассников

Для осторожных:

  • Пошаговая миграция старого кода
  • Простые примеры перед сложными
  • Акцент на том, что уже умеют

Для творческих:

  • Свобода в выборе финальных проектов
  • Поощрение экспериментов
  • Демонстрация необычных применений

Подготовка к проекту “Умная лампа”:

Создание мотивации:

  • Показать примеры коммерческих умных ламп
  • Обсудить их стоимость vs стоимость самодельной
  • Подчеркнуть возможности кастомизации

Техническая подготовка:

  • Убедиться, что все освоили основы
  • Проверить доступность компонентов для проекта
  • Подготовить дополнительные материалы

🔗 Связь с проектом “Умная лампа” (Спринты 6-9)

Подготовленная база:

 1✅ ТЕХНИЧЕСКИЕ НАВЫКИ:
 2• Уверенная работа с GPIO
 3• Понимание различных подходов к программированию
 4• Событийное программирование
 5• Структурирование кода
 6
 7✅ ИНСТРУМЕНТАРИЙ:
 8• RPi.GPIO для низкоуровневых задач
 9• gpiozero для быстрого прототипирования
10• Навыки отладки и тестирования
11• Понимание архитектуры систем

Проектная готовность:

1🎯 ГОТОВЫ К ПРОЕКТУ:
2• Планировать сложные системы
3• Выбирать подходящие технологии
4• Итеративно развивать функциональность
5• Создавать пользовательские интерфейсы
6• Интегрировать различные компоненты

План проекта “Умная лампа”:

1📅 ROADMAP (спринты 6-9):
2Спринт 6: Базовая функциональность (RGB, режимы, кнопки)
3Спринт 7: Датчики среды (освещенность, движение, звук)
4Спринт 8: Сетевые возможности (веб-интерфейс, API)
5Спринт 9: Финализация и презентация (корпус, документация)

📈 Sprint Success Metrics

Спринт считается успешным, если:

  • ✅ 90%+ учащихся освоили основы gpiozero
  • ✅ Все могут объяснить различия между подходами к программированию GPIO
  • ✅ Созданы элегантные решения с минимальным количеством кода
  • ✅ Понимают принципы событийного программирования
  • ✅ Готовы к планированию и реализации сложного проекта

Индикаторы технологической зрелости:

  • Самостоятельно выбирают подходящие инструменты для задач
  • Пишут читаемый и структурированный код
  • Понимают архитектурные принципы IoT-систем
  • Могут оценивать trade-offs различных решений
  • Проявляют системное мышление при планировании

Готовность к проектной деятельности:

  • Уверенно планируют многоэтапные проекты
  • Понимают важность итеративной разработки
  • Могут декомпозировать сложные задачи
  • Готовы к самостоятельной работе и принятию решений

🚀 Этот спринт завершает фундаментальную подготовку по программированию IoT и открывает дорогу к серьезной проектной деятельности! Учащиеся получили все необходимые инструменты для создания профессиональных IoT-решений.

Ключевой результат: “Я владею современными инструментами разработки IoT и готов создавать сложные системы!” 🎯💻✨