В роутерах RTU предусмотрены 4 универсальных порта ввода-вывода GPIO (маркировка I1, I2, I3 и I4).


Выводы являются независимыми, могут быть программно сконфигурированы в Операционной системе и предполагают три режима использования:


1. Подключение резистивных датчиков.


2. Управление нагрузкой. В данном режиме выводы I1 - I4 можно объединять для увеличения нагрузочной способности выхода.


3. Измерение напряжения (режим работы по умолчанию).


PULLUP - "Подтягивающий" резистор к питанию.

PULLDOWN - "Подтягивающий" резистор к заземлению.

ADC - АЦП.


1. Конфигурирование GPIO через WEB


Для настройки GPIO через Web-интерфейс, необходимо перейти во вкладку Службы ---> I/O Lines



АЦП - измерение напряжения.
Сухой контакт - При включении аналоговый вход роутера с помощью резистора подтягивается к напряжению 5В. Подтяжка необходима для правильного функционирования аналогового входа в режиме сухой контакт.
Открытый коллектор - устанавливается активный уровень на выходе открытый коллектор. 


Чтобы измененные через WEB-интерфейс настройки сохранились при следующем включении роутера, поставьте флажок в столбце "Сохранять настройки при загрузке" 


2. Конфигурирование GPIO через Консоль


Каждый GPIO имеет определенный индекс и направление по умолчанию, в операционной системе, приведем таблицу соответствий:


# - инвертированный сигнал.


Все GPIO расположены по пути /sys/class/gpio/


Внимание: 

  • Если мы работаем с PULLDOWN, PULLUP# должен быть выключен!
  • Если мы работаем с PULLUP#, PULLDOWN должен быть выключен!


Для примера включим на входе I1 режим "Измерения напряжения":

echo 66 > /sys/class/gpio/export

echo in > /sys/class/gpio/gpio66/direction

echo 65 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio65/direction

echo 0 > /sys/class/gpio/gpio65/value


Пример измерения напряжения на входе I1:

cat /sys/bus/iio/devices/iio\:device0/in_voltage6_raw

in_voltage6_raw мы определили командой ls -la /dev/io*


Получаем N (для примера - 1493)


Формула для расчета:


* 8,219 = XмВ

1493 * 8,219 = 12 270мВ


Теперь включим на I1 режим "Подключения резистивных датчиков":

echo 66 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio66/direction

echo 0 > /sys/class/gpio/gpio66/value

echo 65 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio65/direction

echo 0 > /sys/class/gpio/gpio65/value


Формула определения зависимости сопротивления резистивного датчика от цифровых показаний adc_raw:

R = 0.543 * adc_raw


И третий режим "Управление нагрузкой":

echo 66 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio66/direction

echo 1 > /sys/class/gpio/gpio66/value

echo 65 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio65/direction

echo 1 > /sys/class/gpio/gpio65/value


Тогда для управления током будем подавать команду:

echo 1 > /sys/class/gpio/gpio65/value - рабочий ток идет через нагрузку

echo 0 > /sys/class/gpio/gpio65/value - рабочий ток НЕ идет через нагрузку


Для того, чтобы постоянно не подавать команды инициализации GPIO, их можно внести в файл /etc/rc.local

Тогда после перезагрузки будет включаться необходимый режим автоматически.