Solicitudes HTTP a un servidor utilizando un PLC basado en Arduino
Trabajar con servidores externos usando Industrial Arduino Solutions
24 enero, 2019 por
Solicitudes HTTP a un servidor utilizando un PLC basado en Arduino
Boot & Work Corp. S.L., Support Team

Introducción

En esta publicación le mostraremos cómo realizar solicitudes HTTP con el método POST para enviar información a un servidor externo.

La información se recibe de datos analógicos de un potenciómetro filtrado por software.  Si quieres saber más sobre el filtrado de datos analógicos no dudes en ¡sigue este post!

Requisitos

Ethernet PLC o 20 I/Os PLC:
Ethernet PLC >>>     20 I/Os PLC >>>

Biblioteca ArduinoHTTPClient:  Descarga la biblioteca de ArduinoHTTPClient en Github >>

Fuente de alimentación Industrial Shields:  Accesorios para industrial shields >>>

Industrial Shields boards:  
Instalar placas Industrial Shields >>>


Conexiones

Para conocer la parte relacionada con la conexión del potenciómetro,  el filtrado de datos analógicos y también el registro de datos de la tarjeta SD,  siga este artículo del blog .

El PLC Ethernet actuará como cliente realizando solicitudes de escritura al servidor para enviar los datos analógicos recibidos periódicamente. Este se conectará vía Ethernet a un Router con acceso al servidor donde se escriben los datos recibidos.

De modo que, a nivel de hardware, solo necesitaremos una conexión ethernet entre el PLC basado en Arduino y el servidor.


Software

Este còdigo crea un cliente en nuestro PLC basado en Arduino responsable de hacer solicitudes POST a la ruta URL compuesta de servidor IP + "/ analog-value": 192.168.1.209:1880/analog-value.

Los valores que mostraremos en el servidor serán los resultados analógicos filtrados recibidos de un potenciómetro conectado a un PLC basado en Arduino para poder probar el funcionamiento global de esta prueba.  

La publicación solicita que el servidor espere sigue esta estructura: {"valor": datos}.
 

/*

 Copyright (c) 2018 Boot&Work Corp., S.L. All rights reserved


Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los t√©rminos de la Licencia P√ļblica General Reducida GNU publicada por la Fundaci√≥n para el Software Libre, ya sea la versi√≥n 3 de la Licencia, o a tu elecci√≥n) cualquier versi√≥n posterior.

Este programa se distribuye con la esperanza de que sea √ļtil, pero SIN NINGUNA GARANT√ćA; ni siquiera la garant√≠a impl√≠cita de COMERCIALIZACI√ďN o ADECUACI√ďN A UN PROP√ďSITO PARTICULAR.¬† Consulta la Licencia P√ļblica General Reducida de GNU para m√°s detalles.

Deber√≠as haber recibido una copia de la Licencia P√ļblica General Reducida de GNU junto con este programa.¬† Si no es as√≠, consulta <http://www.gnu.org/licenses/>.¬†

 */

#include <ArduinoHttpClient.h>
#include <Ethernet.h>
#include <SD.h>
#include <Filter.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
IPAddress server(192,168,1,209); 

int port = 1880;

Sd2Card card;
SdVolume volume;

AnalogFilter<5, 2> aFilter;

EthernetClient ether;
HttpClient client = HttpClient(ether,server,port);
String response;


void setup() {
  Serial.begin(9600);
  // Ethernet.begin(mac,ip,dnsServer,gateway,subnet);
  Ethernet.begin(mac);
  Serial.print("IP: ");
  Serial.println(Ethernet.localIP());
  if (!SD.begin(53)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    while (1);
  }
  Serial.println("card initialized.");
}


void loop() {
  int data = analogRead(I0_12);
   int filtered = aFilter.update(data);
  static uint32_t lastPrint = millis();
  if (millis() - lastPrint > 3000) {
    Serial.println(filtered);
    lastPrint = millis();
    logToSd(filtered);
    String postData = "{\"value\":" + String(filtered) + "}";

    client.beginRequest();
    client.post("/analog-value");
    client.sendHeader("Content-Type", "application/json");
    client.sendHeader("Content-Length", postData.length());
    client.beginBody();
    client.print(postData);
    client.endRequest();

    int statusCode = client.responseStatusCode();
    client.stop();

    Serial.println(statusCode);   //Prints the HTTP status response - 200 if OK
    Serial.println("Data to the Server");
    Serial.println("Wait one seconds");
   }
}

void logToSd(int value){
  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
 

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(value);
    dataFile.close();
  }
  
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  }
}

Peticiones HTTP a un servidor utilizando un PLC basado en Arduino


 
 


Ver también

Solicitudes HTTP a un servidor utilizando un PLC basado en Arduino
Boot & Work Corp. S.L., Support Team
24 enero, 2019
Compartir
Archivar

¬ŅBuscas tu controlador l√≥gico programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Comparación PLC industrial >>>

¬ŅQuieres m√°s informaci√≥n?

¬°Rellena el formulario!

¬°Cu√©ntame m√°s!