Можно расширять, через WBIO-DI-DR-16 например.
Про двойные и долгие нажатия: можно поэкспериментировать с правилами. Сделайте правило с whenChanged на канал кнопки, добавьте отладочный вывод на срабатывание (log). Он должен выводиться на каждое нажатие кнопки, хоть и с небольшой (<~100ms) задержкой. Дальше можете в правиле завести глобальную переменную-счётчик и сбрасывать её значение по таймеру.
Как-то так (код не проверял):
(function() { //don't touch this line
var button_counter = 0;
var counter_clear_timer_id = null;
defineRule( "on_button_press", {
whenChanged: "wb-gpio/A1_IN",
then: function (newValue, devName, cellName) {
// если поймали нажатие, увеличиваем счётчик
if (newValue) {
button_counter += 1;
}
// счётчик равен двум, значит было двойное нажатие
if (button_counter == 2) {
log("double press!");
}
// после каждого нажатия сбрасываем таймер (удяляем старый)
if (counter_clear_timer_id) {
clearTimeout(counter_clear_timer_id);
}
// и взводим новый таймер, который сбросит счётчик через 2 секунды
counter_clear_timer_id = setTimeout(function() {
button_counter = 0;
}, 2000);
}
});
})();