Модуль Remote Hardware позволяет удаленно считывать состояние, записывать значения и отслеживать изменения на пинах GPIO узла в сети Meshtastic.
ℹ️ Важная информация по прошивке
Для версий прошивки выше 2.5.3 этот модуль по умолчанию отключен для экономии памяти. Чтобы его использовать, вам потребуется:
- Самостоятельно скомпилировать прошивку.
- Удалить флаг сборки
-DMESHTASTIC_EXCLUDE_REMOTEHARDWARE=1в файлеplatformio.ini.
Обратите внимание: Настройка модуля может быть доступна в графических клиентах, но управление GPIO на данный момент возможно только через Meshtastic Python CLI.
⚠️ Предупреждение о безопасности
Доступ к GPIO фундаментально опасен. Неправильные параметры могут физически повредить или уничтожить ваше устройство.
- Перед использованием убедитесь, что вы полностью понимаете схему вашего конкретного устройства.
- Гарантия на такие случаи не распространяется.
- Используйте на свой страх и риск.
Поддерживаемые операции
- Запись: Установка любого значения на GPIO.
- Чтение: Получение текущего состояния любого GPIO.
- Мониторинг: Получение уведомления по сети, если состояние GPIO изменилось.
- Примечание: Модуль не фиксирует сверхбыстрые изменения (например, нажатия кнопок). Для таких задач используйте модуль Detection Sensor.
- Интеграция с MQTT: Результаты чтения или уведомления об изменениях также отправляются через MQTT в формате JSON (если соответствующие функции включены).
Настройка (Setup)
Для работы вам понадобится актуальная библиотека Python:
pip3 install --upgrade meshtastic
Создание защищенного канала
Чтобы посторонние не могли управлять вашим оборудованием, необходимо создать специальный канал gpio для аутентификации. Этот канал должен быть установлен на обоих узлах (локальном и удаленном).
Пошаговая процедура через Python CLI:
- Подключите локальное устройство через USB.
- Включите модуль:
meshtastic --set remote_hardware.enabled true - Создайте GPIO-канал:
meshtastic --ch-add gpio - Получите ссылку на настройки:Введите
meshtastic --info, найдите и скопируйте длинный «Complete URL», содержащий все каналы устройства. - Подключите удаленное устройство (через USB или используя функцию Remote Admin).
- Включите модуль на удаленном узле:
meshtastic --set remote_hardware.enabled true - Примените настройки каналов (из шага 4):
meshtastic --seturl <ваша_ссылка_из_шага_4>
Теперь устройства могут взаимодействовать через канал gpio. Проверьте связь, отправив текстовое сообщение или выполнив команду --nodes.
Маски GPIO
Маска используется для указания того, какими пинами нужно управлять.
- Для GPIO 1 устанавливается 1-й бит маски (
0x2в шестнадцатеричном виде). - Для GPIO 2 — 2-й бит (
0x4). - И так далее.
Таблица масок (примеры)
| GPIO | Маска (Hex) | GPIO | Маска (Hex) |
| 1 | 0x2 | 11 | 0x800 |
| 2 | 0x4 | 12 | 0x1000 |
| 3 | 0x8 | 13 | 0x2000 |
| 4 | 0x10 | 21 | 0x200000 |
| 5 | 0x20 | 32 | 0x100000000 |
Использование через Python CLI
Подсказка: Вы можете управлять GPIO даже на локальном устройстве (подключенном по USB), указав его ID в параметре
--dest. В этом случае каналgpioне требуется.
1. Запись в GPIO (Запись значения)
Пример: включение GPIO 4 на узле с ID 28979058.
Bash
meshtastic --gpio-wrb 4 1 --dest 28979058
Система ответит: Writing GPIO mask 0x10 with value 0x10…
2. Чтение состояния GPIO
Пример: прочитать состояние GPIO 4 (маска 0x10).
Bash
meshtastic --gpio-rd 0x10 --dest 28979058
Если gpio_value совпадает с маской — пин включен (ON). Если gpio_value=0 — выключен (OFF).
3. Отслеживание изменений (Watch)
Пример: наблюдение за изменениями на GPIO 4.
Bash
meshtastic --gpio-watch 0x10 --dest 28979058
Программа будет выводить GPIOS_CHANGED при каждом изменении состояния, пока вы не нажмете Ctrl+C.
Тестирование (Практический пример)
Чтобы убедиться, что всё работает, можно собрать простую схему с LED-светодиодом.
Что понадобится:
- 2 устройства Meshtastic.
- Светодиод (LED) и резистор 220 Ом.
- Провода и макетная плата (опционально).
Подключение (на удаленном устройстве):
- Отключите питание устройства.
- Соедините резистор с длинной (положительной) ножкой светодиода.
- Подключите второй конец резистора к выбранному GPIO (например, GPIO 21 для TLoraV1).
- Соедините короткую (отрицательную) ножку светодиода с пином GND (земля) на устройстве.
- Включите питание.
Проверка:
Используйте команду записи для GPIO 21 (маска 0x200000), чтобы зажечь или погасить светодиод.