ReactJS, TypeScript, Micro FrontendsReact fwdays | 27 березня. Долучайся!
×Закрыть

Arduino to UDP (socat)

Всем привет.

Сразу скажу, что ковырять долго маны мне лень, посему решил спросить.
Мне нужно принимать данные с ардиинок с нескольких COM портов и слать их по UDP. Похоже socat — это то, что мне нужно (github.com/...udioEtrange/socat-windows — это сборка под винду).

Теперь вопрос, какие ключи нужно указать?
Например, принимать данные с портов COM3, COM4 и слать на некоторый IP и порт.

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn

Похожие топики

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Ось we.easyelectronics.ru/...lnoy-seti-udp-klient.html є готовий приклад для atmega, але не на ардуїно-платформу, чистий С, Ethernet-мікросхема enc28j60.
Ще простіший варіант — модуль esp8266, якщо є Wi-Fi. Через Arduino IDE github.com/esp8266/Arduino все можна зробити, і купа рішень на пальцях розписаних, в т.ч. приклади в самому IDE. Ціна питання ~ $2.

Чи проблема все-таки в доступі до COM?

Мне нужно принимать данные с ардиинок с нескольких COM портов и слать их по UDP
В общем всё сделал при помощи SerialToIP (GUI).

а що це за дунтшіфт в сторону МК?
ІоТ?

Отчего же? Там нет ни одного датчика, что отдает приличные данные, все конкретно зашумленные и получить из этого шума реальные данные достаточно интересно. Во вторых во всякие схемотехники я и носа не сую. Мне это нужно было сделать, что бы матлабом удобно было выгребать данные.
Тот же IMU такой шум гонит... и есть задачка инерциалку сделать (а с шумом IMU это оказалось нетривиально).
Недавно почитал одну российскую монографию, там фильтрацию делали аппроксимируя полиномами (но это же по сути Левинсон-Дарбин и линейное предсказание) вот поиграюсь в ближайшее время, попробую на левинсоне фильтрацию сделать (в речи ее много применяют, но там четко известна длительность фрейма и порядок полинома, определяется принятой моделью речевого тракта), для обычных сигналов с датчиков оное мне неизвестно. С другой стороны, матлаб мощный интрумент с кучей готовых алгоритмов оптимизации.
Это раньше нужно было платы разводить, травить,паять и т.п. Сейчас проводками соединил и игрушка готова.
Да и с квадриками играться интересно, особенно с FPV на них. Например, сделать слежение за объектом на видео.
Ну и если про речь, то она меня уже серьезно поддостала, мозговыносящая весч. Мат модели, что в речи на порядки сложнее всего, что я видел в других областях распознавания образов. Ну и возможно возраст уже сказывается, не могу уже так быстро, как в 30 лет соображать, а в речи математика уже сильно навороченная сейчас.

Так что в эмбедед я не лезу, так простенькое что, типа данные с датчиков гнать в порт на ардуинке.

Ethernet-мікросхема enc28j60.
моя копіпаста з модифікаціями

github.com/...ndroid-Home-IR-Automation
іншого проекта з “Com Port Redirector”
www.ulrichradig.de/.../index.php/avr/eth_m32_ex

але в автора, думаю інші проблеми,
які пише, що вирішив

В общем всё сделал при помощи SerialToIP (GUI).

Да, написал же в посте вверху. Мне надо было данные брать с кучи ардуинок (они как com порт в винде) на разных компах и посылать по Ethernet.
SerialToIP (GUI) делает то, что мне надо, только иногда падает.
А вообще хотелось бы тулзу, что в табличке задаешь соответсвие com портов сокетам TCP или UDP (причем с выбором протокола и порта). Нажимаешь кнопку «Старт» и всё посылается (причем еще в окошках пишет, что послало).

P.S. Ну а дальше выгребаю данные матлабом с нужных сокетов (благо в матлабе всё это просто, даже очень просто). C SerialToIP (GUI) всё получилось, но эта прога иногда падает, причем нужно запускать несколько экземпляров этой проги (ибо умеет только с одним портом один экземпляр).

Еще несколько подобных нашел. Буду пробовать.

tcpcom32: Не работает. Не видит COM12 (USB Serial Port (COM12)).

tcp2com: Не работает.
D:\Temp\tcp2com-1.0.0-bin>tcp2com —test tcp/12345 com12
Test mode — Press Ctrl+C to stop program
bridge.c: StartTcpSocket() succeeded
bridge.c: GetOverlappedResult() succeeded
bridge.c: Accepted connection from 127.0.0.1
com.c: Attempt to set illegal COM port number (12)
com.c: Problem opening port “Uninitialized”
bridge.c: Connection closed while reading data
bridge.c: Accepted connection from 127.0.0.1
com.c: Attempt to set illegal COM port number (12)
com.c: Problem opening port “Uninitialized”
bridge.c: Connection closed while reading data

В винде для COM портов больше 9 нужно указывать имя устройства как \\.\COM12.

Эта прога так не понимает имя порта, только comN, причем com маленькими буквами обязательно.

SerialToIP (GUI). Похоже работает, по крайней мере с localhost.

COMbyTCP. Похоже работает, по крайней мере с localhost. Но до жути кривой интерфейс и не доделанный ГУИ.

Обычно несколько ком-портов затруднительно разводить, предпочтительнее токовая петля. Она и по реализации дешевле выйдет, и не обязательно адруино на стороне датчика, может быть что и подешевле.

COM порты это и есть ардуинки. (драйвер USB to RS232 стоит).
Но вопрос не в этом. Ардуинка причеплена к компу, который в где-то далеко. Она представляется com портом. Мне нужно данные с этого порта кинуть в сеть ethernet (UDP, TCP). Можно и самому написать прогу для этого, но неужели нет уже готового решения и я единственный, кто столкнулся с подобным.
После на одном компе я собираю данные со всех ардуинок и обрабатываю их.

Можно и самому написать прогу для этого, но неужели нет уже готового решения и я единственный, кто столкнулся с подобным.

Проблема в том, что ты под виндой. Я проверил свой любимый netcat:

netcat -l 9876 < COM14: > COM14:

Оно не работает с ком-портами для чтения, только для записи. Другие утилиты мне копать лень :)

А напиши команду для netcat, чтобы в инет слать. В Винде и Юнихе нумерация портов различная на единицу.
socat — это аналог по сути.

Гляньте github.com/...xamples/rfc2217_server.py
В сорцы вникать особо не надо, достаточно скачать и запустить. По идее должно работать под разными ОС.

Вот попроще github.com/...lob/master/serialToUDP.py и похоже делает то, что мне нужно. Но..., если что не так, то придется в этом коде ковыряться и разбираться.
Вот посему и спросил про уже отлаженное и массво используемое решение.

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

Теперь вопрос, какие ключи нужно указать?
Большие, длинные и мутные %) Ну хотя бы примеры посмотри, найди свой:
www.dest-unreach.org/...t/doc/socat.html#EXAMPLES
Например, принимать данные с портов COM3, COM4 и слать на некоторый IP и порт.
Вещание со стороны последовательного порта односторонее, типа GPS? Порты лучше указать разные, зачем принимающей стороне геморрой с демультиплексированием?
Большие, длинные и мутные %)
Вот поэтому и спросил, в надежде, что кто пальцем ткнет. Я в сетях полных лох и их ман меня в ужас вводит.
геморрой с демультиплексированием?
Не спорю, конечно. А данные, IMU, GPS и т.д. И вещание одностороннее. Просто несколько железяк в разных местах, и мне хотелось бы получать все данных в одном месте. И самый простой способ, это запихать все в IP (UDP) и по разным портам, с разных железяк.

Как понял, эта тулза делает то, что мне надо, но в ней разобраться без поллитры пока не получается.

Идеально хотелось бы что гуевое для чайников, но такого не нашел.

Нашел вот такое SerialToIP, но не понятно с параметрами, что устанавливать ей. Какой Socket Mode выбирать и порт в ней не указать.

Подписаться на комментарии