Nano v3 и GPS Neo-6m

skytter
Offline
Зарегистрирован: 18.08.2018

Добрый день !

Буду благодарен за помощь с Ардуинкой (я полный чайник - только начал этим заниматься).

Ситуация такая: сделал схемку на Uno, GPS и OLED - программа выдает на экран координаты, время итд. ВСЕ РАБОТАЕТ

недавно получил NANO v3 (китайский на CH340G) и решил перенести всю схему на неё (плоско-параллельный перенос на такие же пины) - и оно НЕ работает (дисплей работает, но не обновляет текст, хотя GPS работатет и словил спутники - Led горит)

 

почитав форумы, выяснил что надо выставлять BAUD rate в SerialMonitor.begin() в 4 раза выше чем в окне Serial Monitor IDE (иначе кракозябры вылезали). Но схема не видит GPS - на выходе из SoftwareSerial сполшь кракозябры (пробовал играть со скоростью GPS - без результатов).

 

Сломал себе мозг, пытаясь понять в чем дело .... Буду очень признателен за любую помощь/совет

 

мой код:

#define I2C_ADDRESS 0x3C
#include <math.h>
#include <stdio.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiAvrI2c.h"
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#define ARDUINO_GPS_RX 4
#define ARDUINO_GPS_TX 3
#define GPS_BAUD 9600
#define gpsPort ssGPS
#define SerialMonitor Serial
#define I2C_ADDRESS 0x3C
TinyGPSPlus tinyGPS;
SoftwareSerial ssGPS(ARDUINO_GPS_TX, ARDUINO_GPS_RX);
SSD1306AsciiAvrI2c oled;

void setup()
{
  SerialMonitor.begin(38400); // для Uno должно стоять 9600
  gpsPort.begin(GPS_BAUD);
  oled.begin(&Adafruit128x64, I2C_ADDRESS);
  oled.setFont(System5x7);
  oled.clear();
}

void loop()
{
  static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;

  printDateTime();
  printGPSInfo();
  printAltVelCourse();
  printSat();

  smartDelay(1000);
  oled.setCursor(0, 0);
}

void printGPSInfo()
{
  SerialMonitor.print(tinyGPS.location.lat(), 6);
  SerialMonitor.print(",");
  SerialMonitor.print(tinyGPS.location.lng(), 6);
  SerialMonitor.print(",");
  SerialMonitor.print(tinyGPS.course.deg());
  SerialMonitor.print(",");

  oled.print(tinyGPS.location.lat(), 6);
  oled.print(" "); oled.println(tinyGPS.location.lng(), 6);
}


static void smartDelay(unsigned long ms)
{
  unsigned long start = millis();
  do
  {
    while (gpsPort.available())
      tinyGPS.encode(gpsPort.read());
  } while (millis() - start < ms);
}
void printDateTime()
{
  char buff1[50];
  sprintf(buff1, "%02d:%02d:%02d   %02d.%02d.%02d",tinyGPS.time.hour(), tinyGPS.time.minute(), tinyGPS.time.second(),tinyGPS.date.day(), tinyGPS.date.month(), tinyGPS.date.year());
  oled.println(buff1);
  Serial.println(buff1);
}

void printAltVelCourse()
{
  oled.print("Z:");oled.print(tinyGPS.altitude.meters(),  1); 
  oled.print(" C:");oled.print(tinyGPS.course.deg(), 0); 
  oled.print(" V:");oled.println(tinyGPS.speed.mps(),1); 
}

void printSat()
{
  oled.print("Sat:");oled.print(tinyGPS.satellites.value(),tinyGPS.satellites.isValid()); 
  oled.print("  HDOP:");oled.print(tinyGPS.hdop.hdop(), 2); 
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Схему подключения к УНО показывайте...

skytter
Offline
Зарегистрирован: 18.08.2018

Подключал вот так на UNO. На Nano перенес на соответствующие пины А4,5 и D4,3

Подключение к UNO

sadman41
Offline
Зарегистрирован: 19.10.2016

В принципе понятно. Скорее всего проблема в 3.3v (хотя и пишут, что оледы мало жрут). Попытайтес запитать дисплей не с пина 3.3V, а от  5V через стабилизатор типа 1117-3.3

Или примените нану от роботдина - там такой стаб уже установлен.

skytter
Offline
Зарегистрирован: 18.08.2018

Спасибо за ответ.

Вероятно причина в чем-то другом - пробовал запустить при отключенном дисплее. Так же нет ответа от GPS.

я подозреваю, что Nano не может получить данные с GPSа.... При попытке просто посмотреть сырые NMEA данные с GPS в Serial Monitor лезут кракозябры

для проверки попробовал очень простой код (без дисплея):

#include <SoftwareSerial.h>
 
//Create software serial object to communicate with GPS
SoftwareSerial gps(4, 3);
 
void setup() {
  //Begin serial comunication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(38400);
  while(!Serial);
   
  //Being serial communication witj Arduino and GPS Module //Important rate must be 9600
  gps.begin(9600);
  delay(1000);
   
  Serial.println("Setup Complete!");
}
 
void loop() {
  //Read SIM800 output (if available) and print it in Arduino IDE Serial Monitor
  if(gps.available()){
    Serial.write(gps.read());
  }
  //Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
  if(Serial.available()){    
    gps.write(Serial.read());
  }
}

результат:

Setup Complete!
⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r<b⸮r!⸮\⸮;⸮!⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!sxC⸮⸮⸮r'⸮⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!8⸮<
!!'⸮⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!pxC⸮⸮⸮r'⸮⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!p䆊⸮!!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!p⸮B⸮⸮⸮r'⸮⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!px5⸮⸮!!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!px5⸮⸮!!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!px5⸮⸮!!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!px⸮⸮⸮!!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!px⸮⸮⸮!!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!pxB⸮⸮⸮r'⸮⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p\C⸮9⸮Űr!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!px⸮⸮⸮!!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!px⸮⸮⸮!!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮⸮r!p⸮B⸮⸮⸮r'⸮⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţpb⸮r!p⸮C⸮⸮!b⸮⸮b⸮r7|b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţpb⸮r!p⸮C⸮9⸮ţ⸮b⸮r'|b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţpb⸮r!p⸮C⸮⸮!b⸮⸮b⸮r\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţpb⸮r!p⸮C⸮⸮!b⸮⸮b⸮r\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţpb⸮r!p⸮C⸮⸮!b⸮⸮b⸮r<b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţpb⸮r!p⸮C⸮⸮!b⸮⸮b⸮r<b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮br!pxB⸮⸮⸮r'⸮⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţq⸮br!px⸮⸮⸮!!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqbbr!p\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţp⸮⸮r!q⸮r\b⸮⸮⸮⸮r!<⸮<
!!'⸮⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţpb⸮r!q⸮rb⸮⸮b⸮r\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!q⸮r\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!q⸮r5\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!q⸮r<b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!q⸮rb⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţpb⸮r!q⸮rb⸮⸮b⸮r\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţpb⸮r!q⸮r\b⸮⸮b⸮r\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p\⸮\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p\⸮\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p\⸮<b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p\⸮<b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţpb⸮r!p\⸮\b⸮⸮bbr\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p\⸮<b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p\⸮b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p\⸮b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p\⸮b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p⸮r<b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p⸮r\b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p⸮rb⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p⸮r<b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţpb⸮r!p⸮rb⸮⸮bbr|b⸮r!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p\C⸮9⸮Űr!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!p\C⸮9⸮Űr!⸮\⸮;⸮!!a|⸮r!!Cũr!bbbr!Cūur!!!1bbbbbbCţqb⸮r!pbr7\b⸮r!⸮\

такт как первая строка напечаталась нормально - то это наверно не проблема Serial Monitor

я грешу на SoftwareSerial - но не знаю как проверить и лечить...

sadman41
Offline
Зарегистрирован: 19.10.2016

Даже и не знаю, что сказать. На Уно и Нано МК одной модели. Отличие этих плат, в основном, в обвязке по питанию. 

Конечно нельзя исключать производственного дефекта, но не думаю, чтобы он проявлялся только с GPS-ом. Перекиньте приемник на другие пины... хотя бы те же A4/A5.

skytter
Offline
Зарегистрирован: 18.08.2018

Спасибо за помощь.

Проблема решилась, после поиска по различным форумам.

Для данной конкретно Nano нужно установить отдельную библиотеку в IDE для выбора уструйства - иначе проблемы с serial (что и было). На сайте продавца забыли это указать ((

акктуально для WAVGAT Nano v3

sadman41
Offline
Зарегистрирован: 19.10.2016

Этот вавгад заколебал со своими клонами. Самый дебильный производитель. Они что, не ATMega328 припаяли, а альтернативщину? 

skytter
Offline
Зарегистрирован: 18.08.2018

я не спец....

на моей камень WAVGAT AVGA328P - что это я не в курсе

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

skytter пишет:

я не спец....

на моей камень WAVGAT AVGA328P - что это я не в курсе

это не Атмега328 - а совсем другой чип, лишь частично совместимый. Больше не покупайте "это"

skytter
Offline
Зарегистрирован: 18.08.2018

спасибо, уже почитал про него, больше брать не буду

надеюсь эти сгодятся на простые проекты ....

jumbo
Offline
Зарегистрирован: 14.02.2019

Всем привет!

Пытаюсь добиться данных от neo6mv посредством подключения к ардуино нано с чипом 328p, но у меня проблема иного характера...... сам чип вроде работает нормально (чз него много чего делал), но вот в случае с gps neo6mv данных нет - т.е. gpsSerial.available() (где gpsSerial - SoftwareSerial) вообще никогда не возвращает true... светодиод на плате gps мигает.... 

что пробовал:

подключал как указано здесь (пины аналогичные) - https://ardutime.wordpress.com/2016/05/06/arduino-%D1%81-%D0%BD%D1%83%D0%BB%D1%8F-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-gps-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F-gy-neo6mv2-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4-%D0%B4/

так же пробовал и без резисторов напрямую.... далее пробовал 5в в качестве питания, на самой плате есть стабилизатор....

пробовал подключать rx/tx к 0/1.... ничего не помогает.

игрался со скоростями Serial и gpsSerial -> 9600 и 9600, 38400 и 9600, 115200 и 9600, пробовал так же 4800 для gpsSerial

модуль брал этот - https://ru.aliexpress.com/item/2pcs-lot-GY-NEO6MV2-new-GPS-module-with-Flight-Control-Flight-Control-EEPROM-MWC-APM2-5/1811853522.html

ардуино там же брал, только черную - https://ru.aliexpress.com/item/1PCS-Nano-3-0-controller-compatible-with-nano-CH340-USB-driver-NO-CABLE-NANO-V3-0/32353404307.html

сам loop в скетче в итоге упростил до:

  if(gpsSerial.available()){
    Serial.write(gpsSerial.read());
    /* lcd подключал, когда нет возможности посмотреть в терминал, особенно когда из окна высовывать приходилось , соответственно убирал верхнюю строку Serial.write(..), да и на светодиоды отвечающие за rx/tx посматривал на ардуино...
    lcd.clear(); // lcd 
    lcd.setCursor(0,0); 
    lcd.print(ss.read()); */
  }
  //Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
  if(Serial.available()){   
    gpsSerial.write(Serial.read());
  }

 

как в принципе проверить рабочий ли модуль? Почему данных нет (даже мусора)? Кто сталкивался с подобным? Может ли быть причина в антене от модуля? Светодиод на модуле гпс начинает мигать только, если из окна его высунуть, что является признаком того, что связь установил.... не знаю что и думать и как проверить..... гуглил, читал, но ничего толком не нашел, что помогло бы решить проблему.......

jumbo
Offline
Зарегистрирован: 14.02.2019

все..... ошибка как всегда в человеке.... совсем не подумал, что подключать надо не arduino rx к gps rx и arduino tx к gps tx... а подключив соответственно arduino tx к gps rx и arduino rx к gps tx , все сразу заработало как надо...... нда... в общем вопрос закрыт, всем спасибо)