Установка Rust на Raspberry Pi

Если вы интересуетесь программированием, то, вероятно, слышали про Rust. Этот язык, изначально разработанный при участии сообщества Mozilla, полюбился разработчикам за безопасность памяти и высокую производительность. Raspberry Pi — многофункциональный мини‑компьютер, идеально подходящий для практики и обучения. В этой статье мы объединим оба инструмента: установим Rust на Raspberry Pi и создадим простую программу, мигающую светодиодом через GPIO.
Что нужно заранее
- Raspberry Pi (любая модель с GPIO, в статье использовалась Raspberry Pi 3B+).
- Светодиод (LED).
- Резистор 220–1 kΩ.
- Макетная плата (breadboard) и провода для соединений.
Подключите цепь так: GPIO 18 -> анод светодиода (длинная ножка) -> катод светодиода -> резистор -> GND. Проверьте соединения перед подачей питания.
Важно: работа с GPIO требует прав доступа. Выполняйте команды от имени пользователя, у которого есть доступ к GPIO (обычно pi или пользователь, добавленный в группу gpio), или запускайте с sudo, если это необходимо.
Совместимость и окружение
Эта инструкция написана с учётом Raspbian Stretch в настольном режиме, но шаги также работают через SSH. Разные модели Raspberry Pi и разные версии ОС могут вести себя немного иначе — учтите версии пакетов и архитектуру (armv7/arm64).
Как установить Rust на Raspberry Pi
Перейдите на страницу установки Rust (rust-lang) и скопируйте команду установки rustup. В терминале выполните команду установки. При запросе выберите установку по умолчанию.
Установщик скачает rustup, rustc и Cargo. Процесс может занять несколько минут в зависимости от скорости сети.
Что делать после установки
После завершения установки инструменты rustc и cargo могут быть установлены, но ещё не добавлены в PATH текущей сессии. Обычно нужно перезагрузить систему либо выйти и снова войти в сеанс пользователя, чтобы обновлённый PATH применился.
Проверьте установку командой:
rustc --version
cargo --versionЕсли версии отображаются, установка успешна.
Для редактирования кода используйте любой удобный редактор. В статье использовался Code-OSS (community build VS Code), но можно применять nano, vim, Geany или другие IDE.
Создание нового Rust проекта
Откройте терминал и выполните:
mkdir YourFolder
cd YourFolderСоздайте проект с помощью Cargo:
cargo new YourProjectВ ответ вы получите подтверждение создания проекта. Перейдите в папку проекта и просмотрите содержимое:
cd YourProject
lsВы увидите папку src и файл Cargo.toml — это основы любого Rust проекта.
Быстрое объяснение структуры проекта
- src/main.rs — входная точка приложения (если создавался бинарный проект).
- Cargo.toml — метаданные проекта, зависимости (crates), версии и настройки сборки.
Откройте src/main.rs — проект уже содержит простую программу “Hello, world!”. Rust синтаксически похож на C/Java: фигурные скобки и точки с запятой обязательны; код нужно компилировать перед запуском.
В Cargo.toml мы позже добавим зависимость (crate) для доступа к GPIO.
Сборка и запуск проекта
Соберите проект:
cargo buildПосле сборки появится папка target и файл Cargo.lock. Executable находится в target/debug:
./target/debug/YourProjectИли запустите сборку и выполнение одной командой:
cargo runПодключение к GPIO из Rust
Для работы с GPIO мы будем использовать крейт rust_gpiozero (версия в примере 0.2.0). Он схож по API с Python GPIO Zero, поэтому примеры часто понятны тем, кто работал с Python.
В секцию [dependencies] файла Cargo.toml добавьте:
[dependencies]
rust_gpiozero = "0.2.0"Сохраните файл и в терминале выполните:
cargo checkКоманда cargo check скачает зависимости и проверит, что проект компилируется. Это быстрее, чем полная сборка, и помогает выявлять ошибки на ранней стадии.
Пример: Hello Blink — мигающий светодиод
Откройте src/main.rs и замените содержимое на следующий код. Если не хотите писать код вручную, готовый пример можно найти на GitHub Gist (проверьте совместимость версии крейта).
use rust_gpiozero::*;
use std::thread::sleep;
use std::time::Duration;
fn main() {
let led = LED::new(18); // пин 18
loop {
led.on();
sleep(Duration::from_secs(1));
led.off();
sleep(Duration::from_secs(1));
}
}Комментарии:
- use rust_gpiozero::*; — подключает API крейта.
- Duration::from_secs(1) — пауза в 1 секунду.
Сохраните файл и запустите проект:
cargo runЕсли светодиод мигает, поздравляю — ваша первая аппаратная программа на Rust успешно запущена. Для остановки нажмите Ctrl‑C.
Чек-лист перед запуском (быстрое руководство)
- Провода и полярность светодиода проверены.
- Резистор выбран в пределах 220–1 kΩ.
- Пользователь имеет права на доступ к GPIO или запуск от root.
- Cargo и rustc установлены и видимы в PATH.
- В Cargo.toml указана зависимость rust_gpiozero = “0.2.0”.
- Выполнена команда cargo check и нет ошибок зависимостей.
Типичные ошибки и как их исправить
- Программа не запускается: проверьте вывод команды cargo run на предмет сообщений компилятора. Частые ошибки — пропущенные точки с запятой, неверные имена модулей или несовместимости версий крейтов.
- rustc или cargo не найдены: перезапустите терминал или выполните выход/вход в систему, чтобы обновился PATH, или добавьте в PATH вручную ~/.cargo/bin.
- Нет доступа к GPIO: запустите программу с sudo или добавьте пользователя в группу gpio (sudo usermod -aG gpio
), затем выйдите и войдите снова. - Светодиод не мигает: проверьте схемы подключения и целевой пин (18), убедитесь, что резистор и светодиод исправны.
Отладка аппаратного кода
- Перед запуском скомпилируйте: cargo build — это быстрее, чем полный цикл run при отладке.
- Для вывода отладочной информации используйте println! и проверяйте лог в терминале.
- Если вы используете SSH, убедитесь, что питание Pi стабильно и USB‑порты/кабель не прерывают работу.
Альтернативные подходы к работе с GPIO
- Использовать другие крейты, например direct sysfs или другие обёртки, если нужна более низкоуровневая работа.
- Писать небольшие части на C и подключать их через FFI, если нужны специфичные оптимизации.
- Оставаться на Python (gpiozero) для быстрого прототипирования, а затем переписывать критичные части на Rust.
Руководство по безопасности и лучшие практики
- Никогда не подключайте периферию при включённом питании, чтобы избежать короткого замыкания.
- Используйте резисторы и защитные элементы, не превышайте допустимый ток GPIO пина.
- Обновляйте пакеты ОС и безопасные зависимости крейтов.
Сценарии использования и роли
- Новичок / Хоббист: использовать примеры для обучения основам и безопасным подключениям.
- Преподаватель: показывать различия синтаксиса и концепций между Python и Rust.
- Разработчик встраиваемых систем: использовать Rust для части кода с критичными по памяти компонентами.
Критерии приёмки
- Код компилируется без ошибок: cargo check и cargo build проходят успешно.
- Программа запускается: cargo run запускает приложение без аварийных завершений.
- Светодиод мигает с интервалом ~1 с.
- Логи/вывод в терминале корректны при использовании println!.
Полезные команды — шорткат‑лист
- Установить Rust: curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh
- Проверить установки: rustc –version; cargo –version
- Создать проект: cargo new MyApp
- Сборка: cargo build
- Быстрая проверка: cargo check
- Сборка и запуск: cargo run
Небольшой метод: как быстро переносить прототипы с Python на Rust
- Прототипируйте логику на Python, работая с gpiozero.
- Определите горячие участки/точки отказа.
- Перенесите периферийный код на Rust с использованием rust_gpiozero.
- Соберите и протестируйте оба варианта параллельно.
Частые случаи, когда Rust может не подойти
- Если вам нужно быстро и без компиляции экспериментировать — Python быстрее итерационно.
- Для сложных вычислений, где платформа не поддерживает нужную архитектуру или крейты недоступны.
Глоссарий (одна строка на термин)
- Cargo — система сборки и менеджер пакетов в Rust.
- Crate — пакет/модуль в экосистеме Rust, аналог зависимости.
- rustup — инструмент управления версией Rust и компонентами.
- GPIO — универсальные входы/выходы общего назначения на Raspberry Pi.
Шаблон плана урока для преподавателя (30–45 минут)
- 5 мин — обзор Raspberry Pi и Rust (почему Rust?).
- 10 мин — установка rustup и проверка окружения.
- 10 мин — создание проекта и обзор Cargo.toml.
- 10 мин — подключение крейта rust_gpiozero и написание main.rs.
- 5–10 мин — запуск, тестирование и обсуждение проблем.
Примеры тестов и приёмка
- Unit тесты: логика без аппаратных зависимостей можно покрыть unit-тестами стандартными средствами Rust (#[cfg(test)]).
- Интеграционные тесты для аппаратного слоя требуют моков или тестовой среды; при отсутствии мока — ручное тестирование на устройстве.
Куда двигаться дальше
- Изучите документацию rust_gpiozero и примеры в репозитории.
- Исследуйте асинхронные возможности Rust для управления несколькими устройствами.
- Попробуйте интегрировать сенсоры, PWM и I2C устройства.
Резюме
Вы установили Rust на Raspberry Pi, создали проект Cargo, добавили dependency rust_gpiozero и написали программу, мигающую светодиодом. В статье также представлены чек-листы, отладочные советы, альтернативные подходы и руководства по безопасности.
Важно: Rust не заменит Python во всех задачах, но он даёт сильные преимущества в безопасности и производительности для проектов, где это важно.
Приятного кодинга и безопасных подключений!
Похожие материалы
Как сделать слайдер для камеры за $35
Как стримить с телефона на ПК через OBS
Как удалить аккаунт Reddit — полное руководство
Как выбрать камеру для влогинга
Как сравнить процессоры CPU: практическое руководство