🎯 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 мин на проект):
-
Демонстрация работы (45 сек)
- Показать все функции устройства
- Подчеркнуть плавность и отзывчивость
-
Показ кода (30 сек)
- Сколько строк получилось?
- Самая красивая строчка кода
-
Техническая изюминка (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 мин)
- Что понравилось больше в gpiozero? (1 мин)
- Готовы ли к первому большому проекту? (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 и готов создавать сложные системы!” 🎯💻✨