ESP32 и GY-NEO6MV2 Не удается получить данные с GPS

Allleksey
Offline
Зарегистрирован: 28.11.2020

Коллеги, приветствую!

Пытаюсь подружить ESP32 и GY-NEO6MV2.

Для начала воспользовался рекомендациями из http://arduino.ru/forum/obshchii/gy-gps6mv2-arduino-ne-rabotaet#comment-363161 (с применением arduino nano) с целью проверки работоспособности модуля. Все хорошо, модуль передает данные в монитор порта.

Далее, что бы в своем проекте использовать данные с GPS попытался по аналогии просто прочитать данные с модуля GPS уже на ESP32. И вот тут возникли сложности. К какому выводу я бы не подключал вывод TX GY... не получается считать данные. Пробовал подключить к GPIO13, GPIO12, GPIO14, GPIO27, GPIO26

Подскажите, что дела не так. Куда (аппаратно) нужно подключить модуль GPS к ESP32, что бы хотя бы считать с него данные и вывести в монитор порта.

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

#include <SoftwareSerial.h>

SoftwareSerial nss(3, 4);

void setup(void) {
	Serial.begin(115200);
	nss.begin(9600);
	Serial.println("Fun begins:");
}

void loop(void) {
	if (nss.available()) Serial.write(nss.read());
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А откуда уверенность, что SoftwareSerial поддерживается esp32?

Зачем вообще использовать софтверный порт при наличии аппаратных?

Allleksey
Offline
Зарегистрирован: 28.11.2020

Да, подключил сейчас вот так:

#include <HardwareSerial.h>
#include <TinyGPS.h>
TinyGPS gps;
HardwareSerial SerialGPS(1);
void setup()
{
SerialGPS.begin(9600, SERIAL_8N1, 16, 17);
...
}


В таком подключении работает (подключился к UART2). Но вот дело в том, что подключить необходимо к ESP t-call. А на распиновке этой платы указано, что 16 и 17 пины не используются (NC)

А к аппаратному UART0 (TX0, RX0) подключится не получается, вроде как из за того, что они используются для подключения через USB. Где у ESP32 t-call UART1 не знаю. В мануалах найти не могу.

Ломаю голову.

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

andriano пишет:

А откуда уверенность, что SoftwareSerial поддерживается esp32?

Поддерживается, стандартный, искаропки. 

Allleksey
Offline
Зарегистрирован: 28.11.2020

DetSimen пишет:

Поддерживается, стандартный, искаропки. 

У меня, почему то, команда nss.begin(9600); приводит к перехагрузке.

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

andriano пишет:

Зачем вообще использовать софтверный порт при наличии аппаратных?

А с аппаратными на ESP8266 совсем пичалька. Serial1 заточен только на передачу, видимо, для отладки. Т.е у него есть вывод TX а RX - тютю. А Serial2 - не настоящий, это тот же Serial0, у которого по команде Serial.swap() ноги RX и TX переключаются на другие физические выводы, грубо говоря, с 0 и 1 на 14 15, сам Serial остается тем же, вместе с тем, что у него на момент переключения было в буфере.  

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

Allleksey пишет:

У меня, почему то, команда nss.begin(9600); приводит к перехагрузке.

А у меня - нет, к нему JDY-40 подключен. Видимо, потому, что я использую правильные наименования выводов, не 3, 4, а D3, D4

Upd:  всё вышенаписанное мной верно для NodeMCU 

Allleksey
Offline
Зарегистрирован: 28.11.2020

Вот распиновка моей платы. Нет ни UART1, ни UART2 :(

По сему вопрос с подключением GPS остается открытым. Не придумал пока, как подключить.

Allleksey
Offline
Зарегистрирован: 28.11.2020

Коллеги, как на ESP32 организовать программный UART или другое решение... Читал, что на ESP32 любые выводы можно переназначить, т.е. программный UART2 назначить не на 16 и 17 выводы, а другие пины. Но тут хотелось бы отметить, что сделать это нужно в рамках Arduino IDE 

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

"программный UART" - это SoftwareSerial.

Тебе ДетСимен уже ответил - прописывай пины правильно и все будет работать

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

b707 пишет:

Тебе ДетСимен уже ответил - прописывай пины правильно и все будет работать

Я такую плату впервые вижу.  

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

"программный UART" - это SoftwareSerial.

Тебе ДетСимен уже ответил - прописывай пины правильно и все будет работать

3 и 4 тоже можно, но это не имя цифрового порта, а GPIO )))

Allleksey
Offline
Зарегистрирован: 28.11.2020

В скетче указаны сейчас 32 и 33 пины. Именно GPIO32 и GPIO33

Код вот такой



#include <SoftwareSerial.h>

SoftwareSerial nss(32, 33);

void setup(void) {
  Serial.begin(115200);
  delay(300);
  Serial.println("Fun begins:");
  nss.begin(9600);
}

void loop(void) {
  if (nss.available()) Serial.write(nss.read());
}

 

Но все равно уходит на перезагрузку вот с таким сообщением в мониторе:

Fun begins:
Guru Meditation Error: Core  0 panic'ed (StoreProhibited). Exception was unhandled.
Core 0 register dump:
PC      : 0x40080f49  PS      : 0x00060031  A0      : 0x800810fc  A1      : 0x3ffbe170  
A2      : 0x00000001  A3      : 0x00000000  A4      : 0x00000020  A5      : 0x00000000  
A6      : 0x3fefffff  A7      : 0xffffff80  A8      : 0x3ffba454  A9      : 0x3ffbe150  
A10     : 0x00000000  A11     : 0x00000000  A12     : 0x8008935c  A13     : 0x3ffbe150  
A14     : 0x00000003  A15     : 0x00060023  SAR     : 0x00000020  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000000  LBEG    : 0x00000000  LEND    : 0x00000000  LCOUNT  : 0x00000000  
Core 0 was running in ISR context:
EPC1    : 0x40080f49  EPC2    : 0x00000000  EPC3    : 0x00000000  EPC4    : 0x00000000
 
Backtrace: 0x40080f49:0x3ffbe170 0x400810f9:0x3ffbe190 0x40081199:0x3ffbe1b0 0x400848b5:0x3ffbe1d0 0x400e9313:0x3ffbc070 0x400d409b:0x3ffbc090 0x400899ca:0x3ffbc0b0 0x400884d9:0x3ffbc0d0
 
Rebooting...
ets Jun  8 2016 00:22:57
 
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:8896
load:0x40080400,len:5816
entry 0x400806ac
 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Allleksey пишет:

Вот распиновка моей платы. Нет ни UART1, ни UART2 :(

По сему вопрос с подключением GPS остается открытым. Не придумал пока, как подключить.

Ну так возьмите другую плату.

Как бы "железо" подбирается под задачу, а не наоборот.

Allleksey
Offline
Зарегистрирован: 28.11.2020

andriano пишет:

Ну так возьмите другую плату.

Как бы "железо" подбирается под задачу, а не наоборот.

Так я по этому эту плату и взял, потому, как мне модуль SIM800L нужен был, а он тут уже на одной плате с контроллером смонтирован.

Есть еще вот такая плата. У нее то как рас есть выводы UART2 на 16 и 17 пинах. И с этой платой GPS превосходно работает. Но первая плата взята как раз под задачи.

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

Allleksey пишет:

В скетче указаны сейчас 32 и 33 пины. Именно GPIO32 и GPIO33

Вы проверяли, что эти пины имеют эти номера?

если подключить к пину 32 или 33 светодиод(с резистором!), а в коде прописать digitalWrite(32, HIGH) -светится будет?

Попробуйте и напишите в форум, иначе будет бродить впустую

Allleksey
Offline
Зарегистрирован: 28.11.2020

Код опробован с номерами пинов 32 и 33. Светодиод мигает.

#define LED_ON  HIGH
#define LED_OFF LOW
#define LED_PIN 32
void setup(){
  pinMode(LED_PIN,OUTPUT);
  digitalWrite(LED_PIN, LED_OFF);
}

void loop(){
  digitalWrite(LED_PIN, LED_ON);
  delay(500);
  digitalWrite(LED_PIN, LED_OFF);
  delay(500);
}

 

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

а если попробовать переназначить пины хардового Сериала, например Serial2?



void setup(void) {
  Serial.begin(115200);
  delay(300);
  Serial.println("Fun begins:");
  Serial2.begin(9600, SERIAL_8N1, 32, 33, true, 1100UL);
}

void loop(void) {
  if (Serial2.available()) Serial.write(Serial2.read());
}

 

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

Сорри, увидел что вы это уже пробовали - в сообщении #2. Ну так что мешает сделать последний шаг и указать вместо 16 и 17 свои пины, те же 32 и 33?

lawr
Offline
Зарегистрирован: 19.02.2017

Вроде как SoftwareSerial для ESP32 работает только на gpio 1, 3, 6-11, 20, 24, 28-30 все остальные - return

 

Allleksey
Offline
Зарегистрирован: 28.11.2020

lawr пишет:

Вроде как SoftwareSerial для ESP32 работает только на gpio 1, 3, 6-11, 20, 24, 28-30 все остальные - return

Тогда все плохо. На t-call из перечисленных есть только 1 и 3... но это как раз UART0, который не получается использовать.

Allleksey
Offline
Зарегистрирован: 28.11.2020

b707 пишет:

Сорри, увидел что вы это уже пробовали - в сообщении #2. Ну так что мешает сделать последний шаг и указать вместо 16 и 17 свои пины, те же 32 и 33?

Неожиданно, но РАБОТАЕТ!!! Я в просто заменил номера пинов с 16 и 17 на 32 и 33. И работает все это с аппаратной библиотекой.

Клапауций 9999
Offline
Зарегистрирован: 27.11.2020

Allleksey пишет:

lawr пишет:

Вроде как SoftwareSerial для ESP32 работает только на gpio 1, 3, 6-11, 20, 24, 28-30 все остальные - return

Тогда все плохо. На t-call из перечисленных есть только 1 и 3... но это как раз UART0, который не получается использовать.


вот и используй аппаратный UART0.
оно у тебя сейчас к type-c USB через микросхему адаптера USB-UART подключено.
а ты переконфигурируй сериал на другие свободные пины:
Serial.begin(115200, SERIAL_8N1, RX_pin, TX_pin);
как это должно работать - во время загрузки скетча UART0 будет работать через TYPE-C, a после загрузки скетча переподключится на пины RX_pin TX_pin.

!только вот этого не нужно:
#include
оно просто Serial

*пока писал - заработало. ну, ок.

Allleksey
Offline
Зарегистрирован: 28.11.2020

Коллеги, всем спасибо за участие в решение вопроса. Без Вас бы не справился.

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

Allleksey пишет:

b707 пишет:

Сорри, увидел что вы это уже пробовали - в сообщении #2. Ну так что мешает сделать последний шаг и указать вместо 16 и 17 свои пины, те же 32 и 33?

Неожиданно, но РАБОТАЕТ!!! Я в просто заменил номера пинов с 16 и 17 на 32 и 33. И работает все это с аппаратной библиотекой.


а что в этом неожиданного? Сказано же, что у ЕСП аппаратный сериал можно назначить на любые пины

Allleksey
Offline
Зарегистрирован: 28.11.2020

Клапауций 9999][quote=Allleksey пишет:

!только вот этого не нужно: #include оно просто Serial *пока писал - заработало. ну, ок.

Учёл, поправил, проверил. РАБОТАЕТ. Спасибо!

Allleksey
Offline
Зарегистрирован: 28.11.2020

Коллеги, продолжаем разговор...

Сейчас код выглядит вот так:

#include <TinyGPS.h>
TinyGPS gps;
#define SerialGPS Serial1
#define SerialMon Serial
void setup(){
  SerialMon.begin(115200);
  delay(300);
  SerialGPS.begin(9600, SERIAL_8N1, 32, 33);
}

Но дело в том, что так же в коде назначены пины для модуля SIM800L


#define MODEM_TX             27             // Pin TX SIM800L
#define MODEM_RX             26             // Pin RX SIM800L
#define SerialAT                    Serial1
void setup() { 
  SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX); 
...
}

Вот эти пины:

И снова ищу выход из ситуации. Есть идеи?

Клапауций 9999
Offline
Зарегистрирован: 27.11.2020

SerialMon - что к нему подключено?

Allleksey
Offline
Зарегистрирован: 28.11.2020

Клапауций 9999 пишет:

SerialMon - что к нему подключено?

Монитор порта...


SerialMon.println("message");
Клапауций 9999
Offline
Зарегистрирован: 27.11.2020

Allleksey пишет:

Клапауций 9999 пишет:

SerialMon - что к нему подключено?

Монитор порта...


SerialMon.println("message");


аппаратно что к нему подключено?
что за монитор порта?

Allleksey
Offline
Зарегистрирован: 28.11.2020

Аппаратно к выводам GPIO26 и GPIO27 подключен модуль SIM800L

К выводам GPIO32 и GPIO33 подключен GY-NEO6MV2

Монитор порта:

Allleksey
Offline
Зарегистрирован: 28.11.2020

Аппаратно к выводам GPIO26 и GPIO27 подключен модуль SIM800L

К выводам GPIO32 и GPIO33 подключен GY-NEO6MV2

Монитор порта:

 

Клапауций 9999
Offline
Зарегистрирован: 27.11.2020

специально в гугл полез - точно та глючная фигня в иде называется "монитор порта"
так вот... нет у тебя монитора порта - ты в туда собрался GPS подключать, почти подключил, но кривая снова тебя не втуда увела.

заново - у тебя один свободный сериал0 - перечитай заново мой пост выше и сделай, как я написал.

как жить без монитора порта? - отладку SMS-сками будешь производить.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Клапауций 9999 пишет:
как жить без монитора порта? - отладку SMS-сками будешь производить.
Можно к i2c подключить дисплей и через него отлаживать.

Клапауций 9999
Offline
Зарегистрирован: 27.11.2020

andriano пишет:

Клапауций 9999 пишет:
как жить без монитора порта? - отладку SMS-сками будешь производить.
Можно к i2c подключить дисплей и через него отлаживать.


та, да... или по блютузу. о_О

Клапауций 9999
Offline
Зарегистрирован: 27.11.2020

Allleksey пишет:

#include <TinyGPS.h>
TinyGPS gps;
#define SerialGPS Serial
//#define SerialMon Serial
void setup(){
//  SerialMon.begin(115200);
//  delay(300);
  SerialGPS.begin(9600, SERIAL_8N1, 32, 33);
}

Allleksey
Offline
Зарегистрирован: 28.11.2020

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

Принял. Спасибо.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Allleksey пишет:

Коллеги, продолжаем разговор...

Сейчас код выглядит вот так:

#include <TinyGPS.h>
TinyGPS gps;
#define SerialGPS Serial1
#define SerialMon Serial
void setup(){
  SerialMon.begin(115200);
  delay(300);
  SerialGPS.begin(9600, SERIAL_8N1, 32, 33);
}

Стесняюсь спросить... Почему вы пытаетесь рулить GSM модулем используя библиотеку для GPS ?

Allleksey
Offline
Зарегистрирован: 28.11.2020

brokly пишет:

Стесняюсь спросить... Почему вы пытаетесь рулить GSM модулем используя библиотеку для GPS ?

А почему Вы так решили? Изначально вопрос был в подключении GPS модуля к ESP32. При решении этой задачи использовалась библиотека GPS. А с модулем GSM общение происходит по серийному порту. Без библиотек. Через АТ команды.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

На картинку посмотрел.

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

Allleksey пишет:

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

не пойму, в чем проблема. Сколько аппаратных Сериалов у ЕСП32 - три: Serial,  Serial1 и Serial2. Cколько вам нужно в программе - тоже три - для GPS. для GSM и для Монитора порта.

так в чем дело то?

Клапауций 9999
Offline
Зарегистрирован: 27.11.2020

b707 пишет:

так в чем дело то?

да. в чём дело? каких вам сериалов ещё не хватает?(с)

Allleksey
Offline
Зарегистрирован: 28.11.2020

b707 пишет:

не пойму, в чем проблема. Сколько аппаратных Сериалов у ЕСП32 - три: Serial,  Serial1 и Serial2. Cколько вам нужно в программе - тоже три - для GPS. для GSM и для Монитора порта.

так в чем дело то?

Возможно что то не так делал, но через Serial2 у меня не заработал GPS. 

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

Allleksey
Offline
Зарегистрирован: 28.11.2020

b707 пишет:

не пойму, в чем проблема. Сколько аппаратных Сериалов у ЕСП32 - три: Serial,  Serial1 и Serial2. Cколько вам нужно в программе - тоже три - для GPS. для GSM и для Монитора порта.

так в чем дело то?

Спасибо, друже!!! Сейчас вот так... РАБОТАЕТ!!!

#define SerialMon Serial         
#define SerialAT Serial1        
#define SerialGPS Serial2 
#define MODEM_TX  27 // Pin TX SIM800L
#define MODEM_RX 26 // Pin RX SIM800L
#define GPS_TX 33 // Pin TX GPS
#define GPS_RX 32 // Pin Rx GPS
void setup() {  
  SerialMon.begin(115200); 
  SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX); 
  SerialGPS.begin(9600, SERIAL_8N1, GPS_RX, GPS_TX);
...
}
void loop() {
...
}

Руки кривые изначально не позволили сделать по правильному.