Introducción
Hemos creado una librería que te permite enviar y recibir archivos des de un servidor FTP.
Un Servidor FTP (del Inglés File Transfer Protocol) es comunmente usado para transferir archivos entre ordenadores conectados en una red. El mecanismo básico, así como el conjunto de comandos y respuestas de protocolo, se han definido en el contexto de una arquitectura simplificada.
En este post se explica cómo esta hecha la librería arduino-FTP y su funcionamiento.
Requisitos
Descargar el archivo comprimido de la librería del github:
Controlador Industrial Arduino
Librería Arduino FTP
Puede utilizar cualquier cliente para enviar y recibir archivos desde un servidor FTP. En primer lugar, debe incluir la biblioteca y crear un objeto FTP:
#include <FTP.h>
FTP ftp(ftpControl, ftpData);
Tanto ftpControl como ftpData son objetos Client, igual que EthernetClient o otro:
EthernetClient ftpControl;
EthernetClient ftpData;
ftp.connect(serverIP, user, password);
o en en caso de querer otro TCP port (por ejemplo el 6758):
ftp.connect(serverIP, 6758, user password);
Cuando la conexión esté lista, es posible descargar contenido de archivos del Servidor FTP:
char fileContent[512];
ftp.retrieve(fileName, fileContent, 512);
o cargar archivos al servidor FTP:
const char *fileContent = "This is the new file content";
ftp.store(fileName, fileContent, strlen(fileContent));
Puedes ver ejemplos completos de cargar (store) y descargar You can see complete examples de almacenar y recuperar archivos de datos en el Directorio de ejemplos del repositorio de Github.
Ejemplo Almacenar
// FTP library example // by Industrial Shields #include <FTP.h> #if defined(MDUINO_PLUS) #include <Ethernet2.h> #else #include <Ethernet.h> #endif uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(10, 10, 10, 6); IPAddress namesServer(8, 8, 8, 8); IPAddress gateway(10, 10, 10, 1); IPAddress netmask(255, 255, 255, 0); IPAddress server(192, 168, 1, 220); const char *user = "YOUR-USER"; const char *pass = "YOUR-PASSWORD"; const char *fileName = "YOUR-FILE"; EthernetClient ftpControl; EthernetClient ftpData; FTP ftp(ftpControl, ftpData); //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(9600UL); Ethernet.begin(mac, ip, namesServer, gateway, netmask); Serial.print("IP address: "); Serial.println(Ethernet.localIP()); if (!ftp.connect(server, user, pass)) { Serial.println("Error connecting to FTP server"); while (true); } Serial.println("You have 10 seconds to write something..."); delay(10000UL); // Send the written content to the FTP file ftp.store(fileName, Serial); Serial.println("The written content is sent to the FTP file"); } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { // Nothing to do }
Ejemplo Recuperar
// FTP library example // by Industrial Shields #include <FTP.h> #if defined(MDUINO_PLUS) #include <Ethernet2.h> #else #include <Ethernet.h> #endif uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(10, 10, 10, 6); IPAddress namesServer(8, 8, 8, 8); IPAddress gateway(10, 10, 10, 1); IPAddress netmask(255, 255, 255, 0); IPAddress server(192, 168, 1, 220); const char *user = "YOUR-USER"; const char *pass = "YOUR-PASSWORD"; const char *fileName = "YOUR-FILE"; EthernetClient ftpControl; EthernetClient ftpData; FTP ftp(ftpControl, ftpData); //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(9600UL); Ethernet.begin(mac, ip, namesServer, gateway, netmask); Serial.print("IP address: "); Serial.println(Ethernet.localIP()); if (!ftp.connect(server, user, pass)) { Serial.println("Error connecting to FTP server"); while (true); } // Print FTP file content to Serial Serial.println("FTP file content: "); size_t len = ftp.retrieve(fileName, Serial); Serial.println(); Serial.print("FTP file size: "); Serial.println(len); } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { // Nothing to do }
Echa un vistazo a la gama Ethernet
Arduino Mega para soluciones industriales
Hay disponibles hasta 58 IOs.
Múltiples protocolos y otras opciones a tu disposición como:
LoRa - Solución de largo alcance.
WiFi - Opción inalámbrica.
GPRS - Si no hay opción de tener soporte físico.
DALI - Protocolo de iluminación para soluciones específicas.