Всем доброго дня!
Намучался я с gps NEO 6M, приходят не рабочие, но один пришёл хороший =).
Решил в итоге собрать эту приблуду на esp8266 + OLED(128*64) + neo 6m.
Изучив информацию о получении данных об ограничении скоростного режима, понял что с помощью Яндекса и Гугла их не получить, так как требуется отображать сами карты. Почитав форумы нашел еще пару сервисов которые вроде как могут предоставить нужные данные.
На данный момент сейчас пытаюсь разобраться с получением этих данных от OpenStreetMap, но так же безрезультатно(скорее всего я не правильно отправляю запрос).
Получилось только получать координаты + выводить текущую скорость. Но и с текущей скоростью проблемы.
1) Если получать так, то скорость на 15-20 км/ч ниже ,чем в действительности
void loop() {
while (gpsSerial.available() > 0) {
if (gps.encode(gpsSerial.read())) {
if (gps.speed.isValid()) {
display.clearDisplay();
display.setCursor(0, 0);
display.print("Speed: ");
display.print(gps.speed.kmph());
display.print(" km/h");
display.display();
}
}
}
2)А если получать таким способом, вытаскивая данные из строки, то скорость отображается 8-10 км/ч стоишь ты или едешь. Но можно еще таким способом получить скорость в морских милях....такое себе)
oid loop() {
if (gpsSerial.available()) {
String gpsData = gpsSerial.readStringUntil('\n');
//int speed = gpsSerial.read();
if (gpsData.startsWith("$GPGGA")) {
// Обработка данных GPS и получение координат
String latitude = ""; // Полученная широта
String longitude = ""; // Полученная долгота
String speed = "";
// Разбиваем строку на поля
int fieldCount = 0;
int startIndex = 0;
int commaIndex = 0;
int endIndex = gpsData.indexOf(",");
while (endIndex > 0) {
if (fieldCount == 2) {
latitude = gpsData.substring(startIndex, endIndex);
} else if (fieldCount == 4) {
longitude = gpsData.substring(startIndex, endIndex);
} else if (gpsData.startsWith("$GPRMC")) {
// Разделение строки данных на поля с помощью запятых
for (int i = 0; i < gpsData.length(); i++) {
if (gpsData[i] == ',') {
commaIndex++;
if (commaIndex == 3) {
latitude = gpsData.substring(i + 1, i + 10).toFloat();
} else if (commaIndex == 5) {
longitude = gpsData.substring(i + 1, i + 11).toFloat();
} else if (commaIndex == 7) {
speed = gpsData.substring(i + 1, i + 6);
break;
}
}
Во втором примере так видно, что у neo 6m есть разные строки с данными.
"$GPGGA" и "$GPRMC".
В "$GPGGA" если правильно понял нет данных о скорости и я могу вытащить только координаты в формате, которые поймет OpenstreetMap :
В "$GPRMC" имеются данные о скорости, но в узлах (переводить в км/ч для меня пока невыполнимо) =)
+ получалось выводить скорость в узлах,она менялась при движении, НО на месте она показывает 0.450*
Собственно вопросы и просьба подсказать)
- Как получать адекватную скорость?
- Какие могут быть еще способы, получения данных по координатам об ограничении скорости на дороге?