Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ottenere variabili da web

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] Ottenere variabili da web

Messaggioda Foto Utentemiomiomio » 24 set 2017, 14:37

Ciao a tutti,
vi scrivo perché non riesco a trovare soluzioni in nessuna maniera per il mio progetto.
È molto semplice: ho un arduino Uno, una ethernet shield, un lettore rfid.
Ho collegato il tutto e tramite una pagina ASP.classic a cui passo il seriale delle card che vengono lette, eseguo varie operazioni su un database access.
Tutto funziona a dovere.
Il grosso problema sorge sul response che vorrei avere. Una volta letta la card la pagina sul server controlla se l'utente esiste nel database, se esiste controlla dal database se ha crediti e se ha crediti viene inserito in una tabella di prenotazione mensa.
Non riesco in nessuna maniera ad ottenere una risposta in arduino dal server per far accendere un led verde se l'inserimento va a buon fine perche l'utente ha credito. A far accendere un led rosso se l'utente non esiste o non ha credito.
C'è un modo per farlo?
Nel codice della pagina web ho dei response.write ma purtroppo non so come "importare" questi responde.write in arduino per poi far accendere i led.
Ringrazio chiunque riesca a districare questa mia insormontabile (almeno per me) difficoltà.

PS: non voglio che il led si accenda se arduino si connette correttamente al server, ma vorrei poter avere le risposte del server in una o più variabili di arduino per poi poter gestire i led.
Avatar utente
Foto Utentemiomiomio
3 2
 
Messaggi: 29
Iscritto il: 8 gen 2013, 22:09

0
voti

[2] Re: Ottenere variabili da web

Messaggioda Foto Utentebiget » 25 set 2017, 11:05

find(), parseInt(), parseFloat()

es.
EthernetClient ec;
// bla bla bla
ec.connect();
// bla bla bla
aspetta ec.connected();
ec.find("mioParametro=");
mioParametro = ec.parseXXXXXX
// bla bla bla
Avatar utente
Foto Utentebiget
1.155 3 7
CRU - Account cancellato su Richiesta utente
 
Messaggi: 464
Iscritto il: 16 dic 2016, 19:47

0
voti

[3] Re: Ottenere variabili da web

Messaggioda Foto Utentemiomiomio » 25 set 2017, 20:52

Grazie per la risposta.
Però non credo di aver capito gran che.
sotto metto il mio codice.
Inserisco nella sezione Sending_To_DB(); ?
devo mettere qualcosa del genere?
client.find("mioParametro=");
mioParametro = client.parseXXX();
o
mioParametro = client.read();
Serial.print(c);
?
scusa ma come avrai capito non sono molto esperto!
Grazie.

Codice: Seleziona tutto
#include<SPI.h>
#include<MFRC522.h>
#include<SoftwareSerial.h>
#include <Ethernet.h>
#define SS_PIN 4 //FOR RFID SS PIN BECASUSE WE ARE USING BOTH ETHERNET SHIELD AND RS-522
#define RST_PIN 9
#define No_Of_Card 3
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "www.sitosito.it";   //YOUR SERVER
IPAddress ip(192, 168, 1, 177);
EthernetClient client;
SoftwareSerial mySerial(8,9);     
MFRC522 rfid(SS_PIN,RST_PIN);
MFRC522::MIFARE_Key key;

byte i;
byte id_temp[3][3];
String codice;


void setup()
{
 
  pinMode(2, OUTPUT); //led verde
  pinMode(6, OUTPUT); //buzzer
  Serial.begin(9600);
  mySerial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  for(byte i=0;i<6;i++)
  {
    key.keyByte[i]=0xFF;
  }
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
  delay(1000);
  Serial.println("connecting...");
}


void loop()
{
  codice="";
int m=0;
  if(!rfid.PICC_IsNewCardPresent())
  return;
  if(!rfid.PICC_ReadCardSerial())
  return;
  for(i=0;i<4;i++)
    {
   id_temp[0][i]=rfid.uid.uidByte[i];
   codice=codice+rfid.uid.uidByte[i];
   Serial.print(rfid.uid.uidByte[i]);
                    Serial.print(" ");
             delay(50);
 
  }
  Sending_To_DB();




     // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
//Serial.println(" \nil codice è: "+codice);


}

void Sending_To_DB()   //CONNECTING WITH MYSQL

{
   if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.print("GET  /index.asp?allow="+codice);     //YOUR URL
   client.print(" ");      //SPACE BEFORE HTTP/1.1
    client.print("HTTP/1.1");
    client.println();
    client.println("Host: www.sitosito.it");
   
    client.println("Connection: close");
    client.println();

  client.stop();

  digitalWrite(2, HIGH);//led verde
    digitalWrite(6, HIGH); //buzzer
delay(50);
digitalWrite(2, LOW);
digitalWrite(6, LOW);
delay(150);
digitalWrite(2, HIGH);
digitalWrite(6, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(6, LOW);
delay(10);

  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }

}
Avatar utente
Foto Utentemiomiomio
3 2
 
Messaggi: 29
Iscritto il: 8 gen 2013, 22:09

0
voti

[4] Re: Ottenere variabili da web

Messaggioda Foto Utentebiget » 26 set 2017, 12:53

ci sei quasi


intendo

il tuo codice inoltra p.es richiesta
a http://www.tuosito.it/controllatessera?num=0123456789 (GET o POST non importa)

tuosito.it risponde
(a parte gli header http)
credito=1.56

nel tuo codice per avere quel 1.56

1. client.find("credito=");
2. credito = client.parseFloat();

a questo punto la variabile credito conterra' 1.56

e si puo' procedere in modo analogo se anche la risposta fosse XML
Avatar utente
Foto Utentebiget
1.155 3 7
CRU - Account cancellato su Richiesta utente
 
Messaggi: 464
Iscritto il: 16 dic 2016, 19:47

0
voti

[5] Re: Ottenere variabili da web

Messaggioda Foto Utentemiomiomio » 28 set 2017, 9:37

grazie davvero per l'ulteriore aiuto.
Allora sono arrivato a questo punto.
Ho cercato di studiare un po' le informazioni che mi hai dato e sono arrivato a questo codice.
Ancora non funziona a dovere, non mi restituisce ancora niente.
La pagina asp fa una query al db, controlla se il codice esiste e se esiste e ha credito esegue una INSERT INTO e a seguire ho messo
Codice: Seleziona tutto
response.write("credito=1")
per indicare che l'inserimento è avvenuto e che c'è credito.

Il codice arduino invece è questo.
Spero di non aver scritto cretinate.
La variabile credito l'ho dichiarata come int credito prima del void setup()

Codice: Seleziona tutto
void Sending_To_DB()   //CONNECTING WITH MYSQL

{
   if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.print("GET  /index.asp?allow="+codice);     //YOUR URL
   client.print(" ");      //SPACE BEFORE HTTP/1.1
    client.print("HTTP/1.1");
    client.println();
    client.println("Host: www.sitosito.it");

  if(client.find("credito=")) { // se trovo la variabile credito=
    credito= client.parseInt();
    Serial.print("credito: ");
    Serial.print(credito);
    if (credito== 1) { // se credito=1 accendo l'uscita digitale 5 e scrivo in seriale
      digitalWrite(5, HIGH);
      Serial.println("L'utente ha credito");
    }
    else { // altrimenti l'uscita digitale 5 rimane spenta
      digitalWrite(5, LOW);
      Serial.println("Non hai credito");
    }
  }
  else {
    Serial.println("non trovo credito");
  }

   
    client.println("Connection: close");
    client.println();

  client.stop();

  } else {
    // if you didn't get a connection to the server:
    Serial.println("connessione fallita");
  }

}

Grazie.
Avatar utente
Foto Utentemiomiomio
3 2
 
Messaggi: 29
Iscritto il: 8 gen 2013, 22:09

0
voti

[6] Re: Ottenere variabili da web

Messaggioda Foto Utentebiget » 29 set 2017, 9:15

1. void Sending_To_DB() dovrebbe ricevere codice come parametro (consigliato)
2. probabilmente cerchi il response prima ancora di averlo ricevuto
comunque segui http://www.giannifavilli.it/blog/arduino-parser/
Avatar utente
Foto Utentebiget
1.155 3 7
CRU - Account cancellato su Richiesta utente
 
Messaggi: 464
Iscritto il: 16 dic 2016, 19:47

0
voti

[7] Re: Ottenere variabili da web

Messaggioda Foto Utentemiomiomio » 29 set 2017, 23:34

grazie egbit per la risposta!!!

L'esempio l'ho letto e pensavo di averlo compreso. ma all'atto pratico ovviamente non funziona. #-o
cosa intedi per void Sending_To_DB() dovrebbe ricevere codice come parametro (consigliato)?


ho provato con questo codice e funziona benissimo
Codice: Seleziona tutto
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "www.miosito.it";    // name address for Google (using DNS)
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 1, 177);
EthernetClient client;

void setup() {
  Serial.begin(9600);

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip);
  }
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /index.asp?allow=18955521773 HTTP/1.1");
    client.println("Host: www.miosito.it");
    client.println("Connection: close");
    client.println();
  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    client.find("inserito=");
    int credito= client.parseInt();
    Serial.print("inserito: ");
    Serial.println (credito);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    while (true);
  }
}


mentre il codice del mio progetto è questo e non funziona il find. mi restituisce sempre zero anche se il testo da cercare, per prova, è 1 e 2. (e nell'esempio di prima funziona).
in cosa sbaglio? forse a metterlo nel void Sending_To_DB() ??? però la funzione all'interno della quale avviene il response è lì...
se potete aiutarmi ve ne sarei grato.
Codice: Seleziona tutto

/*

#include <Wire.h>    //lcd
#include <LiquidCrystal_I2C.h>   //lcd
LiquidCrystal_I2C lcd(0x3f,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display

#include<SPI.h>
#include<MFRC522.h>
#include<SoftwareSerial.h>
#include <Ethernet.h>
#define SS_PIN 4 //FOR RFID SS PIN BECASUSE WE ARE USING BOTH ETHERNET SHIELD AND RS-522
#define RST_PIN 9
#define No_Of_Card 3
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "www.miosito";   //YOUR SERVER
IPAddress ip(192, 168, 1, 177);
EthernetClient client;
SoftwareSerial mySerial(8,9);     
MFRC522 rfid(SS_PIN,RST_PIN);
MFRC522::MIFARE_Key key;

byte i;
byte id_temp[3][3];
String codice;


void setup()
{

//LCD
  lcd.init();                      // initialize the lcd
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();
  /////////fine LCD
 
  pinMode(2, OUTPUT); //led verde
  pinMode(6, OUTPUT); //buzzer
  Serial.begin(9600);
  mySerial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  for(byte i=0;i<6;i++)
  {
    key.keyByte[i]=0xFF;
  }
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
  delay(1000);
  Serial.println("connecting...");
}


void loop()
{

  codice="";
int m=0;

  if(!rfid.PICC_IsNewCardPresent())
  return;
  if(!rfid.PICC_ReadCardSerial())
  return;
  for(i=0;i<4;i++)
    {
   id_temp[0][i]=rfid.uid.uidByte[i];
   codice=codice+rfid.uid.uidByte[i];
   Serial.print(rfid.uid.uidByte[i]);
                    Serial.print(" ");
             delay(50);
 
  }

  Sending_To_DB();

     // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
//Serial.println(" \nil codice è: "+codice); //test


  }

void Sending_To_DB()  {  //CONNECTING WITH MYSQL

   if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET  /index.asp?allow="+codice);     //YOUR URL
   //client.print(" ");      //SPACE BEFORE HTTP/1.1
    client.print("HTTP/1.1");
    client.println("Host: www.miosito.it");
   client.println();
   
   char c = client.read();
    client.find("inserito=");
    int credito= client.parseInt();
    Serial.print("inserito: ");
    Serial.println (credito);
    Serial.print(c);
Serial.println ("credito: " +credito);
//    client.println("Connection: close");
//    client.println();
//
//  client.stop();

lcd.backlight();
  lcd.setCursor(3,0);
  lcd.print(codice);
  digitalWrite(2, HIGH);//led verde
    digitalWrite(6, HIGH); //buzzer
delay(50);
digitalWrite(2, LOW);
digitalWrite(6, LOW);
delay(150);
digitalWrite(2, HIGH);
digitalWrite(6, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(6, LOW);
delay(10);



  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }

}


Avatar utente
Foto Utentemiomiomio
3 2
 
Messaggi: 29
Iscritto il: 8 gen 2013, 22:09

0
voti

[8] Re: Ottenere variabili da web

Messaggioda Foto Utentemiomiomio » 3 ott 2017, 21:48

piccolo up...non ne vengo proprio a capo.
il response mi dà solo un ⸮ (punto interrogativo alla rovescia)
Avatar utente
Foto Utentemiomiomio
3 2
 
Messaggi: 29
Iscritto il: 8 gen 2013, 22:09

0
voti

[9] Re: Ottenere variabili da web

Messaggioda Foto Utentebiget » 7 ott 2017, 0:29

.read non ti serve e poi dimentichi quello che ho detto prima
in breve se vuoi che funzioni
connect-> connected -> find -> parse

ovvero ti colleghi, invii la richiesta aspetti la risposta ed elabori
altrimenti funzionerà per sbaglio piuttosto che perché deve
Avatar utente
Foto Utentebiget
1.155 3 7
CRU - Account cancellato su Richiesta utente
 
Messaggi: 464
Iscritto il: 16 dic 2016, 19:47

0
voti

[10] Re: Ottenere variabili da web

Messaggioda Foto Utentemiomiomio » 7 ott 2017, 9:56

Carissimo egbit ti devo ringraziare non solo per l'aiuto materiale che mi hai fornito, ma anche per la pazienza!
Facendo questo progetto solo per passione e gusto di provare, non sono molto preparato in materia elettronica e programmazione! Per cui è stata dura!
Ma grazie a te ci sono riuscito e la soddisfazione è tanta!!!
Se non chiedo troppo metterei tutto il codice del progetto. Così se vuoi e puoi, mi controlli se funziona tutto perché fatto bene oppure
altrimenti funzionerà per sbaglio piuttosto che perché deve
!!!
Inoltre se mai a qualcuno potesse servire, troverebbe il codice pronto e funzionante.
Grazie ancora.
Avatar utente
Foto Utentemiomiomio
3 2
 
Messaggi: 29
Iscritto il: 8 gen 2013, 22:09


Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti