Имеется модуль GPS NEO 6M, пытаюсь подключить. Скетч из примера библиотеки TinyGPS Код (C++): #include <SoftwareSerial.h> #include <TinyGPS.h> TinyGPS gps; SoftwareSerial ss(4, 3); void setup() { Serial.begin(9600); ss.begin(9600); } void loop() { bool newData = false; unsigned long chars; unsigned short sentences, failed; for (unsigned long start = millis(); millis() - start < 1000;) { while (ss.available()) { char c = ss.read(); 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 **"); } Подключение: ARDUINO GPS 5V------------>VCC GND--------->GND D4------------>RX D3------------>TX По результату не видит данных от GPS. Что делать и как бороться? Штука вроде примитивная по подключению, все просто должно быть...
Просто подключите питание и TX модуля в пин 1 ардуины, запустите монитор порта и смотрите что происходит. Возможно, придется подобрать скорость. Для вычисления координат и времени из приходящих данных потребуется всего лишь парсить эти строчки.
Я так понимаю, достаточно пустого скетча, чтобы смотреть содержимое порта? Ну, кроме Serial.begin? Или я что-то не так понимаю?
Не, ничего нет. Специально на ночь оставлял на балконе, думал - время нужно чтобы спутники прогрузились. Но нет.
Инфо идет сразу даже без спутников, просто не сразу координаты и время выскакивает. Я вот не поленился собрал еще раз и у меня сразу пошло такое: Проверьте соединения. TX ---> D1 Скетч пустой. Скорость монитора 9600.
У ублоксов есть настройка какой протокол в какой порт слать. То есть можно так "настроить" модуль, что он не будет выдавать никаких данных. Настраивать в u-center.
Помогите почему когда я использую библиотеку TinyGPS - TinyGPS++ у меня координаты не приходят, а если использовать обычный скетч координаты есть даже в программе u-center показывает но не при TinyGps
Без библиотеки TinyGPS прилетают неверные координаты, я точно не знаю может быть там есть вычисление, но в данный момент мне нужно что бы работало библиотека TinyGPS - TinyGPS++ Вот скетч который я использую, он загружается верно но не прилетают координаты, частоту я настроил как нужно ибо при других частотах не ловило #include <TinyGPS++.h> #include <SoftwareSerial.h> static const int RXPin = 2, TXPin = 3; static const int GPSBaud = 57600; TinyGPSPlus gps; SoftwareSerial ss(RXPin, TXPin); void setup() { Serial.begin(115200); ss.begin(GPSBaud); Serial.println(F("FullExample.ino")); Serial.println(F("An extensive example of many interesting TinyGPS++ features")); Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion()); Serial.println(F("by Mikal Hart")); Serial.println(); Serial.println(F("Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum")); Serial.println(F(" (deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail")); Serial.println(F("---------------------------------------------------------------------------------------------------------------------------------------")); } void loop() { static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002; printInt(gps.satellites.value(), gps.satellites.isValid(), 5); printInt(gps.hdop.value(), gps.hdop.isValid(), 5); printFloat(gps.location.lat(), gps.location.isValid(), 11, 6); printFloat(gps.location.lng(), gps.location.isValid(), 12, 6); printInt(gps.location.age(), gps.location.isValid(), 5); printDateTime(gps.date, gps.time); printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2); printFloat(gps.course.deg(), gps.course.isValid(), 7, 2); printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2); printStr(gps.course.isValid() ? TinyGPSPlus::cardinal(gps.course.value()) : "*** ", 6); unsigned long distanceKmToLondon = (unsigned long)TinyGPSPlus::distanceBetween( gps.location.lat(), gps.location.lng(), LONDON_LAT, LONDON_LON) / 1000; printInt(distanceKmToLondon, gps.location.isValid(), 9); double courseToLondon = TinyGPSPlus::courseTo( gps.location.lat(), gps.location.lng(), LONDON_LAT, LONDON_LON); printFloat(courseToLondon, gps.location.isValid(), 7, 2); const char *cardinalToLondon = TinyGPSPlus::cardinal(courseToLondon); printStr(gps.location.isValid() ? cardinalToLondon : "*** ", 6); printInt(gps.charsProcessed(), true, 6); printInt(gps.sentencesWithFix(), true, 10); printInt(gps.failedChecksum(), true, 9); Serial.println(); smartDelay(1000); if (millis() > 5000 && gps.charsProcessed() < 10) Serial.println(F("No GPS data received: check wiring")); } static void smartDelay(unsigned long ms) { unsigned long start = millis(); do { while (ss.available()) gps.encode(ss.read()); } while (millis() - start < ms); } static void printFloat(float val, bool valid, int len, int prec) { if (!valid) { while (len-- > 1) Serial.print('*'); Serial.print(' '); } else { Serial.print(val, prec); int vi = abs((int)val); int flen = prec + (val < 0.0 ? 2 : 1); // . and - flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1; for (int i=flen; i<len; ++i) Serial.print(' '); } smartDelay(0); } static void printInt(unsigned long val, bool valid, int len) { char sz[32] = "*****************"; if (valid) sprintf(sz, "%ld", val); sz[len] = 0; for (int i=strlen(sz); i<len; ++i) sz = ' '; if (len > 0) sz[len-1] = ' '; Serial.print(sz); smartDelay(0); } static void printDateTime(TinyGPSDate &d, TinyGPSTime &t) { if (!d.isValid()) { Serial.print(F("********** ")); } else { char sz[32]; sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year()); Serial.print(sz); } if (!t.isValid()) { Serial.print(F("******** ")); } else { char sz[32]; sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second()); Serial.print(sz); } printInt(d.age(), d.isValid(), 5); smartDelay(0); } static void printStr(const char *str, int len) { int slen = strlen(str); for (int i=0; i<len; ++i) Serial.print(i<slen ? str : ' '); smartDelay(0); }
Может мы говорим о разных устройствах? То, про которое я говорю вообще никак не зависит от того что к нему подключено, оно просто выдает в UART информацию о координатах в текстовом виде (см пример выше) и времени раз в секунду. Можно распарсить ее либо правильно, либо неправильно.
И ещё: http://www.prin.ru/images/old_site/about_trm_copernicus_ii_rus.pdf http://www.gaw.ru/html.cgi/txt/ic/Trimble/start_gps.htm http://wiki.wildsong.biz/index.php/GPS_Protocols А так же: Если устройство не настроено на выдачу с интервалом, то и выдавать не будет!!! Если память не изменяет то TSIP позволяет производить обращение к устройству и соответственно им и производится конфигурация. Им же и задаётся задание в настройках содержание выдаваемых пакетов. Настройки могут быть и по выдаче по запросу. Ведь не зря там есть и TX и RX.
Дело в том что у меня TinyGps++ работало по начало, но по неизвестным мне причинам он перестал работать! =(, Я уверен что запчасти установлены правильно как и в arduino так и в gps модуле "A7 AI-Thinker"
Выход на вскидку думаю один есть. Это если есть возможность (не знаю что за модуль "A7 AI-Thinker" такой - но думаю что-то для связи вашего модуля с PC для тестирования и настройки) то поставьте настройку на выдачу пакета NMEA вместе с выдачей синхроимпулса. (в нашем случае был таковой - секундный от времени GPS). А NMEA и будете парсить. Самое простое предположение - это просто слетели настройки. Сложнее если вы его сгубили. У нас мрдуль питался от 3.3 в. Настроить можно на выдачу пакета с захватом времени GPS при наличии спутников (он их поймал), либо по внешнему запросу по RX/TX. И пакеты с синхронизацией были только при наличии спутников (от 4 шт). Кстати TSIP и TAIP стали стандартом и применяются не только Trimble.
Все получилось TinyGPS++ работает ! Но вышла еще одна проблема, GPRS когда пишу AT+SAPBR=1,1 – установка соединения с сим картой. выдаёт ошибку +CME ERROR:58 Я искал эту ошибку в гугле но не нашёл нужный ответ, из за чего это может быть ? подскажите если знаете