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

Команды 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 с примерами у каждой команды свой раздел; здесь же речь о том, в каком порядке их учить и как практиковаться.

Плата Arduino Uno: цифровые пины, PWM-пины со значком ~ и аналоговые входы A0–A5
Первые пять карточек курса Arduino C++ посвящены трём группам пинов этой платы: цифровым пинам, PWM-пинам со значком ~ и аналоговым входам A0–A5.

Где найти справочник по коду и как он устроен

Справочник открывается с вкладки Учёба внизу: в разделе Уроки наверху есть плитка Справочник по коду, а под ней видно, сколько карточек уже изучено, например Карточек: 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
1pinModeСообщает плате, будет пин выходом (светодиод, зуммер) или входом (кнопка, датчик)Pin(15, Pin.OUT) · Pin(14, Pin.IN, Pin.PULL_UP)
2digitalWriteВключает выходной пин (HIGH, 5 V) или выключает его (LOW, 0 V)led.value(1) · led.on() (вкл.) · led.off() (выкл.)
3digitalReadЧитает, HIGH или LOW на входном пинеbutton.value() → 1 или 0
4analogReadПревращает напряжение на A0–A5 в число от 0 до 1023ADC(26).read_u16() → 0–65535
5analogWrite (PWM)Приглушает светодиод или замедляет мотор значением от 0 до 255 на пине со значком ~PWM(Pin(15)) · freq(1000) · duty_u16(0–65535)
6delayОстанавливает код на заданное число миллисекундtime.sleep(0.5) · time.sleep_ms(500) (пауза полсекунды)
7millisМиллисекунды с момента запуска; отсчёт времени без остановки кодаtime.ticks_ms() · time.ticks_diff()
8Переменные и типыХранит значения в типах вроде int, float, bool, unsigned longТип не указывается: count = 0, volts = 3.3
9if / 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)
15Serial.begin / print / println (вывод в порт)Отправляет текст и значения на компьютер (монитор порта)print(x) · f-строка; Serial.begin не нужен
16mapПересчитывает один диапазон чисел в другойГотовой команды нет: raw * 255 // 1023 или своя функция
17random / randomSeedГенерирует случайные числаimport random · random.randint(1, 6) (число от 1 до 6)
18tone / noToneВоспроизводит на зуммере звук заданной частоты и выключает егоPWM: freq(440) · duty_u16(32768); чтобы выключить звук, duty_u16(0)
Аналоги не совпадают один в один, и самое большое отличие — в диапазонах чисел. На Uno analogRead возвращает 0–1023, а analogWrite ждёт 0–255; на Pico и ADC.read_u16, и PWM.duty_u16 работают с диапазоном 0–65535. На Pico аналоговые значения читают только GP26, GP27 и GP28, причём измеряют они максимум 3,3 V, поэтому потенциометр подключай к 3V3 (OUT), а не к 5 V. Кроме того, в MicroPython нет готовых команд map и tone: масштабирование делается простым умножением и делением, а звук — настройкой freq у PWM.

Курс MicroPython: 18 карточек и их аналоги в Arduino

Курс MicroPython написан с расчётом на Raspberry Pi Pico; примеры в карточках — короткие программы, которые можно запустить на Pico, например в Thonny. Порядок немного отличается от курса Arduino, потому что в Python сначала нужно привыкнуть к правилам самого языка: подключению модулей через import, выводу через print и правилу отступов и двоеточия. На вкладке Arduino каждой карточки MicroPython есть и версия той же программы на C++, так что со знанием Arduino таблицу можно читать справа налево. Если Pico в руках впервые, статья Что такое Raspberry Pi Pico хорошо подготовит к настройке и работе с пинами.

№КарточкаЧто делает?Аналог в Arduino
1import и from … importПодключает к программе модули вроде machine и time#include для библиотек; базовые команды вроде pinMode и delay встроены
2print и f-строкиВыводит текст и значения в оболочку (Shell) ThonnySerial.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()
5time.sleep и sleep_msПриостанавливает программу на секунды или миллисекундыdelay()
6while True: бесконечный циклПовторяет строки под собой, пока Pico включенаloop()
7Отступы и двоеточие (:)Определяет, какая строка к какому блоку относитсяФигурные скобки { } и точка с запятой ;
8Переменные: int, float, str, boolХранит значения; тип определяется автоматическиint, float, String, bool (String — класс для строк)
9if / elif / else, and / or / not (условия)Ветвится по условию и объединяет условияif / else if / else · &&, ||, ! (И, ИЛИ, НЕ)
10for и rangeПовторяет заданное число раз; range(0, 10) считает от 0 до 9for (int i = 0; i < 10; i++)
11Списки: [ ], индекс, lenХранит несколько значений по порядку; первый элемент имеет индекс 0Массивы: int pins[] = {2, 3, 4};
12def и return (функции)Даёт имя повторно используемому коду и возвращает результатФункции void или с типом результата, return
13ADC: аналоговое чтение через read_u16Читает напряжение на GP26, GP27, GP28 как 0–65535analogRead() → 0–1023
14PWM: freq и duty_u16Приглушает светодиод, играет ноты на зуммереanalogWrite() и tone()
15time.ticks_ms и ticks_diffИзмеряет прошедшее время, не останавливая кодmillis()
16Pin.irq: кнопки на прерыванияхЗапускает функцию в момент нажатия кнопкиattachInterrupt()
17try / except (перехват ошибок)Не даёт программе остановиться при ошибкеРаспространённого аналога в Arduino нет; проверяют возвращаемые значения
18I2C и scan()Находит адреса устройств на шине I2CWire.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) объясняет именно эту разницу.

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

C++ (Arduino IDE)
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}
MicroPython
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), а как следить за значениями в реальном времени — в руководстве по монитору порта.

C++ (Arduino IDE)
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}
MicroPython
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–1023ADC(26).read_u16() → 0–65535
Выход PWManalogWrite(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Бесплатные проекты неделиЧто получится к концу недели
11–5: pinMode, digitalWrite, digitalRead, analogRead, analogWrite1–5: import, print, выход пина, вход пина, time.sleepМигающий светодиод, Управление светодиодом кнопкой (удержание); Pico: Мигание встроенным светодиодом Raspberry Pi Pico (Pico и Pico W)Мигать светодиодом, читать кнопку; на Arduino — увидеть аналоговое значение
26–10: delay, millis, переменные, if / else, операторы6–9: while True, отступы, переменные, if / elif / elseНочник на LDR, Управление светодиодом кнопкой на ESP32 (переключение); Pico: Два попеременно мигающих светодиода на Pico (узор мигалки)Принимать решения по показаниям и отсчитывать время, не останавливая программу
311–14: for, while, функции, массивы10–13: for и range, списки, def, ADCСветодиодный эффект Knight Rider, Бегущие огни на светодиодах; Pico: Симулятор светофора на Pico (3 светодиода по очереди)Собирать повторения в циклы, пины — в массивы, а действия — в функции
415–18: Serial, map, random и tone14–18: PWM, ticks_ms, Pin.irq, try / except и I2CРабота с зуммером, Измерение освещённости с LDR; Pico: Светофор на Pico с выбором 4 режимов кнопкой (конечный автомат)Выводить значения, регулировать звук и яркость, собрать небольшой проект с нуля

Ежедневная программа на 20 минут

  1. 3 минуты, разминка: Реши вопросы дня в разделе «Учёба» или пройди заново вчерашний мини-тест. Цель — проверить, что вчерашняя команда всё ещё в памяти.
  2. 5 минут, новая карточка: Прочитай разделы Что делает?, Зачем? и Синтаксис. Перепиши синтаксис от руки на бумагу: запись от руки не даёт глазам проскакивать мимо скобок и точек с запятой.
  3. 3 минуты, пример: Объясни себе пример строка за строкой, потом переключи вкладку. В карточке Arduino смотри вкладку MicroPython, в карточке MicroPython — вкладку Arduino, и сопоставь строки, которые в обеих программах делают одно и то же.
  4. 2 минуты, мини-тест: Ответь на оба вопроса и прочитай пояснение к тому, где была ошибка. В этот момент ещё раз загляни в блоки Частая ошибка и Совет.
  5. 6 минут, проект: Открой бесплатный простой проект из списка Посмотреть в проектах, найди команду в коде и измени одно значение: паузу, номер пина или порог. Если схема собрана, загрузи код в плату; если нет, предскажи результат и проверь его в «Разборе кода».
  6. 1 минута, заметка: Запиши в тетрадь одну строку: название команды, её смысл одним предложением и аналог на другом языке. Через четыре недели эта страница станет твоим собственным словарём команд.

8 частых ошибок с этими командами

ОшибкаСимптомРешениеКарточка
Забыть pinModeСветодиод не горит совсем или горит очень тусклоНапиши pinMode(pin, OUTPUT) в setup(); на Pico создай пин через Pin(15, Pin.OUT)pinMode · Выход пина
Написать = вместо == в условииif (x = 5) всегда истинно, и программа всегда выполняет одну и ту же веткуДля сравнения используй ==; в Python if x = 5 сразу даёт SyntaxErrorif / else · операторы
Заблокировать код долгим delayКнопка нажата, но реакция запаздывает или не приходит вовсеДелай ожидание через millis; на Pico используй time.ticks_ms и ticks_diffdelay · 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, полная — 65535analogWrite · PWM
Хранить millis в intНа Uno примерно через 33 секунды отсчёт времени ломаетсяОбъяви переменные времени как unsigned long и пиши проверку как «сейчас - прошлое >= интервал»millis
Ждать от INPUT_PULLUP обратной логикиПри нажатии кнопки ожидается HIGH или 1, а приходит LOW или 0С подтяжкой нажатое состояние — LOW (0), отпущенное — HIGH (1)digitalRead · Вход пина
Написать sleep(500) на PicoPico ждёт не полсекунды, а 500 секунд, то есть больше 8 минутsleep принимает секунды: пиши sleep(0.5) или sleep_ms(500)time.sleep

Вкладка «Блоки»: понять команду, увидев её

Блоки проекта «Мигающий светодиод»: пин 9 настраивается как OUTPUT, затем в «повторять всегда» — записать HIGH в пин 9, ждать 100 мс, записать LOW в пин 9, ждать 100 мс
Блоки бесплатного проекта «Мигающий светодиод»: блок «настройка (один раз)» соответствует setup(), а блок «повторять всегда» — loop().

Вкладка Блоки позволяет увидеть, что делает команда, не написав ни строчки кода, особенно в первых карточках курса. На картинке выше 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-проекты; фильтр «Бесплатно» оставляет только бесплатные.

Все проекты
Мигающий светодиод
#1Новичок

Мигающий светодиод

Самое первое «привет» в электронике: включение и выключение одного светодиода. Arduino включает и выключает светодиод через короткие промежутки, поэтому свет быстро мигает. Ты самым простым способом в

4.6(188)
1127
Управление светодиодом кнопкой (удержание)
#9Новичок

Управление светодиодом кнопкой (удержание)

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

4.8(113)
229
Ночник на LDR
#12Новичок

Ночник на LDR

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

4.8(102)
205
Управление светодиодом кнопкой на ESP32 (переключение)
#105Новичок

Управление светодиодом кнопкой на ESP32 (переключение)

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

4.6(39)
57
Светодиодный эффект Knight Rider
#6Средний

Светодиодный эффект Knight Rider

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

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