GSM-модуль IOT-GA6 Arduino + ошибка CME 58

Недавно я купил GSM-модуль IOT-GA6. Я хочу использовать его для отправки ммс, но не работает. Смс и звонок работают. Когда я выполняю функцию void (mms), монитор показывает сообщение об ошибке +CME EYROR:58. Кто-нибудь знает, что это значит и как это решить?

это мой код

include SoftwareSerial.h
include SD.h

define  CS    4

SoftwareSerial A6Module(2, 3);

File dataFile;

int i;

unsigned char data=0;

void setup()
{
  pinMode(PWR,OUTPUT);
  pinMode(CS,OUTPUT);

  A6Module.begin(115200);
  Serial.begin(115200);

  digitalWrite(PWR,LOW);
  delay(10);

  digitalWrite(PWR,HIGH);
  delay(10);

  if (!SD.begin(CS)) Serial.println("initialization failed!");
  else Serial.println("initialization done.");  
}

void loop()
{
  if(Serial.available())
  {
    while(Serial.available())
    {
      data=Serial.read();
      Serial.write(data);
      Serial.println("\n");
    }
    //данные=0;
  }

  if(Serial.available())
  {
    data=Serial.read();
  }  

  if(data=='1')
  {
    A6Module.println("AT+CGMI\r"); //Идентификация производителя
  }

  if(data=='2')
  {
    A6Module.println("AT+CGMM\r"); //Идентификация модели
  }

  if(data=='3')
  {
    A6Module.println("AT+CGMR\r"); //Версия ПО
  }

  if(data=='4')
  {
    A6Module.println("AT+CGSN\r"); // номер IMEI
  }

  if(data=='5')
  {
    A6Module.println("ATD+21369682909;\r"); //Вызов
  }

  if(data=='6')
  {
    A6Module.println("ATH\r"); //Вешать трубку
  }

  if(data=='7')
  {
    A6Module.println("AT+CMGF=1");
    delay(2000);
    A6Module.print("AT+CMGS=\"+213696829093");
    A6Module.print(char(34));  // "
    A6Module.print(char(13));  // CR
    A6Module.print('\r');  // шестнадцатеричный эквивалент новой строки
    delay(2000);
    A6Module.print("A6 test message");
    delay(500);
    A6Module.println (char(26));  //ctrl_z
  }

  if(data=='8')
  {
    A6Module.println("AT+CMGR=1\r"); //Читать сообщение
  }

  if(data=='9')
  {
   A6Module.println("AT+CMGD=1,0\r"); //Удаленное сообщение
  }  

  if(data=='s') sendMMS();
  data=0;
}

void sendMMS()
{
  A6Module.print("AT+CMMSINIT");
  delay(100);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+CMMSCURL=\"http://mms.itelcel.com/servlets/mms\"");
  delay(100);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+CMMSCID=1\r");
  delay(100);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+CMMSPROTO=\"148.233.151.240\",8080");
  delay(100);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+CMMSSENDCFG=6,3,0,0,2,4\r");
  delay(100);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+SAPBR=3,1,\"CONTYPE\",\"MMS\"\r");
  delay(100);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+SAPBR=3,1,\"APN\",\"mms.itelcel.com\"");
  delay(100);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+SAPBR=1,1");
  delay(4000);
  if(A6Module.available())

  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+SAPBR=2,1");
  delay(4000);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+CMMSEDIT=1");
  delay(100);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+CMMSDOWN=\"PIC\",19293,2000000,\"test.jpg\"\r");
  delay(1000);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }

  dataFile=SD.open("test.jpg");
  i=0;
  if(dataFile)
  {
    while(dataFile.available())
    {
      data=dataFile.read();
      if(data<0x10) Serial.print("0");
      Serial.print(data,HEX);
      i++;
      if((i%40)==0) Serial.println();
      A6Module.write(data);
    }
    dataFile.close();
  }  
  else
  {
    Serial.println("error opening test.jpg");
  }

  delay(1000);
  A6Module.print("AT+CMMSRECP=\"+213696829093");
  delay(100);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+CMMSVIEW\r");
  delay(2000);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+CMMSSEND\r");
  delay(2000);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+CMMSEDIT=0\r");
  delay(2000);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
  A6Module.print("AT+CMMSTERM\r");
  delay(2000);

  if(A6Module.available())
  {
    while(A6Module.available()) Serial.write(A6Module.read());
  }
}

, 👍-1

Обсуждение

какая строка вызывает ошибку? ... используйте операторы печати для отладки потока программы, @jsotola

все команды, начинающиеся с 'AT+CMMS' до A6, получают +cme error 58. Я не знаю, почему!, @b chabb


1 ответ


1

Arduino Uno не поддерживает максимальный ток, запрошенный GA6, попробуйте внешний источник для модуля gprs с напряжением не менее 6 В, используя общую землю между модулем gprs и arduino.

,