Problemas con el sofware serial

Cuando uso 2 sofware serial con el arduino uno empieza a fallar me podrian ayudar dejo el codigo:

#define TINY_GSM_MODEM_SIM808
#include<SoftwareSerial.h> 
#include <DFRobot_SIM808.h>
#include <TinyGsmClient.h>
#include <ThingsBoard.h>
#include <AltSoftSerial.h>
#define rxPin 11
#define txPin 10
const char apn[]  = " igprs.claro.com.ar";
const char user[] = "";
const char pass[] = "";
AltSoftSerial serialGsm;
 SoftwareSerial mySerial(txPin, rxPin);
 DFRobot_SIM808 sim808(&mySerial);
#define TOKEN               "PuyvGok8SVy1QWioPLDc"
#define THINGSBOARD_SERVER  "demo.thingsboard.io"
#define THINGSBOARD_PORT    80
#define SERIAL_DEBUG_BAUD   115200
//SoftwareSerial serialGsm(10,11);
#ifdef DUMP_AT_COMMANDS
  #include <StreamDebugger.h>
  StreamDebugger debugger( serialGsm, Serial);
  TinyGsm modem(debugger);
#else
  // Initialize GSM modem
  TinyGsm modem( serialGsm);
  bool modemConnected = false;
#endif
TinyGsmClient client(modem);
ThingsBoardHttp tb(client, TOKEN, THINGSBOARD_SERVER, THINGSBOARD_PORT);
void setup(){
Serial.begin(115200);
 serialGsm.begin(115200);
delay(3000);
 serialGsm.write("AT+IPR=9600\r\n");
 serialGsm.end();
 serialGsm.begin(9600);
Serial.println(F("Initializing modem..."));
  modem.restart();
  String modemInfo = modem.getModemInfo();
  Serial.print(F("Modem: "));
  Serial.println(modemInfo);
   mySerial.begin(9600); 

Serial.println("Starting...");
 while(!sim808.init()) {
      delay(1000);
      Serial.print("Sim808 init error\r\n");
  }
  //************* Turn on the GPS power************
if( sim808.attachGPS())
{
  Serial.println("Open the GPS power success");
}
else 
{
    Serial.println("Open the GPS power failure");
}
}
 void loop(){
   if (!modemConnected) {
    Serial.print(F("Waiting for network..."));
    if (!modem.waitForNetwork()) {
        Serial.println(" fail");
        delay(10000);
        return;
    }
    Serial.println(" OK");

    Serial.print(F("Connecting to "));
    Serial.print(apn);
    if (!modem.gprsConnect(apn, user, pass)) {
        Serial.println(" fail");
        delay(10000);
        return;
    }

    modemConnected = true;
    Serial.println(" OK");
  }
   if (sim808.getGPS()) {
   Serial.print("latitude :");
   Serial.println(sim808.GPSdata.lat,6);
  Serial.println("Sending lat data...");
  tb.sendTelemetryFloat("lat", (sim808.GPSdata.lat,6));
  Serial.println("Sending long data...");
  tb.sendTelemetryFloat("long", (sim808.GPSdata.lon,6));
  Serial.println("Sending speed data...");
  tb.sendTelemetryFloat("speed",(sim808.GPSdata.speed_kph));
     } 
}

Hola, por favor corrige el codigo con las etiquetas correspondientes como se indica en las normas del foro, esa es una limitación de la biblioteca, esto lo puedes ver en la documentación de las librerías que mencionan las siguientes limitaciones:
Limitaciones de esta biblioteca
La librería SoftwareSerial tiene las siguientes limitaciones conocidas:

  • No puede transmitir y recibir datos al mismo tiempo.
  • Si se usan múltiples puertos serie software, sólo uno puede recibir datos a la vez.
  • No todos los pines de las placas Mega y Mega 2560 soportan interrupciones de cambio, por lo que sólo los siguientes pueden ser utilizados para RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69). No todos los pines de las placas Leonardo y Micro soportan interrupciones de cambio, por lo que sólo los siguientes se pueden utilizar para RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
  • En placas Arduino o Genuino 101 la velocidad máxima actual de RX es de 57600bps.
  • En placas Arduino o Genuino 101 RX no funciona en el pin digital 13.
  • Si tu proyecto requiere flujos de datos simultáneos, consulta la librería AltSoftSerial de Paul Stoffregen.
    Esto puede ser el problema que se te presentan y como te dice en la documentaciones puedes revisar la libreria AltSoftSerial
    ""Que placa estas utilizando porque dependiendo de eso puede que no sea necesario utilizar esa biblioteca

SoftwareSerial y AltSoftSerial no soportan más de 57600 baudios en UNO/NANO, por eso no te funcionan a 115k.

Saludos

Pero por otro lado para que usar dos librerias que hacen lo mismo?
O usas AltSoftwareSerial o usas SoftwareSerial, pero no las dos porque es para problemas.
Ademas de la velocidad.
Usen micros adecuados como un MEGA o DUE, o los nuevos ESP32 o los STM32. Todos tienen mas de 2 o 3 puertos serie.

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Se usan ambas para poder tener 2 puertos soft porque cada una soporta una sola instancia.

Coincido en que el UNO queda medio chico para esto, personalmente cambiaría por una Pi Pico

Saludos

En un mundo donde hay opciones con varias UARTs, hacer estas cosas solo me hace pensar que no vale la pena responder un hilo con estos problemas.
La razón es simple, te dará problemas.
Tu dices que no? Que para eso se usan las dos instancias. Okay, buena suerte.

Nota:
Por favor al creador del hilo, no sigas respondiendo sin editar tu código usando etiquetas como ya he solicitado.

¿Te parece que digo que no pueda dar problemas?

Solo aclaré por qué se usan 2 librerías y lo que usaría yo en lugar del UNO (sobre todo por costo/beneficio).

Saludos

Hola gente pase al Mega como recomendaron pero sigo teniendo un problema cuando trato de inicializar los 2 puertos en el mismo programa

#define TINY_GSM_MODEM_SIM808
#include <TinyGsmClient.h>
#include <ThingsBoard.h>  
#include <DFRobot_SIM808.h>
// Your GPRS credentials
// Leave empty, if missing user or pass
const char apn[]  = " igprs.claro.com.ar";
const char user[] = "";
const char pass[] = "";

// See https://thingsboard.io/docs/getting-started-guides/helloworld/
// to understand how to obtain an access token
#define TOKEN               "PuyvGok8SVy1QWioPLDc"
#define THINGSBOARD_SERVER  "demo.thingsboard.io"
#define THINGSBOARD_PORT    80

// Baud rate for debug serial
#define SERIAL_DEBUG_BAUD   115200

// Initialize GSM modem
TinyGsm modem(Serial1);

// Initialize GSM client
TinyGsmClient client(modem);

// Initialize ThingsBoard instance
ThingsBoardHttp tb(client, TOKEN, THINGSBOARD_SERVER, THINGSBOARD_PORT);

// Set to true, if modem is connected
bool modemConnected = false;

 DFRobot_SIM808 sim808(&Serial3);
void setup() {
  // Set console baud rate
  randomSeed(analogRead(0));
  Serial.begin(SERIAL_DEBUG_BAUD);
  Serial.println("-------SETUP------");

  // Set GSM module baud rate
  Serial1.begin(115200);
  delay(3000);

  // Lower baud rate of the modem.
  // This is highly practical for Uno board, since SoftwareSerial there
  // works too slow to receive a modem data.
  Serial1.write("AT+IPR=9600\r\n");
  Serial1.end();
  Serial1.begin(9600);

  // Restart takes quite some time
  // To skip it, call init() instead of restart()
  Serial.println(F("Initializing modem..."));
  modem.restart();

  String modemInfo = modem.getModemInfo();
  Serial.print(F("Modem: "));
  Serial.println(modemInfo);
  Serial3.begin(9600);
  Serial.println("Starting...");
 while(!sim808.init()) {
      delay(1000);
      Serial.print("Sim808 init error\r\n");
  }
  //************* Turn on the GPS power************
if( sim808.attachGPS())
{
  Serial.println("Open the GPS power success");
}
else 
{
    Serial.println("Open the GPS power failure");
}

}
  // Unlock your SIM card with a PIN
  //modem.simUnlock("1234");

void loop() {
  delay(1000);

  if (!modemConnected) {
    Serial.print(F("Waiting for network..."));
    if (!modem.waitForNetwork()) {
        Serial.println(" fail");
        delay(10000);
        return;
    }
    Serial.println(" OK");

    Serial.print(F("Connecting to "));
    Serial.print(apn);
    if (!modem.gprsConnect(apn, user, pass)) {
        Serial.println(" fail");
        delay(10000);
        return;
    }

    modemConnected = true;
    Serial.println(" OK");
  }

  // Uploads new telemetry to ThingsBoard using HTTP.
  // See https://thingsboard.io/docs/reference/http-api/#telemetry-upload-api
  // for more details

if (sim808.getGPS()) {
   Serial.print("latitude :");
   Serial.println(sim808.GPSdata.lat,6);
  Serial.println("Sending lat data...");
  tb.sendTelemetryFloat("lat", (sim808.GPSdata.lat,6));
  Serial.println("Sending long data...");
  tb.sendTelemetryFloat("long", (sim808.GPSdata.lon,6));
  Serial.println("Sending speed data...");
  tb.sendTelemetryFloat("speed",(sim808.GPSdata.speed_kph));
     } 

}

Hay alguna razón para comenzar en 115k y luego volver a inicializar en 9600?
Además, no hagas todo de golpe. Prueba un dispositivo por vez, asegurate que funciona individualmente y luego pasa al siguiente.

Lo primero es lo primero.
Tienes un SIM800. No podrás jamas conectarte por GSM a Claro.com.ar porque no funciona nada a 2G.
Perdón que recién me doy cuenta, pero pierdes el tiempo usando un módulo SIM800/900.
Pasa a un SIM7000 son mas caros pero es lo que corresponde a estos tiempos.
Con SIM800 solo SMS.

No se que opinan los demás.

1 Like

Tengo un 808 funciona gsm, ya los probe por seperado y no hay problemas el tema es cuando los uno los 2 juntos

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.