نقل قول نوشته اصلی توسط masoud0711 نمایش پست ها
با سلام خدمت دوستان عزیز
من چند روز پیش ماژول sim800 قرمزه رو خریدم اول این که هرزگاهی کار میکنه یعنی بعضی وقتا سیگنال داره بعضی وقتا نداره بعدشم به همه دستورات atcommand جواب میده جز اونی که من میخوام
زنگ میزنه ولی وقتی دستور AT+CMGS رو میزنم ERROR رو بر میگردونه(شاید بالای 10 نمونه کد رو تست کردم ) حالا نمیدونم مشکل از منه یا از این ماژوله
این زنگیم که میگن میزنه با مبدل بهش atcommand میدم وقتی به آردوینو وصلش میکنم همینم اروره dialtone میده و زنگ نمیزنه(!!!!)
ممنون میشم دوستانی که استفاده کردن راهنمایی کنن
سلام
برای زنگ زدن از کدی که من چند تا تاپیک قبل تر گذاشتم استفاده کنید.
کد:
#include <SoftwareSerial.h>
SoftwareSerial SIM800(D2, D1 , 128);
#define GSMReset D3


void setup() {
  Serial.begin(9600); // for serial monitor
  SIM800.begin(9600); // for GSM shield
  gsmPower();
  gsmConfig();
  dialNumber() ;
}


void loop() {
  commandDetect();
}
//*********************************************************************************
void gsmConfig() {
  sendCommand("ATZ", 100);
  sendCommand("AT+CMGD=1,4", 200);
  sendCommand("AT+CMGF=1\r", 100); // set SMS mode to text
  sendCommand("AT+CFUN=1", 2000);
  sendCommand("AT+CREG?", 1000);
  dtmfActive();
  anwerCall();
  Serial.println("The end of Config process");
  Serial.println("Ensert\n 'd' for dial \n 'e' for english sms \n 'f' for farsi sms \n 'h' for HttpRequest \n 's' for Send2Pachube  ");
}
//**********************************************************************************
void showSms() {
  char incoming_char = 0;
  if ( SIM800.available() > 0)
  {
    incoming_char =  SIM800.read(); //Get the character from the cellular serial port.
    Serial.print(incoming_char); //Print the incoming character to the terminal.
  }
}
//***********************************************************************************
void smsProcess() {
  char incoming_char = 0;
  if ( SIM800.available() > 0)
  {


    incoming_char =  SIM800.read();
    if (incoming_char == 'A')
    {
      delay(10);
      incoming_char =  SIM800.read();
      if (incoming_char == 'd')
      {
        delay(10);
        Serial.print("horaaaaaaaaaaaaaaaaaaay");
      }
    }
  }
}
//***********************************************************************************
void gsmPower() {
  pinMode(GSMReset, OUTPUT);
  Serial.println("Turning GSM ON");
  digitalWrite(GSMReset, HIGH);
 // delay(1100);
  //digitalWrite(GSMReset, LOW);
 // delay(4000);
  Serial.println("Start config process...");
}


//**********************************************************************************


void sendCommand(String cmd, int t)
{
  SIM800.println(cmd);
  readSerial();
  delay(t);
}


//**************************************************************************************
void readSerial( ) {
  while (SIM800.available())
  {
    Serial.write(SIM800.read());
  }
}


//***********************************************************************************


void dialNumber() {
  Serial.println("Dialing...");
  sendCommand("ATD09177102643;", 100);
  Serial.println("End of Dial process");
  delay(2000);
  Serial.println("Ensert\n 'd' for dial \n 'e' for english sms \n 'f' for farsi sms \n 'h' for HttpRequest \n 's' for Send2Pachube  ");
}
//************************************************************************************
void ensms()
{
  Serial.println("Sending SMS");
  sendCommand("AT+CSCS=\"GSM\"", 200);
  sendCommand("AT+CMGF=1", 200);
  sendCommand("AT+CSMP=17,167,0,0", 200);
  sendCommand("AT+CMGS=\"09177102643\"", 500);
  sendCommand("Salam\n manam !\x1A", 500);
  Serial.println("Englisg SMS Sent");
  Serial.println("Ensert\n 'd' for dial \n 'e' for english sms \n 'f' for farsi sms \n 'h' for HttpRequest \n 's' for Send2Pachube  ");
}


//****************************************************************************************
void farsisms()
{
  Serial.println("Sending SMS");
  sendCommand("AT+CSCS=\"HEX\"", 100);
  sendCommand("AT+CMGF=1", 100);
  sendCommand("AT+CSMP=17,167,0,8", 100);
  sendCommand("AT+CMGS=\"09177102643\"", 500);
  sendCommand("0633064406270645060C002006220641062A0627062800200631062706CC062706460647\x1A", 0);
  Serial.println("Persian SMS Sent");
  Serial.println("Ensert\n 'd' for dial \n 'e' for english sms \n 'f' for farsi sms \n 'h' for HttpRequest \n 's' for Send2Pachube  ");
}
//*******************************************************************************************
void commandDetect() {


  if (Serial.available() > 0)
  {
    char data = Serial.read();
    switch (data)
    {
      case 'd' :
        dialNumber();
        break;


      case 'e' : ensms();
        break;


      case 'f' : farsisms();
        break;


      case 'h':
        SubmitHttpRequest();
        break;


      case 's':
        Send2Pachube();
        break;
    }
  }
}


//******************************************************************************************************
void SubmitHttpRequest()
{
  sendCommand("AT+CSQ", 100);
  sendCommand("AT+CGATT?", 100);
  sendCommand("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"", 1000); //setting the SAPBR, the connection type is using gprs
  sendCommand("AT+SAPBR=3,1,\"APN\",\"CMNET\"", 4000); //setting the APN, the second need you fill in your local apn server
  sendCommand("AT+SAPBR=1,1", 2000); //setting the SAPBR, for detail you can refer to the AT command mamual
  sendCommand("AT+HTTPINIT", 2000); //init the HTTP request
  sendCommand("AT+HTTPPARA=\"URL\",\"www.google.com.hk\"", 1000); // setting the httppara, the second parameter is the website you want to access
  sendCommand("AT+HTTPACTION=0", 10000); //submit the request
  sendCommand("AT+HTTPREAD", 300); // read the data from the website you access
  sendCommand("", 100);
  delay(2000);
  Serial.println("Ensert\n 'd' for dial \n 'e' for english sms \n 'f' for farsi sms \n 'h' for HttpRequest \n 's' for Send2Pachube  ");
}


//*************************************************************************************************************************
///send2Pachube()///
///this function is to send the sensor data to the pachube, you can see the new value in the pachube after execute this function///
void Send2Pachube()
{
  sendCommand("AT+CGATT?", 1000);
  sendCommand("AT+CSTT=\"CMNET\"", 1000); //start task and setting the APN,
  sendCommand("AT+CIICR", 3000); //bring up wireless connection
  sendCommand("AT+CIFSR", 2000); //get local IP adress
  sendCommand("AT+CIPSPRT=0", 3000);
  sendCommand("AT+CIPSTART=\"tcp\",\"api.cosm.com\",\"8081\"", 2000); //start up the connection
  sendCommand("AT+CIPSEND", 4000); //begin send data to remote server


  String humidity = "1031";//these 4 line code are imitate the real sensor data, because the demo did't add other sensor, so using 4 string variable to replace.
  String moisture = "1242";//you can replace these four variable to the real sensor data in your project
  String temperature = "30";//
  String barometer = "60.56";//
  sendCommand("{\"method\": \"put\",\"resource\": \"/feeds/42742/\",\"params\"", 500); //here is the feed you apply from pachube
  sendCommand(": {},\"headers\": {\"X-PachubeApiKey\":", 500); //in here, you should replace your pachubeapikey
  sendCommand(" \"_cXwr5LE8qW4a296O-cDwOUvfddFer5pGmaRigPsiO0", 500); //pachubeapikey
  sendCommand("jEB9OjK-W6vej56j9ItaSlIac-hgbQjxExuveD95yc8BttXc", 500); //pachubeapikey
  sendCommand("Z7_seZqLVjeCOmNbEXUva45t6FL8AxOcuNSsQS\"},\"body\":", 500);
  sendCommand(" {\"version\": \"1.0.0\",\"datastreams\": ", 500);
  sendCommand("[{\"id\": \"01\",\"current_value\": \"" + barometer + "\"},", 500);
  sendCommand("{\"id\": \"02\",\"current_value\": \"" + humidity + "\"},", 500);
  sendCommand("{\"id\": \"03\",\"current_value\": \"" + moisture + "\"},", 500);
  sendCommand("{\"id\": \"04\",\"current_value\": \"" + temperature + "\"}]},\"token\": \"lee\"}", 500);
  SIM800.println(); ((char)26); //sending
  delay(5000);
  SIM800.println();
  sendCommand("AT+CIPCLOSE", 100); //close the connection
  delay(2000);
  Serial.println("Ensert\n 'd' for dial \n 'e' for english sms \n 'f' for farsi sms \n 'h' for HttpRequest \n 's' for Send2Pachube  ");


}


//******************************************************************************************************************
void dtmfActive() {
  sendCommand("AT+DDET=1", 200);
}




//***************************************************************
void anwerCall() {
  sendCommand("ATS0=3", 200);
}


void blinkd16(){
  pinMode(16,OUTPUT);
  digitalWrite(16,HIGH);
  delay(100);
  digitalWrite(16,LOW);
    delay(100);
  }
شما لازمه توی این کد 3 تا تغییر انجام بدید

1. تغییر شماره پینهای سریال نرم افزاری به پینهایی که دارید تو آردوینو استفاده می کنید.
2. تغییر شماره پین GSMReset
3. اضافه کردن شماره خودتون به جای شماره تو تابع dialNumber