Отправка в разные порты SoftwareSerial

tryinfinity
Offline
Зарегистрирован: 24.04.2017

Доброго дня. Задача состоит в том, чтоб отправлять из терминала в ардуино команды, а сама ардуино понимала на какой порт слать. Вот к примеру из терминала отправляю команду "port_0001:AT"

#include <SoftwareSerial.h>

SoftwareSerial port_0001(10, 11); // TX, RX
SoftwareSerial port_0002(12, 13); // TX, RX

void setup() {
  Serial.begin(9600);
  port_0001.begin(9600);
  port_0002.begin(9600);
}

void loop() {
  while (Serial.available() > 0){
    char recieved = Serial.read(); //получаю данные из терминала, в моем случае это "port_0001:AT"
    String strData = String(recieved); //перевожу в string
    if (strData.indexOf("port_0001") > -1){ //ищу "port_0001"
        port_0001.write(recieved); //если нахожу, то передаю в ардуино (надо будет еще отсечь данные до двоеточия)
    }    
    if (strData.indexOf("port_0002") > -1){
        port_0002.write(recieved);
    }
  }
}

Подскажите пожалуйста, может есть готовые решения и я изобретаю велосипед?

C char recieved намаился, он в потоке постоянно меняется, а за пределами while пустой.

 

Komandir
Offline
Зарегистрирован: 18.08.2018

Из Serial читается один символ, а не строка ...

b707
Offline
Зарегистрирован: 26.05.2017

tryinfinity - хоть это и не совсем по теме вопроса - но имейте в виду, что два СофтСериала одновременно использованы быть не могут, так что даже после того, как вы разберетесь с приемом -  вышеприведенный код работать не будет

b707
Offline
Зарегистрирован: 26.05.2017

tryinfinity пишет:

C char recieved намаился, он в потоке постоянно меняется, а за пределами while пустой.

еще бы! - он за пределами while вообще не существует...

вам прочитать что-нибудь про области видимсоти переменных

tryinfinity
Offline
Зарегистрирован: 24.04.2017

b707 пишет:

tryinfinity - хоть это и не совсем по теме вопроса - но имейте в виду, что два СофтСериала одновременно использованы быть не могут, так что даже после того, как вы разберетесь с приемом -  вышеприведенный код работать не будет

Т.е. не получится отправить из терминала сначала на первый СофтСериал, получить ответ, а потом тоже самое на второй?

А как быть тогда, если мне нужно общаться с несколькими девайсами?

b707
Offline
Зарегистрирован: 26.05.2017

tryinfinity пишет:

Т.е. не получится отправить из терминала сначала на первый СофтСериал, получить ответ, а потом тоже самое на второй?

А как быть тогда, если мне нужно общаться с несколькими девайсами?

Нет, в теории работать с двумя софтсериалами возможно, но при смене нужно их переключать методом listen() и одновременно принимать данные может только один порт. На практике, по отзывам,  даже это работает с некоторыми глюками.

Если нужно общаться несколькими девайсами, самое простое - взять контроллер с несколькими Сериалами - Ардуино Мега или СТМ32

tryinfinity
Offline
Зарегистрирован: 24.04.2017

b707 пишет:

Нет, в теории работать с двумя софтсериалами возможно, но при смене нужно их переключать методом listen() и одновременно принимать данные может только один порт. На практике, по отзывам,  даже это работает с некоторыми глюками.

Если нужно общаться несколькими девайсами, самое простое - взять контроллер с несколькими Сериалами - Ардуино Мега или СТМ32

Вот блин, на Меге всего 4 сериала, а мне надо много. Если купить на каждый девайс UART, то на компе нужно кучу USB.

nik182
Offline
Зарегистрирован: 04.05.2015

С многими устройствами общаются по шине. 485 или i2c или ещё что нибудь.

Гриша
Offline
Зарегистрирован: 27.04.2014

tryinfinity пишет:

Вот блин, на Меге всего 4 сериала, а мне надо много. Если купить на каждый девайс UART, то на компе нужно кучу USB.

 в смысле USB Hub,11 Ports маловато или дороговато будет? так это просто пример...

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

tryinfinity
Offline
Зарегистрирован: 24.04.2017

Спасибо что вовремя меня остановили, а то бы потратил кучу времени и денег)

nik182 пишет:
С многими устройствами общаются по шине. 485 или i2c или ещё что нибудь.

Если не сложно, дайте пожалуйста пример железки, чтоб подключить к ней много девайсов с обменом через RX TX.

b707
Offline
Зарегистрирован: 26.05.2017

tryinfinity пишет:

Если не сложно, дайте пожалуйста пример железки, чтоб подключить к ней много девайсов с обменом через RX TX.

много - это сколько?

tryinfinity
Offline
Зарегистрирован: 24.04.2017

b707 пишет:

tryinfinity пишет:

Если не сложно, дайте пожалуйста пример железки, чтоб подключить к ней много девайсов с обменом через RX TX.

много - это сколько?

32

b707
Offline
Зарегистрирован: 26.05.2017

tryinfinity пишет:

b707 пишет:

tryinfinity пишет:

Если не сложно, дайте пожалуйста пример железки, чтоб подключить к ней много девайсов с обменом через RX TX.

много - это сколько?

32

Может расскажете, что это такое будет? Что-то я очень сомневаюсь. что какая-то ардуинка сможет потянуть такое хотя бы по производительности и обьему памяти...

Вы не обижайтесь, но по некоторым смешным ошибкам в коде в первом сообщении - мне кажется что в программировании вы новичок. Новичкам, знаете ли, свойственно сразу замахиваться на мега-проекты - это обычно происходит от непонимания обьема работы и ограничений ардуины...

tryinfinity
Offline
Зарегистрирован: 24.04.2017

b707 пишет:

Может расскажете, что это такое будет? Что-то я очень сомневаюсь. что какая-то ардуинка сможет потянуть такое хотя бы по производительности и обьему памяти...

Вы не обижайтесь, но по некоторым смешным ошибкам в коде в первом сообщении - мне кажется что в программировании вы новичок. Новичкам, знаете ли, свойственно сразу замахиваться на мега-проекты - это обычно происходит от непонимания обьема работы и ограничений ардуины...

Т.к. тема пошла по другому направлению, возможно ли перейти на личное общение. На данном форуме такой опции нет, поэтому прошу оставить контакт для связи, либо написать мне на tryinfinity@gmail.com

Разумеется за индивидуальные консультации с меня причитается.

Гриша
Offline
Зарегистрирован: 27.04.2014

ОФФТОП

b707 пишет:

Вы не обижайтесь, но по некоторым смешным ошибкам в коде в первом сообщении - мне кажется что в программировании вы новичок. Новичкам, знаете ли, свойственно сразу замахиваться на мега-проекты - это обычно происходит от непонимания обьема работы и ограничений ардуины...

Это вы ошибаетесь! "Дайте мне точку опоры и ARDUINO сервомашинкой перевернет весь мир" , заметьте я о времени выполнения ничего не сказал :))) А ресурса МК хватит - если не бракованый ;). 

nik182
Offline
Зарегистрирован: 04.05.2015

На берите в гугле RS485 и почитайте описание. Скорее всего он Вам подойдёт. Для него USB адаптер стоит 50 руб и для каждой ардуины адаптер Rx Tx 40 руб. На пару проводов можно повесить до 32 устройств на 1200 метров. Да ещё общение можно устроить по протоколу MODBUS ( за ним тоже в гугль).

tryinfinity
Offline
Зарегистрирован: 24.04.2017

nik182 пишет:
На берите в гугле RS485 и почитайте описание. Скорее всего он Вам подойдёт. Для него USB адаптер стоит 50 руб и для каждой ардуины адаптер Rx Tx 40 руб. На пару проводов можно повесить до 32 устройств на 1200 метров. Да ещё общение можно устроить по протоколу MODBUS ( за ним тоже в гугль).

Спасибо за рекомендацию, но я не пойму пока что общей схемы работы по RS485 :)

Ясное видение есть как это сделать через 32 адаптера USB - TTL PL2303, скрутить 32 USB порта (4*4*2), ну и обращаться к каждому из них терминалом через COM порт. Но настараживает гирлянда из USB-HUB (хотя к ней можно подвести отдельно питание).

Ваша рекомендация оптимальней? Если да, то начну копать в этом направлении.

b707
Offline
Зарегистрирован: 26.05.2017

на самом деле еще можно на каждом девайсе поставить WiFi модуль типа ESP-01 - он как раз подключается по RX TX, а дальше рулить всеми девайсами через сеть. У каждого будет свой адрес и проводов не надо. В принципе тут можно и не 32. а много больше устройств завести. если они разом в эфир срать не станут...

nik182
Offline
Зарегистрирован: 04.05.2015

Я не знаю Вашей задачи. Рекомендовать что то не могу. Что бы что то рекомендовать, надо знать как минимум какая зависимость устройств друг от друга. Команды дает только компьютер или какая нибудь ардуинв может влюбой момент времени потребовать внимание к себе? Расстояние на котором находятся ардуины? Как часто происходит обмен? Нужна ли система реального времени или можно подождать несколько сотен милисекунд до выполнения команды?  Есть ешё вопросы по питанию этой гирлянды - земля будет общая или у каждой ардуины своя?

tryinfinity
Offline
Зарегистрирован: 24.04.2017

b707 пишет:

на самом деле еще можно на каждом девайсе поставить WiFi модуль типа ESP-01 - он как раз подключается по RX TX, а дальше рулить всеми девайсами через сеть. У каждого будет свой адрес и проводов не надо. В принципе тут можно и не 32. а много больше устройств завести. если они разом в эфир срать не станут...

Очень интересный вариант. Если я правильно понял, то я WiFi модуль по RX TX подключаю к своему девайсу и управляю им через IP адрес GET/POST запросом? Ардуина нужна будет только чтоб указать сетевые настройки WiFi модулю.

b707
Offline
Зарегистрирован: 26.05.2017

tryinfinity пишет:

Очень интересный вариант. Если я правильно понял, то я WiFi модуль по RX TX подключаю к своему девайсу и управляю им через IP адрес GET/POST запросом? Ардуина нужна будет только чтоб указать сетевые настройки WiFi модулю.

этот модуль содержит свой контроллер, который может программироваться в Ардуино ИДЕ сам по себе, без ардуин