Введение
Добро пожаловать в ваш первый проект управления через последовательный порт на Raspberry Pi Pico! В этом руководстве мы соберём простую схему, которая позволит включать и выключать светодиод, вводя команды в монитор последовательного порта. Вы изучите основы последовательной связи, цифрового вывода и научитесь использовать симулятор Velxio для тестирования кода без какого-либо оборудования.
Этот проект идеально подходит для новичков, желающих понять, как микроконтроллеры общаются с компьютером. К концу урока вы сможете расширить концепцию для управления несколькими светодиодами, чтения датчиков или даже создания простого меню.
Обзор схемы
Давайте посмотрим на схему, которую мы соберём. Откройте пример в Velxio, и вы увидите следующие компоненты:

- Raspberry Pi Pico (nano-rp2040): Мозг операции. Мы будем использовать контакт D2 в качестве управляющего.
- Светодиод (led-status): Зелёный светодиод, который мы будем включать и выключать. Анод (A) подключается к Pico, а катод (C) — к токоограничивающему резистору.
- Резистор (r1): Резистор на 220 Ом для ограничения тока через светодиод и предотвращения повреждений.
Детали подключения
- От Pico D2 к аноду светодиода: Зелёный провод соединяет контакт D2 Pico с анодом (A) светодиода. Это управляющий сигнал.
- От катода светодиода к резистору: Серый провод соединяет катод (C) светодиода с одним концом резистора (контакт 1).
- От резистора к GND Pico: Чёрный провод соединяет другой конец резистора (контакт 2) с землёй Pico (GND.1).
Вот и всё! Схема проста, но эффективна. Резистор необходим, чтобы не сжечь светодиод. С резистором 220 Ом и типичным прямым напряжением светодиода около 2 В ток составит примерно (3,3 В - 2 В) / 220 Ом ≈ 6 мА, что безопасно.
Разбор кода
Теперь давайте разберём код. Откройте редактор в Velxio, и вы увидите следующий скетч Arduino:
// Raspberry Pi Pico — Serial LED Control
// Send '1' to turn LED ON, '0' to turn OFF, '?' for status
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
delay(500);
Serial.println("=== Pico LED Control ===");
Serial.println("Commands: 1=ON 0=OFF ?=status");
}
void loop() {
if (Serial.available()) {
char cmd = Serial.read();
switch (cmd) {
case '1':
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("LED: ON");
break;
case '0':
digitalWrite(LED_BUILTIN, LOW);
Serial.println("LED: OFF");
break;
case '?':
Serial.print("LED: ");
Serial.println(digitalRead(LED_BUILTIN) ? "ON" : "OFF");
break;
default:
if (cmd >= ' ') {
Serial.print("Unknown command: ");
Serial.println(cmd);
}
break;
}
}
}
Как это работает
setup(): Мы настраиваем встроенный контакт светодиода как выход, запускаем последовательную связь на скорости 115200 бод, ждём 500 мс для стабилизации соединения, затем выводим приветственное сообщение и инструкции.loop(): Мы проверяем, доступен ли символ в буфере последовательного порта. Если да, читаем его и используем операторswitchдля обработки трёх команд:'1': Включить светодиод (HIGH) и вывести подтверждение.'0': Выключить светодиод (LOW) и вывести подтверждение.'?': Прочитать текущее состояние контакта светодиода и вывести “ON” или “OFF”.- Любой другой печатный символ (ASCII >= 32) выводит сообщение “Unknown command”. Непечатные символы игнорируются.
Обратите внимание, что мы используем LED_BUILTIN — предопределённую константу для встроенного светодиода Pico (обычно на контакте 25). В нашей схеме мы подключили внешний светодиод к контакту D2, но код всё равно использует встроенный. Если вы хотите управлять внешним светодиодом, замените LED_BUILTIN на 2 (или определите константу). Для этого примера встроенный светодиод подходит.
Ключевые концепции
- Последовательная связь: Pico общается с компьютером через USB-последовательный порт.
Serial.begin(115200)задаёт скорость передачи — убедитесь, что ваш монитор последовательного порта использует ту же скорость. - Цифровой вывод:
pinMode(pin, OUTPUT)иdigitalWrite(pin, HIGH/LOW)— основы управления контактами. - Оператор switch: Чистый способ обработки нескольких команд. Он эффективнее цепочки операторов
if-else. - Проверка ввода: Код игнорирует непечатные символы и предупреждает о неизвестных командах. Это хорошая практика для надёжных программ.
Частые ошибки и советы по отладке
- Скорость монитора последовательного порта: Если вы видите мусорные символы, скорость вашего монитора не совпадает с 115200. В Velxio монитор встроен и автоматически использует правильную скорость.
- Светодиод не горит: Проверьте, правильно ли ориентирован светодиод (анод к D2, катод к резистору). Также проверьте значение резистора — слишком высокое сделает светодиод тусклым, слишком низкое может его сжечь.
- Команды не работают: Убедитесь, что вы отправляете именно ‘1’, ‘0’ или ’?’ (без кавычек). Код читает один символ, поэтому отправка “1\n” сработает, так как ‘1’ будет прочитан первым, а символ новой строки будет проигнорирован (поскольку он непечатный).
- Использование симулятора: Панель инструментов Velxio позволяет компилировать и запускать код.
Нажмите кнопку “Run”, чтобы запустить симуляцию. Панель инструментов холста
даёт элементы управления, такие как пауза и сброс. Если нужно добавить компоненты, используйте выбор компонентов
.
Предлагаемые расширения
Когда базовый проект заработает, попробуйте эти улучшения:
- Управление внешним светодиодом: Замените
LED_BUILTINна2и подключите внешний светодиод к контакту D2, как показано на схеме. - Добавьте больше светодиодов: Используйте несколько контактов и команды, например ‘r’ для красного, ‘g’ для зелёного, ‘b’ для синего.
- ШИМ-регулировка яркости: Используйте
analogWrite()для установки уровней яркости. Отправляйте значения от ‘0’ до ‘9’ для яркости от 0% до 100%. - Двусторонняя связь: Заставьте Pico отправлять данные с датчиков (например, температуру) при получении команды ‘t’.
- Меню: Выводите меню опций и используйте цикл для ожидания корректного ввода.
Призыв к действию
Готовы попробовать сами? Откройте живой пример в Velxio и начинайте экспериментировать: Управление светодиодом через последовательный порт на Pico в Velxio. Никаких загрузок, никакой настройки — только ваш браузер и ваше любопытство. Удачного хакерства!