Inviare dati da Arduino ad una pagina web ASP.Net 4 / C#

Uno dei modi più semplice per inviare dati sul web è sicuramente usare le query string.

La query string è quella parte dell’url che contiente dati da passare in input ad un programma.

Una volta scritta il nostro sketch in arduino è estremamente semplice inviare i dati ad una webpage da noi scritta.

Avremo bisogno di un modulo aggiuntivo alla nostra board: l’ethernet shield.

Questo shield ha tutto il necessario per trasformare arduino in un client o in un piccolo webservice.

Le librerie ufficiali sfruttano in modo quasi ottimale le potenzialità del suo chipset.

ethshield

Con l’ausilio di richieste HTTP 1.1, quali la GET, riusciamo agilmente nel nostro obiettivo.

Arduino sketch:

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //assegnamo un mac addres alla nostra arduino
byte ip[] = {
192,168,2,20 }; //assegnamo un ip
byte server[] = {
46,16,168,17 }; //l’ip del web service
Client client(server, 80);
//istanziamo un client che lavora sull’ip del web service sulla porta 80
void setup() {
    Ethernet.begin(mac, ip);
    //istanziamo l’ethernet shield con mac ed ip
    Serial.begin(9600);
}
void loop()
{
    delay(1000);
    Serial.println(“connecting…”);
    client.connect(); //ci colleghiamo con i parametri di cui sopra
    if (client.connected()) {
        Serial.println(“connected”);
        //la nostra GET:
        client.println(“GET http://www.QUALCOSA.com/acquire.aspx?username=USERFROMARDUINO&password=PASSFROMARDUINO&
                        datastream=DATASTREAMFROMARDUINO&value=VALUEFROMARDUINO HTTP/1.1″);
        client.println ( “Host: http://www.QUALCOSA.com” ) ;
        client.println(); //chiudere sempre con uno spazio vuoto
    }
    else {
        Serial.println(“connection failed”);
    }
    if (client.available()) {
        //stampiamo tutti i caratteri in risposta dal web service
        do {
            char c = client.read();
            Serial.print(c);
        }
        while (client.available());
    }
    if (!client.connected()) { //stoppiamo il nostro client
        Serial.println();
        Serial.println(“disconnecting.”);
        client.stop();
    }
}

Il nostro frontend acquire.aspx:

<%@ Page Language=”C#” AutoEventWireup=true” CodeFile=”acquire.aspx.cs”
Inherits=”acquire” %>
    <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
    <html xmlns=”http://www.w3.org/1999/xhtml”>
        <head runat=server”>
            <title></title>
        </head>
        <body>
            <form id=”form1″ runat=server”>
                <div>
                    <asp:TextBox ID=”TextBox1″ runat=server”></asp:TextBox>
                    <asp:TextBox ID=”TextBox2″ runat=server”></asp:TextBox>
                    <asp:TextBox ID=”TextBox3″ runat=server”></asp:TextBox>
                    <asp:TextBox ID=”TextBox4″ runat=server”></asp:TextBox>
                </div>
            </form>
        </body> 
    </html>

Il backend in C# con il parsing della query string:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class acquire : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        TextBox1.Text = Request.QueryString["username"];
        TextBox2.Text = Request.QueryString["password"];
        TextBox3.Text = Request.QueryString["datastream"];
        TextBox4.Text = Request.QueryString["value"];
    }
}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Anti-Spam Quiz: