GPS-модуль Значение Serial.begin

Я разобрал дрон и нашел модуль GPS. Я хочу использовать его. Я не нашел никакой информации об архитектуре и значении Serial.begin, которое мне нужно использовать. Смогу ли я сломать его, если попробую разные значения Serial.begin, такие как 4800, 9600 и разные типы архитектуры, такие как NMEA, с TinyGPS?

Модуль: https://www.aliexpress.us/item/3256805691773977.html

Я попробовал этот эскиз, и ss.available() постоянно ложный, почему нет доступных символов?

#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* Этот пример кода демонстрирует обычное использование объекта TinyGPS.
Для этого требуется использование SoftwareSerial и предполагается, что у вас есть
Устройство GPS с последовательным портом 4800 бод, подключенное к контактам 4(rx) и 3(tx).
*/

TinyGPS gps;
SoftwareSerial ss(4, 3);

void setup()
{
  Serial.begin(115200);
  ss.begin(4800);
  
  Serial.print("Simple TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
}

void loop()
{
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
      char c = ss.read();
      // Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

  if (newData)
  {
    float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    Serial.print("LAT=");
    Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    Serial.print(" LON=");
    Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    Serial.print(" SAT=");
    Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    Serial.print(" PREC=");
    Serial.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
  }
  
  gps.stats(&chars, &sentences, &failed);
  Serial.print(" CHARS=");
  Serial.print(chars);
  Serial.print(" SENTENCES=");
  Serial.print(sentences);
  Serial.print(" CSUM ERR=");
  Serial.println(failed);
  if (chars == 0)
    Serial.println("** No characters received from GPS: check wiring **");
}

, 👍0

Обсуждение

Нет, модуль не сломается из-за неправильной скорости передачи данных., @chrisl

спасибо, а что насчет протокола?, @drMAIN

Что ты имеешь в виду? Хотите получить объяснение протокола модулей? Мы также можем найти в Google только техническое описание модуля. Без номера детали это тоже невозможно. Хотя такие модули часто отправляют удобочитаемые данные (в формате ASCII) по последовательному порту. Таким образом, вы можете просмотреть данные в последовательном мониторе и проверить, как их читать. Это то, что вам нужно проверить самостоятельно (у нас нет вашего модуля), @chrisl

Вероятно, хорошее и четкое изображение этого GPS-модуля помогло бы. Кстати, модули GPS, с которыми я работал, начинают работать либо на 9600, либо на 15200. Если вы хотите узнать о GPS, возможно, лучше приобрести заведомо хороший GPS-модуль от таких компаний, как SparkFun или adafruit. Любой поставщик/производитель имеет хорошее присутствие в Интернете, поддержку и сообщество. Все хорошие ресурсы для людей с большим количеством вопросов., @st2000

Кстати, последовательные протоколы, такие как RS232, вероятно, существовали еще до вашего рождения (без обид). В те времена, когда несколько вещей должны были быть всем для всех. Его назвали «стандартом, которого нет». Тем не менее, основными регуляторами являются скорость, количество бит данных, количество стоповых битов и четность. Вы должны быть в состоянии возиться со всем этим, не беспокоясь о повреждении того, что подключено. О чем вам следует беспокоиться: истинное напряжение RS232 колеблется от -12 В до 12 В. Это, безусловно, станет поводом для тревоги. Но большинство Arduino выдают RS232 как импульсы с напряжением от 0 до 5 В или от 0 до 3 В., @st2000

ок, спасибо, последнее: модуль GPS подключен правильно, но в библиотеке **SoftwareSerial** нет данных, я изменил вопрос, почему это происходит, должен ли я передать некоторые данные на контакт tx модуля перед получением данные на приеме?, @drMAIN

Как вы подключили модуль? Обычно для последовательных соединений вы подключаете контакт RX Arduino к контакту TX модуля и наоборот., @StarCat

я сделал это, и это не сработало, возможно, мне нужно передать некоторые данные модулю, прежде чем он сможет запуститься, @drMAIN


1 ответ


0

Модуль GPS, к которому вы подключаетесь, имеет двойной режим UART-I2C. Вы переключаетесь между этими двумя режимами путем (де)пайки резисторов. Сначала проверьте, в каком режиме находится модуль.

Большинство GPS в наши дни работают со скоростью 9600 бод в режиме UART. Попробуйте и это.

,