Arduino UNO + SIM800C

Estimados hace ya un tiempo vengo peleando con un sim800C, no logro conectarlo a la red.
Conexiones:

arduino sim800c
7 RX
8 TX

GND GND

Alimentación para el SIM800C estoy usando un step down que devuelve 4.1 voltios, directo al sim800C sin pasar por el Arduino.

Alimentación ARduino usb

El sketck un ejemplo que vi por la red para capturar un sms recibido.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(8,7); 

char incomingByte; 
String incomingData;
bool atCommand = true;

int relay = 7;
int index = 0;
String number = "";
String message = "";

void setup(){
    Serial.begin(9600);
    mySerial.begin(9600);
    pinMode(relay, OUTPUT); 
    
    // Check if you're currently connected to SIM800C 
    while(!mySerial.available()){
      mySerial.println("AT");
      delay(1000); 
      Serial.println("connecting....");
    }
    Serial.println("Connected..");  
    mySerial.println("AT+CMGF=1");  //Set SMS Text Mode 
    delay(1000);  
    mySerial.println("AT+CNMI=1,2,0,0,0");  //procedure, how to receive messages from the network
    delay(1000);
    //mySerial.println("AT+CMGL=\"REC UNREAD\""); // Read unread messages
    Serial.println("Ready to receive Commands..");  
 }

void loop(){  
  if(mySerial.available()){  
    
    Serial.println("esperando");
      delay(100);
      // Serial buffer
      while(mySerial.available()){
       // Serial.println( "mysrial read");
       // Serial.println( mySerial.read());
      //  Serial.println( "mysrial read");
        incomingByte = mySerial.read();
        incomingData += incomingByte;
       //// Serial.println("recibo mensaje");
       //  Serial.println(incomingByte);
       //  Serial.println("-----------------");
        
       }
        delay(10); 
        
        if(atCommand == false){
          receivedMessage(incomingData);
          Serial.println("por aca");
          Serial.println(incomingData);
        }
        else{
          atCommand = false;
        }        
        //delete messages to save memory
        if (incomingData.indexOf("OK") == -1){
         // Serial.println("Borrando");
          mySerial.println("AT+CMGDA=\"DEL ALL\"");
          delay(1000);
          atCommand = true;
        }        
        incomingData = "";
  }
}

void receivedMessage(String inputString){
   Serial.println("recibo---------------------------------");
  //Get The number of the sender
  index = inputString.indexOf('"')+1;
  inputString = inputString.substring(index);
  index = inputString.indexOf('"');
  number = inputString.substring(0,index);
  Serial.println("Number: " + number);

  //Get The Message of the sender
  index = inputString.indexOf("\n")+1;
  message = inputString.substring(index);
  message.trim();
  Serial.println("Message: " + message);
        
  message.toUpperCase(); // uppercase the message received

  //turn LampON or OFF
  if (message.indexOf("ON") > -1){
      digitalWrite(relay, HIGH);
      Serial.println("Command: Lamp Turn On.");
   }          
  if (message.indexOf("OFF") > -1){
        digitalWrite(relay, LOW);
        Serial.println("Command: Lamp Turn Off.");
   }       
   delay(50);
  }

Desde ya muchas gracias por cualquier pista que me puedan dar.
Saludos
Juan

Hi,
Primero que nada la fuente de energia externa que usas te puede proveerte una fuente de 2 amps. Segundo tienes las tierras de ambos conectadas a un punto comum ya que estas usando una fuente externa para alimentar el sim800c. Tambien tienes conectados los rx-tx y el tx -rx. Casi siempre las librerias tienen un ejemplo que puedes usar para ver te trabaja bien.

si, ahora bien lo que me llama la atención es que con el chip o sin el chip la el led que parpadea lo hace de la misma forma.....
ESte chip funciona perfectamente en otro equipo...

Estimados estoy probando con este sketch:

#include <SoftwareSerial.h>
 
// CONFIGURACION DE UART GSM
#define CONFIG_GSM_RXPIN 10
#define CONFIG_GSM_TXPIN 11
#define CONFIG_GSM_BAUDRATE 9600
 
// PUERTO SERIE EMULADO: EL ARDUINO UNO TIENE SOLO 1 UART
// EN EL CONSTRUCTOR DE SOFTWARESERIAL SE ESPECIFICAN LOS PINES PARA RX Y TX
SoftwareSerial swseri = SoftwareSerial(CONFIG_GSM_RXPIN, CONFIG_GSM_TXPIN);
 
void setup()
{
  // PREPARAR LOS PUERTOS SERIALES A LA VELOCIDAD CONFIGURADA
  swseri.begin(CONFIG_GSM_BAUDRATE);
  Serial.begin(CONFIG_GSM_BAUDRATE);
 
  // IMPRIMIR EL ENCABEZADO INCIAL
  Serial.println(F("----------------------------------------------------"));
  Serial.println(F("  EJEMPLO PARA ENVIAR SMS CON ARDUINO Y MODULO GSM  "));
  Serial.println(F("            http://www.geekfactory.mx              "));
  Serial.println(F("----------------------------------------------------"));
 
  // ENVIAR LOS COMANDOS AT AL MODEM PARA EL ENVIO DEL MENSAJE SMS
  // CONFIGURAR EL MODULO PARA ENVIO DE MENSAJES EN MODO TEXTO (OTRA OPCION ES EL MODO PDU)
  swseri.println("AT+CMGF=1");
  delay(100);
 
  // ENVIAR EL COMANDO DE ENVIO DE SMS INCLUYENDO EL DESTINATARIO DEL MENSAJE
  swseri.println("AT+CMGS=\"+59898616054\"");
  delay(100);
 
  // ENVIAR EL CUERPO DEL MENSAJE
  swseri.print("HOLA MUNDO SMS DESDE ARDUINO!");
  delay(500);
 
  // ENVIAR EL CARACTER DE CONTROL ASCII 26 (SUB) 0X1A INDICANDO EL FINAL DEL CUERPO DEL MENSAJE
  swseri.print(char(0x1A));
  delay(2000);
}
 
void loop()
{
  // SI HAY DATOS EN LA INTERFAZ SERIAL POR SOFTWARE, ESCRIBIRLOS EN EL UART FISICO
  if (swseri.available())
  {
    Serial.write(swseri.read());
  }
 
  // SI HAY DATOS EN LA INTERFAZ SERIAL POR HARDWARE, ESCRIBIRLOS EN EL UART EMULADO
  if (Serial.available())
  {
    swseri.write(Serial.read());
  }
}

no envía nada…:frowning:
La alimentación del sim800C es independiente, asegurando 5 voltios y 2 ampers. Gnd estan conectadas entre el arduino y el sim800C. El led que parpadea lo hace con chip o sin chip no cambia la frecuencia del mismo…

Alguna idea, tengo que resolver y llevo meses peleando con esta opción barata, pero veo que es un desastre hasta el momento, información en la web es practicamente nula…

desde ya gracias a todos por su ayuda!!

Hi,
Una cosa que mencionas y es la de que el voltaje es de 5 voltios. Estas seguro que tienes 5 voltios pues las especificaciones del SIM800C dice que tienen que leer 3.4V ~4.4V . Ni mas ni menos, Aqui muchos han tenido problemas con el voltaje y necesiata ser entre 3.4V ~4.4V . No se porque tiene que ser tan preciso en ese nivel.

en este momento tengo derecho 5 voltios, según el datasheet, estaría permitido.
Tengo dos con formas de enviar los 5 volitios 2amper.

  1. desde los pines de gnd y vcc -----> estoy usando este método...
  2. tengo dos pines positivo y negativo máximo 4.3.

Las tierras unidas con el Arduino UNO y el SIM800C

gracias!!!!

Saludos.

También tuve problemas para hacer funcionar el módulo SIM800L, con 5v, y un step down, no funcionaba.

Tuve que usar una "fuente" (Un BMS 2s con pilas de 18650), que daban 7.4v 2a, y un step down para bajarlo a 4.2v.

Otra verifica que el operador de tu chip, aun tenga "activas" las bandas con que opera el módulo SIM800C. También ponlo a funcionar en un lugar donde no haya muchas paredes. En mi caso, tuve que comprar una antena extra para lograr mejor señal.

Estimado voy a verificar el tema de las bandas, y probar con otro operador.
Gracias

Saludos.

Por desgracia me acaba de pasar lo mismo que a ti con otro módulo que recién me llego SIM800L. Comienza a parpadear constantemente con y sin chip de telefonía.

"Parecia" funcionar, cuando casi llegaba al "limite" de los 4.2 v, que admite; lo probé con dos diferentes fuentes y sin ningún resultado. Nunca logró comunicarme con el.

Se lo compre al mismo vendedor que el anterior. Creo yo que simplemente salió defectuoso. Ni modo.

Hi,
El problema esta en que no siguen las especificaciones del modulo. El las especificaciones dice en ingles
que el voltaje del UART no puede ser mayor de 2.8 voltios. Si usas un Arduino uno necesitas bajar el voltaje de 5 voltios a dos 2.8 voltios.

NOTICE: Be prepared to handle huge power consumption with peek up to 2A.
Maximum voltage on UART in this module is 2.8V. Higher voltage will kill the module. En otras palabras no puedes usar 5 voltios

Aqui la table de especificaciones en ingles:
Specification
Supply voltage: 3.8V - 4.2V
Recommended supply voltage: 4V <<<<<<<<<<<<<<<<<<< importante
Power consumption:
sleep mode < 2.0mA
idle mode < 7.0mA
GSM transmission (avg): 350 mA
GSM transmission (peek): 2000mA <<<<<<<<<<<<<<< importante yo diria 3 amp
Module size: 25 x 23 mm
Interface: UART (max. 2.8V) and AT commands <<<<<<<<<< Esta es critica y importante
SIM card socket: microSIM (bottom side)
Supported frequencies: Quad Band (850 / 950 / 1800 /1900 MHz)
Antenna connector: IPX
Status signaling: LED
Working temperature range: -40 do + 85 ° C