arduino+ php ?

Ragazzi leggendo sul web ho scoperto che è possibile comandare arduino usando il php e senza usare lo shield ethernet.
Si deve usare una classe del php chiamata php_serial.
Voi l'avete mai usata? sapete se funziona a dovere?
Vorrei implementare delle funzioni sul mio sito web che possano comandare, o gestire un progetto (anche un semplice cubo led) fatto con arduino.
Avete qualche consiglio?
Grazie

sì, in pratica usi la posta seriale per comunicare con l'arduino, che poi è la porta USB che simula una seriale.

Più di una personal'ha usata con successo sia su win che linux, quindi se fai una ricerca trovi qualcosa

ho fatto una ricerca ma mi da mille risultati e nessuno soddisfacente xD
sapresti per caso linkarmi una buona guida?
Grazie comunque :slight_smile:

https://code.google.com/p/php-serial/source/browse/trunk/example.php?r=11

la parte interessante:

<?php
include "php_serial.class.php";

// Let's start the class
$serial = new phpSerial;

// First we must specify the device. This works on both linux and windows (if
// your linux serial device is /dev/ttyS0 for COM1, etc)
$serial->deviceSet("COM1");

// We can change the baud rate, parity, length, stop bits, flow control
$serial->confBaudRate(2400);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");

// Then we need to open it
$serial->deviceOpen();

// To write into
$serial->sendMessage("Hello !");

// Or to read from
$read = $serial->readPort();

// If you want to change the configuration, the device must be closed
$serial->deviceClose();

?>

con deviceSet devi mettere la porta chescegli per programmare arduino. Occhio che solo un programma alla volta può accedervi, quindi se stai parlando via web non puoi programmare o usare il serial monitor, e viceversa.

confBaudRate è il baudrate, di solito si usa 9600, ma dipende dai tuoi scopi. 9600baud = 9600/10 = 960 Byte/s.. lentino, no? ma più che sufficiente in molti casi.

i vari conf[..] sono corretti così, si tratta della configurazione 8N1, il default della Serial (anche quì, salvo che non parli con vecchissime macchine al 99% si usa questo)

sendMessage e readPort sono molto quasi la read e la write che usi con l'arduino...

grazie mille :smiley:
inizierò con i vari sketch di blink per spratichirmi un po' xD

scusa ma dove dichiaro che un pin è usato come output o come input?

toti94:
scusa ma dove dichiaro che un pin è usato come output o come input?

Da nessuna parte. Dialogare con un device usb su protocollo seriale non permette di impostare i pin, per fare questo devi usare un software che fa questo lavoro, mi pare che tra gli esempi di arduino ci sia "firmata" con tanti esempi.

Che sia chiaro nessuno indifferentemente dal linguaggio usato può fare quello che cerchi tu senza un software dentro arduino.

Ciao.

in pratica tu adesso mandi messaggi ad arduino via seriale.

Ora devi fare un programma da caricare sull'arduino che legge la seriale e fa quello che deve fare :grin:

ah quindi oltre a fare il codice in php che manda messaggi alla porta seriale, devo fare un programma per arduino che in base a quello che riceve sulla seriale fa quello che voglio che faccia ?
Cavoli sembra molto più difficile di quanto pensassi :S

ah quindi oltre a fare il codice in php che manda messaggi alla porta seriale, devo fare un programma per arduino che in base a quello che riceve sulla seriale fa quello che voglio che faccia ?
Cavoli sembra molto più difficile di quanto pensassi :S

sì, devi fare così

non è difficile, alla fine a parte le funzioni che sono differenti, gli if, while, int, float, etc... sono sempre loro, sia in php che in C (aruino si programma in C e/o in C++)

sisi il problema non è il php XD il problema è fare lo sketch in arduino che aspetta questi segnali, dovrò cercarmi una guida XD

Comunque GRAZIE MILLE :smiley:

E' pieno il forum di esempi.
Ma mi permetto di consigliarti di mandare da php comandi semplici ad Arduino.
Esempio semplici comandi del tipo 'S' oppure 'A' (lettere singole) e non comandi del tipo "stop", "accendi", etc.
In C potresti incasinarti nel cercare di gestire le stringhe. Molto più semplice invece lavorare con i singoli caratteri.

ho trovato sul web che anche con javascript si puo comunicare con la porta seriale.
Quindi direi che è più comodo essendo un linguaggio lato client :smiley:

dipende, prerchè javascript si collega alla seriale del CLIENT e non del server. Quindi se il javascript gira sul pc con arduino collegato allora ok, ma se, per esempio, da cellulare o da lavoro ti colleghi al server allora il javascript non funziona (o meglio, cerca la seriale del pc di lavoro/cellulare)

ho creato uno sketch stupidoper provare ma non funziona :
lo sketch arduino:

int led=6;
int stato;

void setup()
{
   Serial.begin (9600);
   pinMode(led,OUTPUT);
}
void loop()
{
  stato= Serial.read();
  if (stato== 1)
  {
     digitalWrite (led,HIGH);
  }
  else if(stato== 0)
  {
    digitalWrite (led,LOW);
  }
}

anche se scrivo sul monitor e non dal php, non mi succede nulla, anzi, non vedo neanche ciò che ho scritto, stampato sul monitor seriale.

Codice php

<?php
		include 'elementi/php_serial.class.php';
		// Let's start the class
		$serial = new phpSerial;

		// First we must specify the device. This works on both linux and windows (if
		// your linux serial device is /dev/ttyS0 for COM1, etc)
		$serial->deviceSet("COM3");
		

		// We can change the baud rate, parity, length, stop bits, flow control
		$serial->confBaudRate(9600);
		$serial->confParity("none");
		$serial->confCharacterLength(8);
		$serial->confStopBits(1);
		$serial->confFlowControl("none");

		// Then we need to open it
		$serial->deviceOpen();
		
		echo '<form action="arduino.php" method="post"> 
				<label><input name="led" type="radio" value="sccendi" />Accendi</label>
				<label><input name="led" type="radio" value="spegni" />Spegni</label>
				<input type="hidden" name="nascosto" />
				<input type="submit" value="invia" />
			</form>';
		if (isset($_POST['nascosto'])==TRUE)
		{
			$stato= $_POST['led'];
			
			if (isset($stato)==TRUE)
			{
				$serial->sendMessage(1);
			}
			elseif (isset($stato)==TRUE)
			{
				$serial->sendMessage(0);
			}
			echo $stato;
		}
		$serial->deviceClose();
		
?>

Il codice php invece mi da errore sul settaggio della porta, e quindi anche su i vari settaggi successivi.
Ma io con arduino uso la COM3 e sull'ide non me la fa cambiare
Cmq la pagina la sto eseguendo in localhost sul mio pc a cui è collegato arduino

stato= Serial.read();
if (stato== 1)

attento stai confrontando "stato" con il NUMERO 1 e non con il CARATTERE 1; dalla tabella ascii, il numero 1 corrisponde ad un carattereche non viene più usato (si usava sulle telescriventi, SOH)
invece 0 corrisponde a "null", il carattere che non è un carattere :slight_smile:

cambia 0 e 1 in '0' e '1' (ovvero carattere 0, valore 48 dalla tabella ascii e carattere 1, o valore 49)

per l'errore PHP ricorda che UN SOLO programma alla volta può accedere alla seriale. Secondo me avevi il serial-monitor acceso.

ok ho corretto lo sketch di arduino , e chiuso il monitor.
IL codice php non da errori e lo sketch arduino funziona bene se uso il monitor seriale
Però quando uso la funzione php, il led lampeggia due volte e basta sia se premo accendi sia se premo spegni.
Illed l'ho messo sul pin 13 ed ho cambiato naturalmente il pin nello sketch. ho notato che però quando trasferisco lo sketch il led lampeggia, forseperchè è sul pin 13, che sia dovuto alla funzione $serial-<deviceOpen () il lampeggiamento col php?

il led sul pin 13 lampeggia anche quando l'arduino si resetta..

devi disattivare l'autoreset

come si fa?