Buongiorno ragazzi, avevo realizzato un piccolo progetto per la gestione (accensione e spegnimento) di pompe luci con arduino mega + ethernet sheild , dove arduino faceva da server. Tutto funzionante con adsl di casa. Ma il mio progetto doveva funzionare in campagna , quindi ho preso un router 3g ho messo una scheda dati vodafone e qui ho scoperto che non tutte le sim hanno ip pubblico , anzi sono pochi gli operatori che lo fanno e non è facile avere.
A questo punto ho pensato di cambiare sistema, cioè far diventare arduino client e gestirlo tramite pagina web in asp.net( perchè ho gia un sito su un server windows).
Ho fatto tante ricerche , ma non arrivo mai a comprendere il punto focale su come impostarlo. E capire perfettamente il funzionamento del GET.
In rete ho travato un codice che fa il contrario, cioè invia da arduino al server , ve lo mostro:
ARDUINO :
#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();
}
}
<%@ 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>
C#
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"];
}
}
Sapete aiutarmi in qualche modo?
Da quello che ho capito io , dovrei fare una richiesta ogni secondo sul server e vedere se ci sono richieste e a quel punto elaborale , ma il problema è ma come?
Grazie