- Подключение устройств с COM портами к Wi-Fi сети
- Вариант 1: NPort c Wi-Fi
- Режим Infrastructure
- Режим Ad-Hoc
- Как быть, если нужно одновременно подключить COM и Ethernet устройства к Wi-Fi?
- Как быть, если устройство с COM-портом расположено на движущемся объекте?
- Вариант 2: AWK-1131C Wi-Fi-клиент
- Сравнительная таблица NPort W2x50A и AWK-1137C
- Путешествия из COM в Wi-Fi и обратно
Подключение устройств с COM портами к Wi-Fi сети
Часто возникают ситуации, когда необходимо подключить какое-либо устройство с интерфейсом RS-232/422/485 или Ethernet к другому такому же устройству или ПК, но оно находится далеко, а прокладка кабеля до него затруднительна. В этом случае можно организовать передачу данных по беспроводной связи. Сделать это можно несколькими способами, и у каждого есть свои особенности. Давайте рассмотрим варианты.
Вариант 1: NPort c Wi-Fi
Если ваши устройства расположены в пределах прямой видимости, можно использовать Wi-Fi. Самый простой и экономически выгодный способ передать RS-232/422/485 по Wi-Fi – использовать преобразователь NPort cо встроенным Wi-Fi адаптером. В этом случае NPort может работать в двух режимах: Infrastructure или Ad-Hoc.
Режим Infrastructure
В этом режиме NPort будет в качестве Wi-Fi клиента подключаться к Wi-Fi точке доступа.
Режим Ad-Hoc
В этом режиме устройства NPort могут соединяться с друг другом напрямую, без участия точки доступа.
Как быть, если нужно одновременно подключить COM и Ethernet устройства к Wi-Fi?
NPort также имеет Ethernet порт, что позволяет одновременно подключить к беспроводной сети еще и Ethernet устройства, что избавляет от необходимости покупать дополнительную точку доступа.
Как быть, если устройство с COM-портом расположено на движущемся объекте?
NPort W2x50A поддерживают технологию беспроводного роуминга на уровне клиента (Client-based Turbo Roaming). Если NPort установлен на движущемся объекте, то при движении NPort может переключатся между точками доступа, обеспечивая непрерывную связь (время переключения менее 500 мс).
Вариант 2: AWK-1131C Wi-Fi-клиент
AWK-1131C оснащен COM-портом RS-232/422/485 для подключения последовательных устройств к Wi-Fi сети. Также, как и обычный NPort, AWK-1137C поддерживает самые востребованные режимы работы, включая виртуальный COM-порт.
Сравнительная таблица NPort W2x50A и AWK-1137C
NPort W2150A | AWK-1137C | |
---|---|---|
Режим работы Wi-Fi | Client | Client/Slave/Client-Router |
Режим работы COM-порта | Real COM, RCF2217, TCP Server, TCP Client, UDP, Pair Connection, Ethernet Modem | Real COM, RCF2217, TCP Server, TCP Client, UDP |
Буфер COM-порта | 20 МБ | 256 КБ |
Ethernet-интерфейс | 1×10/100 BaseT(X) RJ45 | 2×10/100 BaseT(X) RJ45 |
Защита от электростатических разрядов (ESD) | Уровень 2 | Уровень 4 |
Способ установки на DIN-рейку | Крепление на заднюю панель | Крепление на боковую панель |
Время переключение роуминга | 500 мс | 150 мс |
NAT | Нет | Есть |
Макс. мощность передатчика | 16 дБм | 26 дБм |
Международные радио сертификаты | CE, ARIB RCR STD-33, ARIB STD-66 | CE, FCC, MIC, NCC, KC, RCM, ANATEL, SRRC, WPC |
Технология AeroMag | Нет | AeroMag Client |
Управление | NPort Search Utility | Wireless Search Utility, MXconfig/MXview |
Ethernet сервер последовательных интерфейсов, 1xRS-232/422/485, с Wi-Fi 802.11a/b/g/n, 0. +55С, с адаптером питания
Путешествия из COM в Wi-Fi и обратно
Hi-Link HLK-RM04, как следует из описания продавца — адаптер Wi-Fi/Serial/Ethernet. То есть штука, которая умеет перемещать данные между этими интерфейсами. У производителя, впрочем, более актуальный взгляд на вещи: Hi-Link именует это изделие модулем маршрутизатора. Чем оно, собственно, и является.
А что касается меня, то купил я эту штуку в первую очередь именно как конвертер Serial — Wi-Fi, то есть из обычного последовательного порта прямиком в интернет. Точнее, это я так думал, что — прямиком в интернет.
Но, несмотря на то, что некоторые вещи оказались довольно затейливыми (опять же, для меня), маршрутизатор должен подойти для множества применений. К примеру, в моем случае это Wi-Fi весы с передачей показаний в таблички Google и на смартфон. Или, вот, можно попробовать прицепить управление блоком питания — который, собственно и стал причиной этого текста.
Наконец, говорят, и OpenWRT на HLK-RM04 водрузить можно. Я считаю, за такие деньги — очень неплохое достижение.
Итак, изначально мне хотелось добавить каких-нибудь беспроводных возможностей своим Arduino. Помимо, разумеется, освоенных приемников и передатчиков на 433 МГц. Однако стоимость Wi-Fi-шилда как-то угнетала.
Это объясняет энтузиазм, с которым я набросился на HLK-RM04. Тем более, что перед покупкой почитал интернет и уяснил, что так или иначе, но к Arduino его подключить можно.
Изделие представляет из себя таракана о 28 ногах, причем с несовместимым с Arduino шагом 2 мм (у Arduino, напоминаю, 2.54 мм). Так что или готовьтесь паяться к ногам, или травить плату (финальную или переходник), или как я, покупайте вилку с соответствующим шагом.
Я добросовестно пропустил пост-продажную фотосессию, а сейчас таракан живет в весах. На руках только портрет перед вживлением. Здесь видна оборотная сторона модуля, вилки и кривая пайка:
Забегая вперед: вилка или подобные переходники очень удобны при макетировании. Иными словами, если нужно время от времени отключать HLK-RM04 или менять подключения, то это, по сути, единственный вариант, чтобы не портить понапрасну родные ноги и не тратить время на перепайку.
А это — картинка с сайта производителя:
Вторая очевидная проблема заключается в антенне. Говорят, существует две разновидности — со встроенной антенной и без таковой. В DX, как следует из комментариев на странице товара, продается без. Наверняка, купить антенну можно, хотя до сих пор я до этого не дошел — Dessy почему-то не спешат выполнять мой заказ.
Если кратко, то ноги трансформируются в:
2) Последовательные порты: 2
Модуль питается от 5В (минимум — 3.9В), и также способен питать периферию, причем двумя разными напряжениями: 3.3В и 1.8В до 300 мА на каждый (полагаю, при наличии достаточно мощного основного источника).
При этом максимальное потребление самого модуля (Wi-Fi плюс оба Ethernet) составляет, согласно документации, 160 мА.
Кроме ног у HLK-RM04 есть несколько индикаторов: питание, сетевая активность. Достаточно, чтобы понять, что происходит.
С точки зрения сетевого устройства видим следующее:
1) Поддержка беспроводных сетей 802.11b/g/n до 150 Мбит с защитой 64/128/152 bit WEP,
WPA-PSK/WPA2-PSK, WPA/WPA2
2) Поддержка проводных сетей 10/100 Мбит
3) Режимы работы: клиент, сервер, точка доступа
В общем, обычный маленький маршрутизатор. У которого, как и у любого уважающего себя маршрутизатора, есть веб-конфигуратор. Достаточно лишь подключить питание и сходить по адресу 192.168.16.254.
Вот таким образом выглядят основные экраны конфигурации и статистики:
В целом, поскольку на Шахерезаду я мало похож, то дозволенные речи о ТТХ на этом и закончу и продолжу о том, как подружиться с Arduino.
Итак, по счастью один клевый чувак успел переписать библиотеку Wi-Fi (называется она WiFiRM04) как раз с учетом всей специфики HLK-RM04. Труд, полагаю, титанический, поскольку в железке, к примеру не реализован обмен с веб-серверами, да и сама она мало чем напоминает веб-сервер (хотя по ее адресу в некоторых браузерах можно наблюдать данные с COM-порта).
То есть, никаких GET/POST из коробки, а это для меня было жизненно важно: надо же как-то организовывать обмен с серверами для сбора статистики. Тем не менее, мне удалось взять себя в руки после осознания этого факта. Очевидно, по совместительству и причины, почему HLK-RM04 стоит таких скромных денег.
Для простоты подключений и тестирования работоспособности всего кода отлаживался я на Arduino Mega. Однако целевой платформой была все же Pro Mini, и это вселяло определенные опасения. Дело в том, что библиотека тоже собрана под Mega, у которой и два COM-порта, и памяти вообще-то выше крыши.
Чтение интернета оптимизма тоже не добавляло. В основном, чуваки, отличные от автора библиотеки, никак не могли приспособить ее к работе на Arduino Uno, у которой, напоминаю, памяти меньше в 8 раз, а последовательных портов — всего один.
Итого, с учетом по умолчанию включенного в библиотеке модуля отладки, даже крошечная программа с участием библиотеки WiFiRM04 компиллируется в чуть меньше 30КБ — это, чтобы вы понимали, почему у меня были опасения (ведь у Pro Mini памяти всего 32 КБ). Между тем, есть и хорошие новости: автор все же предусмотрел и работу с одним портом, и выключение отладочного модуля.
О первом написано на GitHub, а о втором я узнал из форума Arduino.cc.
Кстати, несмотря на то, что у Pro Mini всего один порт, есть хитрость, как понять что происходит при работе модуля. Если после загрузки программы в Pro Mini подключить и HLK-RM04, и одновременно десктоп с монитором порта, то видно, что именно контроллер отправляет преобразователю. А это позволяет понять, в каком вообще состоянии тот находится.
В сухом остатке для адаптации WiFiRM04 под Arduino Pro Mini потребовалось:
1) В at_drv.cpp сделать так:
#define DEFAULT_BAUD1 9600 #define DEFAULT_BAUD2 9600
// use Serial1 as default serial port to communicate with WiFi module #define AT_DRV_SERIAL Serial // use Serial2 to communicate the uart2 of our WiFi module #define AT_DRV_SERIAL1 Serial
3) Там же — закомментировать #define _DEBUG_
4) Там же — не забыть поставить свой любимый цифровой пин в #define ESCAPE_PIN
3) В wl_definitions.h изменить MAX_SOCK_NUM на 1
Собственно, в таком виде Arduino и HLK-RM04 готовы к общения с серверами в интернете. И, теоретически, могут и сами подрабатывать веб-серверами.
Примеры кода есть в самой библиотеке WiFiRM04, а особо любопытных приглашаю впечатлиться сборкой Wi-Fi-весов целиком от и до.
Или посмотреть видео, как эти самые весы работают:
Небольшой комментарий. Весы получились многовидовые (люди, коты), многопользовательские (рассчитаны на взвешивание жителей и гостей). Выбор режима и «пользователя» — коротким нажатием на стол весов.
Один длинный сигнал — взвешивание людей. Количество коротких сигналов за ним — порядковый номер взвешиваемого. Два длинных сигнала — взвешивание котов (по классической методе: сначала на весы с котом, потом — без кота), количество коротких сигналов после — номер кота 🙂 Три коротких нажатия — сброс в исходное состояние (люди, людь #1).
Результаты озвучиваются смартфоном через Newtifry, визуализируются смартфоном через Народный мониторинг и заносятся в таблицу Google.
Все вместе связывает сервис Pushing Box, который получает данные и затем рассылает их кому надо. Собственно, иначе с Google и не получится, поскольку Arduino не в состоянии осилить HTTPS, зато Pushing Box транслирует полученное в необходимый протокол без вопросов.
Теперь о впечатлениях от модуля. Для начала, он даже без антенны вполне себе пристойно работает. Ну, насколько можно верить его статистике, которая на расстоянии около 3 метров от маршрутизатора сообщает, что сигнал так себе, но линк в целом нормальный.
Это вообще-то огромный плюс.
Есть и минусы. Во-первых, по непонятным мне причинам HLK-RM04 периодически перестает откликаться, так что возникает ощущение, что он завис. Закономерности я не вижу: может «зависнуть» и через пять минут после включения, и через пять дней. Возвращение к жизни пока грубым выключением и включением питания.
Во-вторых, он как-то неадекватно реагирует на попытки изменить DNS на серверы Яндекс. Иными словами — тоже перестает откликаться. По счастью оживить его для смены серверов на Google довольно просто: тоже достаточно выключить и включить (но можно и вообще в ноль сбросить, достаточно пины замкнуть). Так что вы понимаете — только Google, только АНБ.
Возможно, что это связано со спецификой моей конструкции: нет антенны, кастомная библиотека, модуль в ограниченном пространстве где, быть может, не хватает вентиляции. Может быть, роль играет домашний маршрутизатор — не знаю.
Для чего еще можно использовать эту штуку? Hi-Link говорит об удаленном управлении, игрушках, всяческой автоматизации. Я встречался с тем, что определенная категория граждан очень довольна использованием модуля в автомобильных компьютерах — они там снимают параметры через COM и читают их на планшетах или чем придется через Wi-Fi.
В общем, любые применения, где нужно каким-то образом объединить последовательный порт с Ethernet или Wi-Fi. Вплоть до того, что можно организовать мост (беспроводной, так сказать, провод) из двух HLK-RM04. Но это уже не ко мне 🙂