remote-hardware
Модуль удалённого оборудования позволяет читать, записывать и наблюдать за пинами GPIO на удалённом узле. Опции конфигурации: Включено.
:::info
Для версий прошивки > 2.5.3 этот модуль требует от вас скомпилировать собственную прошивку и удалить флаг сборки -DMESHTASTIC_EXCLUDE_REMOTEHARDWARE=1 в platformio.ini.
Кроме того, хотя настройка этого модуля может быть доступна в клиентах, установка и чтение GPIO в настоящее время возможно только с использованием CLI Meshtastic на Python
:::
Значения конфигурации удалённого оборудования
Включено
Включён ли модуль.
Доступность модуля удалённого оборудования в клиентах
<Icon icon="mdi:android" height="1.5rem" style={{ marginRight: "0.25rem" }} /> Android
</>
),
value: "android",
},
{
label: (
<>
<Icon icon="mdi:apple" height="1.5rem" style={{ marginRight: "0.25rem" }} /> Apple
</>
),
value: "apple",
},
{
label: (
<>
<Icon icon="mdi:terminal" height="1.5rem" style={{ marginRight: "0.25rem" }} /> CLI
</>
),
value: "cli",
},
{
label: (
<>
<Icon icon="mdi:internet" height="1.5rem" style={{ marginRight: "0.25rem" }} /> Web
</>
),
value: "web",
},
]}>
Android
:::info Все опции конфигурации модуля удалённого оборудования доступны для Android в приложении.
- Откройте приложение Meshtastic
- Перейдите в: Вертикальные три точки (справа вверху) > Конфигурация радио > Удалённое оборудование :::
Apple
:::info Все опции конфигурации модуля удалённого оборудования доступны в приложении для iOS, iPadOS и macOS и выше в разделе Настройки > Конфигурация модулей > Удалённое оборудование :::
CLI
:::info
Все опции конфигурации модуля удалённого оборудования доступны в python CLI.
:::
Web
Не реализовано.
Использование модуля удалённого оборудования
:::warning Доступ к GPIO принципиально опасен, поскольку неверные опции могут физически повредить или уничтожить ваше оборудование. Убедитесь, что вы полностью понимаете схему для вашего конкретного устройства, прежде чем пробовать это, поскольку мы не предоставляем гарантию. Используйте на свой страх и риск. :::
Поддерживаемые операции
- Установить любой GPIO
- Прочитать любой GPIO
- Получить уведомление через mesh, если любой GPIO изменит состояние. Обратите внимание, что он не может обнаруживать быстрые изменения, такие как нажатия кнопок. Для этого обратитесь к модулю датчика обнаружения.
Результат чтения GPIO или уведомления об изменениях GPIO также будет отправлен через MQTT (если включено) в формате JSON (если включено).
Настройка
Вы можете получить последнюю python-инструмент/библиотеку с помощью pip3 install --upgrade meshtastic на Windows/Linux/macOS. См. раздел python для получения дополнительной информации.
Чтобы предотвратить доступ от недоверенных пользователей, вы должны сначала создать канал gpio, который используется для аутентифицированного доступа к этой функции. Вам нужно установить этот канал как на локальном, так и на удалённом узле. Кроме того, вам нужно включить модуль на обоих устройствах.
Процедура с использованием инструмента командной строки python:
- Подключите локальное устройство через USB
- Включите модуль удалённого оборудования:
shell meshtastic --set remote_hardware.enabled true - Создайте канал GPIO:
shell meshtastic --ch-add gpio - Проверьте, что канал создан, и скопируйте длинный "Complete URL", который содержит все каналы на этом устройстве:
shell meshtastic --info - Подключите удалённое устройство через USB (или используйте функцию удалённого админа, чтобы достичь его через mesh)
- Включите модуль удалённого оборудования:
shell meshtastic --set remote_hardware.enabled true - Установите присоединение к каналу gpio, который вы создали:
shell meshtastic --seturl theurlyoucopiedinstep3
Теперь оба устройства должны уметь общаться через канал gpio. Отправьте текстовое сообщение с одного на другое для проверки. Также запустите --nodes, чтобы убедиться, что второй узел отображается.
Маски
Маска используется для установки GPIO для управления. Для GPIO 1 устанавливается бит 1 маски (0x2 в шестнадцатеричном формате), для GPIO 2 — бит 2 маски (0x4 в шестнадцатеричном формате) и так далее. Чтобы определить подходящую маску для пина(ов), которые вы хотите контролировать, может помочь следующая программа python (и её вывод):
>>> for i in range(1,45):
... print(f'GPIO:{i} mask:{hex(2**i)}')
...
GPIO:1 mask:0x2
GPIO:2 mask:0x4
GPIO:3 mask:0x8
GPIO:4 mask:0x10
GPIO:5 mask:0x20
GPIO:6 mask:0x40
GPIO:7 mask:0x80
GPIO:8 mask:0x100
GPIO:9 mask:0x200
GPIO:10 mask:0x400
GPIO:11 mask:0x800
GPIO:12 mask:0x1000
GPIO:13 mask:0x2000
GPIO:14 mask:0x4000
GPIO:15 mask:0x8000
GPIO:16 mask:0x10000
GPIO:17 mask:0x20000
GPIO:18 mask:0x40000
GPIO:19 mask:0x80000
GPIO:20 mask:0x100000
GPIO:21 mask:0x200000
GPIO:22 mask:0x400000
GPIO:23 mask:0x800000
GPIO:24 mask:0x1000000
GPIO:25 mask:0x2000000
GPIO:26 mask:0x4000000
GPIO:27 mask:0x8000000
GPIO:28 mask:0x10000000
GPIO:29 mask:0x20000000
GPIO:30 mask:0x40000000
GPIO:31 mask:0x80000000
GPIO:32 mask:0x100000000
GPIO:33 mask:0x200000000
GPIO:34 mask:0x400000000
GPIO:35 mask:0x800000000
GPIO:36 mask:0x1000000000
GPIO:37 mask:0x2000000000
GPIO:38 mask:0x4000000000
GPIO:39 mask:0x8000000000
GPIO:40 mask:0x10000000000
GPIO:41 mask:0x20000000000
GPIO:42 mask:0x40000000000
GPIO:43 mask:0x80000000000
GPIO:44 mask:0x100000000000
Использование GPIO из Python CLI
:::info
Вы также можете управлять или наблюдать за GPIO вашего подключённого по USB узла, установив --dest в ID локального узла. В этом случае канал gpio не нужен.
:::
Запись GPIO
```shell title="Example: turning 'on' GPIO4" meshtastic --port /dev/ttyUSB0 --gpio-wrb 4 1 --dest 28979058
Connected to radio
Writing GPIO mask 0x10 with value 0x10 to !28979058
### Чтение GPIO
```shell title="Example: read GPIO4"
meshtastic --port /dev/ttyUSB0 --gpio-rd 0x10 --dest 28979058
# Connected to radio
# Reading GPIO mask 0x10 from !28979058
# GPIO read response gpio_value=16
:::note Если маска и gpio_value совпадают, то значение "включено". Если gpio_value равно 0, то значение "выключено". :::
Наблюдение за изменениями GPIO
```shell title="Example: watching GPIO4 for changes" meshtastic --port /dev/ttyUSB0 --gpio-watch 0x10 --dest 28979058
Connected to radio
Watching GPIO mask 0x10 from !28979058
Received RemoteHardware typ=GPIOS_CHANGED, gpio_value=16
Received RemoteHardware typ=GPIOS_CHANGED, gpio_value=0
Received RemoteHardware typ=GPIOS_CHANGED, gpio_value=16
< press ctrl-c to exit >
```
Тестирование операций GPIO
Вы можете программно выполнять операции из вашего собственного кода на python, используя класс RemoteHardwareClient из Meshtastic. См. документацию Python API для получения дополнительной информации.
Вы можете добавить простой светодиод и резистор, чтобы проверить, что операции GPIO работают как ожидается. Используйте это руководство в качестве примера.
Требования
- (x2) Устройства Meshtastic (одно устройство может быть на локальном компьютере, а другое просто должно быть под питанием — именно к нему подключается светодиод)
- (x2) провода (чёрный и жёлтый; они могут быть любого цвета, но обычно чёрный используется для земли)
- (x1) светодиод
- (x1) резистор 220Ω (немного опционально, но рекомендуется)
- (x1) макетная плата (опционально)
Подготовка
- Отключите удалённое устройство от питания (батарея/USB)
- Подключите резистор к более длинному (положительному) выводу светодиода, а жёлтый провод — к другому концу резистора
- Подключите другой конец жёлтого провода к пину GPIO, который не вызовет проблем (например: для TLoraV1 можно использовать GPIO21)
- Подключите чёрный "земляной" провод от пина земли на устройстве (например: для TLoraV1 это конечный пин рядом с кнопкой RST) к более короткому (отрицательному) выводу светодиода
- Подайте питание на устройство
Проверка
По умолчанию пин может быть "выключен" или "включён". (Скорее всего "выключен".) См. шаги ниже для запуска команд. В примере с GPIO21 маска будет 0x200000.
