Riva del Garda, TN / Forlì
Offline
Edison Member
Karma: 7
Posts: 2082
Il piu' modesto al mondo
|
 |
« Reply #15 on: June 30, 2011, 10:59:01 am » |
in linux dovrebbe essere sufficiente che fai un exec con dentro echo "parola" > /dev/ttyACM0 dando all'user apache i permessi di agire sulla seriale almeno dovrebbe essere così
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 81
|
 |
« Reply #16 on: June 30, 2011, 11:07:46 am » |
a dire il vero non credo sia la mancata esecuzione del comando ma il comando stesso ho provato ad eseguirlo da shell e viene eseguito ma arduino continua a resettarsi su internet però ci sono vari articoli in cui si dice che questa soluzione funziona o in alternativa bisogna usare una classe php ad hoc php-serial-class qualche idea?? usare php é davvero arduo
|
|
|
|
|
Logged
|
|
|
|
|
Riva del Garda, TN / Forlì
Offline
Edison Member
Karma: 7
Posts: 2082
Il piu' modesto al mondo
|
 |
« Reply #17 on: June 30, 2011, 11:14:05 am » |
arduino si resetta perchè è predisposto per fare così quando inizia una comunicazione seriale, vai qualche pagina indietro e cerca i thread dell'autoreset 
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 83
Posts: 8242
:(){:|:&};:
|
 |
« Reply #18 on: June 30, 2011, 12:01:06 pm » |
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
prova il comando in un terminale, che output ti dà? in oltre ogni nuova connessione seriale resetta il micro, ma puoi rimediare disabilitando l'autoreset.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16509
Don't know what I do
|
 |
« Reply #19 on: July 01, 2011, 12:08:33 am » |
ma puoi rimediare disabilitando l'autoreset.
via hardware
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 81
|
 |
« Reply #20 on: July 01, 2011, 01:24:17 am » |
eseguito via shell non fornisce nessun output nel senso che esegue il comando tanto é vero che confrollando i parametri con stty -a -F /dev/ttyACM0 risulta tra le varie cose "-hupcl" che dovrebbe corrispondere alla disabilitazione del DTR
mi ricordo che la cosa andava bene con arduino 2009 (che purtroppo non ho sotto mano adesso), forse potrebbe essere un problema legato al fatto che le seriali sono diverse in 2009 e arduino uno? infatti collegando la 2009 in linux compare il device /dev/ttyUSB0, in arduino uno diventa /dev/ttyACM0
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16509
Don't know what I do
|
 |
« Reply #21 on: July 01, 2011, 03:02:26 am » |
Il chip FTDI della 2009 è un convertitore USB/seriale mentre l'Atmega8U2 della UNO è un micro programmato per emulare questa cosa via software per cui cambiano le modalità come vengono viste dall'SO.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 81
|
 |
« Reply #22 on: July 01, 2011, 03:08:44 am » |
ti ringrazio molto per la precisazione! a questo punto credo che tutti i vari tutorial in rete relativi a php_serial_class, a proxy come serproxy o ser2net non funzionino più con arduino uno visto che di fatto non esiste più una porta seriale ma una usb vera e propria, mi sbaglio??
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16509
Don't know what I do
|
 |
« Reply #23 on: July 01, 2011, 03:54:54 am » |
Non proprio. L'Arduino non è un host USB ma il firmware dell'Atmega8U2 spedisce un vendor:product USB valido per cui l'Arduino UNO viene identificato dall'SO come USB anche se poi viene gestita come porta seriale (difatti su Win viene visto come una porta COM).
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 81
|
 |
« Reply #24 on: July 01, 2011, 04:03:03 am » |
ma allora secondo te perché non funziona con linux? da windows riesco a disabilitare il dtr via software con exec("mode com1: BAUD=9600 PARITY=n DATA=8 STOP=1 to=off dtr=off rts=off"); in php e non ho problemi a comunicare via seriale senza usare né classi particolari né serial proxy in linux non c'é verso di farla andare anche usando ser2net continua a resettarsi
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16509
Don't know what I do
|
 |
« Reply #25 on: July 01, 2011, 04:14:10 am » |
Perché sono 2 SO diversi e probabilmente gestiscono la porta in maniera differente.
|
|
|
|
|
Logged
|
|
|
|
|
Fidenza, Parma
Offline
God Member
Karma: 7
Posts: 736
Arduino rocks
|
 |
« Reply #26 on: July 01, 2011, 04:24:54 am » |
@FreeDomotic, potresti spiegarmi bene come hai risolto in php su Windows x comnicare con l'arduino? Grazie!
|
|
|
|
|
Logged
|
|
|
|
|
Milazzo (ME)
Offline
Sr. Member
Karma: 0
Posts: 395
Chi cerca trova. .
|
 |
« Reply #27 on: July 01, 2011, 04:49:21 am » |
Ciao ragazzi, la discussione mi ha subito appassionato e stavo provando qualcosa usando easyphp per simulare un server sul mio pc winzoz! Sono riuscito perfettamente a scrivere sulla porta com3 però ho un grande problema! Non riesco a leggere ciò che mi da in risposta l'arduino! Utilizzando come negli esempi precedenti "fread($risorsa, fsize($risorsa))". Qualche consiglio?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 81
|
 |
« Reply #28 on: July 01, 2011, 07:11:17 am » |
ciao Guglio, allora ho risolto in questo modo usando una funzione per inviare dei caratteri ad arduino in php
<?php // inizializzazione porta exec("mode com1: BAUD=9600 PARITY=n DATA=8 STOP=1 to=off dtr=off rts=off");
function sendToSerial($messaggio){ $fp =fopen("com1", "w"); fwrite($fp, $messaggio); fclose($fp); } ?>
poi nel codice php che gestisce l'invio dei caratteri uso questo
if ($_GET['action'] == "d") { //invia il comando sendToSerial("d");
ps: non uso easyphp ma server2go
spero ti sia utile...
|
|
|
|
|
Logged
|
|
|
|
|
Milazzo (ME)
Offline
Sr. Member
Karma: 0
Posts: 395
Chi cerca trova. .
|
 |
« Reply #29 on: July 01, 2011, 07:42:43 am » |
Sullo scrivere non ci sono problemi, è sul leggere che sto incontrando qualche difficoltà! Ecco il codice da me realizzato $VAR = $_GET['testo'];
//$cmd_str = "MODE COM3 BAUD=9600 PARITY=N DATA=8 STOP=1 TO=ON OCTS=ON ODSR=OFF IDSR=OFF RTS=HS DTR=ON"; //exec($cmd_str);
$porta_seriale = fopen("COM3", "w+"); fwrite($porta_seriale, $VAR);
sleep(2); //Per attendere la risposta dell'arduino
if($risposta = fread($porta_seriale, 30)){ echo "<br>True<br>"; echo $risposta; } else { echo "<br>False<br>"; echo $risposta; } fclose($porta_seriale); Così facendo ogni tanto riesco a leggere ciò che mi risponde l'arduino, che presenta il seguente codice: 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 spento!"); } else{ Serial.print("comando NON riconosciuto: "); Serial.println(incomingByte); } } } Prima di poter comunicare con la porta com devo eseguire il comando (IO, dal prompt se no non funziona) "MODE COM3 BAUD=9600 PARITY=N DATA=8 STOP=1 TO=ON OCTS=ON ODSR=OFF IDSR=OFF RTS=HS DTR=ON" ed ogni tanto la porta com scompare, o dice che è utilizzata da qualche altra parte, quando in realtà nessun applicazione accede alla porta.
|
|
|
|
|
Logged
|
|
|
|
|
|