Подключение к UNO Q через Secure Shell (SSH)
Узнайте, как получить доступ к оболочке UNO Q через SSH.
Arduino UNO Q можно программировать через Arduino App Lab — настольное приложение, поддерживающее редактирование кода и запуск приложений (Apps) на плате без каких-либо внешних инструментов.
Микропроцессор платы (работающий под управлением Debian OS) также можно использовать через Secure Shell (SSH) — метод, позволяющий удалённо подключаться к плате через локальную сеть. Это позволяет, помимо прочего:
Получить доступ к оболочке платы и выполнять операции на плате удалённо.
Передавать файлы с локального компьютера на плату удалённо (с помощью SCP).
Плата UNO Q поставляется с предустановленным Arduino App Lab, который основан на инструменте arduino-app-cli*. Это позволяет, помимо прочего, запускать приложения через командную строку, вместо использования настольного приложения.
* Подробнее об arduino-app-cli читайте в руководстве Arduino App CLI.
Требования
Требования к оборудованию
Блок питания 5 В постоянного тока, 3 А (например, зарядное устройство для телефона или USB-порт компьютера)
Требования к программному обеспечению
Завершена первоначальная настройка платы*
SSH-клиент, установленный на компьютере (macOS, Windows 10+, Ubuntu имеют встроенные SSH-клиенты)
Доступ к локальной сети Wi-Fi (компьютер и плата должны быть в одной сети)
Важно
Во время первоначальной настройки вводятся учётные данные Wi-Fi, и плата автоматически включает SSH. Без её выполнения невозможно получить доступ к плате по SSH, если не активировать его вручную. Это также можно активировать, подключившись к плате через adb и выполнив в оболочке платы команду:
arduino-app-cli system network-mode enable
Подробнее см. в документации Arduino App CLI.
Установка SSH (локальный компьютер)
SSH — это сетевой протокол, а не инструмент сам по себе. Существует множество различных SSH-инструментов на выбор, и большинство операционных систем имеют встроенный инструмент. В этом разделе мы рассмотрим, как настроить его в некоторых распространённых операционных системах (macOS, Windows, Ubuntu).
macOS
macOS имеет встроенный инструмент ssh на основе OpenSSH, и он должен работать сразу из коробки. Проверьте, установлен ли инструмент на вашем компьютере, выполнив в терминале следующую команду:
ssh -V
Вы должны увидеть что-то вроде:
OpenSSH_9.9p2, LibreSSL 3.3.6
Это означает, что всё работает правильно.
Windows
Более поздние версии Windows (10+) также включают SSH-клиенты, и установка дополнительных инструментов не требуется. Чтобы убедиться, что инструменты установлены, откройте терминал на компьютере с Windows и введите:
ssh -V
Команда должна вернуть что-то вроде:
OpenSSH_for_Windows_x.x, LibreSSL 3.x.x
Это означает, что всё работает правильно.
Совет
Для более старых компьютеров Windows используйте менеджер пакетов, например Chocolatey, для установки OpenSSH / LibreSSL.
Linux (Ubuntu)
Многие ОС Linux включают SSH-клиенты, и установка дополнительных инструментов не требуется. Чтобы убедиться, что инструменты установлены, откройте терминал на вашем компьютере Ubuntu и введите:
ssh -V
Команда должна вернуть что-то вроде:
OpenSSH_x.x Ubuntu-3ubuntu.x, OpenSSL x.x.x
Это означает, что всё работает правильно.
Совет
Если вы используете устаревшую/пользовательскую систему, в которой по какой-то причине нет SSH, вы можете установить OpenSSH и LibreSSL вручную, выполнив:
sudo apt install openssh-client openssh-server libressl-dev
Подключение через SSH
Для подключения к плате UNO Q через SSH нам нужно знать только имя платы и пароль. Они устанавливаются во время первоначальной настройки.
Откройте терминал.
Выполните следующую команду:
ssh arduino@<boardname>.local # замените <boardname> на имя вашей платы
Введите
yes, когда будет предложено подключиться.Введите пароль платы.
После ввода пароля вы попадёте в оболочку платы и сможете выполнять операции!
Ниже показано, как это должно выглядеть после успешного доступа к оболочке платы.
Подтверждение в macOS
Проблемы с mDNS в macOS
Если подключение не удаётся со следующей ошибкой:
ssh: connect to host <boardname>.local port 22: Connection refused
Это может быть проблема с mDNS в вашей локальной сети. Чтобы обойти это, есть несколько альтернатив:
Подключение напрямую по IP-адресу: IP-адрес платы можно узнать через:
Arduino IDE 2 (необходимо установить ядро Zephyr)
Arduino CLI, выполнив команду:
arduino-cli board list
Выполнив
hostname -Iв оболочке платы. Вы можете получить доступ к плате черезadb shell(инструкции) или используя плату в режиме SBC.
Получив IP-адрес, вы сможете подключиться через SSH, используя:
ssh arduino@10.0.20.138
Предупреждение
Если вы ранее подключались к плате с тем же IP-адресом, но перепрошили плату, вам может потребоваться удалить старый ключ из ~/.ssh/known_hosts. Это можно сделать, отредактировав файл known_hosts или выполнив команду:
ssh-keygen -R <ip-адрес-платы>
Подтверждение в Windows
Подтверждение в Linux (Ubuntu)
Arduino App CLI
arduino-app-cli можно использовать для запуска и остановки приложений на плате из терминала. При доступе к плате через SSH вы можете выполнять команды, такие как:
arduino-app-cli app start <app>
Более подробную информацию об инструменте arduino-app-cli можно найти в руководстве Arduino App CLI.
Передача файлов
Для передачи файлов с вашего компьютера на плату используйте инструмент scp из терминала вашего компьютера (не внутри SSH-сессии на плате). Этот инструмент можно использовать для отправки (push) или получения (pull) файлов и папок на плату и с платы.
Это делается путём указания локального пути на вашем компьютере (например, /User/documents/file.xx) и пути на плате (например, /home/arduino/).
Отправка файлов (Push)
Чтобы отправить файл, используйте команду ниже:
scp test-transfer.txt arduino@<boardname>.local:/home/arduino/
Эта команда перенесёт файл test-transfer.txt из каталога, в котором вы выполняете команду, на плату.
Получение файлов (Pull)
Чтобы получить файл, используйте команду ниже:
scp arduino@<boardname>.local:/home/arduino/test-transfer.txt ./
Эта команда загрузит файл в каталог, из которого вы выполняете команду. ./ можно заменить, указав путь (например, /User/documents/).
Отправка/получение папок (Push/Pull)
Чтобы отправить папку, используйте флаг -rp для рекурсивного копирования каталогов и сохранения времени/разрешений:
scp -rp "my-folder" arduino@<board-name>.local:/home/arduino/ArduinoApps/
Чтобы получить папку с платы в текущий каталог:
scp -rp arduino@<board-name>.local:/home/arduino/ArduinoApps/my-folder ./
Устранение неполадок
Если SSH-подключение не удаётся, вот несколько распространённых вещей, которые стоит проверить:
Была ли завершена первоначальная настройка? Если нет, следуйте инструкциям здесь. Первоначальная настройка включит SSH на плате, что необходимо для подключения.
Если SSH-подключение зависает, несмотря на то что первоначальная настройка была завершена, это может быть проблема локальной сети. Убедитесь, что плата подключена к той же сети, что и ваш компьютер.
Проблемы с mDNS
Некоторые сети могут блокировать использование mDNS, который позволяет нам использовать «дружественное» имя (arduino@<boardname>.local) вместо фактического IP-адреса платы. Есть два способа обойти это:
Вместо использования
arduino@<boardname>.localиспользуйте IP-адрес платы напрямую. IP-адрес можно получить, запустив плату в режиме SBC и набрав в терминале:hostname -IЭта команда покажет IP-адрес вашей платы.
(продвинутый) Отредактируйте файл
/etc/hostsна вашем локальном компьютере, выполнив:sudo nano /etc/hosts
В конце файла добавьте:
<ip-адрес-платы> <boardname>.local
Это позволит вам подключаться, используя:
ssh arduino@<boardname>.local