Arduino UNO & Modem Sim800L Не могу написать команды настройки для отправки данных на сервер - PullRequest
0 голосов
/ 02 мая 2020

Я использую плату Arduino UNO с модемом sim800l. Я хочу использовать его для отправки данных на сервер, но проблема в том, что я не могу написать команды установки.

Что я делаю не так? Разве это не правильные команды для sim800l? Я пробовал с разными командами и вывод одинаков.

#include <SoftwareSerial.h>

//Create software serial object to communicate with SIM800L
SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx is connected to Arduino #3 & #2

void setup()
{
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);

  //Begin serial communication with Arduino and SIM800L
  mySerial.begin(9600);

  Serial.println("Initializing..."); 
  delay(100);
  delay(1000);

  mySerial.println("AT+CMEE=2"); // Error mode 
  delay(100);
  updateSerial();

  mySerial.println("AT"); //Once the handshake test is successful, i t will back to OK
  delay(100);
  updateSerial();

  mySerial.println("AT+CFUN=1"); //Level "full functionality" 
  delay(100);
  updateSerial();

  mySerial.println("AT+CGATT?"); //attach or detach from GPRS service 
  delay(100);
  updateSerial();

  mySerial.println("AT+CSTT=\"net\",\"\",\"\""); //AT+CSTT AT command sets up the apn, user name and password for the PDP context.
  delay(2000);
  updateSerial();

  mySerial.println("AT+CSTT?"); //AT+CSTT show apn
  delay(2000);
  updateSerial();

  mySerial.println("AT+CIICR"); //  Brings up wireless connection
  delay(2000);
  updateSerial();

  mySerial.println("AT+CIFSR"); //  Get local IP address if connected
  delay(2000);
  updateSerial();
}

Вот вывод с консоли Arduino IDE:

Initializing... 
AT+CHEE=2 
OK 
AT 
OK 
AT+CFUN=1 
OK 
AT+CGAIT? 
+CGATT: 1 
OK 
AT+CSTT="net","","" 
+CME ERROR: operation not allowed 
AT+CSTT? 
+CSTT: "CMNET","","" 

OK 
AT+CIICR 
+CME ERROR: operation not allowed 
AT+CIFSR 
+CME ERROR: operation not allowed 

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Последовательность команд отправки для установки соединения TCP / IP:

//Check the registration status
AT+CREG?

//Check attach status
AT+CGACT?

//Attach to the network
AT+CGATT=1

//Wait for Attach
WAIT=7

//Start task ans set the APN. Check your carrier APN
AT+CSTT="bluevia.movistar.es" // Here you havve net which I guess is not a NetworkAPN you have to use the APN from your provider (= sim card)

//Bring up the wireless connection
AT+CIICR

//Wait for bringup
WAIT=6

//Get the local IP address
AT+CIFSR

//Start a TCP connection to remote address. Port 80 is TCP.
AT+CIPSTART="TCP","74.124.194.252","80"

//Set prompt of '>' when module sends data
AT+CIPSPRT=1

//Send the TCP data
AT+CIPSEND

Если вы хотите быстро протестировать стабильную настройку, используйте этот 7 дней бесплатного использования инструмента для SIM800, SIM900 и затем скопируйте успешный процесс в код.

0 голосов
/ 02 мая 2020

У вас есть мои симпатии, мне потребовались недели, чтобы заставить моего Arduino говорить с net. Я думаю, что ваша проблема происходит в строке, содержащей «CSTT», которую я не думаю, что SIM800L распознает.

Попробуйте использовать приведенную ниже настройку с «SAPBR» вместо:

SoftwareSerial gprsSerial(7, 8); // working here with Arduino ports 7 and 8
void setup() {
  gprsSerial.begin(19200);
  Serial.begin(19200);
  Serial.println("connect to GPRS");
  gprsSerial.println("AT");
  toSerial();
  gprsSerial.println("AT+CREG?");  
  toSerial();
  gprsSerial.println("AT+CGATT?");
  toSerial();
  gprsSerial.println("AT+CSQ ");
  toSerial();
  gprsSerial.println("AT+SAPBR=3,1,\"Contype\",\"GPRS\"");
  delay(2000);
  toSerial();
  gprsSerial.println("AT+SAPBR=3,1,\"APN\",\"" + String(APN) + "\"");
  delay(300);
  gprsSerial.println("AT+SAPBR=3,1,\"USER\",\"" + String(USER) + "\"");
  delay(300);
  gprsSerial.println("AT+SAPBR=3,1,\"PWD\",\"" + String(PWD) + "\"");
  delay(1000);
  toSerial();
  gprsSerial.println("AT+SAPBR=1,1");
  delay(2000);
  toSerial();
  gprsSerial.println("AT+SAPBR=2,1");
  delay(2000);
  toSerial();
}

Ваш прогон l oop:

void loop(){
// Do your stuff
}

И ваша функция toSerial:

void toSerial()
{
  delay(200);
  if(gprsSerial.available()>0){
    textMessage = gprsSerial.readString();
    delay(100);
    Serial.print(textMessage);    
  }
}

Ваша функция сервера вызовов должна быть такой:

void callServer() {
  Serial.println("Calling server");
  gprsSerial.println("AT+CCLK?");
  toSerial();
  gprsSerial.println("AT+HTTPINIT");
  toSerial();
  gprsSerial.println("AT+HTTPPARA=\"CID\",1");
  toSerial();
  gprsSerial.println("AT+HTTPPARA=\"URL\",\"http:[YOURURL]") // NOTE: NOT HTTPS!
  delay(1000);
  toSerial();
  gprsSerial.println("AT+HTTPACTION=0");
  delay(3000);
  toSerial();
  gprsSerial.println("AT+HTTPREAD");
  delay(3000);
  toSerial();
}
...