Почему 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);
}