Проблема связи SIM800L, Ublox NEO-6M и Blynk

Slovyanin

✩✩✩✩✩✩✩
17 Фев 2020
16
0
Произошла проблема при передаче GPS данных от модуля Ublox NEO-6M в приложение Blynk с помощью модема SIM800L V2.0.
Подключение:
SIM800L V2.0 - RX - 2, TX - 3
Ublox NEO-6M - RX - 11, TX - 10
OLED 128х32 - I2C
Питание отдельное - 2 Ампера, на GPS и SIM800L припаял еще конденсаторы, лишними не будут.
(RX, TX мог перепутать местами тут, но все работает, в этом никаких проблем нет)
И так - если GPS модуль находит спутники - он должен вывести на OLED экран кол-во спутников.
Если закомментировать указанные строки - все так и работает, но как только загружаю прошивку с подключением Blynk - на экранчике остается висеть надпись "Загрузка...", которая выводится в Setup.
Изначально был написан другой код, который сразу слал данные GPS (долгота, широта, кол-во спутников) в Blynk, но он не работал, начал разбираться и дошел до этого этапа, что GPS не одупляется при подключенном Blynk.
Sim карта рабочая, другие данные отправляются без проблем (произвольный текст или какие-то строки в терминал).
Аппаратно подключение никак не изменяю, меняется только прошивка.
Пытался перепаивать GPS, изначально он стоял на 6,7 пинах, думал может там какая проблема - нет, сейчас на 10,11 и все так же.
Как можно решить данную проблему?
C++:
#define TINY_GSM_MODEM_SIM800
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <GyverOLED.h>
#include <TinyGsmClient.h>
#include <BlynkSimpleTinyGSM.h>

GyverOLED<SSD1306_128x32, OLED_NO_BUFFER> oled;

// GPS
TinyGPSPlus gps;
SoftwareSerial ss(11, 10);
// Время ожидания спутников
int sleepTime = 5000;

char auth[] = "";
char apn[]  = "internet.beeline.ru";
char user[] = "beeline";
char pass[] = "beeline";

SoftwareSerial gsmSerial(2, 3); // RX, TX
TinyGsm modem(gsmSerial);

// Виджеты
WidgetMap myMap(V0);
WidgetTerminal terminal(V5);

void setup() {
  ss.begin(9600);

  oled.init();
  oled.clear();
  oled.setScale(1);
  oled.println("Загрузка...");
 
  Wire.setClock(400000L);
 
  gsmSerial.begin(9600);
 
  delay(5000);
  modem.init();
  Blynk.begin(auth, modem, apn, user, pass);
}

void loop() {
  Blynk.run();
 
  for (unsigned long start = millis(); millis() - start < sleepTime;) {
    while (ss.available()) {
      char c = ss.read();
      if (gps.encode(c)) {
        if (gps.location.isValid()) {
          oled.clear();
          oled.home();
          oled.println(gps.satellites.value());
          oled.update();
          sleepTime = 3000;
        } else {
          sleepTime = 10000;
        }
      }
    }
  }

}
Ublox NEO-6M так же видит спутники, никаких проблем с этим нет (индикация на самом модуле об этом говорит, ну и если опять же закомментировать строки все выводится на экран).
 

bort707

★★★★★★✩
21 Сен 2020
2,898
862
Одновременно в программе можно использовать только один SoftwareSerial , поэтому-то у вас если отключаешь одно - работает другое и наоборот.

Как можно решить данную проблему?
Использовать аппаратный сериал вместо программного.
 
  • Лойс +1
Реакции: andyparker и Slovyanin

Slovyanin

✩✩✩✩✩✩✩
17 Фев 2020
16
0
Одновременно в программе можно использовать только один SoftwareSerial , поэтому-то у вас если отключаешь одно - работает другое и наоборот.


Использовать аппаратный сериал вместо программного.
Спасибо, но могли бы подсказать, что лучше подключить по аппаратному?
Я же правильно понял - подключить один из модулей к RX,TX ардуины и в прошивке использовать Serial.begin()...?
 

bort707

★★★★★★✩
21 Сен 2020
2,898
862
Спасибо, но могли бы подсказать, что лучше подключить по аппаратному?
Я же правильно понял - подключить один из модулей к RX,TX ардуины и в прошивке использовать Serial.begin()...?
да, поняли правильно.
Что лучше подключить к аппаратному - вопрос неоднозначный.
В общем случае на аппаратный лучше сажать тот модуль, у которого больше скорость и больше обьем сообщений.
Но могут быть и другие соображения - например туда лучше подключать то, что проще отключить, потому что при каждой заливке скетча в ардуину вам придется отключать модуль от пинов 0 и 1.
Может быть стоит подумать о смене центральной платы проекта - взять Мегу или СТМ32, у которых по несколько Сериал и больше памяти. При активной работе с текстовыми протоколами, такими как GPS и GSM - у вас на Нано может не хватить оперативки.
 

Slovyanin

✩✩✩✩✩✩✩
17 Фев 2020
16
0
Избыточное цитирование
да, поняли правильно.
Что лучше подключить к аппаратному - вопрос неоднозначный.
В общем случае на аппаратный лучше сажать тот модуль, у которого больше скорость и больше обьем сообщений.
Но могут быть и другие соображения - например туда лучше подключать то, что проще отключить, потому что при каждой заливке скетча в ардуину вам придется отключать модуль от пинов 0 и 1.
Может быть стоит подумать о смене центральной платы проекта - взять Мегу или СТМ32, у которых по несколько Сериал и больше памяти. При активной работе с текстовыми протоколами, такими как GPS и GSM - у вас на Нано может не хватить оперативки.
Скетч загружаю через программатор, с этим проблем нет
Мне важен объем исходного устройства, поэтому на нано постараюсь что-то изобразить)
Сейчас перепаял GPS на аппаратный - все заработало! Спасибо:giggle::giggle::giggle: