Sim800 FTP Arduino

Я не смог ничего передать по FTP с помощью Arduino и 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

String moduleAnswer = "";

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(1000);

  SoftwareATCommand("AT"); //Once the handshake test is successful, it will back to OK
  SoftwareATCommand("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best
  SoftwareATCommand("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged
  SoftwareATCommand("AT+CREG?"); //Check whether it has registered in the network

  //APN and GRPS Setup
   SoftwareATCommand("AT+SAPBR=0,1"); //Close GPRS before connecting
   SoftwareATCommand("AT+SAPBR=3,1,\"Contype\",\"GPRS\""); //Configure bearer profile

  SoftwareATCommand("AT+SAPBR=1,1"); //Connect to GPRS

  //FTP Connection
  SoftwareATCommand("AT+FTPCID=1"); 
  SoftwareATCommand("AT+FTPSERV=127.189.249.205"); //Not real IP
  SoftwareATCommand("AT+FTPPORT=21"); 
  SoftwareATCommand("AT+FTPUN=user"); 
  SoftwareATCommand("AT+FTPPW=pass");

  //FTP Upload
  uploadFTP();

 }

void loop()
{
}


void uploadFTP()
{
  SoftwareATCommand("AT+FTPPUTNAME=\"test.txt\""); //Filename
  SoftwareATCommand("AT+FTPPUTPATH=/home/arduino/SolarDataLogger/"); //Path
  SoftwareATCommand("AT+FTPPUT=1"); //Start FTP
  delay(10000);
  SoftwareATCommand("AT+FTPPUT=2,100"); //Send 100 bytes of data
  delay(10000);
  SoftwareATCommand("Hello12345"); //Send Data
  SoftwareATCommand("AT+FTPPUT=2,0"); //Close FTP

}

String SoftwareATCommand(String strAT)
{

  String strNotice = "Sending: " + strAT;
  Serial.println(strNotice);
  mySerial.println(strAT);

  delay(500);
  moduleAnswer = "No Response";


  while(mySerial.available()) 
  {
    moduleAnswer = mySerial.readString();

    char* buf = (char*) malloc(sizeof(char)*moduleAnswer.length()+1);
    moduleAnswer.toCharArray(buf, moduleAnswer.length()+1);
    Serial.write(buf);//Forward what Software Serial received to Serial Port 
     - Module answer sent to screen
    free(buf);
   }

   return moduleAnswer;
}

Последовательный выход, в котором заключается проблема:

Serial output

Я пробовал дольше ждать ответа +FTPPUT: 1,1,1360 или посылать что-то дважды, но, похоже, ничего не работает. Файл создается, но никакие другие данные никогда не отправляются.

, 👍0


2 ответа


2

Возможно, уже слишком поздно отвечать, но строка +FTPPUT: 1,65 указывает на ошибку сервера.

https://www.elecrow.com/wiki/images/2/20/SIM800_Series_AT_Command_Manual_V1.09.pdf - страница 275.

Пожалуйста , проверьте последовательность команд, может быть, чего-то не хватает ?

Я использую следующую последовательность :

"AT+CREG?"
"AT+SAPBR=3,1,\"Contype\",\"GPRS\""
"AT+SAPBR=3,1,\"APN\",\"NAME OF YOUR PROVIDER \""
"AT+SAPBR=1,1"
"AT+SAPBR=2,1"
"AT+FTPCID=1"
"AT+FTPSERV=\"SERVER ADDRESS\""
"AT+FTPPORT=21"
"AT+FTPTYPE=\"I\""
"AT+FTPUN=\"USERNAME\""
"AT+FTPPW=\"PASSWORD\""
"AT+FTPPUTNAME=\"" + NAME OF FILE + "\""
"AT+FTPPUT=1"
"AT+FTPPUT=2," + STRING OF BUFFER SPACE ( Get from response of FTPPUT=1 )
"AT+FTPPUT=2,0"

Посмотрите в руководстве для приведенных выше команд.

Извините за мою грамматику

,

Спасибо за ваш вклад. Я опубликовал это после перехода на Pi вместо этого для всех, кто может столкнуться с той же проблемой, и я думаю, что ваш вклад будет кому-то полезен., @Jak


1

то, что я заметил в вашем коде-я думаю, что вы не следовали правильной последовательности подключения контекста GPRS, упомянутого в спецификации sim800l. Пожалуйста, следуйте разделу 3.1. конфигурация на предъявителя. Я также приложил скриншот ниже. Таким образом, вы пропустили настройку имени точки доступа(APN). После запроса контекста GPRS(последний шаг на изображении), если вы получите правильный IP-адрес, вы обязательно отправите данные по FTP. Пожалуйста, следуйте последовательности FTP, указанной в справочнике.

,