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.
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"]; } }