Pages: 1 ... 3 4 [5] 6   Go Down
Author Topic: Arduino e PHP  (Read 5905 times)
0 Members and 1 Guest are viewing this topic.
Fidenza, Parma
Offline Offline
God Member
*****
Karma: 9
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No dunque stiamo calmi, se lui fa mandare un meta refresh nell' output dell' arduino che viene poi letto dal php il php non ricarica la pagina visto che questo non segue l'html.

Devo ancora leggere bene il PM che mi hai mandato, comunque ora hai detto che riesci a fargli mostrare led=on e led=off in base allo stato dei led, ora cosa dovrebbe fare il php quando sa com'è messo il led?
Logged

ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

io riesco a mandare 1 e 0 al php ma manualmente non seguendo lo stato del led. e il php mi scrive a video led accesso e led spento. io dovrei vedere come è il led e a seconda di come è scrivere a video acceso e spento.
Logged

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 9
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ehehe allora devi farti rispondere da lesto perchè in C non sono molto ferrato   smiley-mr-green
Logged

ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non ti preoccupare mi hai dato una mano enorme!! colgo l'occasione per romperti un altro pò. ho notato che tramite &risposta ecc... leggo tutto quello che manda l'arduino al php. ma avrei bisogno di leggere due valori distinti provenienti dall' arduino ovvero uno per un led e uno per l'altro. mi spiego meglio devo avere scritto a video led 1 accesso led 2 acceso.. devo usare un altro pezzo di codice tipo quello di &risposta o c'è un altro metodo?
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, devi togliere il ?
e comunque è inutile farlo scrivere ad arduino il meta, fallo scrivere direttamente da PHP
il punto è che ora ricarichi la pagina senza richiedere nessun comando, quindi php non dovrebbe fare nulla. Invece devi dirgli di connettersi lo stesso ad arduino, e chiedergli quali led sono accessi. arduino risponde, e php manda la risposta al browser
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ti offendere lesto ma non ho capito bene. per il refresh del php ok.
Ma per il resto non so minimamente come muovermi
Code:

Luce cucina: <a href="?a=b">Accendi</a> | <a href="?a=k">Spegni</a><br/>
Luce Garage: <a href="?a=c">Accendi</a> | <a href="?a=l">Spegni</a><br/>
Luce camera: <a href="?a=d">Accendi</a> | <a href="?a=m">Spegni</a><br/>



<?
header('Location: 5;URL=http://192.168.1.64/gestione42.php');// refresh


$ip ="192.168.1.228";
$porta = "80";
$comando = $_GET['a'];
$comandi = array("b", "c", "d", "k", "l", "m");// Per essere sicuro che vadano all' arduino solo comandi da te approvati..
if ($comando!="" && in_array($comando, $comandi)){
$fp = fsockopen($ip, $porta, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = $comando;
    $out .= "\r\n\r\n";
    fwrite($fp, $out);
    $risposta="";
    while (!feof($fp)) {
     $risposta.= fgets($fp, 128);
     //print($risposta);
     if ($risposta == "1"){

     echo "Il led e' acceso"; //stampa a schermo il led è acceso.

     }else if ($risposta == "0"){

     echo "Il led e' spento"; //stampa a schermo il led è spento.

     }
 }

« Last Edit: February 15, 2011, 09:27:37 am by ARDUIX » Logged

Italy
Offline Offline
Sr. Member
****
Karma: 0
Posts: 331
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

scusami se ti rispondo solo ora...
L'idea di base l'ho presa qui http://www.ioscripto.it/arduino-accendere-led-via-web/ .
Poi ho semplificato e modificato un po la cosa e ti ho scritto velocemente il codice essenziale per fare in modo di vedere lo stato del led.

P.S. Grazie a Pitusso per i suggerimenti fondamentali  smiley-wink

Comunque essenzialmente si tratta di giocare un po con dei booleani.
associ lo stato al valore di un booleano. Se flag=true allora il led è acceso, se flag=false il led è spento.

Poi per stampare lo stato usi un client.println per stampare il codice html che vuoi...

Spero di essere stato chiaro.
Buon divertimento.

P.s. se carichi questo sketch di base su arduino, puoi vedere velocemente come  funziona
Code:
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Indirizzo MAC
byte ip[] = { 192, 168, 1, 2 }; // ip in lan
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
Server server(80); //porta server

String readString; //string
boolean flag1 = false; //Inizializzo lo stato del led

void setup(){
Ethernet.begin(mac, ip, subnet);
pinMode(2, OUTPUT);
Serial.begin(9600);
}
 
void loop(){
Client client = server.available();
if (client) {
  boolean currentLineIsBlank = true;
  while (client.connected()) {
    if (client.available()) {
      char c = client.read();
        readString.concat(c);
      if (c == '\n' && currentLineIsBlank) {
         Serial.print(readString);
         if(readString.indexOf("Led=2") > 0) {
          digitalWrite(2, HIGH); // Accendi Led
          flag1 = true;
}
          if(readString.indexOf("Led=02") > 0) {
          digitalWrite(2, LOW); // Spegni Led
          flag1 = false;
}
// INIZIO DICHIARAZIONE PAGINA HTML
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: text/html");
        client.println();
        client.println("Led");
        client.println("<span>STATO: </span>");
if (flag1) {
              client.println("<span style='color:green'>ON</span>");
            }
            else
            {
              client.println("<span style='color:red'>OFF</span>");
          }
          //comando ON OFF
              client.println("<a href='/?Led=2'>ON</a> |<a href='/?Led=02'>OFF</a>");
client.println("</body></html>");
 
        //Resetto "String" per la prossima lettura
        readString="";
        //Fermo il client
        client.stop();
 
        }
    }
  }
}
}
« Last Edit: February 15, 2011, 09:58:19 am by dr4gone » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ti ringrazio dr4gone, però pensavo che avessi fatto tramite php e che magari mi potessi aiutare a riguardo. Grazie mille ugualmente!
Logged

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 9
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Uhm ma se vuoi sapere via php in che stato è il LED aggiungi nel tuo codice dell' arduino
Code:
   if (rcv == 'd') {
client.print(digitalRead(primo pin));
client.print(",");
client.print(digitalRead(secondo pin));
client.print(",");
client.print(digitalRead(terzo pin));
        }


E così il codice PHP

Code:
Luce cucina: <a href="?a=b">Accendi</a> | <a href="?a=k">Spegni</a><br/>
Luce Garage: <a href="?a=c">Accendi</a> | <a href="?a=l">Spegni</a><br/>
Luce camera: <a href="?a=d">Accendi</a> | <a href="?a=m">Spegni</a><br/>
<?php
$ip 
="192.168.1.228";
$porta "80";
$comando $_GET['a'];
$comandi = array("b""c""d""k""l""m");// Per essere sicuro che vadano all' arduino solo comandi da te approvati..
if ($comando!="" && in_array($comando$comandi)){
$fp fsockopen($ip$porta$errno$errstr30);
if (!
$fp) {
    echo 
"$errstr ($errno)<br />\n";
} else {
    
$out $comando;
    
$out .= "\r\n\r\n";//Questa riga penso non serva a nulla ma se non guasta lasciala
    
fwrite($fp$out);
    
$risposta="";
    while (!
feof($fp)) {
     
$risposta.= fgets($fp128);
     if (
$risposta == "1"){
     echo 
"Il led e' acceso"//stampa a schermo il led è acceso.
     
}else if ($risposta == "0"){
     echo 
"Il led e' spento"//stampa a schermo il led è spento.
     
}else{
$stato = @explode(",",$risposta);
print(
"Ecco lo stato dei LED: $stato[0]  $stato[1]  $stato[2]");
}
 }
?>

« Last Edit: February 15, 2011, 01:39:35 pm by Guglio » Logged

ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao sto continuando con le mie prove e mi sono accorto che con lo script con il comando fsockope fino a quando non mi si chiude la connessione php non mi restituisce il risultato girovagando su google ho trovato pfsockopen che nelle specifiche dice che restituisce il risultato dello script senza chiudere la connessione quindi se ho capito bene tale comando mi dovrebbe permettere di ricevere tutte le variabili che arduino manda o sbaglio???
questo mi permetterebbe di vedere scritto appena manda la prima variabile il led è acceso  non chiudendo la connessione dopo 5 sec mando la  seconda con client print e php me lo elabora scrivendo il led è spento
se tutto questo è giusto non riesco a trovare un esempio su come inserire questo comando nello script mi potete dare una mano

ciao e grazie
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

secondo me basta sostituire la print con println

edit: come non detto prinltn funziona se usi fread, la funzione di lettura che stai usando tu va avanti fino a EOF (end of file), in questo caso l'evento EOF avviene quando arduino chiude la connessione.

leggiti qualche guida sul tcp, se no ogni minima catzata non riesci ad andare avanti smiley
« Last Edit: February 15, 2011, 06:28:37 pm by lesto » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok mi sai dare un link dove leggere un po di queste cose in manierea leggibile e comprensibile per me smiley-red???
Tutte le sere mi sembra di essere ad un passo dalla soluzione la mattina dopo mi rendo conto che la soluzione è ancora lontana ma non mi scoraggio ho deciso che questo progetto lo porto a fine ci dovessi mettere un anno intero smiley-twist
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

parti da quì e poi approfondisci: http://it.wikipedia.org/wiki/Transmission_Control_Protocol
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 9
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma non serve sapere come funziona il TCP (io non lo so) e non ho mai avuto problemi a dialogare con server o altro hardware via php o con l'ide.
il ciclo while con il fread non a caso è messo dopo che la socket viene chiusa proprio perchè altrimenti non riusciresti a leggere il risultato.
A te che te ne frega di sapere in "diretta" cosa manda l'arduino?
Tu ricevi lo status dei led e di conseguenza agisci, se c'è bisogno di dire qualcos'altro all'arduino richiami fsockopen, non ti fanno mica la multa se la chiami due volte

Edit, puoi usare la funzione sleep() per far star fermo il php per tot secondi dopo di che riaprire una socket con l'arduino per chiedergli come sono messi i led.
Logged

ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la fread risce a leggere in "tempo reale", è la while con l'fget che non riesce.
eppoi mi dici che te frega del tempo reale? metti che arduino e php devono comunicare più cose è molto importante, è i motivo per cui è nato il TCP!

non usare sleep in php, gli script hanno un time-out(di solito 30 secondi) dopo di che lo script viene killato
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: 1 ... 3 4 [5] 6   Go Up
Jump to: