Содержание

@amperka/gpio-expander

Библиотека для работы с I2C-расширителем портов даёт доступ к привычным Arduino-подобным функциям управления пинами: цифровые чтение и запись, а также АЦП и ШИМ.

// настраиваем I2C1 для работы модуля
I2C1.setup({sda: SDA, scl: SCL, bitrate: 100000});
 
// подключаем модуль к I2C1
var ext = require('@amperka/gpio-expander').connect({i2c: I2C1, address: 42});
 
// устанавливаем пин 2 на модуле в режим выхода
ext.pinMode(2, 'output');
var pinState = 1;
 
// раз в секунду меняем выходной сигнал с 1 на ноль и наоборот
setInterval(function() {
  ext.digitalWrite(2, pinState);
  pinState = !pinState;
}, 1000);

Функции модуля

connect(opts)

Создаёт новый объект Expander. Объект opts должен содержать поля:

Expander

Класс для работы с расширителем. Для создания экземпляра используйте функцию connect.

Expander.reset()

Программно сбрасывает модуль, перезагружает его.

Expander.digitalWrite(pin, value)

Устанавливает на пине pin логическую единицу (value = 1) или ноль (value = 0).

var pinState = 1;
ext.digitalWrite(2, pinState);

Expander.digitalRead(pin)

Считывает цифровое значения пина pin.

pinState = ext.digitalRead(3);

Expander.pinMode(pin, mode)

Устанавливает режим работы пина pin. Возможны 4 значения:

ext.pinMode(4, 'input_pulldown');

Expander.analogWrite(pin, value)

Устанавливает ШИМ на пине pin с коэффициентом заполнения value в диапазоне 0.0–1.0. Частота ШИМ-сигнала задаётся функцией pwmFreq.

ext.analogWrite(4, 0.7);

Expander.servoWrite(pin, angle)

Устанавливает угол качалки серво на пине pin на угол angle. Для работы с серво предварительно установите частоту ШИМ-сигнала равной 50 Гц.

ext.pwmFreq(50);
ext.servoWrite(4, 140);
ext.servoWrite(4, 130);
ext.servoWrite(4, 110);

Expander.pwmFreq(freq)

Задаёт частоту ШИМ-сигнала в герцах. Допустимые значения freq от 15–3000 Гц.

Expander.analogRead(pin)

Считывает аналоговое напряжение на пине pin. Диапазон возвращаемых значений: 0.0–1.0.

Expander.changeAddr(addr)

Меняет адрес модуля на addr. Адрес хранится до первого сброса питания или вызова функции reset. Чтобы сохранить новый адрес в постоянной памяти, используйте функцию saveAddr.

Expander.saveAddr()

Сохраняет в памяти модуля новый адрес I2C.

Пример работы с двумя модулями одновременно

Поменяйте адрес на одном модуле.

I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
var ext = require('@amperka/gpio-expander').connect({i2c: I2C1, address: 42});
 
ext.changeAddr(43);
ext.saveAddr();

Подключите второй модуль.

I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
 
var expanders = require('@amperka/gpio-expander');
var extA = expanders.connect({i2c: I2C1, address: 42}); // адрес модуля extA — 42
var extB = expanders.connect({i2c: I2C1, address: 43}); // адрес модуля extB — 43
 
extA.pinMode(5, 'output');
extB.pinMode(6, 'input');
var pinState = 1;
 
setInterval(function() {
  extA.digitalWrite(5, pinState);
  pinState = !pinState;
 
  var value = extA.analogRead(6);
  print(value);  
}, 1000);