Почему SIM-карта отвечает на AT+CIPSEND сообщением "+CME ERROR: операция не разрешена", когда IP-адрес и TCP-соединение установлены?

Я работаю с командой по отправке данных из Raspberry Pi по сети 2G на сервер с помощью модуля GSM под названием "SIM800L EBV". Мы столкнулись с ошибкой AT+CIPSEND, которая возникла только в Замбии, Африка, при правильной работе в США (штат Арканзас, Колорадо и штат Вашингтон) в течение двух лет. Ниже изображение нашего журнала SIM. Из нашего журнала мы заметили, что AT+CIFSR для запроса IP-адреса работает. И когда AT+CIPSTART запускается для запуска TCP-соединения с сервером "obfuscated.org" через порт 11002, ответ OK и CONNECT OK, указывающий, что TCP-соединение с сервером установлено. Однако при запуске AT+CIPSEND мы получили сообщение "+CME ERROR: операция не разрешена". Кто-нибудь сталкивался с этой проблемой раньше? Кто-нибудь знает о какой-либо вспомогательной информации, которая может помочь решить проблему? Есть ли какие-либо предложения о том, как обойти эту ошибку CME? Есть ли другая команда для замены этой команды AT+CIPSEND? Почему это хорошо работает в Америке, а не в Замбии? Большое спасибо!

Wrote to sim: AT+CIFSR

Bytes to read: 26
Sim response: AT+CIFSR
172.50.216.113

Wrote to sim: AT+CIPSTART="TCP","redacted.org","11002"

Bytes to read: 58
Sim response: AT+CIPSTART="TCP","redacted.org","11002"
OK

CONNECT OK

Wrote to sim: AT+CIPSEND

Bytes to read: 47
SIM response: AT+CIPSEND
+CME ERROR: operation not allowed

1 ответ

Этот код здесь работает для меня. Я использую тот же модуль SIM800L EVB, который, похоже, не работает с большинством кодов, TinyGSM и другими запросами MQTT. Если нашли какие-либо решения, пожалуйста, поделитесь.

      #include <SoftwareSerial.h>
#include <ArduinoJson.h>

SoftwareSerial SIM900(17, 16); 
 
 
void setup()
{
  SIM900.begin(9600);       // the GPRS baud rate
  Serial.begin(9600);
  Serial.println("Initializing..");
    
work();
}
 
void loop()
{}

 void work()
{ 
  Serial.println("START");
 
  delay(1000);
 
  if (SIM900.available())
  Serial.write(SIM900.read());
 
  SIM900.println("AT");
  delay(3000);
 
  SIM900.println("AT+SAPBR=3,1,\"Contype\",\"GPRS\""); // untuk cek  GPRS 
  delay(6000);
  ShowSerialData();
 
  SIM900.println("AT+SAPBR=3,1,\"APN\",\"internet\"");//APN mobile phone (cek dekat phone)
  delay(6000);
  ShowSerialData();
 
  SIM900.println("AT+SAPBR=1,1"); 
  delay(6000);
  ShowSerialData();
 
  SIM900.println("AT+SAPBR=2,1");
  delay(6000);
  ShowSerialData();
 
  SIM900.println("AT+HTTPINIT"); // jika keluar error means gagal
  delay(6000);
  ShowSerialData();
 
  SIM900.println("AT+HTTPPARA=\"CID\",1"); //parameters untuk HTTP session
  delay(6000);
  ShowSerialData(); 


  SIM900.println("AT+HTTPPARA=\"URL\",\"http://......./api/v1/testwritter?data=+1234\""); //Server address // tukar pakai lain https://
  delay(4000);
  ShowSerialData();

//  SIM900.println("AT+HTTPPARA=\"REDIR\",1"); 
//  delay(4000);
//  ShowSerialData();
 
  SIM900.println("AT+HTTPPARA=\"CONTENT\",\"application/json\""); //json format
  delay(4000);
  ShowSerialData();


//  SIM900.println("AT+HTTPDATA=" + String(sendtoserver.length()) + ",100000"); // size bytes untuk hantar data dalam masa 10 seconds
//  Serial.println(sendtoserver);
//  delay(6000);
//  ShowSerialData();

  SIM900.println("AT+HTTPACTION=1"); // Post the data (1 means post)
  delay(6000);
  ShowSerialData();
 
  SIM900.println("AT+HTTPREAD"); 
  delay(6000);
  ShowSerialData();
 
  SIM900.println("AT+HTTPTERM");
  delay(10000);
  ShowSerialData;
}
 
void ShowSerialData()
{



  while (SIM900.available() != 0)
//    Serial.write(SIM900.read());
//  delay(1000);
  String response = SIM900.readStringUntil('\n');
Serial.println(response);
 
}
Другие вопросы по тегам