Arduino & Modbus

    В предыдущей статье мы соединили открытую платформу домашней автоматизации OpenHAB с контроллером Arduino использовав очень простой, текстовый протокол. Но это решение поставит нас в тупик, если мы захотим подключить наш контроллер к другой системе, что же делать?

    Modbus — самый известный и распространенный стандарт в промышленной автоматизации, его поддерживают миллионы устройств по всему миру, эти устройства легко интегрируется в единую сеть и стыкуются с огромным количеством готового программного обеспечения. Попробуем использовать его в нашем проекте?

    Что нам необходимо знать об этом стандарте?
    Протокол Modbus использует последовательные линии связи (например, RS232, RS485), а протокол Modbus TCP рассчитан на передачу данных по сетям TCP/IP.
    Протокол Modbus имеет два режима передачи RTU и ASCII, в режиме ASCII каждый байт передается как два ASCII символа его шестнадцатеричного представления.
    В сети Modbus есть только один ведущий, который с заданным интервалом опрашивает несколько ведомых устройств, каждое из которых имеет свой уникальный адрес от 1 до 254, адрес 0 широковещательный и на него отвечают все устройства, так как ведущий в сети один у него нет своего адреса.
    В спецификации Modbus определено два типа данных, один бит и 16 битное слово. Данные организованны в четыре таблицы с 16 битной адресацией ячеек, адресация в таблицах начинается с 0. Для доступа к данным из разных таблиц предназначены отдельные команды.
    Discrete Inputs 1 бит только чтение
    Coils 1 бит чтение и запись
    Input Registers 16 бит только чтение
    Holding Registers 16 бит чтение и запись

    Как нам подключить Modbus устройство к OpenHAB? За это отвечает модуль Modbus Tcp Binding, этот модуль работает в режиме ведущего и обеспечивает подключение нескольких ведомых устройств через последовательный порт или TCP/IP сеть.
    Для того чтобы связать с ним Arduino нам необходимо реализовать в контроллере ведомое Modbus устройство, воспользуемся для этого библиотекой Modbus-Master-Slave-for-Arduino.

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

    Рассмотрим на примере нашего скетча основные шаги необходимые для работы с этой библиотекой.

    Все функции библиотеки реализованы в одном файле ModbusRtu.h.
    Для взаимодействия с ней, в программе нужно создать объект, задав в его конструкторе Modbus адрес, номер последовательного порта, номер выхода, управляющего передачей (для RS485)
    Modbus slave(ID, 0, 0);
    

    Затем определить массив регистров Modbus
    uint16_t au16data[11];
    

    После этого, при старте программы настроить последовательный порт ведомого
    slave.begin(9600);
    

    В основном цикле программы необходимо вызывать функцию обработки Modbus сообщений
    state = slave.poll(au16data, 11);
    

    И после этого можно обработать полученные данные и сохранить необходимые переменные в регистрах Modbus.

    #include "ModbusRtu.h"
    
    #define ID   1      // адрес ведомого
    #define btnPin  2   // номер входа, подключенный к кнопке
    #define stlPin  13  // номер выхода индикатора работы
                        // расположен на плате Arduino
    #define ledPin  12  // номер выхода светодиода
    
    //Задаём ведомому адрес, последовательный порт, выход управления TX
    Modbus slave(ID, 0, 0); 
    boolean led;
    int8_t state = 0;
    unsigned long tempus;
    
    // массив данных modbus
    uint16_t au16data[11];
    
    void setup() {
      // настраиваем входы и выходы
      io_setup();
      // настраиваем последовательный порт ведомого
      slave.begin( 9600 ); 
      // зажигаем светодиод на 100 мс
      tempus = millis() + 100; 
      digitalWrite(stlPin, HIGH );
    }
    
    void io_setup() {
      digitalWrite(stlPin, HIGH ); 
      digitalWrite(ledPin, LOW ); 
      pinMode(stlPin, OUTPUT); 
      pinMode(ledPin, OUTPUT);   
      pinMode(btnPin, INPUT);  
    }
    
    void loop() {
      // обработка сообщений
      state = slave.poll( au16data, 11);  
      // если получили пакет без ошибок - зажигаем светодиод на 50 мс 
      if (state > 4) {
        tempus = millis() + 50;
        digitalWrite(stlPin, HIGH);
      }
      if (millis() > tempus) digitalWrite(stlPin, LOW );
      //обновляем данные в регистрах Modbus и в пользовательской программе
      io_poll();
    } 
    
    void io_poll() {
      //Копируем Coil[1] в Discrete[0]
      au16data[0] = au16data[1];
      //Выводим значение регистра 1.3 на светодиод 
      digitalWrite( ledPin, bitRead( au16data[1], 3 ));
      //Сохраняем состояние кнопки в регистр 0.3
      bitWrite( au16data[0], 3, digitalRead( btnPin ));
      //Копируем Holding[5,6,7] в Input[2,3,4]
      au16data[2] = au16data[5];
      au16data[3] = au16data[6];
      au16data[4] = au16data[7];
      //Сохраняем в регистры отладочную информацию
      au16data[8] = slave.getInCnt();
      au16data[9] = slave.getOutCnt();
      au16data[10] = slave.getErrCnt();
    }
    

    Стандарт предусматривает отдельную таблицу для каждого типа данных, но особенностью применённой библиотеки является то, что все регистры хранятся в одном массиве в виде перекрывающихся таблиц, поэтому структура регистров контроллера будет выглядеть следующим образом:



    Для демонстрации работы с разными регистрами, в процессе работы программы данные из регистра с типом coil будут скопированы в регистр с типом discrete, а из регистров с типом holding в регистры с типом input. Кроме этого состояние кнопки будет сохранено в третий бит регистра au16data[0] (discrete), а значение третьего бита регистра au16data[1] (coil) выведено на светодиод.

    Доработаем макет контроллера, который был собран для предыдущих экспериментов, переключим светодиод с 13 на 12 вывод. Обычно на плате самого Arduino уже есть светодиод, подключенный к 13 выводу, в нашей программе он станет индикатором статуса работы. Теперь подключим USB кабель к компьютеру, скомпилируем и загрузим программу в контроллер.



    Пора приступать к испытаниям. Значительно облегчает работу на этом этапе эмулятор Modbus мастер-устройства, в сети есть несколько хороших, при этом бесплатных программ, вот некоторые из них:
    www.focus-sw.com/fieldtalk/modpoll.html
    qmodbus.sourceforge.net
    www.mikont.com/products/EAT-Console.html

    Среди них можно отметить утилиту EAT-Console которая позволяет не только управлять и опрашивать Modbus устройства, но и отображает данные в графическом виде, что очень удобно при отладке работы с различными датчиками, например датчиками влажности, давления и температуры. Перед началом работы с программой и её конфигуратором рекомендую ознакомиться с документацией.



    Для установки эмулятора нужно скачать архив и распаковать его в папку C:\arduino\EATConsole, затем открыть страницу загрузки Eclipse, скачать Eclipse IDE for Java Developers и распаковать его в папку C:\arduino\eclipse, после этого скопировать файлы из папки C:\arduino\EATConsole\eclipse\plugins в папку C:\arduino\eclipse\plugins.

    Для создания конфигурации необходимо запустить C:\arduino\eclipse\eclipse.exe, создать пустой проект, скопировать в него пустой файл C:\arduino\EATConsole\menu.ptmenu и добавить в редакторе пункты в соответствии со следующей таблицей. Если же вы скачали проект из репозитория, то в нём, в папке EATConsole уже есть подготовленный файл menu.ptmenu.
    Type Address Bit Name Point Slave
    Display Boolean 0 0 DT0 1
    Display Boolean 0 1 DT1 1
    Display Boolean 0 2 DT2 1
    Display Boolean 0 3 BTN 1
    Input Boolean 1 0 CL16 1
    Input Boolean 1 1 CL17 1
    Input Boolean 1 2 CL18 1
    Input Boolean 1 3 LED 1
    Display Integer 2 INPT3 0 1
    Display Integer 3 INPT4 0 1
    Display Integer 4 INPT5 0 1
    Display Integer 5 HOLD6 0 1
    Display Integer 6 HOLD7 0 1
    Display Integer 7 HOLD8 0 1

    Type — тип элемента меню EATConsole.
    Address — адрес регистра данных.
    Bit – номер бита в регистре.
    Name – название элемента меню.
    Point – количество десятичных знаков после точки.
    Slave – Modbus адрес контроллера.



    Теперь сохраним и скопируем файл menu.ptmenu в каталог C:\arduino\EATConsole, для этого можно щёлкнуть правой кнопкой мыши на файле прямо в Eclipse, выбрать в контекстном меню пункт “Copy”, а затем вставить в проводнике в папку C:\arduino\EATConsole.

    После этого запустим C:\arduino\EATConsole\EATConsole.exe, настроим последовательное соединение, выбрав пункт меню Файл\Настройки, в диалоговом окне укажем номер порта, скорость 9600, 8 бит данных, 1 стоповый бит.



    *Программа работает с портами с 1 по 8 и если USB переходник Arduino встал на порт с большим номером, придётся открыть диспетчер устройств Windows и изменить номер порта для него.

    Когда все настройки будут введены, нажмите кнопку “Установить”, сразу после этого программа начнёт опрос устройства и если что-то пошло не так появится сообщение – НЕТ СВЯЗИ. Если же всё было сделано правильно и связь есть в чём можно убедиться по миганию индикатора статуса (светодиод на выводе 13), то пора приступить к испытаниям нашего контроллера.

    Попробуем поменять значение в регистрах HLD0…HLD2 и СL0…СL2, при этом должно поменяться значение в соответствующем регистре IN0..IN2 и DT0..DT2, затем нажмём на кнопку макета, при этом должно поменяться значение в поле BTN, щёлкнем по полю LED, при этом должен загореться или потухнуть светодиод.



    Что мы получили в результате нашей работы:

    1 познакомились с азами протокола Modbus;
    2 создали скетч, который превращает Arduino в Modbus slave устройство и позволяет читать и записывать несколько Modbus регистров с разными типами данных;
    3 протестировали обмен с контроллером при помощи эмулятора функций Modbus master устройства, для которого создали конфигурацию соответствующую структуре регистров контроллера.

    Выводы
    Библиотека Modbus-Master-Slave-for-Arduino проста в использовании, позволяет создать ведомое Modbus устройство, которое корректно работает с программным эмулятором. Скомпилированный пример занимает немногим более 5кб памяти программ, так что в контроллере остаётся достаточно места для добавления необходимого функционала.

    Стандарт Modbus открыт и популярен, но в нём есть ряд недостатков — в стандарте определено только два типа данных,
    протокол требует постоянного обмена между ведущим и ведомыми устройствами, конфигурировать систему приходится вручную.

    Имея некоторые недостатки, протокол вполне пригоден для использования в контроллере систем домашней автоматизации, особенно если необходима стыковка с различным программным обеспечением.

    В следующий раз займёмся подключением контроллера к платформе OpenHAB.
    Поделиться публикацией

    Похожие публикации

    Комментарии 49
      +1
      Спасибо за статью. Я сейчас затеваю ремонт и второпях изучаю, что и как из кабелей вмуровать в стены, пока есть такая возможность.

      Объясните, пожалуйста, а зачем вообще вся эта канитель с последовательными интерфейсами и протоколами? Дешевизна? Простота? Ой ли?

      Вот держу я в руках Arduino Pro Mini и Ethernet-модуль, они в сумме стоят $5-$6. Предположим, хочу я сделать «умный выключатель» — я вмуровываю в стену Ethernet-кабель, по PoE подаю на Ардуину питание. В результате имею полную свободу от наводок на кабель и простоту интеграции — бери готовую бибилиотеку для Ethernet, TCP/IP и HTTP и знай себе HTTP POST-запросами симистор переключай хоть из браузера.

      Правда, сильно гложет мысль, что не могу я один такой быть умный, а вся отрасль — ошибаться. Или они просто тупо за совместимость с legacy-устройствами сражаются?
        0
        Modbus — это совсем не legacy, это устоявшийся протокол для управления и измерений. Важен он тем, что его на нем работает практически вся индустриальная автоматика — датчики, исполнительные устройства, PLC. Если у вас налажена, например, производственная линия или охранная система, то наверняка там будет использоваться modbus. Для «умного дома» он тоже применим, но я считаю что удел modbus'a — цеха и лаборатории, а для домашней автоматики нужны другие стандарты. А Arduino и всякие модули к ней — это здорово и интересно, но это не стандарты.
          0
          Понятно, спасибо. Т.е. эта штука — для взрослых дядек и промышленных применений, выходит.
            0
            практически вся индустриальная автоматика — это слишком громко сказано ;)
            0
            Как уже было написано выше, ModBus поддерживается многими устройствами и рассчитан на «несколько устройств на одной линии». Если в будущем захочется подключить помимо выключателя, например, счётчик тепла, то у него врят ли будет выход Ethernet, а ModBus очень даже вероятно и т.д.
              +3
              Если Вам будет нужно подключить N устройств к сети, то в случае выбора Ethernet нужно будет протянуть N кабелей к коммутатору, причём каждый кабель должен быть не более 100м, и это должен быть кабель как минимум с двумя витыми парами. Если же выбрать RS485 + Modbus, то достаточно кабеля с одной витой парой, и можно подключать все устройства к одному кабелю длиной до 1,2км параллельно.
                0
                не более 100 м
                А у вас немаленькая квартира, я погляжу :)

                Триста метров недорогой витой пары стоят пару тысяч рублей, надёжный как трактор 16-портовый свитч Intel можно купить за 500. Мы тут с вами не на спичках ли экономим?
                  0
                  «100м» — я имел ввиду ограничения «по железу», т.е. при необходимости протянуть дальше — может не заработать. По мне так дело не в цене, а в удобстве монтажа, представьте что в стену нужно будет спрятать десяток кабелей Cat.5, вместо одного
                    0
                    Это только кажется перед прокладкой кабелей, что «100 метров — мало? Ха-ха-ха! Да у меня квартирка всего ничего!»
                    А потом начинаешь тянуть и выясняется, что или в обход всей квартиры, или под полом, т.к. от комнаты с сервером до кухни — дверь большой комнаты, а роутер — вообще на другой стене!

                    Поясню, «нафига оно вообще нужно»:
                    Любое устройство в сети — это лишний порт на маршрутизаторе. И это лишний провод, который надо тащить.
                    Причём зачастую в комнату надо ставить НЕСКОЛЬКО устройств — кнопка для света, управление люстрой, торшером, датчики и т.д. — к каждому надо тянуть свой шнурочек. От роутера. Который на другой стороне квартиры. Или на комнату ставить свич…

                    Устройства на 485 шине висят на паре проводов. Можно извратиться, пустив четыре провода и подводя заодно и низковольтное питание, но при этом они все висят параллельно на одном кабеле!!! Без дополнительных роутеров и т.д.!
                    Надо отвести от магистрали до выключателя? Подрубаешься параллельно и вуаля — новый девайс в сети!
                    При этом модбас-485 устройства «копеечные» — по факту это тупо контроллер, причём можно и без обвязок!
                      0
                      Если у Вас 5 устройств, то можно, но когда Вы захотите добавить шестое, то придется долбать стену и закладывать провод.
                      Чувствуете разницу?
                  • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      Так или иначе надо к релюшке доставить питание. Вмуровывать в стену ac/dc преобразователь у каждой релюшке либо страшно (дешёвые), либо разорительно (если качественные).

                      Радиоканалу в условиях центра города я, боюсь, не доверяю. PoE показался самым адекватным вариантом.
                      • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          32В??? Это что за зверь.
                          По 12В — каким кабелем протянуто?
                            0
                            А вы нигде не документировали свой опыт? Фоточки, статьи, блог, что-то в этом духе?
                            • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                Эх, у меня уже через неделю полы демонтировать и заменять начнут; боюсь, не дождусь.
                                  0
                                  ntfs1984, когда примерно?
                                  Думаю, про 220V, 12V и 5V
                                  народ не понимает зачем и страшит падением DC напряжения на длинных участках
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      0
                                      А каким проводом 12В?
                                  0
                                  Это наверно к ntfs1984 вопрос, я тоже в стадии ремонта
                                • НЛО прилетело и опубликовало эту надпись здесь
                                    0
                                    И 12В которые к компу подходят тоже таким проводом? Просадки по напряжению нет? Он же под 20-30А жрет под нагрузкой, игрушками.
                            0
                            Всё дело в помехоустойчивости. Если посмотреть Википедию, то:
                            A 10BASE-T transmitter sends two differential voltages, +2.5 V or −2.5 V.

                            A 100BASE-TX transmitter sends three differential voltages, +1 V, 0 V, or −1 V.

                            Тамже:
                            Логическому «0» соответствует положительное напряжение (от +5 до +15 В для передатчика), а логической «1» отрицательное (от −5 до −15 В для передатчика).
                              0
                              Ну за помехоустойчивость Ethernet мы и любим, чего не скажешь о последовательных линиях.

                              Подключите Ардуину к COM-порту и напишите простенький скетч, который будет непрерывно шарашить одну букву в терминал. А потом попросите у жены фен, положите рядом и включите. Лишнего мусора в терминале будет дофига.
                                0
                                Как-то странно у вас COM работает. Я сколько лет с ним работаю, но про такое безобразие не слышал. Встречал правда когда на передачу данных влияют помехи источников питания, или разводка электронной части выполнена некорректно.

                                Про Ethernet — лично видел что два компьютера, которые соединены кабелем в один метр шлют пакеты с ошибками. Источников помех (вроде фена) вроде бы не наблюдалось. Про COM — часа 4 непрерывно слал данные по кабелям длинной 6 метров — ошибок не было (скорость 9600, кабель как и подобает экранированный брал + заземлял корректно).
                                  0
                                  У меня была неудачная попытка заменить Ардуиной выгоревший блок управления посудомоечной машиной. А там, в тесном объёме — несколько электромагнитных вентилей на трубах с водой и мощная электрическая помпа. Даже при том, что реле были оптически развязаны с Ардуиной, помехи прилетали такие, что о надёжной работе речь перестала идти сразу. Каждое включение реле ТЭН или слива воды приводило к тому, что в debug-консоль по последовательному соединению сыпался мусор и это сильно коррелировало с зависаниями самого МК.
                                    0
                                    Боюсь что проблемы были не с RS-232, а с самим контроллером или питанием. Подробности показал бы осциллограф.
                              0
                              А ещё контролировать протокол проще, диагностика неисправностей легче. Вот вы можете сказать через сколько отработает устройство, если ему TCP-пакет отправить? С RS-232 это проще сделать. Для домашней автоматизации время не критично, но критично в некоторых приложениях. На RS-232 для простых приложений можно свой легковестный протокол использовать.
                                0
                                а нужно? Эти свои легковесные велосипеды изобретать?
                                Потом такие велосипеды внезапно попадают в разные серийные устройства (почему-то, чаще всего это происходит с российскими устройствами) и начинается пляска с бубном: а как же подружить «взрослую» систему с этой поделкой…
                                  +1
                                  Да, это вопрос очень важен. Я сам долго старался разобраться в критериях когда применять что-то самописное, а когда готовые решения. Этот вопрос очень сходен например со следующим: «Когда надо разбирать беспорядок на столе? Если я всё время буду убирать инструмент на место (в ящик), то это очень увеличит время работы, но стол будет в идеальном порядке. Если не разбирать инструмент по ящикам, то очень скоро на столе образуется куча хлама, в котором сложно найти нужное.» Решение, на мой взгляд, следующее — начинайте разбираться на столе как только беспорядок начинает вам мешать.
                                  Применительно к «велосипедам» такой подход даёт следующее решение: решайте ваши проблемы самым простым и доступным для вас способом. Если планируется встраивать ваше решение в большую систему, то используйте протокол этой системы. Если вы хорошо разбираетесь в каком-то протоколе передачи данных (или его легко понять), то используйте этот протокол. Если нет — пишите свой протокол и не парьтесь (если конечно устройство имеет уровень «поделка»). Используйте модульный подход (логика работы отдельно, а логика передачи данных — отдельно), так как это поможет сменить протокол в случае необходимости. Учитывайте что «взрослая система» может запросто поменять протокол обмена данными, или иметь особенности реализации протокола (добавить «фич»), которые сделают ваш модуль несовместимым.
                                  И ещё про случай, когда устройство имеет уровень НЕ «поделка». В этом случае, вероятно, потребуется передача большого объема данных + управление протоколом + контроль ошибок. Соответственно надо в самописном протоколе это всё реализовать, а это долго и сложно. Получается что проще разобраться и использовать уже готовый формат передачи данных и не париться с написанием велосипеда. По этой причине серьёзные устройства как правило используют какие-то стандартные форматы передачи данных. Но писать велосипеды очень рекомендую — они помогают понять что и как с передачей данных и разобраться какие готовые реализации использовать (а может и дорабатывать их). :)
                                    0
                                    И ещё про случай, когда устройство имеет уровень НЕ «поделка». В этом случае, вероятно, потребуется передача большого объема данных

                                    Что касается систем автоматики (к которым можно и глупый дом отнести) — там объёмы данных небольшие.
                                    Если мы рассмотрим в качестве эталона Profibus (на мой взгляд, лучшая система, хоть и закрытая) — там объём данных, которые слэйв может передать мастеру, ограничен 244 байтами. И этого хватает! Я ещё ни разу не упёрся в это ограничение. Для примера — один дискретный сигнал — это один бит. Итого, если использовать только дискреты, получается 1952 канала. Если взять модули по 32 канала — это 61 модуль. Их в шкаф столько не влезет :)
                                    С аналоговыми каналами менее радужно. Каждый занимает 2 байта. Итого, 8-канальных модулей можно поставить только 15. Но это 122 канала. Чтоб в одном месте кучно их столько потребовалось — фантастика :)

                                    Вот такие в промышленности объёмы передачи данных :)
                                      0
                                      Ваша фантастика для меня реальность :(
                                        0
                                        А можно немного узнать про проект, где такая «фантастика» понадобилась?
                                    0
                                    И про «российские устройства»: очевидно люди стараются разобраться с передачей данных, изобретают, думают, творят. Это очень хорошо. То, что такие устройства идут в серию — недостаток системы образования. Вы хоть на википедию Русскую посмотрите — там многие статьи (может даже специально) приведены в нечитаемый вид. Вот как учиться, что бы к моменту трудоустройства на завод уже грамотно устройства проектировать? А ещё про утечку мозгов вспомнить можно!
                                    И ещё… А зачем дружить поделку и «взрослую систему»??? Используйте взрослую и систему, и модуль!
                                      0
                                      И про «российские устройства»: очевидно люди стараются разобраться с передачей данных, изобретают, думают, творят. Это очень хорошо.

                                      Это очень хорошо, но очень плохо то, что слово «думают» иногда отсутствует. Иначе объяснить подобные примеры невозможно:
                                      fixik-papus.livejournal.com/14924.html
                                      Этот случай не мой, но тут он замечательно описан и отлично иллистрирует типовую проблему, с которой мне тоже приходилось сталкиваться.
                                        0
                                        Боюсь, что там специально несовместимость делали и полагаю, что идея сделать такую хрень принадлежит не разработчикам, а менеджерам. :(
                                          0
                                          Я тоже подозреваю вероятность злого умысла, но никак не могу догадаться до причин. Вот если б они какое-то законченное решение сделали — типа, вот у нас есть специальный OPC сервер за отдельную денежку… В этом случае подлянка была бы понятна.
                                        0
                                        А зачем дружить поделку и «взрослую систему»??? Используйте взрослую и систему, и модуль!

                                        Затем, что Modbus — это как английский в современной действительности. Универсальный язык для международного общения. Соответственно, глупо специально учить малораспространённый папуасский, если можно пользоваться английским. Тем более, что готовую реализацию Modbus можно найти уже под любую платформу.
                                    +1
                                    Вот держу я в руках Arduino Pro Mini и Ethernet-модуль, они в сумме стоят $5-$6.

                                    Очень интересует надёжность таких модулей. Они у Вас работают? Как от качества пайки впечатления? Ссылочку на поставщика дать можете?
                                      0
                                      Если вы хотите использовать витую пару, вам никто не мешает использовать не Modbus RTU, а Modbus TCP.
                                      Программно — абсолютно то же самое, физически — ethernet вместо RS-232/485.

                                      Преимущество — таки в лёгкой стыковке с миллионами существующих устройств.
                                        0
                                        Можно и без проводов обойтись. X10
                                        0
                                        Все ты правильно рассуждаешь ИМХО.
                                        Питание вести к контроллеру полюбому надо, а если тащить питание — то проще кинуть витуху и не парить себе мозг преобразованием 220->5V на каждом устройстве. Единственное — учитывай что Ethernet скушает ноги SPI интерейса и как IO их уже не используешь.
                                          0
                                          С учётом того, что Ардуине требуется просто-напросто быть прослойкой между HTTP и релюшками, PIR-датчиками, ИК-передатчиками, герконами и фоторезисторами в 95% случаев — невелика беда.

                                          А с преобразованием 220В — 5В правда проблема. Вскрытие зарядок от телефонов и смартфонов made in China навевает ужас, оставлять такое в стене включённым 24x7x365 просто опасно. Хорошие же преобразователи типа MeanWell стоят, как самолёт.

                                          Уж лучше взять блок питания от приличного ноутбука и раздать питание по PoE централизованно. Часть потеряется по пути, а дошедшее до необходимых 5 или 3.3 вольт можно привести мегагерцовым XM1584 размерами с ноготь.
                                            0
                                            Вскрытие зарядок от телефонов и смартфонов made in China навевает ужас, оставлять такое в стене включённым 24x7x365 просто опасно.

                                            Аналогичная практика. Купил «несколько видов» на вскрытие, что бы выбрать. Вскрытие показало — все в мусорку.
                                            Хорошие же преобразователи типа MeanWell стоят, как самолёт.

                                            Ну не как самолет :), но дороже контролер+ethernet точно. В каждую розетку пихать — бюджет позволяет, но это как то «не красиво» что ли и с местом проблема, 220в надо изолировать…
                                          0
                                          del
                                            0
                                            Спасибо за отзывы, постараюсь учесть в следующей статье пожелания и рассмотреть проблемы, связанные с железом.
                                              0
                                              А почему не использовать 1-Wire вместо Modbus? Для кнопочки и мигания лампочкой вроде как проще, поддерживается тоже везде, устройства дешевле, обвязки тоже не нужно.
                                                0
                                                Не сталкивались с проблемой передачи данных температурных датчиков с arduino по Modbus в OpenHAB?

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

                                                Самое читаемое