Отправка данных в SoftwareSerial и получение приходящих данных в Serial
- Войдите на сайт для отправки комментариев
доброго дня. Так уж получилось, что опять приходится создать топик, в надежде, что пытливые умы этого форума подскажут дорогу верную)
Имеется: UNO, UHF Rfid ридер, который по даташиту можно подключить по rs232
Ридер сам по себе не считывает. Ему нужно отправить комманду в HEX формате - A0 04 01 89 01 D1, тогда он ответит, что считал метку: A0 13 01 89 50 30 00 E2 00 00 17 83 18 00 34 14 20 8B B1 60 AB.
Подключил так:
UNO Reader
2(rx) rs232 tx
3(tx) rs232 rx
gnd gnd
Питание у ардуины и считывателя разное. Земля общая.
Вот дадашит считывателя (подключать аналогичные устройства по 232 уже приходилось)
Отправку тестировал отдельно через программу Serial Port Monitor
На считывателе мигает диод и тутже приходит от него ответ.
А вот выдержка из мануала, как должны данные отправляться:
Теперь о Дуине: почитав форумы понял, что отправку можно реализовать направив пакеты байтов в софтверный сериал порт. Для этого поправил скрипт:
#include <SoftwareSerial.h> String resp; int i = 0; SoftwareSerial mySerial(2, 3); // RX, TX void setup() { // Open serial communications and wait for port to open: Serial.begin(115200); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } mySerial.begin(115200); } void loop() { // run over and over byte code[] = {0xA0, 0x04, 0x01, 0x89, 0x01, 0xD1}; mySerial.write(code,sizeof(code)); delay(2); while (mySerial.available()) { Serial.print(mySerial.read()); } delay (1000); }
Как я понял, в софтверный сериал отправляются эти данные в том виде, в котором мне нужно
byte code[] = {0xA0, 0x04, 0x01, 0x89, 0x01, 0xD1}; mySerial.write(code,sizeof(code));
Но тишина - диод на считывателе не моргает, считыватель не просыпается.
Фото подключенного считывателя:
PS Менял местами RX & TX.
Буду признатеелен за помощь. Спасибо!
См. конверторы на MAX232
См. конверторы на MAX232
Спасибо. Почему тогда другие считыватели и сканеры штрихкодов не нуждаются в доп преобразователях?
Может быть потому что подключаются по другому интерфейсу? https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%B3%D0%B0%D0%BD%D0%B4_(%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81)
Может быть потому что подключаются по другому интерфейсу? https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%B3%D0%B0%D0%BD%D0%B4_(%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81)
Да не, у них тоже есть выбор подключения: USB, Wiegand, rs232. Всех их подключал по 232 и работали же. А этот не хочет.
Спасибо. Почему тогда другие считыватели и сканеры штрихкодов не нуждаются в доп преобразователях?
Все, что мне попадалось из RS-232 требовало преобразователя. Видел тут, правда, вопросы про RS232-TTL, но у меня такого в руках не бывало.
У ардуины нет физического RS-232 интерфейса. Есть ТТL с логикой RS-232, поэтому нужен преобразователь.
Софтовый Сериал не поддерживает скорость 115200. Максимум - 19200 или 38400
UNO Reader
2(rx) rs232 tx
3(tx) rs232 rx
gnd gnd
Ардуина ещё жива только потому, что она была мастером, м модуль покорно ждал и ничего не отправлял ей. Если бы он начал инициировать связь, скорее всего, она бы уже в мусорном ведре была. У RS232 другие напряжения и ардуине их не пережить.
Правильно поступить, как советовали коллеги - взять конвертер на основе MAX232, благо на али они по "рупь за ведро". Можно, конечно и самогон наколхозить - схем в сети навалом, ищите "конвертер RS232 в TTL"
Софтовый Сериал не поддерживает скорость 115200. Максимум - 19200 или 38400
Спасибо! На 38400 завелось: Нашел как настроить китайский считыватель на постоянное сканирование. Подключил считыватель к ардуино и данные пошли!
Однако чтобы НА считыватель присылать комманды нужен как я понимаю модуль ttl?
Ардуина ещё жива только потому, что она была мастером, м модуль покорно ждал и ничего не отправлял ей. Если бы он начал инициировать связь, скорее всего, она бы уже в мусорном ведре была. У RS232 другие напряжения и ардуине их не пережить.
Правильно поступить, как советовали коллеги - взять конвертер на основе MAX232, благо на али они по "рупь за ведро". Можно, конечно и самогон наколхозить - схем в сети навалом, ищите "конвертер RS232 в TTL"
Да вроде не сгорела. Я matrix 2 тоже подключал и все норм было и другие ридеры тоже работали. По поводу конвертера - спасибо. Закажу!
У ардуины нет физического RS-232 интерфейса. Есть ТТL с логикой RS-232, поэтому нужен преобразователь.
Тоесть считывать приходящие данные он может без преобразователя (сейчас считывает), а отправлять что-то на считыватель - нет?
Можно модуль. Стоит он меньше бакса. А можно за ту же цену пять штук микросхем и спаять самому. Там на модуле всё равно акромя этой микросхемы ничерта особо нет.
Вообще очень удивительно, что пошли какие-то данные. Потому что в RS232 сигналы фактически инвертированы. Условно: VCC - это лог.0, а -VCC - это лог.1.
Или там RS232-TTL, который, как мне помнится, в принципе просто TTL, просто была какая-то замутка с тем, что он проходил через чип FT232 и поэтому китайцы писали, что "интерфейс RS232-TTL". Надо хотя бы потыкать осциллографом, посмотреть до скольки вольт машет сигнал. Или смотреть даташит на чип, с которого эти данные лезут - что про него вендор пишет.
Взял max232 и 4 конденсатора. посмотрел в интернете, как правильно собрать. Собрал, но не уверен что правильно))
Подключил к ардуино:
Пробовал и на пины софтверного сериала тоже. В данном фото подключил так (питание + и -)тоде от ардуино ну и PX TX
Открыл монитор порта, чтобы проверить идут ли данные.
Пишутся байты по мере замыкания rx и tx на контактах 10 и 9 (где-то видел что так можно проверить работоспособность)
Теперь появился вопрос: а rx tx gnd считывателя куда подключать? Я подключил на 10 и 9, а землю считывателя кинул на gnd (мах232 и ардуину (пробовал и так и так)). Но не считывается информация, хотя считыватель пищит. Где я ошибся?
Правильно поступить, как советовали коллеги - взять конвертер на основе MAX232, благо на али они по "рупь за ведро". Можно, конечно и самогон наколхозить - схем в сети навалом, ищите "конвертер RS232 в TTL"
В сообщении выше описал проблемку, как думаете, что не так?
Вот даташит https://static.chipdip.ru/lib/222/DOC000222375.pdf
Что-то я не понял - зачем 7,8 (RS-232 side) втыкать в ардуину? Ардуина - это TTL side.
Вы выяснили, импульсы какого размаха и полярности идут со сканера?
Спасибо за отклик!
Я ничего не выяснил(. Я не не знаю как это сделать. Вот как написать веб-приложение - знаю. Как на линуксе поднять телефонию - знаю. А это дается с трудом. Осцилографа у меня нет. Я бы проверил. Есть даташит только и желание все это заставить работать.
Я думаю что схема должна быть такая: считыватель - max232 - ардуино
Но не удивительно что это пока что не получается.
Что-то я не понял - зачем 7,8 (RS-232 side) втыкать в ардуину? Ардуина - это TTL side.
Вы выяснили, импульсы какого размаха и полярности идут со сканера?
Согласно этого даташита походу так нужно
Считыватель tx, rx - 14 (t1 out), 13 (r1 in)
На ардуину rx tx - 11(r in), 12(t out)
Как в мультике - ННННичего не понимаю. ))
Что-то я не понял - зачем 7,8 (RS-232 side) втыкать в ардуину? Ардуина - это TTL side.
Вы выяснили, импульсы какого размаха и полярности идут со сканера?
УРА! Вроде б разобрался:
считыватель - 14 и 13
на ардуину - 12 и 11
Я сам постоянно путаюсь в ногах MAX232.
Насколько помню: TxIN - от TX TTL устройства (прием данных от ардуины) , RxOUT - к RX TTL устройства (передача на ардуину), TxOUT - к RX RS232 устройства (передача данных на сканер), RxIN - от TX RS232 устройства (прием со сканера).
Я сам постоянно путаюсь в ногах MAX232.
Насколько помню: TxIN - от TX TTL устройства (прием данных от ардуины) , RxOUT - к RX TTL устройства (передача на ардуину), TxOUT - к RX RS232 устройства (передача данных на сканер), RxIN - от TX RS232 устройства (прием со сканера).
Спасибо! Теперь мне понятно, почему у меня данные ходили "чепуховые"
Скажите, как думаете - если данные теперь приходят корректно СО считывателя на ардуину, то теперь можно нормально посылать в Сериал команды НА считыватель С ардуино? По идее теперь все должно быть правильно же))
Я сам постоянно путаюсь в ногах MAX232.
Ещё бы! 16 пинов - это Вам не три сосны. И в тех то народ иногда блаждает :))))
Если данные приходят со сканера действительно корректными, то по идее - и на сканер должны приходить тоже верные.
Если данные приходят со сканера действительно корректными, то по идее - и на сканер должны приходить тоже верные.
Я проверил в стоковой программе, которая на пару со считывателем была - и стандарт меток uhf глянул, да - 100% все верное! Даже настроение улучшилось.
Ещё бы! 16 пинов - это Вам не три сосны. И в тех то народ иногда блаждает :))))
Да не... Когда UPS по RS232 к ардуине подключал, то обнаружил, что вендоры свои RX-TX на дальних разъемах иногда наоборот пишут. Видимо, чтобы понятно было, что RX разъёма UPS соединять с RX разъема ПК, а не путать пользователя. Ну, вобщем, в первый раз я этот MAX232 вертел во все стороны полдня - никак не мог понять, куда ей данные совать и откуда вытаскивать.
RX-TX на дальних разъемах иногда наоборот пишут
Так китайцы и безо всякой MAX232 - "RX-TX иногда наоборот пишут".
Видимо, чтобы понятно было
:)))))