Serial to Ethernet адаптер на Arduino
В продолжение темы управления ИБП через COM порт. Решил все это дело завести в Home Assistant, чтобы иметь возможность удаленного включения/отключения нагрузки. Хотя в природе уже и существуют готовые устройства (раз, два), выполняющие необходимую работу, было принято решение сделать свой костыль. К тому же, это выходит намного дешевле.
Для построения адаптера требуется самый минимальный набор компонентов:
- Arduino Nano: https://aliexpress.ru/item/32832366092.html
- Nano Ethernet Shield: https://aliexpress.ru/item/32341839317.html
- RS-232 Module: https://aliexpress.ru/item/33024283173.html
Так же, возможно, для подключения к оконечному устройству понадобится Null-modem переходник или соответствующий кабель (в случае с ИБП я воспользовался первым вариантом). Более подробно можно почитать в wiki. В дополнение ко всему прочему, при необходимости, можно использовать обычные переходники, но они не заменят null-модем, это для другого - например, мне это позволило сэкономить на покупке кабеля (был в наличии male-female, а для подключения мне нужен был male-male).
Прошиваем Arduino специальным скетчем, собираем все вместе (модуль RS-232 подключаем к контактам TX и RX соответственно) и...все готово!
Для защиты от случайного короткого замыкания я поместил все в термоусадку диаметром 35мм. Так же рекомендую дополнительно зафиксировать RS-232 модуль с помощью герметика для электроники.
В прошивке сделано подключение к сети с получением IP адреса по DHCP. Для отправки данных можно использовать стандартный Telnet клиент, либо бесплатный PuTTY. Некоторые параметры задаются в скетче в виде констант:
- MACADDRESS - MAC адрес Ethernet шилда. Иногда присутствует в виде наклейки, в остальных же случаях можно воспользоваться специальным сервисом для его генерации, используя следующие параметры:
- MAC Start Range - A8:61:0A:00:00:00
- MAC End Range - A8:61:0A:FF:FF:FF
- TCPPORT - номер порта, данные с которого будут транслироваться в RS-232 (по-умолчанию задан стандартный telnet порт 23);
- MAXCLIENTS - максимальное количество одновременных сетевых подключений (по-умолчанию стоит 3, больше не рекомендую - возможны проблемы из за нехватки оперативной памяти);
- BAUDRATE - скорость соединения с COM портом (по-умолчанию 2400 бит/с, требовалось согласно даташиту протокола управления моим ИБП). Задаете значение, которое необходимо для подключаемого устройства.
P.S. Для корректной прошивки Arduino Nano она должна быть снята с Ethernet-шилда!
Проект на GitHub: https://github.com/kasitoru/arduino-serial2ethernet
c #include не завелась в другой библиотекой #include заработало