Как стать автором
Обновить
2096.09

Lavritech V7.1 Lite: программирование Wiren Board блоков на DIN-рейку

Время на прочтение8 мин
Количество просмотров3.8K


В прошлой статье мы рассмотрели программирование микроконтроллера ESP32, распаянных на материнской плате Lavritech V7.1 Lite компонентов (Ethernet интерфейса, LoRa модуля и т. д.) и внутренних подключаемых модулей, в этой статье мы разберём программирование внешних Wiren Board блоков на DIN-рейку.

В ассортименте Wiren Board имеется огромное количество таких блоков на все случае жизни и изначально они рассчитаны на работу с «родными» Wiren Board контроллерами, хотя ничто не мешает использовать их и в связке с каким-то другим контроллером.

До появления Lavritech V7.1 Lite не существовало сторонних решений прямо рассчитанных на подключение и использование Wiren Board блоков, но теперь мы можем пользоваться всем этим богатством в своих проектах на ESP32.

Осталось только разобраться как программировать Wiren Board блоки отдельно от Wiren Board контроллеров…


Пещера Алладина


Wiren Board разработала для своей экосистемы множество дополнительных блоков на DIN-рейку. Фактически, там присутствует полный ассортимент блоков, которые могут понадобиться домашнему или профессиональному автоматизатору для решения своих задач. Блоки эти хорошего качества, выпускаются давно и имеют отработанную и проверенную временем и множеством инсталляций схемотехнику.

Другими словами, на рынке есть развитая экосистема строительных блоков для автоматизации, которую мы можем использовать в своих проектах со своими (не Wiren Board) контроллерами. До последнего времени не существовало сторонних решений, прямо рассчитанных на подключение и использование Wiren Board блоков, и требовалось создавать какие-то переходники для подключения таких блоков к сторонним контроллерам.

Теперь появился Lavritech V7.1 Lite, который штатным образом рассчитан на подключение и работу с Wiren Board блоками (и внутренними модулями) — мы можем просто выбирать нужные нам блоки из каталога Wiren Board и использовать их в своих проектах.

На мой взгляд это просто здорово — набрал нужную конфигурацию, залил прошивку и ввёл контроллер в строй.



Из всего богатства внешних подключаемых Wiren Board блоков на DIN-рейку в моём распоряжении оказались три популярных модели, это:

WIRENBOARD WBIO-DI-WD-14 (14 универсальных дискретных входов)
WIRENBOARD WBIO-AI-DV-12/4-20mA (12 аналоговых входов 4-20 мА)
WIRENBOARD WBIO-DO-R10A-8 (8 релейных выходов 7 A)

Далее мы и разберём их устройство, назначение и примеры их программирования. Поняв основные принципы работы с этими блоками, вы сможете выбирать и использовать в своих проектах различные модели таких блоков из обширного каталога Wiren Board (а также, возможно, и других производителей).

Общие принципы подключения


Для начала давайте разберём общие принципы подключения Wiren Board блоков к контроллерам, в нашем случае к контроллеру Lavritech V7.1 Lite.

Как вы помните из предыдущих статей, эти блоки стыкуются к контроллеру и между собой при помощи 10-контактного разъёма. Это стандартный Wiren Board разъём и все такие блоки совместимы с ним, то есть их можно не боясь (что-то «замкнуть») стыковать друг с другом на DIN-рейке.

На фото ниже вы можете видеть межблочный Wiren Board разъём на правой боковой стенке контроллера Lavritech V7.1 Lite.



На материнской плате этот разъём выглядит следующим образом:



Распиновка разъёма предельно простая, он содержит линии земли и питания (3,3 и 5 В), линии I2C интерфейса и сигнала прерывания.

Отдельно выведены 4 адресные линии. Эти пины задают адрес конкретного блока в цепочке подключённых модулей на DIN-рейке. Адрес задаётся тем или иным сочетанием потенциалов («0» или «1») на адресных пинах.



Сама система адресации компанией Wiren Board не раскрывается и о ней мы можем судить только косвенно — по результатам собственных экспериментов и слухам от «бывалых» пользователей экосистемы Wiren Board.

Насколько удалось установить, адресные линии внутри каждого блока «закручиваются» (меняют порядок соединений во входном и выходном разъёмах), тем самым обеспечивая автоматическую адресацию (идентификацию) до 4-х блоков каждого типа на линии. Отсюда ограничения в официальной документации на подключение до 4-х блоков одного типа в цепочке (и прочие ограничения).

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

Примечание. (Забавным) следствием подобной системы является то, что один и тот же блок Wiren Board будет иметь разные I2C адреса в зависимости от его физического расположения в цепочке блоков на DIN-рейке.

Ниже представлен наглядный пример подключения блока Wiren Board WBIO-DO-R10A-8 к материнской плате Lavritech V7.1 Lite.



С основными принципами подключения Wiren Board блоков к контроллерам всё понятно, далее переходим к разбору работы с конкретными моделями блоков.

Распиновка


Приведу распиновку Lavritech V7.1 Lite. В контексте подключения внешних блоков на DIN-рейку, из всего этого разнообразия нас интересуют только пины I2C интерфейса SCL (32) и SDA (33).



Блок Wiren Board WBIO-DI-WD-14


Блок Wiren Board WBIO-DI-WD-14 — это модуль на DIN-рейку с 14-ю универсальными дискретными входами, шириной 2U. Может использоваться для получения данных от различных датчиков, контактов и т. п.



На крышке корпуса приведены типовые варианты использования входов, а на сайте производителя есть документация, подробно описывающая характеристики этого блока.

Цитата. Предназначен для подключения импульсных счетчиков, кнопок, датчиков с выходом «сухой контакт», ввода дискретных сигналов, контроля целостности цепи. Содержит 14 универсальных входов типа «сухой контакт» и определения наличия низкого напряжения с групповой гальванической развязкой. Режим работы зависит от выбранной схемы подключения.



Поскольку с техникой мы на «ты», то разбираем блок, добираемся до печатной платы и выясняем, что WBIO-DI-WD-14 построен на популярной микросхеме I2C расширителя портов MCP23017, что делает всё остальное делом техники — найти соответствующую Arduino библиотеку и подключить этот блок к Lavritech V7.1 Lite не составляет никаких проблем.

Нам также понадобится вспомогательная библиотека Adafruit_BusIO.



Подключаем кнопку к 1-у входу (и контакту iGND), далее в скетче определяем пины I2C интерфейса платы Lavritech V7.1 Lite и задаём адрес I2C блока.

I2C адрес блока (методом подбора) определяем из диапазона 0x20-0x27 или запускаем I2C сканер и получаем нужный нам текущий адрес WBIO-DI-WD-14 на шине. Те же же самые манипуляции с адресом можно реализовать в готовой прошивке — можно либо дать возможность пользователю задавать конкретный адрес блока или в автоматическом режиме сканировать I2C шину и программно определять подключённые блоки.

Тестовый скетч:

/*
  Wiren Board WBIO-DI-WD-14 test (Lavritech V7.1 Lite)
  I2C MCP23017
*/

#include <Adafruit_MCP23X17.h>

#define I2C_SDA 33
#define I2C_SCL 32

#define I2C_ADR 0x27

#define BUTTON_PIN 0  // button is attached to MCP23017 pin

Adafruit_MCP23X17 mcp;

void setup() {
  Serial.begin(115200);
  Serial.println(F("MCP23017 DI test starting..."));

  Wire.begin(I2C_SDA, I2C_SCL);
  
  if (!mcp.begin_I2C(I2C_ADR)) {
    Serial.println(F("Error"));
    while(true);
  }

  mcp.pinMode(BUTTON_PIN, INPUT);
}

void loop() {
  Serial.print(F("Button ")); Serial.print(BUTTON_PIN);
  if (mcp.digitalRead(BUTTON_PIN)) {
    Serial.println(" Pressed");
  } else {
    Serial.println(" not Pressed");
  }
  delay(1000);
}

Проверяем работу скетча и убеждаемся, что всё работает так, как надо. Как я уже заметил, всё остальное — дело техники. В готовой прошивке можно реализовать любую логику работы с 14-ю входными сигналами блока Wiren Board WBIO-DI-WD-14.



Теперь переходим к работе с аналоговыми входами.

Блок Wiren Board WBIO-AI-DV-12/4-20mA


Блок Wiren Board WBIO-AI-DV-12/4-20mA — это модуль на DIN-рейку с 12-ю аналоговыми входами (4-20 мА), шириной 3U.

Назначение блока очевидно из его названия, цитата с официального сайта:

12 однополярных входов 4-20 мА, групповая гальваническая развязка. Предназначен для измерения аналоговых сигналов 4-20 мА. Типичное применение модуля — получение данных с датчиков с токовым выходом: термометры, датчики давления и т. д.



Схема подключения токового датчика к WBIO-AI-DV-12/4-20mA с сайта производителя:



Отжимаем четыре защёлки (кстати, разбирается всё достаточно легко), снимаем нижнюю крышку блока и видим нижнюю сторону печатной платы WBIO-AI-DV-12/4-20mA.



Вынимаем плату из корпуса, достаём лупу и находим 3 микросхемы ADS1115, которые и обеспечивают работу 12-и аналоговых входов (3 микросхемы по 4 линии на каждую).

ADS1115 — это многоканальный 16-битный АЦП с I2C интерфейсом. Поскольку на плате находится сразу 3 таких чипа, то и на I2C шине они видятся как 3 устройства с разными I2C адресами. С этим связаны и специфические ограничения, о которых говорится на официальном сайте, цитата:

В отличие от других устройств, WBIO-AI-DV-12/4-20 мА можно подключать только один, но зато можно подключать девятым модулем в линейке боковых модулей, в дополнение к обычным восьми. При этом, для правильной адресации, не стоит ставить его между модулями одного типа, т. е. он должен занимать первую, пятую или девятую позицию.

(«Особенно мне понравились первая, пятая и девятая революции...» © классика)



Теперь, вооружившись полученными (сакральными) знаниями мы можем создать скетч и интегрировать блок WBIO-AI-DV-12/4-20 мА в свою систему (прошивку). Нужно только не забыть подключить нужную библиотеку Adafruit_ADS1X15.

Задаём I2C адрес (0x48) первой микросхемы ADS1115, подключаем тестовый датчик к первому аналоговому входу блока WBIO-AI-DV-12/4-20 мА и запускаем скетч в работу.

/*
  Wiren Board WBIO-AI-DV-12/4-20mA test (Lavritech V7.1 Lite)
  I2C ADS1115
*/

#include <Adafruit_ADS1X15.h>

#define I2C_SDA 33
#define I2C_SCL 32

#define I2C_ADR0 0x48
#define I2C_ADR1 0x49
#define I2C_ADR2 0x4A

Adafruit_ADS1115 ads;  // 16-bit version

void setup() {
  Serial.begin(115200);
  Serial.println(F("ADS1115 test starting..."));

  Wire.begin(I2C_SDA, I2C_SCL);

  if (!ads.begin(I2C_ADR0)) {
    Serial.println(F("Error"));
    while(true);
  }
}

void loop() {
  int16_t adc0, adc1, adc2, adc3;
  float volts0, volts1, volts2, volts3;

  adc0 = ads.readADC_SingleEnded(0);
  adc1 = ads.readADC_SingleEnded(1);
  adc2 = ads.readADC_SingleEnded(2);
  adc3 = ads.readADC_SingleEnded(3);

  volts0 = ads.computeVolts(adc0);
  volts1 = ads.computeVolts(adc1);
  volts2 = ads.computeVolts(adc2);
  volts3 = ads.computeVolts(adc3);

  Serial.print("AIN0: "); Serial.print(adc0); Serial.print(" ("); Serial.print(volts0); Serial.println("V)");
  Serial.print("AIN1: "); Serial.print(adc1); Serial.print(" ("); Serial.print(volts1); Serial.println("V)");
  Serial.print("AIN2: "); Serial.print(adc2); Serial.print(" ("); Serial.print(volts2); Serial.println("V)");
  Serial.print("AIN3: "); Serial.print(adc3); Serial.print(" ("); Serial.print(volts3); Serial.println("V)");
  Serial.println();
  delay(5000);
}

И снова всё работает как надо и так, как и ожидалось — блок Wiren Board WBIO-AI-DV-12/4-20 мА полностью в нашей власти и мы можем делать с ним всё, что захотим в своей системе.



Ну и для полноты картины далее попробуем подключить к нашей системе не только входы, но и выходные реле.

Блок Wiren Board WBIO-DO-R10A-8


Блок Wiren Board WBIO-DO-R10A-8 — это модуль на DIN-рейку с 8-ю релейными выходами (7 A), шириной 3U. Самоидентификация модуля с сайта производителя:

Предназначен для прямого управления маломощной нагрузкой (до 7А) без больших пусковых токов: сигнальные лампы, промежуточные контакторы. Не подходит для коммутации блоков питания и светодиодных ламп.

Ну что ж, как говорится «скромно, но со вкусом». Без лишних церемоний снимаем верхнюю крышку и вскрываем сам блок WBIO-DO-R10A-8.



Внутри всё ожидаемо, немного покопавшись в начинке, выясняем, что общением с контроллером занимается микросхема I2C расширителя портов MCP23008, а в управлении реле ей помогает матрица транзисторов Дарлингтона ULN2803.



Поскольку MCP23008 — это родная сестра ранее рассмотренной микросхемы MCP23017, то и для работы с ней подходит та же библиотека Adafruit-MCP23017.

Создаём скетч и щёлкаем реле как хотим, в своё удовольствие.

/*
  Wiren Board WBIO-DO-R10A-8 test (Lavritech V7.1 Lite)
  I2C MCP23008
*/

#include <Adafruit_MCP23X08.h>

#define I2C_SDA 33
#define I2C_SCL 32

#define I2C_ADR 0x20

#define RELAY_PIN 0 // Relay attached to MCP23008 pin

#define PERIOD 5000

Adafruit_MCP23X08 mcp;

void setup() {
  Serial.begin(115200);
  Serial.println(F("MCP23008 DO test starting..."));

  Wire.begin(I2C_SDA, I2C_SCL);
  
  if (!mcp.begin_I2C(I2C_ADR)) {
    Serial.println(F("Error"));
    while(true);
  }

  mcp.pinMode(RELAY_PIN, OUTPUT);
}

void loop() {
  Serial.println(F("ON"));
  mcp.digitalWrite(RELAY_PIN, HIGH);
  delay(PERIOD);
  
  Serial.println(F("OFF"));
  mcp.digitalWrite(RELAY_PIN, LOW);
  delay(PERIOD);
}

Дублируем включение и выключение реле выводом соответствующих строк в Serial.



На этом заканчиваем разбор подключения типовых блоков Wiren Board к контроллеру Lavritech V7.1 Lite, из приведённых примеров вам должны быть понятны принципы интеграции Wiren Board блоков в свои проекты.

Заключение


Как оказалось, подключение к контроллеру и программирование Wiren Board блоков на DIN-рейку (ассортимент которых очень широк) — это простое и полезное дело — можно с лёгкостью расширить базовый функционал как Lavritech V7.1 Lite, так и любого другого контроллера, благо для интеграции нужно соединить всего несколько линий питания и GPIO.

Теги:
Хабы:
Всего голосов 11: ↑11 и ↓0+11
Комментарии9

Публикации

Информация

Сайт
timeweb.cloud
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Timeweb Cloud