Основы MicroPython для Raspberry Pi Pico W: от новичка до умного дома

Практический курс для начинающих по программированию микроконтроллера Raspberry Pi Pico W на MicroPython. Вы научитесь работать с электронными компонентами, собирать показания датчиков и использовать Wi-Fi для создания базовых проектов умного дома.

1. Введение в Raspberry Pi Pico W и MicroPython

Введение в Raspberry Pi Pico W и MicroPython

Представьте себе полноценный компьютер, который можно спрятать в спичечном коробке, потребляющий минимум энергии и стоящий дешевле пары чашек кофе. Именно таким устройством является микроконтроллер. В отличие от привычного настольного ПК или смартфона, которые одновременно выполняют сотни задач (открывают браузер, воспроизводят музыку, загружают обновления), микроконтроллер создаётся для идеального выполнения одной конкретной задачи.

В системах умного дома микроконтроллеры играют роль невидимых помощников. Они считывают температуру в комнате, управляют яркостью освещения, открывают автоматические жалюзи или отправляют уведомление на телефон, если датчик зафиксировал протечку воды.

Знакомство с Raspberry Pi Pico W

Плата Raspberry Pi Pico W — это компактный и мощный микроконтроллер, разработанный организацией Raspberry Pi Foundation. Буква «W» в названии означает Wireless (беспроводной) и является ключевым отличием этой модели от базовой версии Pico.

Сердцем платы выступает чип RP2040. Это «мозг» устройства, который принимает решения и управляет всеми подключенными компонентами. Рядом с ним расположен второй важный чип — CYW43439, который наделяет плату способностью подключаться к сетям Wi-Fi. Именно этот модуль позволяет нашему устройству стать частью интернета вещей (IoT) и передавать данные на серверы или получать команды со смартфона.

!Схема платы Raspberry Pi Pico W с ключевыми компонентами

Чтобы лучше понимать возможности платы, взглянем на её основные технические характеристики:

| Характеристика | Значение | Простое объяснение | | :--- | :--- | :--- | | Процессор | Двухъядерный ARM Cortex-M0+ | Два «вычислительных центра», позволяющих плате выполнять задачи параллельно и быстро. | | Тактовая частота | 133 МГц | Скорость работы мозга. Он выполняет 133 миллиона простейших операций в секунду. | | Оперативная память (RAM) | 264 КБ | «Краткосрочная память». Здесь хранятся данные, пока плата включена (например, текущие показания датчика). При выключении питания данные исчезают. | | Флэш-память (Flash) | 2 МБ | «Долгосрочная память». Здесь хранится ваш код и операционная система. Данные остаются даже без питания. | | Беспроводная связь | Wi-Fi (802.11n) | Возможность подключаться к домашнему роутеру и выходить в интернет. |

GPIO: Как плата общается с внешним миром

Сам по себе микроконтроллер бесполезен, если он не может взаимодействовать с окружающей средой. Для этого по краям платы расположены металлические отверстия с зубчатыми краями. Это контакты GPIO (General Purpose Input/Output — ввод/вывод общего назначения).

Если сравнить микроконтроллер с человеческим организмом, то процессор — это мозг, а контакты GPIO — это нервная система.

Контакты могут работать в двух основных режимах:

  • Ввод (Input): Плата «слушает» внешний мир. К таким контактам подключаются датчики (температуры, влажности, освещенности) или обычные кнопки. Микроконтроллер считывает напряжение на контакте и понимает, нажата ли кнопка или насколько тепло в комнате.
  • Вывод (Output): Плата «действует». Через эти контакты микроконтроллер отправляет электрический сигнал наружу, чтобы включить светодиод, запустить мотор или повернуть сервопривод.
  • Всего на плате 40 контактов, из которых 26 можно использовать как GPIO. Важно помнить одно строгое правило электроники: рабочее напряжение Raspberry Pi Pico W составляет 3,3 вольта. Подача на контакты напряжения в 5 вольт (например, от некоторых старых датчиков для Arduino) может мгновенно вывести плату из строя.

    MicroPython: Язык общения с платой

    Микроконтроллеры не понимают человеческую речь. Им нужны четкие инструкции в виде программного кода. Исторически платы программировались на сложных языках C или C++, которые требуют глубокого понимания архитектуры процессора и ручного управления памятью.

    Для новичков был создан MicroPython — это адаптированная и облегченная версия популярного языка программирования Python, специально оптимизированная для работы на микроконтроллерах с ограниченным объемом памяти.

    Главное преимущество MicroPython заключается в его читаемости. Код выглядит почти как обычный английский текст. Кроме того, MicroPython является интерпретируемым языком. Это значит, что вам не нужно тратить время на сложную «компиляцию» (перевод кода в машинные нули и единицы) перед каждым запуском. Вы пишете команду, нажимаете кнопку запуска, и плата мгновенно её выполняет.

    > MicroPython позволяет сосредоточиться на логике вашего проекта — «что должно произойти», а не на технических сложностях того, «как именно процессор должен это обработать».

    Подготовка к работе: Thonny IDE и прошивка

    Чтобы писать код и отправлять его на плату, нам понадобится специальная программа на компьютере — IDE (Integrated Development Environment — интегрированная среда разработки). Для MicroPython стандартом де-факто является программа Thonny. Она бесплатна, минималистична и идеально подходит для начинающих.

    Прежде чем написать первую строчку кода, плату нужно «оживить» — установить на неё операционную систему MicroPython. Этот процесс называется прошивкой.

    Процесс прошивки состоит из нескольких простых шагов:

  • Найдите на плате Raspberry Pi Pico W маленькую белую кнопку с надписью BOOTSEL (Boot Select).
  • Нажмите и удерживайте эту кнопку.
  • Не отпуская кнопку, подключите плату к компьютеру с помощью кабеля micro-USB.
  • Через пару секунд отпустите кнопку. Компьютер распознает плату как обычную USB-флешку с названием RPI-RP2.
  • Скачайте файл прошивки MicroPython (с расширением .uf2) с официального сайта Raspberry Pi и просто перетащите его на эту «флешку».
  • Как только файл скопируется, плата автоматически перезагрузится. Флешка исчезнет, а внутри микроконтроллера теперь будет работать MicroPython, готовый принимать ваши команды.

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

    Традиционно в мире электроники первой программой является мигание светодиодом — это аналог фразы «Hello, World!» в программировании. На плате Raspberry Pi Pico W уже есть крошечный встроенный зеленый светодиод, поэтому нам даже не понадобятся дополнительные провода.

    Откройте Thonny, убедитесь, что в правом нижнем углу выбран интерпретатор MicroPython (Raspberry Pi Pico), и введите следующий код в главном окне редактора:

    Разберем этот код построчно, чтобы понять логику работы микроконтроллера.

    Строки import machine и import time подключают к нашей программе внешние библиотеки. Библиотека machine содержит инструкции для управления физическим «железом» платы (контактами, питанием), а time позволяет работать со временем (создавать паузы).

    Команда led = machine.Pin("LED", machine.Pin.OUT) выполняет настройку контакта. Мы обращаемся к встроенному светодиоду (он имеет системное имя "LED") и указываем, что этот контакт должен работать в режиме вывода сигнала (machine.Pin.OUT). Теперь переменная led является нашим пультом управления этим светодиодом.

    Конструкция while True: создает бесконечный цикл. Микроконтроллеры созданы для непрерывной работы. Всё, что написано внутри этого цикла (с отступом в 4 пробела), будет повторяться снова и снова, пока плата подключена к питанию.

    Внутри цикла происходят два действия:

  • led.toggle() — переключает состояние светодиода на противоположное. Если он был выключен, он включится. Если был включен — выключится.
  • time.sleep(1) — приказывает микроконтроллеру ничего не делать ровно 1 секунду.
  • Понимание временных интервалов важно для проектирования систем. В нашем коде светодиод меняет состояние каждую секунду. Значит, он горит 1 секунду и не горит 1 секунду. Полный цикл (включение и выключение) занимает 2 секунды.

    В физике частота таких повторяющихся событий рассчитывается по формуле:

    где — частота в герцах (Гц), а — период (время одного полного цикла) в секундах.

    В нашем случае период секунды. Подставив это в формулу, получаем Гц. Это означает, что светодиод совершает половину полного цикла за одну секунду. Если бы мы изменили паузу в коде на time.sleep(0.5), период составил бы 1 секунду, а частота мигания увеличилась бы до 1 Гц.

    Нажав кнопку «Run» (зеленый треугольник) в Thonny, вы увидите, как зеленый огонек на плате начнет ритмично мигать. Вы только что успешно запрограммировали свой первый микроконтроллер, сделав первый шаг к созданию собственного умного дома.