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 в приложении.

  1. Откройте приложение Meshtastic
  2. Перейдите в: Вертикальные три точки (справа вверху) > Конфигурация радио > Удалённое оборудование :::

Apple

:::info Все опции конфигурации модуля удалённого оборудования доступны в приложении для iOS, iPadOS и macOS и выше в разделе Настройки > Конфигурация модулей > Удалённое оборудование :::

CLI

:::info

Все опции конфигурации модуля удалённого оборудования доступны в python CLI.

:::

Web

Не реализовано.

Использование модуля удалённого оборудования

:::warning Доступ к GPIO принципиально опасен, поскольку неверные опции могут физически повредить или уничтожить ваше оборудование. Убедитесь, что вы полностью понимаете схему для вашего конкретного устройства, прежде чем пробовать это, поскольку мы не предоставляем гарантию. Используйте на свой страх и риск. :::

Поддерживаемые операции

Результат чтения GPIO или уведомления об изменениях GPIO также будет отправлен через MQTT (если включено) в формате JSON (если включено).

Настройка

Вы можете получить последнюю python-инструмент/библиотеку с помощью pip3 install --upgrade meshtastic на Windows/Linux/macOS. См. раздел python для получения дополнительной информации.

Чтобы предотвратить доступ от недоверенных пользователей, вы должны сначала создать канал gpio, который используется для аутентифицированного доступа к этой функции. Вам нужно установить этот канал как на локальном, так и на удалённом узле. Кроме того, вам нужно включить модуль на обоих устройствах.

Процедура с использованием инструмента командной строки python:

  1. Подключите локальное устройство через USB
  2. Включите модуль удалённого оборудования: shell meshtastic --set remote_hardware.enabled true
  3. Создайте канал GPIO: shell meshtastic --ch-add gpio
  4. Проверьте, что канал создан, и скопируйте длинный "Complete URL", который содержит все каналы на этом устройстве: shell meshtastic --info
  5. Подключите удалённое устройство через USB (или используйте функцию удалённого админа, чтобы достичь его через mesh)
  6. Включите модуль удалённого оборудования: shell meshtastic --set remote_hardware.enabled true
  7. Установите присоединение к каналу 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 работают как ожидается. Используйте это руководство в качестве примера.

Требования

Подготовка

  1. Отключите удалённое устройство от питания (батарея/USB)
  2. Подключите резистор к более длинному (положительному) выводу светодиода, а жёлтый провод — к другому концу резистора
  3. Подключите другой конец жёлтого провода к пину GPIO, который не вызовет проблем (например: для TLoraV1 можно использовать GPIO21)
  4. Подключите чёрный "земляной" провод от пина земли на устройстве (например: для TLoraV1 это конечный пин рядом с кнопкой RST) к более короткому (отрицательному) выводу светодиода
  5. Подайте питание на устройство

Проверка

По умолчанию пин может быть "выключен" или "включён". (Скорее всего "выключен".) См. шаги ниже для запуска команд. В примере с GPIO21 маска будет 0x200000.

T-Lora v1 with LED on GPIO 21