Передача координат GPS

sivanko
Offline
Зарегистрирован: 25.02.2016

Добрый день всем.

Возникла задача передачи координат GPS (DD.DDDDD: 50.67916 в.д., 40.841666 с.ш) и третьего целого числа в пределах 100 между двумя ардуинами через модули NRF24. Натолкните на идею. С даными модулями пока не стыкался. Находил примеры где передаются числа в пределах 1024. Но это слегка не то...

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

для начала - типичные NRF24 с Али-экспресса способны связаться на 100м только в чистом поле в безветренную погоду. Если вам надо уверенные 100м в здании - берите HC-12

Передавать то что вы хотите можно разными способами - можно как float. а можно как строку. И то и другое можно найти в десятках примеров в инете.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

не, он имел ввиду, что в том примере числа передавались от 0 до 1024.  А как передавать от 0 до 100, а тем более float, он не вдупляет. 

sivanko
Offline
Зарегистрирован: 25.02.2016

b707 пишет:

д берите HC-12

https://ru.aliexpress.com/item/HC-12-HC12-433-wireless-serial-port-modul...

Вот такие модули? Скетч для них такой же как и для NRF24?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sivanko пишет:
Скетч для них такой же как и для NRF24?
Тогда не берите :(

sivanko
Offline
Зарегистрирован: 25.02.2016

Спасибо за исчерпывающие ответы! Не хотите помочь - хоть не издевайтесь. Не все же сразу очень умными рождаются!

CheS_66
CheS_66 аватар
Offline
Зарегистрирован: 08.02.2017

sivanko пишет:

Не хотите помочь - хоть не издевайтесь.

Просите помощи,а сами даже описаие модуля HC-12 почитать не удосужились. Открою страшную тайну - пара таких модулей сможет самостоятельно передать данные с гпс-приемника, т.к. если их правильно настроить, получится радиоудлинитель. Останется только в приемнике привести их в нужный вам вид. Как-то так. 

sivanko
Offline
Зарегистрирован: 25.02.2016

Уже почитал... Был тогда на работе, думал это какойто более продвинутый аналог nrf...

Если я правильно понял то для передачи 3 чисе нужно в передатчике написать

  Serial.print(data[0]);
  Serial.print(data[1]);
  Serial.print(data[2]);
а для приема в приемнике 
    data[0] = Serial.read();
    data[1] = Serial.read();
    data[2] = Serial.read();

В начале само собой настроить порт...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sivanko пишет:

Если я правильно понял 

К сожалению, нет, неправильно.

vvadim
Offline
Зарегистрирован: 23.05.2012

данные формируете в строку и передаёте.
в приёмнике парсите полученую строку .

sivanko
Offline
Зарегистрирован: 25.02.2016

Тоесть в приемнике нужно три числа превратить в 3 строки, сформировать общую, отправить...

А в приемнике полученнную строку разбить на части и потом преобразовать из строк в числа?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Можно и так. А можно не превращать в строки, а честно отправлять числами, а в приёмнике честно числа принимать.

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

Кстати, Вы же наверняка попробовали и убедились, что не работает. Зачем тогдаздесь спрашиваете, правильно или нет?

sivanko
Offline
Зарегистрирован: 25.02.2016

Еще не пробовал, жду посылку с Али.

Тоесть тогда в передатчике - Serial.print(data[0],data[1],data[2]); ?

А как тогда в приемнике?

Olvin
Offline
Зарегистрирован: 01.08.2018

sivanko пишет:

Тоесть в приемнике нужно три числа превратить в 3 строки, сформировать общую, отправить...

А в приемнике полученнную строку разбить на части и потом преобразовать из строк в числа?

Да, примерно так.

Строки советуют для того, чтобы вы не заморачивались с протоколами передачи. Чтобы просто отправили строку и приняли строку. Там по-простому отслеживаются разделители данных, начало и конец посылки (символы " ", "\n"), но и нет механизма отслеживания сбоев приёма/передачи. Впрочем, последнее вам, наверное, не критично.

Olvin
Offline
Зарегистрирован: 01.08.2018

sivanko пишет:

Еще не пробовал, жду посылку с Али.

Тоесть тогда в передатчике - Serial.print(data[0],data[1],data[2]); ?

А как тогда в приемнике?

У вас так даже разделить числа не получилось, всё смешалось в ряд цифр.

Я бы сделал что-то вроде:

#define BUF_LEN 100 // 100 взято просто для примера, реальный размер сами определите
char str[BUF_LEN];

snprintf(str, BUF_LEN, "%d %d %d", latitude, longitude, altitude);
Serial.println(str)

Этот код не учитывает нюансов, он просто показывает примерно, как формировать такую строку.

sivanko
Offline
Зарегистрирован: 25.02.2016

 Спасибо. Я думал делить по количеству символов.  Там первые два числа 9 символов, третье 4.

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

sivanko - ответьте для начала на вопрос - откуда берутся те координаты. что будет передавать приемник?

Потому как если это GPS-модуль с Serial интерфейсом, то, как правильно подсказали в #6 -  на передатчике Вы вообще можете обойтись без ардуины, просто гоните весь вывод из GPS напрямую в HC-12. а разбирайте кординаты уже на приемнике

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

По моему на 433 Мегагерца нельзя передавать постоянно.
Вроде когда-то было 5 процентов по времени.
Да ещё и с такой мощьностью.
Все брелки в округе перестанут работать.

sivanko
Offline
Зарегистрирован: 25.02.2016

b707 пишет:

sivanko - ответьте для начала на вопрос - откуда берутся те координаты. что будет передавать приемник?

Это будет приблуда на карповый кораблик. Там кроме координат еще будет передаваться сигнал от глубиномера. А в приемнике уже буддет вычисляться растояние от берега, запоминание точек лова , расстояние до точек. И постоянно передавать сигнал не нужно, достаточно раз в 5-10 секунд пока плавает. И вообще режим работы не постоянный, завез снасти - и ждешь пока клюнет...

 

CheS_66
CheS_66 аватар
Offline
Зарегистрирован: 08.02.2017

Я когда с HC-12 экспериментировал - брал обычный китайский гпс-модуль с алиэкспресса. Там по умолчанию вывод данных раз в секунду. Но хитрым родным софтом можно выставить другой интервал. Сигналки машинам может забивать при некоторых условиях)