Из блочного кода в MicroPython: датчики и Raspberry Pi Pico
Из блочного кода в MicroPython: читаем LDR и HC-SR04 блоками рядом с кодом на C++, работаем с монитором порта, а затем переходим на MicroPython на Raspberry Pi Pico.
Переход от блочного кода к MicroPython проще всего начать, когда ты уже умеешь читать датчик блоками. Читать датчик блоками — значит получать значение, не набирая код: блок «аналоговое чтение A0» берёт уровень освещённости с фоторезистора (LDR), а блок «вывести в порт» отправляет это число в монитор порта на компьютере. В этой статье ты сначала прочитаешь датчики блоками на Arduino на примере проектов с LDR и HC-SR04 и сравнишь каждый блок с его строкой analogRead(), Serial.begin(), Serial.println() и pulseIn(). Затем ты сделаешь шаг от блоков к MicroPython на Raspberry Pi Pico и увидишь, что меняется, когда те же блоки становятся кодом на Python.
До сих пор каждая программа серии что-то делала во внешнем мире: мы зажигали светодиоды, проверяли кнопку и собирали счётчик с циклом. Чтение датчика работает наоборот: плата измеряет мир, а ты видишь число. Поэтому здесь в дело вступает последовательный порт: проще всего понять, что измеряет датчик, — посмотреть на его значение на экране. Во второй половине статьи проекты блочного кода для Raspberry Pi Pico соответствуют не C++, а MicroPython. Все проекты здесь бесплатны в BlueGrays, а код ниже в точности совпадает с кодом проектов.
Что значит прочитать датчик: цифровые и аналоговые входы
Кнопка сообщает только два состояния: нажата или нет. Её читают блоком «прочитать пин …» (digitalRead), и результат — 0 или 1. Такие детали, как фоторезистор (LDR), потенциометр или датчик влажности почвы, дают и все промежуточные значения: напряжение на пине плавно меняется от 0 до 5 V. Схема, которая превращает это напряжение в число, называется АЦП (аналого-цифровой преобразователь, ADC). АЦП Arduino Uno 10-битный: он делит напряжение на 1024 шага и возвращает число от 0 до 1023; каждый шаг — около 4,9 mV. У ESP32 и Pico АЦП 12-битные и работают от 3,3 V. Эта разница между платами — одна из самых частых причин путаницы при переходе от блоков к коду; подробности — в статье АЦП и аналого-цифровое преобразование.
| Плата | АЦП | Диапазон значений | Опорное напряжение | Код |
|---|---|---|---|---|
| Arduino Uno | 10 бит | 0–1023 | 5 V | analogRead(A0) |
| ESP32 | 12 бит | 0–4095 | Около 3,3 V | analogRead(34) |
| Raspberry Pi Pico | 12 бит (read_u16 масштабирует до 16 бит) | 0–65535 | 3,3 V | ADC(26).read_u16() |
Чтение LDR блоками на Arduino
Первый пример — проект «Измерение освещённости с LDR». Фоторезистор (LDR) — это резистор, сопротивление которого падает, когда света становится больше; напряжения он не создаёт. Чтобы его измерить, мы соединяем его последовательно с постоянным резистором 10 kΩ, получаем делитель напряжения и подключаем среднюю точку к A0. При подключении из таблицы ниже LDR стоит со стороны 5V, поэтому чем больше света, тем выше напряжение на A0 и тем больше показание; если поменять местами LDR и резистор, направление станет обратным. Выход делителя для разных значений LDR можно рассчитать в утилите делителя напряжения, а сколько ом у LDR в темноте и на ярком свету — посмотреть в статье Фоторезистор (LDR). Столбец Pico из таблицы понадобится в примере на MicroPython ближе к концу статьи.
| Подключение | Arduino Uno | Raspberry Pi Pico |
|---|---|---|
| Ножка 1 LDR | 5V | 3V3(OUT), физический пин 36 |
| Ножка 2 LDR + один конец резистора 10 kΩ (средняя точка) | A0 | GP26 / ADC0, физический пин 31 |
| Другой конец резистора 10 kΩ | GND | GND, физический пин 38 (или AGND, пин 33) |
| Диапазон показаний | 0–1023 | 0–65535 |

Читай блоки сверху вниз. Блок «объявить целое (int) value = 0» внутри раздела глобальные переменные (в начале) — это строка int value; в начале кода. В разделе настройка (один раз) всего один блок, «запустить порт на 9600 бод», то есть Serial.begin(9600);. Внутри повторять всегда первым идёт «установить value в аналоговое чтение A0» — это строка value = analogRead(A0);. Затем следуют два блока «вывести в порт». Первый выводит текст «Value:» с вариантом без переноса и становится Serial.print(); второй выводит value с вариантом новая строка и становится Serial.println(). Так каждое измерение появляется отдельной строкой, например «Value: 512». Последний блок, «ждать 500 мс», — это delay(500);, так что получается два показания в секунду. Чтобы перевести показание в напряжение, используй value × 5.0 / 1023: 512 — это примерно 2,5 V. В тёмной комнате значение падает до нескольких сотен, а если посветить на LDR фонариком, оно поднимается выше 900; точные числа зависят от твоего LDR и комнаты.
1int value; // Işık değeri / Light reading (0-1023)
2
3void setup() {
4 Serial.begin(9600); // Seri port 9600 baud / Serial at 9600 baud
5}
6
7void loop() {
8 value = analogRead(A0); // LDR gerilimini oku / Read the LDR voltage
9 Serial.print("Value: ");
10 Serial.println(value);
11 delay(500); // 0,5 sn bekle / Wait 0.5 s
12}Открываем монитор порта и смотрим значения
- Вставь код в Arduino IDE, выбери плату и порт, затем нажми «Загрузка» (Upload).
- Когда загрузка закончится, нажми на значок лупы в правом верхнем углу или открой «Инструменты › Монитор порта» (Tools › Serial Monitor), сочетание клавиш Ctrl+Shift+M.
- Установи в поле скорости монитора порта значение из кода: в этом проекте 9600 бод.
- Каждые полсекунды появляется строка «Value: …». Закрой LDR рукой и посмотри, как число уменьшается.
- Чтобы увидеть изменение в виде графика, открой «Инструменты › Плоттер по последовательному соединению» (Tools › Serial Plotter): те же данные рисуются как линия во времени.
- Настройки конца строки и отправка данных из монитора порта в плату подробно разобраны в статье Монитор порта Arduino.
Расстояние с HC-SR04: блоки ожидания в микросекундах и длины импульса

Второй проект с датчиком — «Измерение расстояния с HC-SR04 (монитор порта)». В нём появляются два новых блока. Тройка блоков, которая начинается с «записать HIGH в пин trigPin», велит датчику отправить звуковой импульс: блок «ждать 10 мкс» посередине — это delayMicroseconds(10);, пауза в тысячу раз короче, чем «ждать … мс». Дальше идёт «установить duration в длина импульса HIGH на пине echoPin (мкс)» — это строка unsigned long duration = pulseIn(echoPin, HIGH);, которая измеряет, сколько микросекунд пин Echo остаётся в состоянии HIGH. Звук идёт по воздуху со скоростью около 0,034 см/µs, и это время охватывает путь туда и обратно. Поэтому «установить totalPath в duration × 0.034» считает весь путь, а «установить distance в totalPath ÷ 2» — расстояние в одну сторону. Например, импульс 1000 µs означает путь 34 см, то есть предмет находится в 17 см; поскольку distance имеет тип int, дробная часть отбрасывается. Наконец, блок «если distance > minDistance и distance < maxDistance» становится if (distance > minDistance && distance < maxDistance) и выводит только показания от 3 до 100 см. Если датчик не получает эха, pulseIn() возвращает 0, и эта проверка заодно не пускает такие ложные нули на экран. В коде пины заданы как trigPin = 7 и echoPin = 6. О дальности и точности датчика читай в статье Датчик расстояния HC-SR04.
Та же идея на ESP32: 12-битный АЦП
Версия той же логики с LDR для ESP32 — проект «Измерение освещённости модулем LDR на ESP32». Блоки по-прежнему соответствуют C++ и читаются так же, как на Arduino, но есть три отличия. Во-первых, в setup() АЦП фиксируется на 12 битах через analogReadResolution(12), поэтому analogRead() возвращает 0–4095 вместо 0–1023, и порог, написанный для Arduino, например «темно ниже 500», на ESP32 означает уже другое. Во-вторых, последовательный порт работает на скорости 115200 бод вместо 9600, так что и монитор порта поставь на 115200. В-третьих, на выходе AO модуля LDR напряжение и сырое значение падают, когда света становится больше. Поэтому в коде есть калибровочные значения RAW_DARK = 4000 и RAW_LIGHT = 100: constrain() удерживает показание в этом диапазоне, а map() превращает его в 0% для темноты и 100% для яркого света. На классической ESP32 DevKit LDR подключается к GPIO 34 — пину только для входа, который относится к ADC1. Пины ADC2 нельзя читать, пока включён Wi-Fi, поэтому подключать аналоговые датчики к пинам ADC1 — хорошая привычка. Об общих возможностях платы читай в статье Что такое ESP32.
От блоков к MicroPython на Raspberry Pi Pico
В проектах для Pico блоки соответствуют не C++, а MicroPython. Блоки выглядят знакомо, но язык под ними другой: нет фигурных скобок и точек с запятой, блоки кода выделяются отступами, а функций setup() и loop() нет вовсе. Сделаем этот переход на самом простом проекте — «Внешний светодиод на Raspberry Pi Pico (GP14 + макетная плата)». Схема совсем маленькая: GP14 (физический пин 19) через резистор 220–330 Ω идёт на длинную ножку светодиода, а короткая ножка светодиода — на GND (например, физический пин 18). Программа включает светодиод на полсекунды, выключает на полсекунды и на каждом шаге выводит строку в окно Shell в Thonny. Если Pico для тебя в новинку, начни со статьи Что такое Raspberry Pi Pico.

1from machine import Pin
2import time
3
4# ============ PIN / PIN ============
5LED_PIN = 14 # Boştaki herhangi bir GPIO / Any free GPIO
6led = Pin(LED_PIN, Pin.OUT)
7
8print("== BlueGrays: Pico Harici LED Blink ==")
9print("LED pin: GP" + str(LED_PIN))
10print("500ms yakip 500ms sonduruyor / 500ms on 500ms off")
11
12# ============ ANA DÖNGÜ / MAIN LOOP ============
13while True:
14 led.on() # LED'i yak / Turn the LED on
15 print("[LED] ACIK / ON")
16 time.sleep(0.5)
17
18 led.off() # LED'i söndür / Turn the LED off
19 print("[LED] KAPALI / OFF")
20 time.sleep(0.5)| Блок | MicroPython | Примечание |
|---|---|---|
| глобальные переменные (в начале) → объявить целое (int) LED_PIN = 14 | LED_PIN = 14 | В Python не пишут названия типов; слова int в коде нет |
| настройка (один раз) | Все строки до while True | Отдельной setup() нет: файл выполняется один раз сверху вниз |
| пин led : GP LED_PIN, OUTPUT | led = Pin(LED_PIN, Pin.OUT) | Pin берётся из строки from machine import Pin |
| вывести в порт «…» новая строка | print("…") | print() всегда добавляет перенос строки |
| объединить текст «LED pin: GP» LED_PIN | "LED pin: GP" + str(LED_PIN) | Число нельзя прибавить к тексту, пока str() не превратит его в текст |
| повторять всегда | while True: | Строки внутри сдвинуты на 4 пробела |
| включить (on) пин led | led.on() | Подаёт на пин 3,3 V, светодиод загорается |
| ждать 0.5 с | time.sleep(0.5) | Время задаётся в секундах: 500 мс = 0.5 |
| выключить (off) пин led | led.off() | Подаёт на пин 0 V, светодиод гаснет |
В этой таблице бросаются в глаза четыре вещи. Во-первых, у строк from machine import Pin и import time нет блоков: в Python нужные модули импортируют в начале файла, а блоки делают это за тебя. Во-вторых, у ардуиновского блока «запустить порт на 9600 бод» здесь нет соответствия: на Pico вывод print() идёт прямо по USB в окно Shell в Thonny, и скорость задавать не нужно. В-третьих, изменилась единица ожидания: на Arduino «ждать 500 мс» — это delay(500), а на Pico «ждать 0.5 с» — это time.sleep(0.5). В-четвёртых, и это самое важное, — отступы: каждый блок, который стоит внутри блока «повторять всегда», в коде пишется под строкой while True: с отступом в четыре пробела. Убери отступ у строки, и она выпадет из цикла: в Python пробелы делают ту же работу, что фигурные скобки в C++. Остальные базовые правила MicroPython — в статье Основы MicroPython.
Одни и те же действия на трёх языках: блоки, C++ и MicroPython
| Действие | Блок | Arduino C++ | MicroPython (Pico) |
|---|---|---|---|
| Выполняется один раз | настройка (один раз) | void setup() { … } | Строки до while True |
| Повторять бесконечно | повторять всегда | void loop() { … } | while True: (с отступом) |
| Переменная | объявить целое (int) LED_PIN = 14 | int LED_PIN = 14; | LED_PIN = 14 |
| Пин-выход | настроить пин … как OUTPUT / пин led : GP LED_PIN, OUTPUT | pinMode(14, OUTPUT); | led = Pin(14, Pin.OUT) |
| Включить светодиод | записать HIGH в пин … / включить (on) пин led | digitalWrite(14, HIGH); | led.on() |
| Ждать | ждать 500 мс / ждать 0.5 с | delay(500); | time.sleep(0.5) |
| Короткая пауза | ждать 10 мкс | delayMicroseconds(10); | time.sleep_us(10) |
| Аналоговое чтение | аналоговое чтение A0 | analogRead(A0) → 0–1023 | ADC(26).read_u16() → 0–65535 |
| Запуск порта | запустить порт на 9600 бод | Serial.begin(9600); | Не нужен |
| Вывод с переносом строки | вывести в порт … новая строка | Serial.println(x); | print(x) |
| Вывод в ту же строку | вывести в порт … без переноса | Serial.print(x); | print(x, end="") |
| Объединение текста | объединить текст | Два отдельных вызова Serial.print() | "LED pin: GP" + str(x) |
Свой пример: читаем LDR на Pico с MicroPython
Теперь перенесём проект с LDR с Arduino на Pico. Подключение — как в столбце Pico таблицы выше: одна ножка LDR идёт на пин 3V3(OUT), другая — и на GP26, и на один конец резистора 10 kΩ, а другой конец резистора — на GND. У Pico три пина, которые умеют читать аналоговые значения: GP26 (ADC0), GP27 (ADC1) и GP28 (ADC2). В MicroPython создаётся объект ADC(26) и вызывается read_u16(); хотя аппаратно АЦП Pico 12-битный, эта функция масштабирует результат до 0–65535. Чтобы получить напряжение, умножь значение на 3.3 и раздели на 65535. Программа идёт по той же схеме, что и версия для Arduino: измерить, вывести, подождать полсекунды. Кроме того, мы добавили порог: когда в комнате темнеет, загорается встроенный светодиод. Если думать блоками, строки до while True — это раздел «настройка (один раз)», while True: — «повторять всегда», if/else — блок «если» из 3-й части серии, led.on() — «включить (on) пин led», time.sleep(0.5) — «ждать 0.5 с», а + str() внутри print() — блок «объединить текст». Строка ADC(26).read_u16() делает работу ардуиновского блока «аналоговое чтение A0». Подстрой THRESHOLD под числа, которые видно в Shell в твоей комнате.
1from machine import Pin, ADC
2import time
3
4# ============ PIN / PIN ============
5ldr = ADC(26) # GP26 = ADC0, bölücünün orta noktası / divider midpoint
6led = Pin(25, Pin.OUT) # Dahili LED; Pico W'de Pin("LED") / Onboard LED; Pico W: Pin("LED")
7THRESHOLD = 20000 # Karanlık eşiği, odana göre ayarla / Darkness threshold, tune for your room
8
9print("== BlueGrays: Pico LDR ==")
10
11# ============ ANA DÖNGÜ / MAIN LOOP ============
12while True:
13 value = ldr.read_u16() # 0-65535
14 voltage = value * 3.3 / 65535 # Volt / Volts
15 print("Value: " + str(value) + " Voltage: " + str(round(voltage, 2)) + " V")
16
17 if value < THRESHOLD: # Az ışık = küçük değer / Little light = small value
18 led.on()
19 else:
20 led.off()
21
22 time.sleep(0.5) # 0,5 sn = 500 ms / 0.5 s = 500 msЗагрузка в Pico через Thonny и main.py
- Установи Thonny на компьютер. Если на Pico ещё нет MicroPython, подключи USB-кабель, удерживая кнопку BOOTSEL; при первом подключении Thonny предложит установить MicroPython.
- В правом нижнем углу Thonny выбери интерпретатор MicroPython (Raspberry Pi Pico). Если в окне Shell внизу видно приглашение >>>, подключение есть.
- Скопируй код проекта из BlueGrays и вставь его в редактор Thonny.
- Нажми зелёную кнопку «Запустить» (Run) или F5. Код выполняется на Pico, а вывод print() появляется в Shell. Чтобы остановить программу, используй кнопку «Стоп» (Stop) или Ctrl+F2.
- Если нужно, чтобы код работал без компьютера, выбери «Файл › Сохранить как…» (File › Save as), в окне выбери Raspberry Pi Pico и назови файл main.py. Pico автоматически запускает этот файл каждый раз, когда получает питание, так что хватит USB-зарядки или пауэрбанка.
- Если Thonny не видит плату, проверь кабель и драйверы в порядке, описанном в статье Raspberry Pi Pico не определяется.
Другие бесплатные блочные проекты для Pico
- Мигание встроенным светодиодом Raspberry Pi Pico (GP25): никакой проводки, проект мигает светодиодом на плате через LED_PIN = 25. Код почти совпадает с проектом выше: открой оба рядом, и будет видно, что меняется только номер пина. На Pico W встроенный светодиод подключён к чипу Wi-Fi, поэтому там используется Pin("LED").
- Два светодиода поочерёдно на Raspberry Pi Pico (GP14 + GP13): проект стартует с противоположных состояний через led1.value(1) и led2.value(0), а затем в цикле вызывает toggle() для обоих светодиодов. Поскольку в коде написано from time import sleep, пауза выглядит как sleep(0.5), а не time.sleep(0.5).
- Светофор на Raspberry Pi Pico (GP11/GP12/GP13): функция all_off() выключает все светодиоды; зелёный горит 4 с, жёлтый — 1,5 с, красный — 3 с, а затем идёт стартовая фаза «красный + жёлтый» длиной 1 с.
- Эффект полицейской мигалки на Raspberry Pi Pico (GP11 + GP12): здесь пауза задаётся в миллисекундах через sleep_ms(WAIT_MS), где WAIT_MS = 300. Увидеть функции для секунд и для миллисекунд рядом в двух проектах — лучший способ избежать самой частой ошибки из списка ниже.
Частые ошибки и как их исправить
| Ошибка | Признак | Решение |
|---|---|---|
| В коде написано time.sleep(500) | Светодиод загорается и остаётся так больше 8 минут | В MicroPython время в секундах: пиши time.sleep(0.5) или time.sleep_ms(500) |
| Сбитые отступы | IndentationError или строки, которые не выполняются в цикле | Начинай каждую строку под while True: с одинаковых 4 пробелов и не смешивай табуляцию с пробелами |
| Число прибавляется к тексту без str() | TypeError: can't convert 'int' object to str implicitly (число не превращается в текст автоматически) | Пиши "LED pin: GP" + str(LED_PIN) |
| 5 V на АЦП-пин Pico | Неверные показания и риск необратимого повреждения | Логика Pico рассчитана на 3,3 V: питай делитель от пина 3V3(OUT) |
| Порог с Arduino перенесён на Pico как есть | Условие «value < 500» всегда даёт один и тот же результат | Учитывай диапазон: Uno 0–1023, ESP32 0–4095, Pico read_u16() 0–65535 |
| Скорость монитора порта не совпадает | Мусорные символы | Поставь в мониторе скорость из кода: 9600 или 115200 |
| Пин ADC2 на ESP32 | Чтение перестаёт работать после включения Wi-Fi | Подключай аналоговые датчики к пинам ADC1, например GPIO 32–39 |
| Файл не сохранён как main.py | Код работает из Thonny, но перестаёт работать после отключения USB | Сохрани файл на Pico под именем main.py |
Продолжай с блоками в приложении BlueGrays
Все проекты из этой статьи бесплатны в приложении BlueGrays. Включи переключатель Показать блоками в разделе кода проекта, и вместо кода появится та же программа в виде блоков; нажми на изображение, чтобы открыть его на весь экран. Вкладка Разбор блоков проводит по программе шаг за шагом и на каждом шаге показывает только блоки этого шага и то, что они делают. Там можно точно увидеть, что измеряет блок длины импульса в проекте с HC-SR04 или почему раздел настройки в проекте для Pico стоит перед while True. Все примеры команд Arduino и MicroPython в Справочнике по коду тоже показаны блоками. Чтобы проверить себя, загляни в Вопросы дня: каждый день 5 вопросов уровней от A1 до C2, рейтинг недели и значки. Помни: блоки никогда не загружаются в плату напрямую; плата всегда получает настоящий код проекта, который ты копируешь в Arduino IDE для Arduino и ESP32 или в Thonny для Pico. В списке проектов можно отфильтровать проекты с меткой «Блоки», а все блочные проекты для Arduino, ESP32 и Pico собраны на странице «Блочный код».
Теперь, когда последовательный порт и чтение датчиков тебе знакомы, ты можешь читать любую базовую часть проекта и в виде блоков, и в виде кода. Последняя часть серии переносит эти шаги в класс: план урока по робототехнике с блочным кодом для учителей. А пока в приложении BlueGrays можно шаг за шагом посмотреть схемы подключения и код проектов с LDR, HC-SR04 и светодиодом на Pico, переключиться на блочную версию той же программы через Показать блоками и проследить, что делает каждый шаг, в Разборе блоков.
Частые вопросы
Как перейти от блочного кода к MicroPython?
Проще всего смотреть на блоки программы и её код на MicroPython рядом. Когда на нескольких проектах видно, что «повторять всегда» — это while True:, «включить (on) пин led» — это led.on(), а «ждать 0.5 с» — это time.sleep(0.5), код начинает читаться и без блоков. Потом попробуй внести в код небольшие правки: поменяй, например, время паузы или номер пина.
Можно ли программировать Raspberry Pi Pico блочным кодом?
В BlueGrays у 10 проектов для Pico есть блочная версия, и эти блоки один к одному соответствуют коду на MicroPython; 5 из них полностью бесплатны. В плату загружаются не блоки, а код проекта на MicroPython: ты вставляешь его в Thonny и запускаешь. Так логика становится понятна благодаря блокам, а плата программируется настоящим кодом.
Почему analogRead на Arduino возвращает значения от 0 до 1023?
АЦП Arduino Uno 10-битный и делит диапазон 0–5 V на 1024 шага. 0 V читается как 0, а 5 V — как 1023, и каждый шаг — около 4,9 mV. Чтобы перевести показание в напряжение, используй value × 5.0 / 1023.
Почему read_u16 на Raspberry Pi Pico доходит до 65535?
Аппаратно АЦП Pico 12-битный, но read_u16() в MicroPython масштабирует результат до 16 бит, чтобы диапазон был одинаковым на разных платах. Поэтому 0 V читается как 0, а 3,3 V — примерно как 65535. Любой порог, перенесённый с Arduino, нужно пересчитать под этот диапазон.
time.sleep в MicroPython работает в секундах или миллисекундах?
time.sleep() работает в секундах: time.sleep(0.5) ждёт полсекунды. Для миллисекунд используй time.sleep_ms(500), а для микросекунд — time.sleep_us(10). Если перепутать его с ардуиновским delay(500) и написать time.sleep(500), программа будет ждать больше 8 минут.
Как сделать, чтобы код из Thonny постоянно работал на Pico?
Сохрани код на Raspberry Pi Pico под именем main.py через «Файл › Сохранить как…». Pico автоматически запускает main.py каждый раз, когда получает питание, и компьютер для этого не нужен. Если только нажать «Запустить», код не сохраняется на Pico и после перезапуска работать не будет.
Что собрать после прочтения
Все проекты
Измерение освещённости с LDR
Хочешь увидеть яркость своей комнаты в виде числа? LDR — маленькая деталь, реагирующая на свет, — измеряет освещённость вокруг, а Arduino каждые полсекунды выводит значение на экран компьютера. Закрой

Измерение расстояния HC-SR04 (вывод в порт)
Датчик HC-SR04 работает совсем как летучая мышь, которая находит дорогу в темноте: он посылает звук, которого ты не слышишь, слушает эхо и измеряет, насколько далеко предмет перед ним. Arduino каждые

Измерение освещённости модулем LDR на ESP32
Наблюдение в мониторе порта в реальном времени за сырым значением ADC модуля LDR и относительным процентом освещённости, вычисленным по опорным значениям темноты и света. Этот процент — не измерение в люксах. Учит логике калибровки модуля. Идеально выполнить его перед проектом 10, потому что он нужен для определения порога.

Raspberry Pi Pico: управление внешним светодиодом (макетная плата)
Следующий шаг после встроенного светодиода Pico: подключить внешний светодиод на макетной плате и управлять им через пин GP14. В этом проекте ты узнаешь, как использовать любой пин GPIO общего назначения у Pico как выход, какая полярность у светодиода (длинная ножка = анод/+, короткая = катод/–) и зачем нужен токоограничивающий резистор (220Ω). Без резистора через светодиод пойдёт слишком большой ток, и он может сгореть. Схема очень простая: Pico GP14 → резистор 220Ω → светодиод → GND.

Мигание встроенным светодиодом Raspberry Pi Pico (Pico и Pico W)
Первый проект серии Raspberry Pi Pico! Мигаем зелёным встроенным светодиодом, чтобы проверить, что плата работает, — классический первый опыт «Hello World». НИКАКИХ внешних компонентов, только Pico и USB-кабель. Код написан на MicroPython (официальном языке, поддерживаемом Raspberry Pi Foundation). Изучи в Thonny IDE класс machine.Pin, режим Pin.OUT, методы led.on()/off() и time.sleep(). Каждое переключение видно в выводе (REPL).

Два попеременно мигающих светодиода на Pico (узор мигалки)
Следующий шаг после одного светодиода на Pico: два светодиода мигают попеременно по классическому узору мигалки. Когда один гаснет, другой загорается — самый простой пример согласованной работы нескольких GPIO. В этом проекте два светодиода разных цветов (красный на GP14, зелёный на GP13) меняются состояниями каждые 500ms. Метод MicroPython Pin.toggle() делает код коротким и понятным. Та же логика лежит в основе светофоров, полицейских мигалок, бегущих огней и многих светодиодных анимаций.

Симулятор светофора на Pico (3 светодиода по очереди)
Настоящий светофор на красном, жёлтом и зелёном светодиодах — первый проект серии Pico с 3 светодиодами! Зелёный 4 с «едем», жёлтый 1,5 с «внимание», красный 3 с «стоп» и красный + жёлтый 1 с «приготовиться» (европейская схема светофора). Изучи объявление функций (def all_off()), логику конечного автомата (последовательность) и синхронизацию нескольких GPIO. Простая схема: 3 светодиода на GP11 (зелёный), GP12 (жёлтый), GP13 (красный), у каждого токоограничивающий резистор 220Ω.

Полицейский стробоскоп на Pico (красный + синий)
Имитируем мигалку полицейской машины на Raspberry Pi Pico в самом простом виде! Красный и синий светодиоды работают по очереди (мигалка): пока горит красный, синий погашен, и они меняются каждые 0,3 секунды бесконечно. Код записывает два шага прямо в одном цикле while True; скорость задаёт константа WAIT_MS.
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

