Основы · 11 мин чтения

Из блочного кода в 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.

Эта статья — 5-я часть серии От блоков к коду. В предыдущей части мы сравнили циклы и переменные в блоках и в C++, а следующая, заключительная часть — план урока по робототехнике с блочным кодом для учителей.

До сих пор каждая программа серии что-то делала во внешнем мире: мы зажигали светодиоды, проверяли кнопку и собирали счётчик с циклом. Чтение датчика работает наоборот: плата измеряет мир, а ты видишь число. Поэтому здесь в дело вступает последовательный порт: проще всего понять, что измеряет датчик, — посмотреть на его значение на экране. Во второй половине статьи проекты блочного кода для 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 Uno10 бит0–10235 VanalogRead(A0)
ESP3212 бит0–4095Около 3,3 VanalogRead(34)
Raspberry Pi Pico12 бит (read_u16 масштабирует до 16 бит)0–655353,3 VADC(26).read_u16()

Чтение LDR блоками на Arduino

Первый пример — проект «Измерение освещённости с LDR». Фоторезистор (LDR) — это резистор, сопротивление которого падает, когда света становится больше; напряжения он не создаёт. Чтобы его измерить, мы соединяем его последовательно с постоянным резистором 10 kΩ, получаем делитель напряжения и подключаем среднюю точку к A0. При подключении из таблицы ниже LDR стоит со стороны 5V, поэтому чем больше света, тем выше напряжение на A0 и тем больше показание; если поменять местами LDR и резистор, направление станет обратным. Выход делителя для разных значений LDR можно рассчитать в утилите делителя напряжения, а сколько ом у LDR в темноте и на ярком свету — посмотреть в статье Фоторезистор (LDR). Столбец Pico из таблицы понадобится в примере на MicroPython ближе к концу статьи.

ПодключениеArduino UnoRaspberry Pi Pico
Ножка 1 LDR5V3V3(OUT), физический пин 36
Ножка 2 LDR + один конец резистора 10 kΩ (средняя точка)A0GP26 / ADC0, физический пин 31
Другой конец резистора 10 kΩGNDGND, физический пин 38 (или AGND, пин 33)
Диапазон показаний0–10230–65535
Блоки проекта «Измерение освещённости с LDR»
Блоки проекта «Измерение освещённости с LDR»: value объявляется в разделе «глобальные переменные (в начале)», «настройка (один раз)» запускает последовательный порт, а «повторять всегда» каждые 500 мс читает A0 и выводит значение.

Читай блоки сверху вниз. Блок «объявить целое (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 и комнаты.

C++ (Arduino IDE)
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}

Открываем монитор порта и смотрим значения

  1. Вставь код в Arduino IDE, выбери плату и порт, затем нажми «Загрузка» (Upload).
  2. Когда загрузка закончится, нажми на значок лупы в правом верхнем углу или открой «Инструменты › Монитор порта» (Tools › Serial Monitor), сочетание клавиш Ctrl+Shift+M.
  3. Установи в поле скорости монитора порта значение из кода: в этом проекте 9600 бод.
  4. Каждые полсекунды появляется строка «Value: …». Закрой LDR рукой и посмотри, как число уменьшается.
  5. Чтобы увидеть изменение в виде графика, открой «Инструменты › Плоттер по последовательному соединению» (Tools › Serial Plotter): те же данные рисуются как линия во времени.
  6. Настройки конца строки и отправка данных из монитора порта в плату подробно разобраны в статье Монитор порта Arduino.
Если в мониторе порта мусорные символы, скорость не совпадает с кодом: если в программе есть блок «запустить порт на 9600 бод», монитор тоже должен стоять на 9600. Если все числа идут подряд в одну строку, в последнем блоке «вывести в порт» выбран вариант без переноса вместо новая строка; в коде это значит print вместо println.

Расстояние с HC-SR04: блоки ожидания в микросекундах и длины импульса

Блоки проекта «Измерение расстояния с HC-SR04 (монитор порта)»
Измерение расстояния с HC-SR04 (монитор порта): на trigPin подаётся импульс 10 µs, длительность импульса на echoPin умножается на 0.034 и делится на 2, а расстояние выводится, если оно от 3 до 100 см.

Второй проект с датчиком — «Измерение расстояния с 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.

Блоки проекта с внешним светодиодом на Raspberry Pi Pico
Внешний светодиод на Raspberry Pi Pico (GP14 + макетная плата): блок «пин led : GP LED_PIN, OUTPUT» настраивает пин, а внутри «повторять всегда» светодиод 0,5 с горит и 0,5 с не горит.
MicroPython
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 = 14LED_PIN = 14В Python не пишут названия типов; слова int в коде нет
настройка (один раз)Все строки до while TrueОтдельной setup() нет: файл выполняется один раз сверху вниз
пин led : GP LED_PIN, OUTPUTled = 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) пин ledled.on()Подаёт на пин 3,3 V, светодиод загорается
ждать 0.5 сtime.sleep(0.5)Время задаётся в секундах: 500 мс = 0.5
выключить (off) пин ledled.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 = 14int LED_PIN = 14;LED_PIN = 14
Пин-выходнастроить пин … как OUTPUT / пин led : GP LED_PIN, OUTPUTpinMode(14, OUTPUT);led = Pin(14, Pin.OUT)
Включить светодиодзаписать HIGH в пин … / включить (on) пин leddigitalWrite(14, HIGH);led.on()
Ждатьждать 500 мс / ждать 0.5 сdelay(500);time.sleep(0.5)
Короткая паузаждать 10 мксdelayMicroseconds(10);time.sleep_us(10)
Аналоговое чтениеаналоговое чтение A0analogRead(A0) → 0–1023ADC(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 в твоей комнате.

MicroPython
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

  1. Установи Thonny на компьютер. Если на Pico ещё нет MicroPython, подключи USB-кабель, удерживая кнопку BOOTSEL; при первом подключении Thonny предложит установить MicroPython.
  2. В правом нижнем углу Thonny выбери интерпретатор MicroPython (Raspberry Pi Pico). Если в окне Shell внизу видно приглашение >>>, подключение есть.
  3. Скопируй код проекта из BlueGrays и вставь его в редактор Thonny.
  4. Нажми зелёную кнопку «Запустить» (Run) или F5. Код выполняется на Pico, а вывод print() появляется в Shell. Чтобы остановить программу, используй кнопку «Стоп» (Stop) или Ctrl+F2.
  5. Если нужно, чтобы код работал без компьютера, выбери «Файл › Сохранить как…» (File › Save as), в окне выбери Raspberry Pi Pico и назови файл main.py. Pico автоматически запускает этот файл каждый раз, когда получает питание, так что хватит USB-зарядки или пауэрбанка.
  6. Если 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
#11Новичок

Измерение освещённости с LDR

Хочешь увидеть яркость своей комнаты в виде числа? LDR — маленькая деталь, реагирующая на свет, — измеряет освещённость вокруг, а Arduino каждые полсекунды выводит значение на экран компьютера. Закрой

4.6(81)
139
Измерение расстояния HC-SR04 (вывод в порт)
#27Новичок

Измерение расстояния HC-SR04 (вывод в порт)

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

4.6(46)
71
Измерение освещённости модулем LDR на ESP32
#113Новичок

Измерение освещённости модулем LDR на ESP32

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

4.6(36)
55
Raspberry Pi Pico: управление внешним светодиодом (макетная плата)
#148Новичок

Raspberry Pi Pico: управление внешним светодиодом (макетная плата)

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

4.5(2)
7
Мигание встроенным светодиодом Raspberry Pi Pico (Pico и Pico W)
#147Новичок

Мигание встроенным светодиодом 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).

5.0(1)
10
Два попеременно мигающих светодиода на Pico (узор мигалки)
#149Новичок

Два попеременно мигающих светодиода на Pico (узор мигалки)

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

5.0(2)
19
Симулятор светофора на Pico (3 светодиода по очереди)
#150Новичок

Симулятор светофора на Pico (3 светодиода по очереди)

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

4.0(1)
12
Полицейский стробоскоп на Pico (красный + синий)
#151Новичок

Полицейский стробоскоп на Pico (красный + синий)

Имитируем мигалку полицейской машины на Raspberry Pi Pico в самом простом виде! Красный и синий светодиоды работают по очереди (мигалка): пока горит красный, синий погашен, и они меняются каждые 0,3 секунды бесконечно. Код записывает два шага прямо в одном цикле while True; скорость задаёт константа WAIT_MS.

4.7(3)
10