# Συζήτηση Κυκλωμάτων > Ψηφιακά Κυκλώματα > Μικροελεγκτές >  >  ARDUINO GSM ΒΟΗΘΕΙΑ ΜΕ ΚΩΔΙΚΑ

## keap

Καλησπέρα σε όλη την παρέα.
Για ακόμα μια φορά θέλω την βοήθεια σας σε πρόβλημα που συνάντησα με το arduino uno,arduino nano
και το gsm module ROHS.Θέλω να ανοίγω και να κλείνω 2 ρελέ απο απόσταση,δοκίμασα παρα πολλούς 
κώδικες αλλά τίποτα δεν δούλεψε κανένας,δοκίμασα και με βιβλιοθήκες πάλι τίποτα και αποφάσισα 
μετά απο 2 μήνες να ζητήσω την βοήθεια σας.Αν σασ είναι εύκολο ένα παράδειγμα για το προβλημά
μου,με τις δοκιμές που έκανα άλλαζα μονο τον αριθμό του κινητού στην βιβλιοθήκη για να μου στείλει
το μήνυμα ενώ στο serial monitor έλεγε οτι το έστειλε στοκινητό δεν ερχότανε ποτέ.


Gsm Module TX  --> Arduino αναλόγως βιβλιοθήκης ή κάποιο άλλο παράδειγμα που έβρισκα. 
Gsm Module RX  --> Arduino αναλόγως βιβλιοθήκης ή κάποιο άλλο παράδειγμα που έβρισκα.
Gsm Module GND --> Arduino GND
Gsm Module +5V --> Arduino +5V
Gsm Module GND --> Arduino GND
Gsm Module VDD --> Δεν έλεγε ότι έπρεπε να συνδεθεί κάπου.
Gsm Module RST --> Δεν έλεγε ότι έπρεπε να συνδεθεί κάπου.


Ευχαριστώ πολύ για τον χρόνο σας.


Φωτογραφία με του gsm.

----------


## hackertom

Να προσθέσω και εγω οτι δεν κατάφερα να το κάνω να δουλεύει. Έχω το SIM 900A 1800/1900 MHZ αν γνωρίζει κάποιος ας δώσει τα φώτα του...


Sent from my iPhone using Tapatalk

----------


## manolena

Για να γίνει διερεύνηση, χρειάζεται σχηματικό και κώδικας.

----------


## andreasmon

Έχω και εγώ module gsm/gprs με το SIM 900A 1800/1900 MHZ και δουλεύει μια χαρά. Το΄χω να στέλνει μηνύματα σε περίπτωση συναγερμού σε 2 αριθμούς κινητών.Αλλά το έχω δοκιμάσει κιόλας , αν μπορεί να κάνει κλήσεις σε αριθμούς μόλις του δώσω εντολή και λειτούργησε μια χαρά.Ολα αυτά μέσω arduino.

  Αλλά για να δουλέψει το κάθε module πρέπει να σου δώσει ο πωλητής ή να ψάξεις εσύ στο σά-ιτ του κατασκευαστή να βρεις τις κατάλληλες βιβλιοθήκες.Μodule gsm/gprs υπάρχουν πάρα πολλά,αλλά δεν είναι συμβατά,το καθένα θέλει την δική του βιβλιοθήκη και μπορεί να έχει και ξεχωριστό πιν αουτ!!!Χωρίς αυτά δεν πρόκειται ποτέ να δουλέψει....Και εγώ στην αρχή αυτό έπαθα,μέχρι να μου δώσει ο πωλητής την κατάλληλη βιβλιοθήκη.

Οπότε όταν δεν σας δουλεύουν ξεκινήστε πρώτα από το σχηματικό για να δείτε το πιν-άουτ και βρείτε την δική του βιβλιοθήκη,όπως είπε πολύ σωστά και παραπάνω ο Μάνος.

----------


## keap

> Για να γίνει διερεύνηση, χρειάζεται σχηματικό και κώδικας.



Ένας κώδικας που δεν μου δούλεψε είναι αυτός...Σ'ευχαριστώ πολύ για το χρόνο σου Μάνο,με έχεις βοηθήσει και στο παρελθόν πολύ.

#include <SoftwareSerial.h>


// EN: String buffer for the GPRS shield message
String msg = String("");
// EN: Set to 1 when the next GPRS shield message will contains the SMS message
int SmsContentFlag = 0;
//control pins of relay.
int relay_a=4;
int relay_b=5;
int relay_c=6;
int relay_d=7;

// EN: Code PIN of the SIM card (if applied)
//String SIM_PIN_CODE = String( "XXXX" );

void setup()
{
  Serial.begin(19200);                 // the GPRS baud rate
  // Initialize  PINs
  pinMode( 4, OUTPUT ); 
  pinMode( 5, OUTPUT ); 
  pinMode( 6, OUTPUT ); 
  pinMode( 7, OUTPUT ); 
  digitalWrite( 4, LOW ); 
  digitalWrite( 5, LOW ); 
  digitalWrite( 6, LOW );
  digitalWrite( 7, LOW );
 Serial.println( "AT+CMGF=1" ); 
 delay(200);
}

void loop()
{
    char SerialInByte;
    if(Serial.available())
    {       
        SerialInByte = (unsigned char)Serial.read();
       delay(5);

        // -------------------------------------------------------------------
        // EN: Program also listen to the GPRS shield message.
        // -------------------------------------------------------------------
       // EN: If the message ends with <CR> then process the message
        if( SerialInByte == 13 ){
          // EN: Store the char into the message buffer
          ProcessGprsMsg();
         }
         if( SerialInByte == 10 ){
            // EN: Skip Line feed
         }
         else {
           // EN: store the current character in the message string buffer
           msg += String(SerialInByte);
         }
     }   
}
// EN: Make action based on the content of the SMS. 
//     Notice than SMS content is the result of the processing of several GPRS shield messages.
void ProcessSms( String sms ){

  if( sms.indexOf("ona") >= 0 ){
    digitalWrite( relay_a, HIGH );
  }
   if( sms.indexOf("onb") >= 0 ){
    digitalWrite(  relay_b, HIGH );
  }
   if( sms.indexOf("onc") >= 0 ){
    digitalWrite(  relay_c, HIGH );
  }
  if( sms.indexOf("ond") >= 0 ){
    digitalWrite(  relay_d, HIGH );
  }
  if( sms.indexOf("offa") >= 0 ){
    digitalWrite(  relay_a, LOW );
  }
  if( sms.indexOf("offb") >= 0 ){
    digitalWrite(  relay_b, LOW );
  }
  if( sms.indexOf("offc") >= 0 ){
    digitalWrite(  relay_c, LOW );
  }
  if( sms.indexOf("offd") >= 0 ){
    digitalWrite(  relay_d, LOW );
  }
}
// EN: Request Text Mode for SMS messaging
void GprsTextModeSMS(){
  Serial.println( "AT+CMGF=1" );
}

void GprsReadSmsStore( String SmsStorePos ){
  Serial.print( "AT+CMGR=" );
  Serial.println( SmsStorePos );
}

// EN: Clear the GPRS shield message buffer
void ClearGprsMsg(){
  msg = "";
}

// EN: interpret the GPRS shield message and act appropiately
void ProcessGprsMsg() {
  if( msg.indexOf( "Call Ready" ) >= 0 ){
   //  Serial.println( "*** GPRS Shield registered on Mobile Network ***" );
     GprsTextModeSMS();
  }

  // EN: unsolicited message received when getting a SMS message
  if( msg.indexOf( "+CMTI" ) >= 0 ){
   //  Serial.println( "*** SMS Received ***" );
     // EN: Look for the coma in the full message (+CMTI: "SM",6)
     //     In the sample, the SMS is stored at position 6
     int iPos = msg.indexOf( "," );
     String SmsStorePos = msg.substring( iPos+1 );
   //  Serial.print( "SMS stored at " );
  //   Serial.println( SmsStorePos );     
     // EN: Ask to read the SMS store
     GprsReadSmsStore( SmsStorePos );
  }

  // EN: SMS store readed through UART (result of GprsReadSmsStore request)  
  if( msg.indexOf( "+CMGR:" ) >= 0 ){
    // EN: Next message will contains the BODY of SMS
    SmsContentFlag = 1;
    // EN: Following lines are essentiel to not clear the flag!
    ClearGprsMsg();
    return;
  }

  // EN: +CMGR message just before indicate that the following GRPS Shield message 
  //     (this message) will contains the SMS body 
  if( SmsContentFlag == 1 ){
 //   Serial.println( "*** SMS MESSAGE CONTENT ***" );
 //   Serial.println( msg );
 //   Serial.println( "*** END OF SMS MESSAGE ***" );
    ProcessSms( msg );
  }

  ClearGprsMsg();
  // EN: Always clear the flag
  SmsContentFlag = 0; 
}

----------


## keap

> Έχω και εγώ module gsm/gprs με το SIM 900A 1800/1900 MHZ και δουλεύει μια χαρά. Το΄χω να στέλνει μηνύματα σε περίπτωση συναγερμού σε 2 αριθμούς κινητών.Αλλά το έχω δοκιμάσει κιόλας , αν μπορεί να κάνει κλήσεις σε αριθμούς μόλις του δώσω εντολή και λειτούργησε μια χαρά.Ολα αυτά μέσω arduino.
> 
>   Αλλά για να δουλέψει το κάθε module πρέπει να σου δώσει ο πωλητής ή να ψάξεις εσύ στο σά-ιτ του κατασκευαστή να βρεις τις κατάλληλες βιβλιοθήκες.Μodule gsm/gprs υπάρχουν πάρα πολλά,αλλά δεν είναι συμβατά,το καθένα θέλει την δική του βιβλιοθήκη και μπορεί να έχει και ξεχωριστό πιν αουτ!!!Χωρίς αυτά δεν πρόκειται ποτέ να δουλέψει....Και εγώ στην αρχή αυτό έπαθα,μέχρι να μου δώσει ο πωλητής την κατάλληλη βιβλιοθήκη.
> 
> Οπότε όταν δεν σας δουλεύουν ξεκινήστε πρώτα από το σχηματικό για να δείτε το πιν-άουτ και βρείτε την δική του βιβλιοθήκη,όπως είπε πολύ σωστά και παραπάνω ο Μάνος.



Ευχαριστώ πολύ για την απάντηση και τον χρόνο σου.

----------


## keap

> Για να γίνει διερεύνηση, χρειάζεται σχηματικό και κώδικας.



Και ακόμα ένα που δεν δούλεψε είναι αυτό.

#include<LiquidCrystal.h>
LiquidCrystal lcd(6,7,8,9,10,11);
#define Fan 3
#define Light 4
#define TV 5
int temp=0,i=0;
int led=13;
char str[15];
void setup()
{
  lcd.begin(16,2);
  Serial.begin(9600);
  pinMode(led, OUTPUT);
   pinMode(Fan, OUTPUT);
    pinMode(Light, OUTPUT);
     pinMode(TV, OUTPUT);

  lcd.setCursor(0,0);
  lcd.print("GSM Control Home");
  lcd.setCursor(0,1);
  lcd.print("   Automaton    ");
  delay(2000);
  lcd.clear();
  lcd.print("Circuit Digest");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("System Ready");
  Serial.println("AT+CNMI=2,2,0,0,0");
  delay(500);
  Serial.println("AT+CMGF=1");
  delay(1000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Fan   Light  TV ");
  lcd.setCursor(0,1);
  lcd.print("OFF    OFF   OFF "); 
}
void loop()
{
  lcd.setCursor(0,0);
  lcd.print("Fan   Light  TV");
  if(temp==1)
  {
    check();
    temp=0;
    i=0;
    delay(1000);
  }
}
 void serialEvent() 
 {
  while(Serial.available()) 
  {
    if(Serial.find("#A."))
    {
      digitalWrite(led, HIGH);
      delay(1000);
      digitalWrite(led, LOW);
      while (Serial.available()) 
      {
      char inChar=Serial.read();
      str[i++]=inChar;
      if(inChar=='*')
      {
        temp=1;
        return;
      } 
      } 
    }
   }
 }
void check()
{
   if(!(strncmp(str,"tv on",5)))
    {
      digitalWrite(TV, HIGH);
      lcd.setCursor(13,1); 
      lcd.print("ON    ");
      delay(200);
    }  

   else if(!(strncmp(str,"tv off",6)))
    {
      digitalWrite(TV, LOW);
      lcd.setCursor(13,1); 
      lcd.print("OFF    ");
      delay(200);
    }

    else if(!(strncmp(str,"fan on",5)))
    {
      digitalWrite(Fan, HIGH);
      lcd.setCursor(0,1); 
      lcd.print("ON   ");
      delay(200);
    }

    else if(!(strncmp(str,"fan off",7)))
    {
      digitalWrite(Fan, LOW);
      lcd.setCursor(0,1); 
      lcd.print("OFF    ");
      delay(200);
    }

    else if(!(strncmp(str,"light on", :Cool: ))
    {
      digitalWrite(Light, HIGH);
      lcd.setCursor(7,1); 
      lcd.print("ON    ");
      delay(200);
    }

    else if(!(strncmp(str,"light off",9)))
    {
      digitalWrite(Light, LOW);
      lcd.setCursor(7,1); 
      lcd.print("OFF    ");
      delay(200);
    } 

    else if(!(strncmp(str,"all on",6)))
    {
      digitalWrite(Light, HIGH);
      digitalWrite(Fan, HIGH);
      digitalWrite(TV, HIGH);
      lcd.setCursor(0,1); 
      lcd.print("ON     ON    ON  ");
      delay(200);
    }

    else if(!(strncmp(str,"all off",7)))
    {
      digitalWrite(Light, LOW);
      digitalWrite(Fan, LOW);
      digitalWrite(TV, LOW);
      lcd.setCursor(0,1); 
      lcd.print("OFF   OFF    OFF  ");
      delay(200);
    }     
}

GSM-Based-Home-Automation-System-circuit-diagram.gif

----------


## keap

Και κάτι ακόμα που θέλω να ρωτήσω,σε κάποιες βιβλιοθήκες αναφέρει να συνδέσω σε δύο pins του arduino το
power pin key και το power status key,ποια pins είναι αυτά που αντιστοιχούν στο gsm module?

----------


## andreasmon

ρίξε μια ματιά εδώ  http://www.ayomaonline.com/programmi...-with-arduino/   λέει ότι θέλει μέγιστη τάση 4,4 βολτ!

και εδώ το ίδιο αναφέρει https://github.com/stephaneAG/SIM800L

δοκίμασε ένα παράδειγμα από αυτά που αναφέρει στο πρώτο λινκ ,για να δεις καταρχήν ότι δουλεύει..

----------


## SProg

Πως εχετε συνδεσει τα Rx/Tx λαθος;





> Προσφατα σε ενα project με μΕ,μου εκανε εντυπωση που επρεπε να συνδεσω καπως 'παραξενα' τον μΕ μου με το GSM Shield.Τι εννοω παραξενα:
> 
> *Tx-Tx 
> Rx-Rx* 
> 
> 
> Υπεθεσα οτι δεν ειναι καποιο τυπογραφικο λαθος πανω στο GSM αλλα κατι αλλο.Εψαξα/ρωτησα και ειδα οτι το GSM Shield οπως και τα Modem,ειναι συσκευες DCE.

----------


## keap

> Πως εχετε συνδεσει τα Rx/Tx λαθος;



Σάββα καλησπέρα εγώ ότι σχέδια βρήκα ήτανε Rx-Tx και Tx-Rx,να το δοκιμάσω κι έτσι και βλέπουμε
σ'ευχαριστώ και στο παρελθόν με έχεις βοηθήσει για τον arduino.

----------


## keap

> ρίξε μια ματιά εδώ  http://www.ayomaonline.com/programmi...-with-arduino/   λέει ότι θέλει μέγιστη τάση 4,4 βολτ!
> 
> και εδώ το ίδιο αναφέρει https://github.com/stephaneAG/SIM800L
> 
> δοκίμασε ένα παράδειγμα από αυτά που αναφέρει στο πρώτο λινκ ,για να δεις καταρχήν ότι δουλεύει..



Θα το κοιτάξω και θα σου πω,ευχαριστώ

----------


## SProg

Γενικα καλο ειναι να μιλας στο GMS πρωτα απο ενα τερματικο (πχ το Hyperterminal) και αφου βεβαιωθεις οτι δεχεται/απαντασει σωστα , τοτε μπλεκεις και με τον μΕ.

Μπορει να ειναι απο λαθος συνδεσμολογια μεψρι λαθος ρυθμο μεταδοσης.

----------


## keap

Θα δοκιμάσω κι αυτό,θα προσπαθήσω βασικά γιατί δεν το έχω ξανακάνει,αλλά πιστεύω με λίγο ψάξημο να το βρω...




> Γενικα καλο ειναι να μιλας στο GMS πρωτα απο ενα τερματικο (πχ το Hyperterminal) και αφου βεβαιωθεις οτι δεχεται/απαντασει σωστα , τοτε μπλεκεις και με τον μΕ.
> 
> Μπορει να ειναι απο λαθος συνδεσμολογια μεψρι λαθος ρυθμο μεταδοσης.

----------


## SProg

Συνδεσε το GSM με το Arduino και στειλε τις βασικες AT εντολες μεσω του IDE Monitor για να δεις εαν απανταει.

----------


## keap

Έγινε Σάββα θα το δοκιμάσω και θα σου πω




> Συνδεσε το GSM με το Arduino και στειλε τις βασικες AT εντολες μεσω του IDE Monitor για να δεις εαν απανταει.

----------


## SProg

Κωστα ξεχασα να το γραψω.Δοκιμασε με διαφορες αλλαγες να του στειλεις την πιο απλη εντολη 'AT' και να σου απαντησει.

----------


## nkarama

Ξεκίνα απλά. Μην πηγαίνεις κατ ευθείαν στον πατσά όταν δεν ξέρεις να βράσεις μακαρόνια  :Rolleyes: 
Η πλακέτα που έχεις δέχετε τροφοδοσία 5V οπότε δεν έχεις πρόβλημα. Τα σχόλια περι 3.3V αφορούν στο SIM800  / SIM900 per se. Η πλακέτα πάνω έχει regulator.

Κάνε αυτό που είπε ο Σάββας. Αν δεν έχεις κάποιον FTDI για να συνδέσεις κατευθείαν το module με το PC για να μιλήσεις απ ευθείας, φόρτωσε στο arduino το πρώτο sketch απο το λινκ που αναφέρετε παραπάνω, σύνδεσε το module όπως λέει στα σχόλια του sketch και δώσε απλά την εντολή "ΑΤ"
Θα πρέπει να απαντήσει με OK. Αν δεν απαντήσει, δοκίμασε και άλλες ταχύτητες στην software serial (το sketch έχει 9600)

Απο τους κώδικες που έχεις παραθέσει εδώ, ο πρώτος τουλάχιστον δεν είναι σωστός. Ο δεύτερος είναι αδύνατο να διαβαστεί έτσι όπως είναι....

----------


## SRF

http://www.ayomaonline.com/programmi...-with-arduino/ 
το πλακετάκι που έχεις... είναι ολίγον "τραγικό" ως προς το πως έχουν σχεδιάσει την τροφοδοσία του SIM800 !  βάζουν δύο διόδους σε σειρά για να "ρίξουν" τα 5V στα ~3.8V ! Λάβε υπ' όψην σου ότι δεν αρκεί να τροφοδοτήσεις τα +5V από την πλακέτα του αρντουίνο... γιατί το ρεύμα που απαιτεί το SIM800 είναι αρκετά μεγαλύτερο ειδικά κατά την ενεργοποίηση του στο δίκτυο! Χρειάζεσαι να παρέχεις ~3Α αλλοιώς μόλις πάει να συνδεθεί στο δίκτυο... με τις διόδους μάλιστα.... θα "κρεμάει" !

----------


## SRF

> Ξεκίνα απλά. Μην πηγαίνεις κατ ευθείαν στον πατσά όταν δεν ξέρεις να βράσεις μακαρόνια 
> Η πλακέτα που έχεις δέχετε τροφοδοσία 5V οπότε δεν έχεις πρόβλημα. Τα σχόλια περι 3.3V αφορούν στο SIM800  / SIM900 per se.* Η πλακέτα πάνω έχει regulator.
> *
> Κάνε αυτό που είπε ο Σάββας. Αν δεν έχεις κάποιον FTDI για να συνδέσεις κατευθείαν το module με το PC για να μιλήσεις απ ευθείας, φόρτωσε στο arduino το πρώτο sketch απο το λινκ που αναφέρετε παραπάνω, σύνδεσε το module όπως λέει στα σχόλια του sketch και δώσε απλά την εντολή "ΑΤ"
> Θα πρέπει να απαντήσει με OK. Αν δεν απαντήσει, δοκίμασε και άλλες ταχύτητες στην software serial (το sketch έχει 9600)
> 
> Απο τους κώδικες που έχεις παραθέσει εδώ, ο πρώτος τουλάχιστον δεν είναι σωστός. Ο δεύτερος είναι αδύνατο να διαβαστεί έτσι όπως είναι....



"regulator" ? Δύο εν σειρά διόδους έχει!  Τι... regulator?

----------


## SProg

Συνηθως εχουν κυκλωμα διακοπτικο που μειωνει το μεταβατικο φαινομενου που πολλες φορες αναγκαζει τον Arduino να κανει και Reset.Δε το ξερω ουτε ειδα το σχηματικο απο το module σου.

Δοκιμασε με εξωτερικη τροφοδοσια αν και συνηθως το μεγαλο ρευμα το τραβανε κατα την κληση/μνμ κτλ.

----------


## SProg

Αμα σου λεει ο Γιωργος οτι μονο διοδους..εχει μονο διοδους.

----------


## nkarama

> "regulator" ? Δύο εν σειρά διόδους έχει!  Τι... regulator?



Καλά ντε μην βαράς.... Στην μικρή οθόνη του laptop είδα τα transistor μπροστά και τα πέρασα για regulators. 
Οσον αφορά το θέμα ρευμάτων, είσαι σωστός, it goes without saying ότι η παροχή του Arduino δεν το αρκεί ούτε για πλάκα...

----------


## manolena

Κωνσταντίνε, μπορείς να δοκιμάσεις τον παρακάτω κώδικα με τη συνημμένη βιβλιοθήκη για Uno;
Πες μας τι κάνει.

/*
PINOUT: 
 *        _____________________________
 *       |  ARDUINO UNO >>>   SIM800L  |
 *        -----------------------------
 *            GND      >>>   GND
 *        RX  *10      * >>>   TX    
 *        TX  *11      * >>>   RX
 *       RESET 2       >>>   RST 
 *                 
 *   POWER SOURCE 4.2V >>> VCC
 */




```
/*
PINOUT: 
 *        _____________________________
 *       |  ARDUINO UNO >>>   SIM800L  |
 *        -----------------------------
 *            GND      >>>   GND
 *        RX  10       >>>   TX    
 *        TX  11       >>>   RX
 *       RESET 2       >>>   RST 
 *                 
 *   POWER SOURCE 4.2V >>> VCC
 */
// ===================================================================
#include <SoftwareSerial.h> //is necesary for the library!! 
#include <stdio.h>
#include <string>
#include "SIM900.h"
#include "sms.h"
// ===================================================================
SMSGSM sms;  //to declare the library
SoftwareSerial modem(10,11);
// ===================================================================
boolean started = false;
char sms_text[6];
char phone_number[20]; // array for the phone number string
char sms_position;
int relay_a=4;
int relay_b=5;
int relay_c=6;
int relay_d=7;
// ===================================================================
void setup()
{
  Serial.begin(9600); // only for debug the results .
  modem.begin(9600); 
  pinMode( relay_a, OUTPUT ); 
  pinMode( relay_b, OUTPUT ); 
  pinMode( relay_c, OUTPUT ); 
  pinMode( relay_d, OUTPUT ); 
  digitalWrite( relay_a, LOW ); 
  digitalWrite( relay_b, LOW ); 
  digitalWrite( relay_c, LOW );
  digitalWrite( relay_d, LOW );


  if (gsm.begin(9600)) 
  {
    Serial.println(F("modem ready."));
    Serial.println();
    started=true;    
  }   
}
// ===================================================================
void loop()
{
  if(started) 
  {
    sms_position = sms.IsSMSPresent(SMS_UNREAD);
    if (sms_position) 
    {
      sms.GetSMS(sms_position, phone_number, sms_text, 100);
      if(strcmp(sms_text,"ona") == 0) 
      {
        digitalWrite( relay_a, HIGH ); 
      }  
      if(strcmp(sms_text,"offa") == 0) 
      {
        digitalWrite( relay_a, LOW ); 
      }  
      if(strcmp(sms_text,"onb") == 0) 
      {
        digitalWrite( relay_b, HIGH ); 
      }  
      if(strcmp(sms_text,"offb") == 0) 
      {
        digitalWrite( relay_b, LOW ); 
      }
      if(strcmp(sms_text,"onc") == 0) 
      {
        digitalWrite( relay_c, HIGH ); 
      }  
      if(strcmp(sms_text,"offc") == 0) 
      {
        digitalWrite( relay_c, LOW ); 
      }
      if(strcmp(sms_text,"ond") == 0) 
      {
        digitalWrite( relay_d, HIGH ); 
      }  
      if(strcmp(sms_text,"offd") == 0) 
      {
        digitalWrite( relay_d, LOW ); 
      } 
      deleteSMS();    
    }  
  }    
}
// ===================================================================
void deleteSMS()
{
  for(int i=1;i<=20;i++)
  {
    sms.DeleteSMS(i);
  }  
}
// ===================================================================
// ===================================================================
// ===================================================================
// ===================================================================
// ===================================================================
```


Υποθέτω πως έχεις ενεργοποιήσει το modem απο hardware.

----------

Fire Doger (09-09-16)

----------


## keap

> Ξεκίνα απλά. Μην πηγαίνεις κατ ευθείαν στον πατσά όταν δεν ξέρεις να βράσεις μακαρόνια 
> Η πλακέτα που έχεις δέχετε τροφοδοσία 5V οπότε δεν έχεις πρόβλημα. Τα σχόλια περι 3.3V αφορούν στο SIM800  / SIM900 per se. Η πλακέτα πάνω έχει regulator.
> 
> Κάνε αυτό που είπε ο Σάββας. Αν δεν έχεις κάποιον FTDI για να συνδέσεις κατευθείαν το module με το PC για να μιλήσεις απ ευθείας, φόρτωσε στο arduino το πρώτο sketch απο το λινκ που αναφέρετε παραπάνω, σύνδεσε το module όπως λέει στα σχόλια του sketch και δώσε απλά την εντολή "ΑΤ"
> Θα πρέπει να απαντήσει με OK. Αν δεν απαντήσει, δοκίμασε και άλλες ταχύτητες στην software serial (το sketch έχει 9600)
> 
> Απο τους κώδικες που έχεις παραθέσει εδώ, ο πρώτος τουλάχιστον δεν είναι σωστός. Ο δεύτερος είναι αδύνατο να διαβαστεί έτσι όπως είναι....



Ευχαριστώ Νίκο για το χρόνο σου

----------


## keap

Ευχαριστώ για το χρόνο σου θα το δοκίμασω και θα σε ενημερώσω,τι εννοείς να το έχω ενεργοποιήσει?πως γίνεται?





> Κωνσταντίνε, μπορείς να δοκιμάσεις τον παρακάτω κώδικα με τη συνημμένη βιβλιοθήκη για Uno;
> Πες μας τι κάνει.
> 
> /*
> PINOUT: 
>  *        _____________________________
>  *       |  ARDUINO UNO >>>   SIM800L  |
>  *        -----------------------------
>  *            GND      >>>   GND
> ...

----------


## keap

Θέλω να σας ευχαριστήσω όλους σας για τον χρόνο σας και να ζητήσω συγνώμη που καθυστερώ να απαντήσω
αλλά εχθές μου κλέψανε το αυτοκίνητο και είχα τρεχάματα και πάλι σας ευχαριστώ που με βοηθάτε,θα δοκιμάσω ότι μου είπατε
και θα σας ενημερώσω για την εξέλιξη.

----------


## manolena

To σχηματικό της πλακέτας που δείχνεις στο πρώτο μήνυμα πρέπει να είναι αυτό:

http://www.electrodragon.com/w/image..._schematic.jpg

800px-Sim800L_schematic.jpg

Δεν βλέπω όμως πως ενεργοποιείται το πιν POWKEY στην πλακέτα. Κάτι λείπει (Q2?)

----------


## keap

Καλημέρα,
Μάνο δοκίμασα αυτό που μου έστειλες,θα σου πω την σειρά μήπως έκανα λάθος ή δεν έκανα κάτι που έπρεπε.
Αποσυμπίεσα το αρχείο που μου έστειλες και το έκανα αντιγραφή και επικόλληση στο φάκελο του arduino στο φάκελο βιβλιοθήκες.
Άνοιξα το arduino ide και έκανα επικόλληση τον κώδικα που έγραψες χωρίς καμία αλλαγή και έκανα check για να δω αν βγάζει σφάλματα 
και μου έβγαλε το μήνυμα erro compiling.





> Κωνσταντίνε, μπορείς να δοκιμάσεις τον παρακάτω κώδικα με τη συνημμένη βιβλιοθήκη για Uno;
> Πες μας τι κάνει.
> 
> /*
> PINOUT: 
>  *        _____________________________
>  *       |  ARDUINO UNO >>>   SIM800L  |
>  *        -----------------------------
>  *            GND      >>>   GND
> ...

----------


## SProg

Σου απανταει το GMS;Χεσε τον μικροελεγκτη.Δεν σε νοιαζει το προγραμμα ΕΑΝ δεν βεβαιωθεις οτι λειτουργει το GSM.

Στο γραψαμε 10 φορες

----------


## keap

Καλά μην βαράς Σάββα ,το δοκίμαζω και σας λέω





> Σου απανταει το GMS;Χεσε τον μικροελεγκτη.Δεν σε νοιαζει το προγραμμα ΕΑΝ δεν βεβαιωθεις οτι λειτουργει το GSM.
> 
> Στο γραψαμε 10 φορες

----------


## manolena

Αν το modem δεν κάνει power up και registration στο δίκτυο, δεν πρόκειται ποτέ να κάνει το ο,τιδήποτε. Δεν βλέπω πουθενα, πουθενά όμως πως το modem ξεκινάει. Όλα τα SIMCOM θέλουν για ελάχιστο χρόνο μια γή στο πινάκι POWKEY, είτε μέσω HW (διακόπτη pushbutton), είτε μέσω SW (και τη βοήθεια ενός transistor). Πρέπει να βεβαιωθείς οτι το modem δουλεύει για να κάνεις τα υπόλοιπα με το πρόγραμμα.
Μετά βλέπεις για το compiling error που σου βγάζει (αντίγραψε το σφάλμα που σου βγάζει και βάλτο εδώ να δούμε τι λέει).

----------


## SProg

Μα στα ειπαμε για να μην παιδευεσαι και να πας με τη λογική.

Eπισης, εχει τυχει σε παρομοι ο GMS να μην λειτουργει το Pin Resert/StartUP και το ειχα κολλησει.Ετσι οποτε εβαζες τροφοδοσια ενεργοποιουνταν.

----------


## SRF

Ρίξε μιά ματιά σε αυτό το σχέδιο

23003_SIM900DGSM1_Schema.pdf 
που αν και δεν ειναι "αρντουϊνο" θα δεις ποια σήματα του 900 πρέπει ΑΠΑΡΑΙΤΗΤΩΣ να συνδέσεις! 
Δες στο δικό σου κύκλωμα τι ΔΕΝ έχεις πιθανόν συνδέσει και διόρθωσε!

----------

manolena (14-09-16)

----------


## SProg

θα κανουμε το Θεσσαλονικη-Καστορια.. μεσω Αγιου Ορους.

----------


## keap

Καλημέρα ξεκίνησα και σύνδεσα ένα usb ttl (FTDI232) με την sim800l και δοκίμασα να ανοίξω με το putty και το arduino ide για να δώσω τις εντολές 
και μόλις ανοίγω την σειριακή οθόνη ξεκινάνε να φορτώνουν κάτι ακαταλαβίστηκα σύμβολα και συνεχίζουν χωρίς σταματημώ.
Πριν δύο μήνες περίπου που μου είχε έρθει η πλακέτα και δοκίμαζα με έναν κώδικα που είχα βρει στον arduino,έγραφα την εντολή και μετά απαντούσε με ΟΚ.
Τώρα που ξαναδοκίμασα το ίδιο ακριβώς με το που ανοίγω την σειριακή οθόνη ξεκινάνε τα ακαταλαβίστηκα σύμβολα.

----------


## SProg

Τρεχεις καποιο προγραμμα σχετικο με σειραικη στο Arduino;Δεν θα πρεπει να τρεχει προγραμμα που να εχει σχεση με σειριακη,περασε πχ το BlinkLed.

Τα κινεζικα λογικα ειναι απο λαθος ρυθμο μεταδοσης.

----------


## keap

Καλησπέρα,
όχι δεν έτρεχα κανένα πρόγραμμα στον arduino το έκανα και έτσι πως είπες και πάλι τα ίδια <κινέζικα>.
Εντομεταξύ και στην πλακέτα NEOWAY M590 είχα το ίδιο ακριβώς πρόβλημα.





> Τρεχεις καποιο προγραμμα σχετικο με σειραικη στο Arduino;Δεν θα πρεπει να τρεχει προγραμμα που να εχει σχεση με σειριακη,περασε πχ το BlinkLed.
> 
> Τα κινεζικα λογικα ειναι απο λαθος ρυθμο μεταδοσης.

----------


## SProg

> Καλημέρα ξεκίνησα και σύνδεσα ένα usb ttl (FTDI232) με την sim800l και δοκίμασα να ανοίξω με το putty και το arduino ide για να δώσω τις εντολές 
> και μόλις ανοίγω την σειριακή οθόνη ξεκινάνε να φορτώνουν κάτι ακαταλαβίστηκα σύμβολα και συνεχίζουν χωρίς σταματημώ.
> Πριν δύο μήνες περίπου που μου είχε έρθει η πλακέτα και δοκίμαζα με έναν κώδικα που είχα βρει στον arduino,έγραφα την εντολή και μετά απαντούσε με ΟΚ.
> Τώρα που ξαναδοκίμασα το ίδιο ακριβώς με το που ανοίγω την σειριακή οθόνη ξεκινάνε τα ακαταλαβίστηκα σύμβολα.





Ενα Arduino θελεις και ενα GSM.4 καλωδια για Tx/Rx/γειωση/ταση αναμεσα σε Arduino και GSM.

Για Terminal μπορεις ειτε του Arduino είτε το Ηyperterminal των Windows.

----------


## keap

Γεία σας παιδιά,
Βρήκα το ρυθμό μετάδοσης ώστε να μην βγάζει κινέζικα,δοκίμασα κάποιες εντολές κάποιες μερικές γυρνούσαν με ΟΚ και κάποιες με ERROR.
Επίσης ένα άλλο σημαντικό πρόβλημα που έχω είναι ότι μόλις ανοίγω το πρόγραμμα βγάζει συνέχεια
RDY
+CFUN:1
+CPIN:READY
Call Ready
SMS Ready
χωρίς να σταματάει καθόλου
Έχετε καμία ιδέα?Το πρόγραμμα είναι το SSCOM3.2 ρυθμός μετάδοσης 2400.

----------


## maki

Καλησπερα παιδιά, συναρπαστικός ο χωρος του gsm και οι δυνατότητές του αλλά ένα ερώτημα.
Όταν για να συνδεθείς με το δικτυο επικοινωνιών απαιτείται καθε φορα που εισάγεις σε μια συσκευή τηλεφωνίας την κάρτα sim *κωδικός PIN1*,  πως θα συνδεθείς μεσω arduino + gsm module και πως θα στέιλεις sms,  αφου καμιά απλή βιβλιοθηκη (τουλαχιστον απ αυτες που είδα) δεν εξεταζει  καν αυτό το ζητημα. Νομίζω να εγινε κατανοητό.

----------


## mikemtb

Μια απλή λύση είναι να βάλεις την κάρτα σιμ σε ένα τηλέφωνο,  και να απενεργοποιήσεις το pin  

via Tapatalk

----------

maki (11-10-17)

----------


## maki

Όντως ετσι εκανα και στην παλιά μου καρτα, χθες την αλλαξα σε τριπλ, και το είχα ξεχασει.  

Σημασία όμως έχει ότι δεν δουλευει:

http://www.ayomaonline.com/programmi...-with-arduino/




```
#include <SoftwareSerial.h>
 
//SIM800 TX is connected to Arduino D8
#define SIM800_TX_PIN 8
 
//SIM800 RX is connected to Arduino D7
#define SIM800_RX_PIN 7
 
//Create software serial object to communicate with SIM800
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);
 
void setup() {
  //Begin serial comunication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  while(!Serial);
   
  //Being serial communication witj Arduino and SIM800
  serialSIM800.begin(9600);
  delay(1000);
   
  Serial.println("Setup Complete!");
  Serial.println("Sending SMS...");
   
  //Set SMS format to ASCII
  serialSIM800.write("AT+CMGF=1\r\n");
  delay(1000);
 
  //Send new SMS command and message number
  serialSIM800.write("AT+CMGS=\"07194XXXXX\"\r\n");
  delay(1000);
   
  //Send SMS content
  serialSIM800.write("TEST");
  delay(1000);
   
  //Send Ctrl+Z / ESC to denote SMS message is complete
  serialSIM800.write((char)26);
  delay(1000);
     
  Serial.println("SMS Sent!");
}
 
void loop() {
}
```


Καθε μισό λεπτο η σειριακή μου βγάζει:

_Setup Complete!
Sending SMS...
SMS Sent!_

Τωρα τι μηνυμα πρέπει να παίρνω στο άλλο κινητο και καθε πότε δε ξερω. Εννοείται  ότι έγραψα τον αριθμό τηλεφώνου, δοκίμασα να γράψω και στη σειριακή  και να κανω αποστολή, αλλα όταν βαζω τη καρτα στο κινητό μου γράφει παντα _σφάλμα what s up._

----------


## maki

ούτε ο παρακατω απλός κωδικας ανταποκρίνεται




```
#include <Sim800l.h>
#include <SoftwareSerial.h> //is necesary for the library!! 
Sim800l Sim800l;  //to declare the library
char* text;
char* number;
bool error; //to catch the response of sendSms


void setup(){
    Sim800l.begin(); // initializate the library. 
    text="Testing Sms";  //text for the message. 
    number="+306980768376"; //change to a valid number.
    error=Sim800l.sendSms(number,text);
    // OR 
    //Sim800l.sendSms("+540111111111","the text go here")


}

void loop(){
    //do nothing
}
```


Αυτό είναι το gsm. Λειτουργεί με 3.7 - 4.2V. Το συνδεσα στα 3.7V της μπαταρίας του κινητού μου.

gsm3.jpg

----------


## hackertom

Το sim800l αγόρασα και εγω φίλε πριν δω βέβαια τα μηνύματα εδώ... Στο YouTube έδειχνε οτι δουλεύει... Εδώ διαβάζω οτι τελικά δεν παίζει;;

----------


## maki

> Το sim800l αγόρασα και εγω φίλε πριν δω βέβαια τα μηνύματα εδώ... Στο YouTube έδειχνε οτι δουλεύει... Εδώ διαβάζω οτι τελικά δεν παίζει;;



ή όντως δε δουλευει το sim800l, είναι δηλαδή μια απάτη
ή κατι εμεις κανουμε λαθος...σε αυτήν την περίπτωση το πιο απλό που μπορώ να σκεφτώ είναι ότι βαζουμε λαθος κωδικα.

----------


## Prithan

Με το terminal καταφερατε να μιλήσετε με το module?

----------

