Команды Arduino и MicroPython рядом: справочник по коду из 36 карточек
Команды Arduino в порядке изучения: 18 карточек от pinMode до tone, их аналоги в MicroPython, код рядом, план на 4 недели и 8 частых ошибок.
Надёжнее всего учить команды Arduino не по длинному списку наизусть, а по порядку: каждую с небольшим примером и настоящим проектом. Для этого в приложении BlueGrays, в разделе Уроки на вкладке Учёба, есть Справочник по коду: 18 карточек в курсе Arduino C++, от pinMode до tone, и 18 карточек в курсе MicroPython, от import до I2C, всего 36 карточек. Все карточки устроены одинаково: Что делает?, Зачем?, Синтаксис, Пример (с вкладками Блоки, Arduino и MicroPython), Частая ошибка, Совет, Посмотреть в проектах и Мини-тест из двух вопросов. Порядок тоже фиксированный: сначала пины (pinMode, digitalWrite, digitalRead, analogRead, analogWrite), потом время (delay, millis), затем переменные, условия, циклы и функции и в конце Serial, map, random и tone. С Raspberry Pi Pico те же идеи изучаются в курсе MicroPython через Pin, Pin.value, time.sleep, ADC.read_u16 и PWM.
Эта статья — карта справочника. Сначала разберём, что внутри карточки, затем 18 карточек каждого курса в том порядке, в каком они идут в приложении, с аналогом на другом языке. Дальше идут три коротких примера, где версии одной программы на C++ и MicroPython стоят рядом, рассказ о том, как работают мини-тест и учёт прогресса, порядок обучения на 4 недели, ежедневная 20-минутная программа и 8 самых частых ошибок с этими командами. Если нужно подробное объяснение каждой команды, в статье Команды Arduino с примерами у каждой команды свой раздел; здесь же речь о том, в каком порядке их учить и как практиковаться.

Где найти справочник по коду и как он устроен
Справочник открывается с вкладки Учёба внизу: в разделе Уроки наверху есть плитка Справочник по коду, а под ней видно, сколько карточек уже изучено, например Карточек: 5 / 18. Наверху справочника две вкладки: Arduino C++ и MicroPython; приложение запоминает, какой курс был открыт последним. Под вкладками есть счётчик Что ты уже знаешь и строка Следующая карточка, так что искать, на чём закончилось прошлое занятие, не придётся. Карточки сгруппированы по темам: Пины, Время, Переменные, Условия, Циклы, Функции, Последовательный порт, Математика и Звук; в курсе MicroPython к ним добавляются Базовая структура и Обработка ошибок. Справочник по коду бесплатный: чтобы читать карточки, смотреть примеры и решать мини-тесты, Premium не нужен. Карточки доступны на всех языках приложения, так что пояснения читаются на том же языке, на котором работает приложение.
Что внутри карточки?
Все карточки построены по одной схеме, поэтому уже после третьей понятно, куда смотреть. В таблице ниже разделы показаны на примере 7-й карточки курса Arduino, millis; в правом столбце — краткий пересказ того, что написано в самой карточке. Порядок разделов — это тоже порядок обучения: сначала одним предложением объясняется, что делает команда, затем житейское сравнение показывает, зачем она нужна, потом идут запись команды, рабочий пример, самая частая ловушка и, наконец, два вопроса для самопроверки.
| Раздел | О чём | В карточке millis |
|---|---|---|
| Что делает? | Задача команды одним предложением | Сообщает, сколько миллисекунд прошло с запуска платы. |
| Зачем? | Зачем она нужна, через житейское сравнение | Как поставить пирог в духовку и время от времени поглядывать на часы: пока ждёшь, занимаешься другими делами. |
| Синтаксис | Как записывается команда | unsigned long now = millis(); (текущее время в мс) |
| Пример | Короткая рабочая программа; вкладки «Блоки», «Arduino» и «MicroPython» | Код, который переключает светодиод каждые 500 мс; на Pico то же самое через time.ticks_ms |
| Частая ошибка | Ловушка, в которую чаще всего попадают новички | Хранить millis в int: примерно через 33 секунды число ломается. |
| Совет | Небольшое правило, которое упрощает жизнь | Всегда пиши проверку как «сейчас - прошлое >= интервал». |
| Посмотреть в проектах | Проекты с этой командой, от простых к сложным | Больше 50 проектов; список начинается с бесплатного проекта с кнопкой на ESP32 |
| Мини-тест | Два вопроса, после каждого ответа — короткое пояснение | Что возвращает millis()? В каком типе хранить millis? |
Раздел Пример открывается на вкладке своего курса: в карточке Arduino первой идёт вкладка Arduino, в карточке MicroPython — вкладка MicroPython. Но вторая вкладка тоже всегда на месте, и это превращает справочник в словарь. Например, в карточке курса MicroPython Выход пина: Pin(15, Pin.OUT) на вкладке Arduino лежит код, который делает то же самое через pinMode и digitalWrite, а комментарии подсказывают, какая строка чему соответствует (например, строка, заменяющая led.toggle()). Почти в каждой карточке есть и третья вкладка, Блоки: она показывает пример в виде блоков. При переходе с Arduino на Pico быстрее всего так: открой знакомую карточку, переключи вкладку и сопоставь две программы строка за строкой.
Курс Arduino C++: 18 карточек и их аналоги в MicroPython
Таблица ниже — настоящий порядок курса Arduino в приложении; в последнем столбце показано, как то же самое делается в MicroPython на Raspberry Pi Pico. Номера пинов совпадают с примерами в карточках: для светодиода — 13 или 9 на Uno и GP15 на Pico; для кнопки — 2 на Uno и GP14 на Pico; для аналогового чтения — A0 на Uno и GP26 на Pico. Первые пять карточек посвящены пинам, 6-я и 7-я — времени, с 8-й по 14-ю — основам программирования, а последние четыре — последовательному порту, масштабированию, случайным числам и звуку. Порядок выбран намеренно: сначала ты узнаёшь, как плата касается внешнего мира, а потом управляешь этими касаниями с помощью переменных, условий и циклов.
| № | Карточка | Что делает? | Аналог в MicroPython |
|---|---|---|---|
| 1 | pinMode | Сообщает плате, будет пин выходом (светодиод, зуммер) или входом (кнопка, датчик) | Pin(15, Pin.OUT) · Pin(14, Pin.IN, Pin.PULL_UP) |
| 2 | digitalWrite | Включает выходной пин (HIGH, 5 V) или выключает его (LOW, 0 V) | led.value(1) · led.on() (вкл.) · led.off() (выкл.) |
| 3 | digitalRead | Читает, HIGH или LOW на входном пине | button.value() → 1 или 0 |
| 4 | analogRead | Превращает напряжение на A0–A5 в число от 0 до 1023 | ADC(26).read_u16() → 0–65535 |
| 5 | analogWrite (PWM) | Приглушает светодиод или замедляет мотор значением от 0 до 255 на пине со значком ~ | PWM(Pin(15)) · freq(1000) · duty_u16(0–65535) |
| 6 | delay | Останавливает код на заданное число миллисекунд | time.sleep(0.5) · time.sleep_ms(500) (пауза полсекунды) |
| 7 | millis | Миллисекунды с момента запуска; отсчёт времени без остановки кода | time.ticks_ms() · time.ticks_diff() |
| 8 | Переменные и типы | Хранит значения в типах вроде int, float, bool, unsigned long | Тип не указывается: count = 0, volts = 3.3 |
| 9 | if / else if / else (условия) | Выполняет разный код в зависимости от условия | if / elif / else |
| 10 | Операторы сравнения и логические операторы | Составляет условия из ==, !=, <, >, &&, ||, ! | ==, !=, <, > · and, or, not |
| 11 | Цикл for | Повторяет действие заданное число раз | for i in range(10): |
| 12 | Цикл while | Повторяет, пока условие истинно | while условие: |
| 13 | Функции (void, параметры, return) | Делит код на именованные части, которые можно использовать повторно | def blink(times): … return (своя функция) |
| 14 | Массивы | Хранит по порядку значения одного типа под одним именем | Список: pins = [2, 3, 4] · len(pins) |
| 15 | Serial.begin / print / println (вывод в порт) | Отправляет текст и значения на компьютер (монитор порта) | print(x) · f-строка; Serial.begin не нужен |
| 16 | map | Пересчитывает один диапазон чисел в другой | Готовой команды нет: raw * 255 // 1023 или своя функция |
| 17 | random / randomSeed | Генерирует случайные числа | import random · random.randint(1, 6) (число от 1 до 6) |
| 18 | tone / noTone | Воспроизводит на зуммере звук заданной частоты и выключает его | PWM: freq(440) · duty_u16(32768); чтобы выключить звук, duty_u16(0) |
Курс MicroPython: 18 карточек и их аналоги в Arduino
Курс MicroPython написан с расчётом на Raspberry Pi Pico; примеры в карточках — короткие программы, которые можно запустить на Pico, например в Thonny. Порядок немного отличается от курса Arduino, потому что в Python сначала нужно привыкнуть к правилам самого языка: подключению модулей через import, выводу через print и правилу отступов и двоеточия. На вкладке Arduino каждой карточки MicroPython есть и версия той же программы на C++, так что со знанием Arduino таблицу можно читать справа налево. Если Pico в руках впервые, статья Что такое Raspberry Pi Pico хорошо подготовит к настройке и работе с пинами.
| № | Карточка | Что делает? | Аналог в Arduino |
|---|---|---|---|
| 1 | import и from … import | Подключает к программе модули вроде machine и time | #include для библиотек; базовые команды вроде pinMode и delay встроены |
| 2 | print и f-строки | Выводит текст и значения в оболочку (Shell) Thonny | Serial.begin(9600) + Serial.println() |
| 3 | Выход пина: Pin(15, Pin.OUT) | Делает пин GP выходом; value(), on(), off(), toggle() | pinMode(13, OUTPUT) + digitalWrite() |
| 4 | Вход пина: Pin.IN, PULL_UP, PULL_DOWN | Делает пин входом, выбирает встроенный резистор, читает через value() | pinMode(2, INPUT_PULLUP) + digitalRead() |
| 5 | time.sleep и sleep_ms | Приостанавливает программу на секунды или миллисекунды | delay() |
| 6 | while True: бесконечный цикл | Повторяет строки под собой, пока Pico включена | loop() |
| 7 | Отступы и двоеточие (:) | Определяет, какая строка к какому блоку относится | Фигурные скобки { } и точка с запятой ; |
| 8 | Переменные: int, float, str, bool | Хранит значения; тип определяется автоматически | int, float, String, bool (String — класс для строк) |
| 9 | if / elif / else, and / or / not (условия) | Ветвится по условию и объединяет условия | if / else if / else · &&, ||, ! (И, ИЛИ, НЕ) |
| 10 | for и range | Повторяет заданное число раз; range(0, 10) считает от 0 до 9 | for (int i = 0; i < 10; i++) |
| 11 | Списки: [ ], индекс, len | Хранит несколько значений по порядку; первый элемент имеет индекс 0 | Массивы: int pins[] = {2, 3, 4}; |
| 12 | def и return (функции) | Даёт имя повторно используемому коду и возвращает результат | Функции void или с типом результата, return |
| 13 | ADC: аналоговое чтение через read_u16 | Читает напряжение на GP26, GP27, GP28 как 0–65535 | analogRead() → 0–1023 |
| 14 | PWM: freq и duty_u16 | Приглушает светодиод, играет ноты на зуммере | analogWrite() и tone() |
| 15 | time.ticks_ms и ticks_diff | Измеряет прошедшее время, не останавливая код | millis() |
| 16 | Pin.irq: кнопки на прерываниях | Запускает функцию в момент нажатия кнопки | attachInterrupt() |
| 17 | try / except (перехват ошибок) | Не даёт программе остановиться при ошибке | Распространённого аналога в Arduino нет; проверяют возвращаемые значения |
| 18 | I2C и scan() | Находит адреса устройств на шине I2C | Wire.begin() + код I2C-сканера |
Одна программа на двух языках: 3 примера рядом
Первый пример — «hello world» любого языка: мигание светодиодом на плате каждые полсекунды. На Uno встроенный светодиод подключён к пину 13, так что собирать схему не нужно. С Pico всё немного иначе: на обычной Pico встроенный светодиод сидит на GP25, а на Pico W он подключён к беспроводному чипу, и Pin(25) его не зажжёт. Поэтому в MicroPython надёжнее писать Pin("LED", Pin.OUT); в актуальных версиях MicroPython это имя находит встроенный светодиод и на Pico, и на Pico W. Если прошивка на плате не знает имя «LED», установи на Pico свежий MicroPython. Бесплатный проект Мигание встроенным светодиодом Raspberry Pi Pico (Pico и Pico W) объясняет именно эту разницу.
1// Örnek 1: dahili LED'i yakıp söndür / Example 1: blink the built-in LED
2void setup() {
3 pinMode(13, OUTPUT); // Uno'da dahili LED 13. pinde / built-in LED is on pin 13 on the Uno
4}
5
6void loop() {
7 digitalWrite(13, HIGH); // LED yanar / LED on
8 delay(500); // 500 ms bekle / wait 500 ms
9 digitalWrite(13, LOW); // LED söner / LED off
10 delay(500); // 500 ms bekle / wait 500 ms
11}1# Örnek 1: dahili LED'i yakıp söndür / Example 1: blink the onboard LED
2from machine import Pin
3import time
4
5led = Pin("LED", Pin.OUT) # Pico ve Pico W'de dahili LED / onboard LED on Pico and Pico W
6# Pin(25, Pin.OUT) yalnız düz Pico'da çalışır / Pin(25, Pin.OUT) works only on the plain Pico
7
8while True: # Arduino'daki loop() gibi / like loop() in Arduino
9 led.on() # LED yanar / LED on
10 time.sleep_ms(500) # 500 ms bekle / wait 500 ms
11 led.off() # LED söner / LED off
12 time.sleep_ms(500) # 500 ms bekle / wait 500 msВо втором примере добавляется вход: светодиод горит, пока нажата кнопка. Кнопка ставится между пином 2 и GND на Uno и между GP14 и GND на Pico. На Uno снова используется встроенный светодиод на пине 13; на Pico подключи внешний светодиод к GP15 через резистор 220 Ω (калькулятор резистора для светодиода рассчитает это значение для твоего светодиода). В обоих языках включается встроенный подтягивающий резистор: INPUT_PULLUP в Arduino, Pin.PULL_UP в MicroPython. При таком подключении логика обратная: нажатие кнопки притягивает пин к GND, поэтому Arduino читает LOW, а Pico — 0. Пауза 20 мс в конце не устраняет механический дребезг кнопки полностью, но убирает очень короткие мигания. Подробности подключения кнопки — в статье Как подключить кнопку к Arduino.
1// Örnek 2: butona basılıyken LED yanar / Example 2: LED on while the button is pressed
2const int BUTTON_PIN = 2; // buton: 2. pin ile GND arasında / button between pin 2 and GND
3const int LED_PIN = 13; // dahili LED / built-in LED
4
5void setup() {
6 pinMode(BUTTON_PIN, INPUT_PULLUP); // iç pull-up direnci açık / internal pull-up on
7 pinMode(LED_PIN, OUTPUT);
8}
9
10void loop() {
11 if (digitalRead(BUTTON_PIN) == LOW) { // basılıyken LOW okunur / reads LOW while pressed
12 digitalWrite(LED_PIN, HIGH);
13 } else {
14 digitalWrite(LED_PIN, LOW);
15 }
16 delay(20); // kısa bekleme / short pause
17}1# Örnek 2: butona basılıyken LED yanar / Example 2: LED on while the button is pressed
2from machine import Pin
3import time
4
5button = Pin(14, Pin.IN, Pin.PULL_UP) # buton: GP14 ile GND arasında / button between GP14 and GND
6led = Pin(15, Pin.OUT) # LED: GP15 + 220 ohm direnç / LED on GP15 with 220 ohm
7
8while True:
9 if button.value() == 0: # basılıyken 0 okunur / reads 0 while pressed
10 led.value(1)
11 else:
12 led.value(0)
13 time.sleep_ms(20) # kısa bekleme / short pauseТретий пример показывает главное различие двух языков — диапазоны чисел. Средний вывод потенциометра идёт к A0 на Uno и к GP26 на Pico; крайние выводы — к 5V и GND на Uno и к 3V3 (OUT) и GND на Pico. Светодиод подключается к пину 9 (со значком ~) на Uno и к GP15 на Pico, в обоих случаях через резистор 220 Ω. В Arduino analogRead возвращает 0–1023, а analogWrite ждёт 0–255, поэтому между ними стоит map(raw, 0, 1023, 0, 255). На Pico и read_u16, и duty_u16 работают с 0–65535, так что показание можно сразу передать в PWM. Как устроен ШИМ, рассказано в статье Что такое ШИМ (PWM), а как следить за значениями в реальном времени — в руководстве по монитору порта.
1// Örnek 3: potansiyometreyle LED parlaklığı / Example 3: LED brightness with a potentiometer
2const int POT_PIN = A0; // potansiyometrenin orta ucu / potentiometer wiper
3const int LED_PIN = 9; // ~ işaretli PWM pini / PWM pin marked with ~
4
5void setup() {
6 pinMode(LED_PIN, OUTPUT);
7 Serial.begin(9600);
8}
9
10void loop() {
11 int raw = analogRead(POT_PIN); // 0-1023
12 int brightness = map(raw, 0, 1023, 0, 255); // 0-255 aralığına ölçekle / scale to 0-255
13 analogWrite(LED_PIN, brightness);
14 Serial.println(raw); // Seri Monitör'de izle / watch in the Serial Monitor
15 delay(50);
16}1# Örnek 3: potansiyometreyle LED parlaklığı / Example 3: LED brightness with a potentiometer
2from machine import Pin, ADC, PWM
3import time
4
5pot = ADC(26) # GP26 = ADC0, orta uç / wiper on GP26 (ADC0)
6led = PWM(Pin(15)) # LED: GP15 + 220 ohm direnç / LED on GP15 with 220 ohm
7led.freq(1000) # saniyede 1000 aç-kapa / 1000 cycles per second
8
9while True:
10 raw = pot.read_u16() # 0-65535
11 led.duty_u16(raw) # aynı aralık, ölçekleme gerekmez / same range, no scaling needed
12 print(raw) # Thonny kabuğunda izle / watch in the Thonny shell
13 time.sleep_ms(50)| Понятие | Arduino C++ | MicroPython (Pico) |
|---|---|---|
| Выполняется один раз | void setup() { … } | Строки до while True: |
| Повторяется всегда | void loop() { … } | while True: и строки с отступом под ним |
| Блок кода | Фигурные скобки { } и ; в конце строки | : в конце строки и отступ в 4 пробела |
| Комментарий | // комментарий | # комментарий |
| Выходной пин | pinMode(13, OUTPUT); digitalWrite(13, HIGH); | led = Pin(15, Pin.OUT) · led.value(1) (включить) |
| Входной пин | pinMode(2, INPUT_PULLUP); digitalRead(2) | Pin(14, Pin.IN, Pin.PULL_UP) · button.value() |
| Аналоговое чтение | analogRead(A0) → 0–1023 | ADC(26).read_u16() → 0–65535 |
| Выход PWM | analogWrite(9, 0–255) | PWM(Pin(15)).duty_u16(0–65535) |
| Ожидание | delay(500) | time.sleep_ms(500) или time.sleep(0.5) |
| Вывод текста | Serial.begin(9600); Serial.println(x); | print(x) |
Мини-тест, «Понятно» и прогресс на экране «Мой уровень»
- Мини-тест: В конце каждой карточки два вопроса, а в заголовке написано Мини-тест · 1 / 2. После нажатия на вариант сразу появляется Верно. или Не совсем. с коротким пояснением; дальше — кнопка Следующий вопрос.
- Результат: Когда оба вопроса решены, появляется результат вроде Верно: 2 / 2. Без теста карточку не завершить: на месте кнопки написано Пройди мини-тест, чтобы завершить карточку.
- Понятно: Когда тест пройден, появляется кнопка Понятно, дальше (на последней карточке курса — просто Понятно). После нажатия карточка сохраняется в аккаунте как изученная, короткое поздравление показывает прогресс, например Отлично! Карточек: 5 / 18, и открывается следующая карточка.
- Отметка и счётчик: Изученные карточки помечены в списке отметкой Изучено, а счётчик Что ты уже знаешь наверху справочника растёт. Когда все карточки курса пройдены, появляется надпись Все карточки этого курса изучены.
- Мой уровень: На экране Мой уровень в разделе Учёба, под заголовком Справочник по коду и подписью Изученные карточки, есть две отдельные полосы: Arduino C++ x/18 и MicroPython x/18. Эти полосы считают только карточки справочника по коду.
- Честное правило для себя: Приложение не останавливает после неверного ответа: кнопка Понятно появляется, как только тест пройден. Поэтому, прежде чем нажать её, проверь, получается ли вслух объяснить, почему оба ответа верны; если нет, вернись к разделу Пример и ещё раз прочитай код строка за строкой.
Посмотреть в проектах: найти команду в настоящем коде
Последний шаг в изучении команды — узнать её в рабочем проекте, который написал кто-то другой. В разделе карточки Посмотреть в проектах есть несколько избранных проектов, а под ними — предложение о том, в коде скольких проектов встречается команда; ссылка Все открывает полный список. Список отсортирован от простых проектов к сложным, и его можно сузить фильтрами Все, Бесплатно и Premium. Например, millis встречается в коде больше чем 50 проектов: список начинается с бесплатного проекта Управление светодиодом кнопкой на ESP32 (переключение), продолжается проектами для начинающих на Pico, такими как Кнопочное пианино на Raspberry Pi Pico (5 кнопок + зуммер + запись мелодии) и Парктроник на Raspberry Pi Pico (HC-SR04 + 3 светодиода + зуммер), и доходит до проектов среднего уровня вроде Светофор на Pico с выбором 4 режимов кнопкой (конечный автомат), где кнопка сочетается с отсчётом времени. Наш совет: открой бесплатный проект из списка, найди команду в коде, поменяй одно значение и сначала предскажи результат. Чтобы увидеть, что делает каждая строка кода, логичный следующий шаг — вкладка проекта Разбор кода.
Рекомендуемый порядок обучения: план на 4 недели
Допустим, на занятия есть около 20 минут в день, 5 дней в неделю. Чтобы пройти один курс за 4 недели, в большинство дней хватает одной карточки; в остальные дни вместо новой карточки — повторение и проект. Если есть Arduino, следуй только столбцу Arduino; если Pico — столбцу MicroPython. Если есть обе платы, сначала пройди курс Arduino, а во второй месяц переходи к MicroPython: понятия те же, поэтому второй курс идёт намного быстрее. Все проекты из таблицы в BlueGrays бесплатные. Если нужен более широкий план, 30-дневная дорожная карта из статьи Приложение для изучения Arduino хорошо дополняет эту таблицу; если ты ведёшь занятия на Pico, план уроков по Raspberry Pi Pico распределяет карточки MicroPython на 6 недель уроков.
| Неделя | Карточки Arduino C++ | Карточки MicroPython | Бесплатные проекты недели | Что получится к концу недели |
|---|---|---|---|---|
| 1 | 1–5: pinMode, digitalWrite, digitalRead, analogRead, analogWrite | 1–5: import, print, выход пина, вход пина, time.sleep | Мигающий светодиод, Управление светодиодом кнопкой (удержание); Pico: Мигание встроенным светодиодом Raspberry Pi Pico (Pico и Pico W) | Мигать светодиодом, читать кнопку; на Arduino — увидеть аналоговое значение |
| 2 | 6–10: delay, millis, переменные, if / else, операторы | 6–9: while True, отступы, переменные, if / elif / else | Ночник на LDR, Управление светодиодом кнопкой на ESP32 (переключение); Pico: Два попеременно мигающих светодиода на Pico (узор мигалки) | Принимать решения по показаниям и отсчитывать время, не останавливая программу |
| 3 | 11–14: for, while, функции, массивы | 10–13: for и range, списки, def, ADC | Светодиодный эффект Knight Rider, Бегущие огни на светодиодах; Pico: Симулятор светофора на Pico (3 светодиода по очереди) | Собирать повторения в циклы, пины — в массивы, а действия — в функции |
| 4 | 15–18: Serial, map, random и tone | 14–18: PWM, ticks_ms, Pin.irq, try / except и I2C | Работа с зуммером, Измерение освещённости с LDR; Pico: Светофор на Pico с выбором 4 режимов кнопкой (конечный автомат) | Выводить значения, регулировать звук и яркость, собрать небольшой проект с нуля |
Ежедневная программа на 20 минут
- 3 минуты, разминка: Реши вопросы дня в разделе «Учёба» или пройди заново вчерашний мини-тест. Цель — проверить, что вчерашняя команда всё ещё в памяти.
- 5 минут, новая карточка: Прочитай разделы Что делает?, Зачем? и Синтаксис. Перепиши синтаксис от руки на бумагу: запись от руки не даёт глазам проскакивать мимо скобок и точек с запятой.
- 3 минуты, пример: Объясни себе пример строка за строкой, потом переключи вкладку. В карточке Arduino смотри вкладку MicroPython, в карточке MicroPython — вкладку Arduino, и сопоставь строки, которые в обеих программах делают одно и то же.
- 2 минуты, мини-тест: Ответь на оба вопроса и прочитай пояснение к тому, где была ошибка. В этот момент ещё раз загляни в блоки Частая ошибка и Совет.
- 6 минут, проект: Открой бесплатный простой проект из списка Посмотреть в проектах, найди команду в коде и измени одно значение: паузу, номер пина или порог. Если схема собрана, загрузи код в плату; если нет, предскажи результат и проверь его в «Разборе кода».
- 1 минута, заметка: Запиши в тетрадь одну строку: название команды, её смысл одним предложением и аналог на другом языке. Через четыре недели эта страница станет твоим собственным словарём команд.
8 частых ошибок с этими командами
| Ошибка | Симптом | Решение | Карточка |
|---|---|---|---|
| Забыть pinMode | Светодиод не горит совсем или горит очень тускло | Напиши pinMode(pin, OUTPUT) в setup(); на Pico создай пин через Pin(15, Pin.OUT) | pinMode · Выход пина |
| Написать = вместо == в условии | if (x = 5) всегда истинно, и программа всегда выполняет одну и ту же ветку | Для сравнения используй ==; в Python if x = 5 сразу даёт SyntaxError | if / else · операторы |
| Заблокировать код долгим delay | Кнопка нажата, но реакция запаздывает или не приходит вовсе | Делай ожидание через millis; на Pico используй time.ticks_ms и ticks_diff | delay · millis · ticks_ms |
| Перепутать диапазон analogRead | Порог, скопированный из Arduino, на Pico никогда не срабатывает | analogRead на Uno даёт 0–1023, read_u16 на Pico — 0–65535; пересчитай порог под новый диапазон | analogRead · ADC |
| Перенести значение analogWrite в duty_u16 | На Pico с duty_u16(255) светодиод почти не горит | duty_u16 ждёт 0–65535: половина яркости — 32768, полная — 65535 | analogWrite · PWM |
| Хранить millis в int | На Uno примерно через 33 секунды отсчёт времени ломается | Объяви переменные времени как unsigned long и пиши проверку как «сейчас - прошлое >= интервал» | millis |
| Ждать от INPUT_PULLUP обратной логики | При нажатии кнопки ожидается HIGH или 1, а приходит LOW или 0 | С подтяжкой нажатое состояние — LOW (0), отпущенное — HIGH (1) | digitalRead · Вход пина |
| Написать sleep(500) на Pico | Pico ждёт не полсекунды, а 500 секунд, то есть больше 8 минут | sleep принимает секунды: пиши sleep(0.5) или sleep_ms(500) | time.sleep |
Вкладка «Блоки»: понять команду, увидев её

Вкладка Блоки позволяет увидеть, что делает команда, не написав ни строчки кода, особенно в первых карточках курса. На картинке выше pinMode превращается в блок «настроить пин 9 как OUTPUT», digitalWrite — в «записать HIGH в пин 9», а delay — в «ждать 100 мс»; в карточке pinMode под блоками перечислены и варианты из выпадающего списка: OUTPUT, INPUT и INPUT_PULLUP. Блоки показываются на языке приложения и нужны для чтения: в приложении программу не собирают перетаскиванием блоков, а в плату всегда загружается настоящий код. Рекомендуемый способ: сначала на вкладке Блоки предскажи, что сделает программа, потом перейди на вкладку Arduino и найди, какой строке соответствует каждый блок. В проектах с блочным видом переключатель Показать блоками на странице проекта позволяет так же сопоставить весь проект; основы — в статье Что такое блочное программирование.
Итак, чтобы выучить команды Arduino, длинный список не нужен: достаточно правильного порядка, небольшого рабочего примера для каждой команды, проверки из двух вопросов и настоящего проекта, где эта команда используется. Если начать сегодня с карточки pinMode, через четыре недели все 18 карточек будут пройдены, а каждая команда встретится вживую хотя бы в одном проекте; при переходе на Pico те же понятия в курсе MicroPython пойдут гораздо быстрее. Чтобы попробовать карточки и проекты внутри них, установи BlueGrays на телефон и открой первую карточку в разделе «Учёба».
Частые вопросы
Какие основные команды есть в Arduino?
Чаще всего используются команды для пинов (pinMode, digitalWrite, digitalRead, analogRead, analogWrite), команды времени (delay, millis), команды последовательного порта из Serial и вспомогательные команды вроде map, random и tone. Вместе с ними ход программы задают конструкции C++, такие как if, for и while, а также функции. Курс Arduino C++ в справочнике по коду BlueGrays разбирает эти темы по порядку в 18 карточках.
С какой команды Arduino начинать?
Начни с pinMode и digitalWrite: этих двух команд хватает, чтобы зажечь светодиод, и результат виден сразу. Потом добавь паузы через delay и чтение кнопки через digitalRead. analogRead, millis, if и for строятся на этих четырёх командах.
Чем команды Arduino отличаются от команд MicroPython?
Понятия те же, отличается запись: вместо pinMode и digitalWrite — Pin(15, Pin.OUT) и led.value(1), вместо delay — time.sleep_ms, вместо loop() — while True. Меняются и диапазоны чисел: на Uno analogRead возвращает 0–1023, а на Pico read_u16 — 0–65535. Фигурные скобки и точки с запятой из C++ в Python заменяют отступы и двоеточие.
Есть ли в MicroPython команда delay?
Команды с названием delay нет; то же самое делают функции модуля time: sleep (секунды), sleep_ms (миллисекунды) и sleep_us (микросекунды). delay(500) из Arduino на Pico превращается в time.sleep_ms(500) или time.sleep(0.5). Для отсчёта времени без остановки кода вместо millis используются time.ticks_ms и time.ticks_diff.
На каком пине встроенный светодиод Raspberry Pi Pico?
На обычной Pico встроенный светодиод подключён к GP25. На Pico W он подключён к беспроводному чипу, поэтому Pin(25) его не зажжёт. В актуальных версиях MicroPython Pin("LED", Pin.OUT) находит встроенный светодиод на обеих платах.
Справочник по коду BlueGrays бесплатный?
Да, справочник по коду бесплатный: можно читать все 36 карточек, смотреть примеры и решать мини-тесты. В списках «Посмотреть в проектах» есть и бесплатные, и Premium-проекты; фильтр «Бесплатно» оставляет только бесплатные.
Что собрать после прочтения
Все проекты
Мигающий светодиод
Самое первое «привет» в электронике: включение и выключение одного светодиода. Arduino включает и выключает светодиод через короткие промежутки, поэтому свет быстро мигает. Ты самым простым способом в

Управление светодиодом кнопкой (удержание)
Как дверной звонок: свет горит, пока ты нажимаешь, и гаснет, когда отпускаешь. Arduino всё время слушает кнопку; пока она нажата, светодиод горит, а как только ты убираешь палец, он гаснет. Эта просте

Ночник на LDR
Маленький ночник, который сам включается, когда темнеет, и гаснет, когда наступает утро. Датчик освещённости измеряет, насколько светло в комнате, и Arduino включает светодиод, когда достаточно темно,

Управление светодиодом кнопкой на ESP32 (переключение)
При каждом нажатии кнопки состояние светодиода меняется: если горел — гаснет, если не горел — загорается. Классический шаблон переключения. Антидребезг убирает механический шум кнопки, чтобы одно нажатие давало одно переключение.

Светодиодный эффект Knight Rider
Классический бегущий огонь-сканер: светящаяся точка скользит от одного края шести светодиодов к другому и возвращается обратно. Arduino зажигает каждый светодиод на десятую долю секунды и переходит к

Мигание встроенным светодиодом 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Ω.
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

