Go Down

Topic: Comandare arduino in php (Read 4 times) previous topic - next topic

dr4gone

Guglio, qui il link a una discussione dove avevi messo tu stesso il link al bridge com-TCP  :smiley-mr-green:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1290900620/all

Buon divertimento :D

Guglio

#11
Jun 26, 2011, 02:01 pm Last Edit: Jun 26, 2011, 02:23 pm by Guglio Reason: 1
Questa è bella, non mi funziona.
Ho il firewall disattivo quindi le porte non sono bloccate.
Dal registro degli errori di windows non mi viene segnalato nulla
ma come provo con telnet a connettermi mi restituisce un errore...
Eccheppalle...


Io ho risolto con questo:
http://www.arduino.cc/playground/uploads/Interfacing/SerialNet.pde.txt
Modificando il boolean new_line_to... in modo che vada a capo

Ora mi connetto da php tramite fsockopen e in questo modo l'arduino non si resetta nemmeno
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

lesto

#12
Jun 26, 2011, 06:49 pm Last Edit: Jun 26, 2011, 06:51 pm by lesto Reason: 1

Code: [Select]

// get contents of a file into a string
$filename = "COM3";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
echo $handle;


ma il risultato è che il campo leght di fread  deve essere maggiore di 0.... com'è possibile?
Come posso fare per risolvere questo problema qui?

AH, prima mi spieghi perchè stampi il puntatore a file e non il contenuto di ciò che hai letto (stampi $handle e non $contents)

Poi secondo me il filesize(); in questo caso si comporta come Serial.available(); sull'arduino. Quindi basta aggiungere un while:
Code: [Select]

$filename = "COM3";
$handle = fopen($filename, "r");

while(filesize($filename)<=0){
  ;//wait for some input
}

$contents = fread($handle, filesize($filename));
fclose($handle);
echo $handle;

ora piccolo problema... se ho ben capito tu apri il flusso in scrittura, mando il comando, chiudo il flusso, lo riuapri in lettura e leggi... ovvio che se nel frattempo l'arduino ti ha già risposto il messaggio viene perso. Quindi, se usi il codice arduino del primo post (e identate sto codice, in arduino sketch -> autoformat, non ci vuole nulla!) che però fa una serial.println("Qualcosa"); ogni volta che riceve un comando 8e sistemando un pò la logica, vedi sotto)...
il codice php diventa (apro il file in "rw" ovvero sia lettura che scrittura)

Code: [Select]

// lesto rulez :-D
$accendi = 'a';
$spegni = 'b';

//apertura del flusso
$filename = "COM3";
$handle = fopen($filename, "rw");

fwrite($handle, $spegni);
echo "Richiesta di spegnimento inviata, ";
while(filesize($filename)<=0){
  ;//wait for some input
}
$contents = fread($handle, filesize($filename));
echo "risposta arduino: ";
echo $contents;

fwrite($handle, $accendi);
echo "Richiesta di accensione inviata, ";
while(filesize($filename)<=0){
  ;//wait for some input
}
$contents = fread($handle, filesize($filename));
echo "risposta arduino: ";
echo $contents;

fclose($handle);



vabè per completezza metto pure quello arduino, che ha qualche "stranezza" logica (il comando di spegnimento NON era nell'if della serial avaiable, equindi si attivava ogni loop se il comando era 'b', niente di grave ma cpu sprecata), aggiunto un errore se il comando non è riconosciuto, aumentata la leggibilità con "else if":

Code: [Select]
int Led=13;
int incomingByte;  

void setup()
{
 pinMode(Led, OUTPUT);
 Serial.begin(9600);
}

void loop()
{
 if (Serial.available() > 0) {
   incomingByte = Serial.read();

   if (incomingByte == 'a') {
     digitalWrite(Led, HIGH);
     Serial.println("LED acceso!");
   }
   else if (incomingByte == 'b') {
     digitalWrite(Led, LOW);
     Serial.println("LED acceso!");
   }
   else{
     Serial.print("comando NON riconosciuto: ");
     Serial.println(incomingByte);
   }
 }
}



Non ho php o ethernet shield per testare, ma secondo me così funziona. senza perdere la testa con complicazioni in più (bridge tcp-com?!?!?! che bruttura!)

ps. okokok oggi sono polemico   :smiley-mr-green:
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Guglio

Bhe, almeno, il bridge mi funziona :P
E poi cosa monto banchi di ram da fare se poi non li uso!?
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

freedomotic

salve qualcuno di voi é riuscito a far funzionare la comunicazione arduino-php in linux?
ho avuto problemi con l'autoreset ma in windows il problema é stato risolto via sofware aggiungendo questa riga di codice
exec("mode com1: BAUD=9600 PARITY=n DATA=8 STOP=1 to=off dtr=off rts=off");

su google ho letto che il comando corrispondente dovrebbe essere

exec("stty -F /dev/ttyACM0 -hupcl")

la porta associata ad arduino uno é /dev/ttyACM0

purtroppo il codice non sembra funzionare

avete qualche suggerimento??? grazie
Freedomotic Domotica Open Source
http://freedomotic.com
We need your help. Please contact us for contributing

Go Up