Автоматика и аппаратура связи Дистанционное и непосредственное управление исполнительными механизмами, сотовая, а также радиосвязь. |
12.07.2019, 21:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Алгоритм для прозрачного моста serial на sx1278
Привет!
Дано: ардуинки, ra-01 пара.
Надо: прозрачный мост. Что в одну ардуинку по serial упало, то выпало из другой, и наоборот.
Как правильнее организовать, чтобы минимизировать задержки - неизвестно, как будут сыпаться данные, может с обоих сторон шарагить будет..
Пока смотрю на этот пример: https://github.com/sandeepmistry/ard...pleGateway.ino
Как я понял, есть шлюз и есть нода. Есть один передает - другой слушает, и наоборот. Верно ли я понимаю, что срастив энто дело с механизмом while serial.avaliable, и ограничив буфером определеного размера (начинать передачу даже если serial ещё avaliable) и аналогично с другой стороны, можно рассчитывать на успех?
В принципе, есть надежда что та гадость, что должна гулять по этому делу, вменяемая. То есть если данные передала - ждёт ответ или делает iddle.
Что там конкретно внутри - пока понятия не имею.. Телеметрия для inav, которого пока под рукой тоже нету)
Но hc-12, будучи зарряженными под задачу, справляются. Но хочется дальше и дешевле)
|
|
|
|
12.07.2019, 21:42
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: Алгоритм для прозрачного моста serial на sx1278
whoim, для начала понять насколько нужно квитирование.
Без него получится вариация UDP
Дальше уже разобраться с длиной сообщений, возможными скоростями передачи на нужное расстояние, накладными физического уровня и посчитать максимальные скорости передачи и приема.
Потом поделить полученное на ~1.5 (ошибки, запас) и выяснить достаточность полученной скорости для решения задачи.
После этих вычислений и при положительном ответе можно приступать к экспериментам.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
12.07.2019, 21:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Алгоритм для прозрачного моста serial на sx1278
mike-y-k, да едрен батон)
А как нибудь так можно?) Безо всего этого?)
|
|
|
|
13.07.2019, 00:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 15.11.2010
Сообщений: 2,379
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
|
Сообщение от whoim
|
mike-y-k, да едрен батон)
А как нибудь так можно?) Безо всего этого?)
|
в этих ваших ардуинах полно примеров с библиотеками. Неужели там нет какого-то примера типа пинг-понга?
Сообщение от mike-y-k
|
Потом поделить полученное на ~1.5 (ошибки, запас)
|
в 1278 это все присутствует аппаратно и даже умеет исправлять их.
Последний раз редактировалось mike-y-k; 13.07.2019 в 01:40.
|
|
|
|
13.07.2019, 00:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
parovoZZ, этот пример, только более навороченный, я и упомянул в посте. Но меня не это волнует, а в целом алгоритм правильный.. Организация буффера и т.п. Ну и пофлудить)
В общем, буду ждать пока приедут платки со 168мы атмегами. Они миниатюрные (ардуино микро), и 3.3в с вроде нормальными LDO на 0.5А минимум, чтоб сразу модуль приклеить к ней и запитать от нее же, и с уровнями все нормально.
Тогда и проверю. А так вроде в мониторе порта гоняет )
Принцип: есть буфер для приема по uart. Если он заполняется либо прием в него останавливается на установленное время, идет его отправка в модуль.
Все остальное время - на приеме и выплевывании в порт что пришло.
Компилится)
Код:
|
#include ‹SPI.h›
#include ‹LoRa.h›
/*
Gateway - Sends messages with enableInvertIQ()
- Receives messages with disableInvertIQ()
Node - Sends messages with disableInvertIQ()
- Receives messages with enableInvertIQ()
With this arrangement a Gateway never receive messages from another Gateway
and a Node never receive message from another Node.
Only Gateway to Node and vice versa.
InvertIQ function basically invert the LoRa I and Q signals.
See the Semtech datasheet, http://www.semtech.com/images/datasheet/sx1276.pdf
for more on InvertIQ register 0x33.
*/
#define LORA_FREQ 433E6 // LoRa LORA_FREQ
#define LORA_CS_PIN 10 // LoRa radio chip select
#define LORA_RESET_PIN 9 // LoRa radio reset
#define LORA_IRQ_PIN 2 // change for your board; must be a hardware interrupt pin
#define TX_BUFF_SIZE 100
#define TX_BUFF_TIMEOUT 20
String tx_buffer_str = "";
boolean SendPacketFlag = false;
boolean LoRa_started = false;
uint8_t tx_buff_counter = 0;
unsigned long last_serial_rx_millis;
void setup() {
// initialize serial:
Serial.begin(9600);
while (!Serial);
//reserve buffer
tx_buffer_str.reserve(TX_BUFF_SIZE);
//LoRa
LoRa.setPins(LORA_CS_PIN, LORA_RESET_PIN, LORA_IRQ_PIN);
LoRa_started = LoRa.begin(LORA_FREQ);
if (!LoRa_started) {
Serial.println("LoRa init failed. Check your connections.");
} else {
LoRa.enableCrc();
LoRa.onReceive(onReceive);
LoRa_rxMode();
}
Serial.println("Start now");
}
void loop() {
if (SendPacketFlag) {
if(LoRa_started) {
LoRa_sendmessage(tx_buffer_str);
}
else {
Serial.print(tx_buffer_str); //debug
}
// clear the string:
tx_buffer_str = "";
tx_buff_counter = 0;
SendPacketFlag = false;
}
if( ((millis() - last_serial_rx_millis) › TX_BUFF_TIMEOUT) && (tx_buff_counter != 0) ) {
SendPacketFlag = true;
last_serial_rx_millis = millis();
}
}
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
tx_buffer_str += inChar;
tx_buff_counter++;
if (tx_buff_counter == TX_BUFF_SIZE) {
SendPacketFlag = true;
}
else {
last_serial_rx_millis = millis();
}
}
}
void LoRa_rxMode(){
LoRa.disableInvertIQ(); // normal mode
LoRa.receive(); // set receive mode
}
void LoRa_txMode(){
LoRa.idle(); // set standby mode
LoRa.enableInvertIQ(); // active invert I and Q signals
}
void LoRa_sendmessage(String msg) {
LoRa_txMode(); // set tx mode
LoRa.beginPacket(); // start packet
LoRa.print(msg); // add payload
LoRa.endPacket(); // finish packet and send it
LoRa_rxMode(); // set rx mode
}
void onReceive(int packetSize) {
String rx_buffer = "";
while (LoRa.available()) {
rx_buffer += (char)LoRa.read();
}
Serial.print(rx_buffer);
} |
если взлетит - можно какой нибудь семисегментник даже прилепить на базу, RSSI отображать.
Последний раз редактировалось mike-y-k; 13.07.2019 в 01:35.
|
|
|
|
13.07.2019, 00:57
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,703
Сказал спасибо: 189
Сказали Спасибо 3,193 раз(а) в 2,070 сообщении(ях)
|
Re: Алгоритм для прозрачного моста serial на sx1278
__________________
кагмаподэ магмаподэ
|
|
|
|
13.07.2019, 00:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Алгоритм для прозрачного моста serial на sx1278
индюк, 1 052,29 руб x2, это две тыщи. И за них - 1км.
Ну как то совсем грустно. Я ардуинки заказал по 139р, ra-01 лежали уже давно, тоже недорого брал поковырять.
Да! Поковырять же. В этом суть)
|
|
|
|
13.07.2019, 01:03
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,703
Сказал спасибо: 189
Сказали Спасибо 3,193 раз(а) в 2,070 сообщении(ях)
|
Re: Алгоритм для прозрачного моста serial на sx1278
ну фишка в том что париться с проверками не надо.
послал свои 8 бит и получил. все.
за это и есть 1 тыща рэ.
я то голые си4432 использую. есть о чем подумать там
__________________
кагмаподэ магмаподэ
|
|
|
|
13.07.2019, 01:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Алгоритм для прозрачного моста serial на sx1278
индюк, ну так тут то же самое, с либой. Но - теоретически)
Во всех этих модулях примерно так же все организовано - МК читает юсарт и шлет через спай на модуль.
|
|
|
|
13.07.2019, 01:15
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,703
Сказал спасибо: 189
Сказали Спасибо 3,193 раз(а) в 2,070 сообщении(ях)
|
Re: Алгоритм для прозрачного моста serial на sx1278
Сообщение от whoim
|
Во всех этих модулях примерно так же все организовано - МК читает юсарт и шлет через спай на модуль.
|
только попутно нехило обррабатывает и все гавно эфира до тебя не долетает.
а ты сам бушь кодить месяцы пока связь не наладишь.
\а сколько месяц у тебя стоит??
__________________
кагмаподэ магмаподэ
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Ускорить компьютер
|
7Fantomas7 |
Ремонт оргтехники |
111 |
08.08.2018 05:27 |
Часовой пояс GMT +4, время: 23:16.
|
|