Отправка файлов на FTP сервер по GPRS
- Войдите на сайт для отправки комментариев
Втр, 29/12/2015 - 09:01
С наступающим ,господа!
Подскажите решение задачи:
Необходимо отправить фото с Ардукам по GPRS каналу на FTP сервер. Задачу решаю частями - в настоящий момент пишу подпрограмму отправки данных на ФТП. Так вот по команде AT+FTPPUT=1 приходит ответ +FTPPUT:1,77 - собственно ошибка 77 - operate error. Что означает данная ошибка, как быть дальше? В каком направлении двигаться.
#include "SIM900.h" #include <SoftwareSerial.h> #include "inetGSM.h" #include "HWSerial.h" InetGSM inet; bool isInetAttach = false; char msg[50]; int numdata; char inSerial[50]; int i=0; boolean started=false; int8_t answer; int onModulePin = 2; char aux_str[50]; char pin[]=""; char apn[]="internet"; char user_name[]="gdata"; char password[]="gdata"; char ftp_server[]="nas.radiushost.net"; char ftp_user_name[]="nservice_ftp1"; char ftp_password[]="bd0jlifjncSUKA1C"; char path[]="www/nsccenter.ru/uploads"; char incoming_data[120]; char file_name[ ]="test.txt"; char test_str[ ]= "0000000011111111222222223333333344444444555555556666666677777777000000001111111122222222333333334444"; int data_size, aux; void setup(){ Serial.begin(9600); Serial.println("GSM Shield testing."); if (gsm.begin(9600)){ Serial.println("\nstatus=READY"); started=true; } else Serial.println("\nstatus=IDLE"); if(started){ //GPRS attach, put in order APN, username and password. //If no needed auth let them blank. isInetAttach = inet.connectedClient(); if (!isInetAttach) { for (int i = 0; i < 15; i++) { if (inet.attachGPRS("internet", "gdata", "gdata")) { Serial.println("Internet status = ATTACHED"); break; } else { Serial.println("Internet status = ERROR"); } } } else { Serial.println("Already attached"); } delay(1000); //sets the PIN code // snprintf(aux_str, sizeof(aux_str), "AT+CPIN=%s", pin); // sendATcommand(aux_str, "OK", 2000); Serial.println("get GPRS connection"); // sets the paremeters for the FTP server gsm.SimpleWriteln("AT+SAPBR=1,1"); delay(5000); gsm.SimpleWriteln("AT+SAPBR=2,1"); delay(5000); gsm.WhileSimpleRead(); configure_FTP(); uploadFTP(); downloadFTP(); } } void loop(){ } void configure_FTP(){ Serial.println("profile 1 for FTP"); // sets the paremeters for the FTP server gsm.SimpleWriteln("AT+FTPCID=1"); delay(2000); gsm.WhileSimpleRead(); Serial.println("adress of FTP"); snprintf(aux_str, sizeof(aux_str), "AT+FTPSERV=\"%s\"", ftp_server); gsm.SimpleWriteln(aux_str); delay(2000); gsm.WhileSimpleRead(); Serial.println("port of FTP..."); gsm.SimpleWriteln("AT+FTPPORT=21"); delay(2000); gsm.WhileSimpleRead(); Serial.println("login of FTP..."); snprintf(aux_str, sizeof(aux_str), "AT+FTPUN=\"%s\"", ftp_user_name); gsm.SimpleWriteln(aux_str); delay(2000); gsm.WhileSimpleRead(); Serial.println("password of FTP..."); snprintf(aux_str, sizeof(aux_str), "AT+FTPPW=\"%s\"", ftp_password); gsm.SimpleWriteln(aux_str); delay(2000); gsm.WhileSimpleRead(); } void uploadFTP(){ Serial.println("show file name..."); snprintf(aux_str, sizeof(aux_str), "AT+FTPPUTNAME=\"%s\"", file_name); gsm.SimpleWriteln(aux_str); delay(2000); gsm.WhileSimpleRead(); Serial.println("show path ..."); snprintf(aux_str, sizeof(aux_str), "AT+FTPPUTPATH=\"%s\"", path); gsm.SimpleWriteln(aux_str); delay(2000); gsm.WhileSimpleRead(); //* обхожу все IF Serial.println("begin ftpput=1 ..."); // октрываю запись в FTP gsm.SimpleWriteln("AT+FTPPUT=1"); delay(5000); gsm.WhileSimpleRead(); Serial.println("begin ftpput=2,100 ..."); // отпарвляю 100 байт на фтп gsm.SimpleWriteln("AT+FTPPUT=2,100"); delay(3000); gsm.WhileSimpleRead(); gsm.SimpleWriteln(test_str); delay(3000); gsm.WhileSimpleRead(); Serial.println("end 100 "); Serial.println("close ftpput=2,0 ..."); // завершаю запись на фтп gsm.SimpleWriteln("AT+FTPPUT=2,0"); delay(3000); gsm.WhileSimpleRead(); } void downloadFTP(){ Serial.println("downloadFTP file-name..."); snprintf(aux_str, sizeof(aux_str), "AT+FTPGETNAME=\"%s\"", file_name); gsm.SimpleWriteln(aux_str); delay(2000); gsm.WhileSimpleRead(); Serial.println("downloadFTP path..."); snprintf(aux_str, sizeof(aux_str), "AT+FTPGETPATH=\"%s\"", path); gsm.SimpleWriteln(aux_str); delay(2000); gsm.WhileSimpleRead(); int x = 0; Serial.println("GET one..."); gsm.SimpleWriteln("AT+FTPGET=1"); delay(2000); gsm.WhileSimpleRead(); Serial.println("GET two..."); gsm.SimpleWriteln("AT+FTPGET=2,50"); delay(2000); gsm.WhileSimpleRead(); }
Что означает данная ошибка, как быть дальше?
Гугл подсказывает, что "77 means "operate error" your server doesn't recognize the name or the path that you use with your file."
Вот здесь : https://www.cooking-hacks.com/forum/viewtopic.php?f=20&t=3809
благодарю!
Еще вопрос, как отправить данные больше чем позволяет модуль за один раз?
Мне не приходилось заниматься ни GPRS, ни FTP, но запрос https://www.google.com.ua/?gws_rd=ssl#q=arduino+gprs+ftp+file+transfer даёт немало интересных ссылок. Запрос на русском, кстати, тоже (но меньше).
магия )
Это читал?
https://www.cooking-hacks.com/documentation/tutorials/gprs-gsm-quadband-module-arduino-raspberry-pi-tutorial-sim-900#step6
Тут вот пишут что можно и больше 1300 http://www.edaboard.com/thread277914.html
Именно это читал. ГСМ шилд установлен на Мегу, в библиотеке исправлен RX TX на 10, 11. Что не получилось- адаптировать настройки под представленный по ссылке код. Получилось только вырезать часть кода и отправить не более 1300 байт.
http://brne.narod.ru/ftp-sim900.htm
Отправляй в цикле кусочками - по килобайту например
Подскажешь как этот цикл задать?
пиши что и как ты пытаешься отправить (код)
Конечным результатом должен быть передан файл xxx.jpg на сервер.
Вот тот жипег хочу отправить на FTP сервер
на всякий случай доп. материал
http://arduino.ru/forum/programmirovanie/ne-smog-naiti-opisaniemanual-po-biblioteke-sd-pomogite#comment-12204
И так, благодаря помощи вашей и друзей код встроил в программу, теперь выдает ошибку - при преобразовани данных
с камеры получает в байтах а отправлять в чарах, подскажите как быть, чтобы файл с фото отправить по ФТП. Ошибка в строке 489
переведи в чар
ПРограмма компилируется но при загрузке на плату выдает ошибку , программа должна отправлять файлы на фтп сервер после отправки должна уйдти в сон