Шлюз RS232, CAN, RS485 to Ethernet MQTT на Atmega328
Для управления телевизором и проектором через RS232 у меня используется связка Arduino UNO + Ethernet Shield W5100 + переходник RS232 — UART. Решил собрать эту солянку на одной плате. То что из этого вышло можно посмотреть ниже.
Мозгом является микроконтроллер Atmega328P с зашитым Arduino’вским бутлоадером. Для связи по Ethernet я выбрал новую микросхему W5500 от производителя WIZnet Co., Ltd.

Микросхема W5500 — дополнение к линейке популярных Ethernet-чипов от компании WIZNet — представляет собой функционально законченный чип встраиваемого Ethernet-контроллера для обеспечения проводного соединения TCP/IP, позволяющий упростить подключение к интернету устройств и систем, использующих SPI (высокоскоростной последовательный периферийный интерфейс). W5500 позволяет удовлетворить потребности пользователей в стабильном подключении к Internet, с помощью единого чипа для реализации стека TCP/IP, 10/100, Ethernet MAC и PHY. Аппаратный стек TCP/IP поддерживает TCP, UDP, IPv4, ICMP, ARP, IGMP, PPPoE…

В роли преобразователя RS232 — UART используется микросхема MAX3232. Дополнительно я сделал плату более универсально в плане протоколов. Есть возможность установить микросхему TJA1040 и получить вместо RS232, CAN шину. Можно установить микросхему MAX485 и тем самым получить RS485. Однако одновременного использования не предусмотрено и выбор протокола зависит от установленной микросхемы преобразователя.
Питание платы организовано на DC-DC конвертере, выполненного на микросхеме MC34063, которая имеет широкий диапазон входных напряжений от 5.5 до 40 Вольт.

Для управления я как обычно использую протокол MQTT.
Код для управления телевизором выложен на GitHub.
Так же можно залить вот этот скетч и мы получим полноценный конфигурируемый шлюз.
Подключившись телнетом к шлюзу по порту 24:
telnet <ip-address> 24
мы можем изменить следующие настройки:
? — get <label>, <baudrate>, <parity>, <wordlength>, <stopbits>
Label [string] — получить или установить пользовательскую метку (до 32 символов)
Baudrate [value] — получить или установить скорость передачи (300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200)
Parity [value] — получить или установить четность (N, E, O)
Wordlength [value] — получить или установить wordlength (5, 6, 7, 8)
Stopbits [value] — получить или установить стоп бит(1, 2)
Save — сохраняет текущие настройки в памяти EEPROM
Load — загружает настройки из памяти EEPROM
Пример:
baudrate 9600
parity N
stopbits 1
wordlength 8
save
?
Подключившись телнетом к шлюзу по порту 23:
telnet <ip-address> 23
мы может отправлять и принимать данные.
Для получения и отправки данных из скрипта в IoBroker используем следующий код:
var PORT = 23; var HOST = '192.168.1.55'; var net = require('net'); var client = new net.Socket(); client.connect(PORT, HOST, function() { log('Connected'); client.write('Connected'); }); client.on('data', function(data) { log('Received: ' + data); }); client.on('error', function(err) { log("Error: " + err); });










Очень круто сделали, но я так и не понял как заменой микросхемы получить RS485, ведь управляющего контакта на приемо/передачу нет, и в проекте на GitHub используется Serial1 но компилятор ругается на него, пишет что он не задекларирован. Напишите пожалуйста как мне решить данный вопрос.
Шлюз не управляет клиентами, он просто читает из сети и передает.
На гите код не мой, его нужно адаптировать немного.
Очень нужная разработка. А можно посмотреть ваш код, где есть передача по RS485? В частности хотел сделать шлюз протокола ModBus (Ethernet-RS485), хотел посмотреть как вы определяете конец посылки и управляете приемом/передачей max485
Вот тут можешь глянуть https://github.com/instalator/Rollet_modbus
Вы не правильно меня поняли. Вы пишете: «Можно установить микросхему MAX485 и тем самым получить RS485.» Хотелось бы посмотреть код именно этого проекта, с поддержкой RS485 интерфейса, так как в коде выложенном на гите этого нет.
Причем тут RS485 и код? RS485 это физика.
Если, собрать вашу плату и впаять MAX485, а затем загрузить в контроллер код с гита, то работать она не будет. Как вы выразились выше: «его нужно адаптировать». Так вот в чем и вопрос, существует ли этот адаптированный код для вашего устройства и можно его посмотреть?
Какой именно? Вот этот код работает с rs485 https://github.com/instalator/Rollet_modbus что тебе не понятно?
это круто. а нет ли на примете шлюза WI-FI to RS485
Вместо МК ставишь Esp8266 и все. Поищи готовые на алишке
[…] решено подключить использующийся ранее переходник для управления через RS232. Взглянув на заднюю панель […]