Продолжаю свои опыты по использованию GPIO RBM33G.
Вчера подключал пульт ДУ с приемником радиосигнала к линиям GPIO, настроенным на input.
Пульт для простоты использовал самый дешёвый и довольно распространённый - вот такой:
https://portal-pk.ru/news/276-radiopult ... duino.html
Я уже ранее использовал его в одном проекте с Laurent-5G от KernelChip вот тут
https://habr.com/ru/articles/531690/
Тут всё просто. Подключаем "пины" приемника +5В и GND к соответствующим штекерам разъема GPIO RBM33G. Подключаем пины управления к программируемым пинам GPIO RBM33G. Я использовал Pin3 и Pin5 и только первые два канала радиопульта.
Теперь настраиваем Pin3 и Pin5 RBM33G на вход:
Код: Выделить всё
/iot gpio digital set pin3 direction=input
/iot gpio digital set pin5 direction=input
Теперь при зажатии соответствующей кнопки пульта на соответствующей линии появляется логическая единица. Это легко проверить:
Чтобы при нажатии на кнопку пульта выполнялось какое-то действие пишем простенький скрипт, который помещаем в Планировщик с минимальным интервалом исполнения (к сожалению 1 секунда):
Код: Выделить всё
:do {
:if ([:tonum [/iot gpio digital get pin3 input]]=1) do={
:log info ""
:log error "Кнопка A"
:log info ""
}
} on-error={}
:do {
:if ([:tonum [/iot gpio digital get pin5 input]]=1) do={
:log info ""
:log warning "Кнопка B"
:log info ""
}
} on-error={}
Единственный минус - чтобы скрипт "засёк" нажатие на кнопку пульта её придется немного подержать в нажатом состоянии. Но есть другие виды программируемых пультов, в которых можно настраивать алгоритм выдачи логической единицы при нажатии на кнопку.
Или можно использовать другой подход - присвоить конкретной линии GPIO свой скрипт командой:
/iot gpio digital set pin12 script="Name1"
Тогда при "переходе" состояния линии из 0 в 1 и из 1 в 0 будет выполняться данный скрипт. Тут нужно учесть, что скрипт будет выполняться именно всякий раз при переходе "туда" или "обратно" (хотя это зависит от варианта настройки приемника, есть и другие режимы). То есть в случае с пультом при нажатии и отпускании кнопки. Если нужно регистрировать только нажатие это нужно учесть в скрипте, написав его так, чтобы он выполнял действие при нажатии и ничего не делал при отпускании. Но этот подход лишен недостатка необходимости "подержать" кнопку, так как переход состояния линии отслеживает сам Микрот на "аппаратном" уровне.
Теперь могу, например, переключать свои ранее настроенные реле блока MP701, подключенного также к GPIO RBM33G с пульта ДУ. Используем ранее написанную функцию управления реле блока MP701, вызовы которой вставляем в выше написанный скрипт Шедуллера:
Код: Выделить всё
:global iotReleMP701
:do {
:if ([:tonum [/iot gpio digital get pin3 input]]=1) do={
:log info ""
:log warning "Кнопка A"
:local ReleStat1 ([$iotReleMP701 status 1]->"output")
:if ([:tonum $ReleStat1]=0) do={[$iotReleMP701 on 1]; :log error "Включение реле 1"} else={[$iotReleMP701 off 1]; log warning "Выключение реле 1"}
:log info ""
}
} on-error={}
:do {
:if ([:tonum [/iot gpio digital get pin5 input]]=1) do={
:log info ""
:log warning "Кнопка B"
:local ReleStat2 ([$iotReleMP701 status 2]->"output")
:if ([:tonum $ReleStat2]=0) do={[$iotReleMP701 on 2]; :log error "Включение реле 2"} else={[$iotReleMP701 off 2]; log warning "Выключение реле 2"}
:log info ""
}
} on-error={}
В данном скрипте используется проверка: если реле выключено, оно включается кнопкой и наоборот.
Вставил плату приёмника радиосигнала пульта управления прямо внутрь корпуса RBM33G. Сигнал с 10 метров берет без проблем. Внешний вид пульта и дальность конечно оставляют желать лучшего. Но тут уж ничего не попишешь.
Попробую найти другой пульт с приемником, поэстетичнее и помощнее.