Funzioni Php mancanti su Arduino Yùn

Buondì a tutti, ragazzi!

Ancora una volta, ho bisogno del vostro aiuto...

In questi giorni sto creando delle pagine php per il mio Arduino Yùn. Queste pagine girano si trovano all'interno dell'sd che ho inserito nello slot. Tuttavia, sto avendo alcuni problemi perché non riesco in alcun modo a capire come implementare un paio di funzioni molto comode di php:

  • MySql Connect
    Esempio in php:
<?php
$conn=mysql_connect("www.miodatabase.com","username","password") or die("Connessione fallita");
		$db=mysql_select_db("database") or die("DB inesistente");
	
		$query="QUERY";
		$ris=mysql_query($query) or die("Query fallita");
?>
  • Funzioni sulle sessioni
    Esempio in php:
<?php 
    // Get the private context 
    session_name('Private'); 
    session_start(); 
    $private_id = session_id(); 
    $b = $_SESSION['pr_key']; 
    session_write_close(); 
?>

Qualcuno potrebbe spiegarmi come aggiungere (o abilitare, non so da dove partire...) queste funzionalità di PHP sul mio Yùn?

Quando metto una di queste nel codice mi dice "Call to undefined function", per lui non esistono nemmeno...

Aiuto =(

Grazie in anticipo.

Scusa ma chi dovrebbe interpretare il programma in PHP?

ciao

pablos:
Scusa ma chi dovrebbe interpretare il programma in PHP?

Credo Linino su AR9331.

Scusate, ragazzi, avevo dimenticato questo piccolo dettaglio :smiley-roll-sweat . Si si, ovviamente Linino. Ho installato dalle repo php5-cgi e ora leggo i file php da browser, prendendoli direttamente dalla sd.

Up!

Aiuto, grazie!

Il più esperto di Arduino YUN è Pitusso, :wink:

E' già un passo avanti. Ora lo contatto. Grazie mille :wink:

Ciao, e grazie PaoloP (che fa il modesto, ma è esperto pure lui :P).
Qui c'entra poco la Yùn, ma la gestione dei pacchetti linux in genere, e in specifico di quelli php.

Per potersi connettere a un db mysql o gestire sessioni da php, è necessario installare, oltre a php stesso, i moduli corretti:
phpX-mod-mysql
phpX-mod-session
inizia installando questi pacchetti (dove alla X sostituisci 4 o 5 in base alla versione di php installata).

Ciao Pitusso!!!

Ti ringrazio tantissimo! Non hai idea quanto il tuo saggio consiglio mi abbia aiutato, davvero. Pensa che prima ero costretto ad utilizzare uno sketch assurdo con librerie terrificanti per effettuare la connessione al db, ma non funzionava nemmeno perché il db che mi fornisce la scuola ha un sistema di autenticazione obsoleto... Insomma, davvero grazie!

Posso approfittare un attimo ancora dell'aiuto vostro, ragazzi?

Mi sapreste spiegare, magari allegando uno sketch d'esempio (se possibile), come fare per far recuperare a yun le variabili php, quindi quelle di sessione e quelle trasmesse con metodi get e post? Mi spiego: mi servirebbe, ad esempio, che yun sia in grado di recuperare valori inviati (meglio via post, ma se non è possibile anche col get) dalle form dinamiche contenute nelle pagine php che ho sulla sua sd. Queste utilizzano solo text, bottoni radio, checkbox e tendine. Questo perché vorrei poi inviare il codice numerico selezionato nella tendina ad Arduino, in modo che poi io possa re inviarla attraverso lo sketch ma via radio.

L'idea è questa:

Leggo dati dal db (ora posso farlo, grazie a te)
Inizializzo la tendina tramite php con i dati contenuti nel db
A seconda di ciò che scelgo (es. cucina) dalla tendina arduino riceve e invia il codice contenuto nella tendina via radio.
Quindi, clicco su cucina dalla tendina a cucina corrisponde 12345 (già nel codice della pagina)
Faccio recuperare il codice corrispondente a cucina, quindi 12345 da Arduino, il quale lo invia tramite sketch apposito via radio.

In qualche modo ho quindi bisogno di far comunicare le pagine contenute sulla sd di yun con lo sketch, al fine di recuperare valori immessi dagli utenti delle pagine e inviarli via radio. Ho già i codici per le pagine e lo sketch ma non so come far acquisire i valori da Yun. Illuminami, ti prego :cold_sweat:

Se po' fa?

EDIT: Qualcosa del genere? http://scuola.arduino.cc/lesson/JVNlPJX/Send_messages_to_the_Arduino_Yun_with_your_internet_browser

Grazie mille.

Ciao,
quello che chiedi tu è strutturato e dovresti lavorarci su due fronti:

  • usando appunto php : in questo caso devi lavorare lato linux creando uno script php che fa le query del caso e il parsing delle GET/POST
  • usando un framework js (jquery o meglio zepto http://zeptojs.com/)

Per la prima parte trovi un sacco di esempi in rete, ti basta cercare (e forse qualcosa hai già trovato) con San Google :P:
Per la parte invece di js, devi certamente guardarti gli esempi proposti nel sito Zepto e pure quelli che ha condiviso Matteo Loglio:

e puoi studiarti l'esempio Bridge: così capisci come passare dati alla parte ATMega usando delle URL.
E sicuramente gli esempi legati a Yun presenti su scuola.arduino.cc

pitusso:
Ciao,
quello che chiedi tu è strutturato e dovresti lavorarci su due fronti:

  • usando appunto php : in questo caso devi lavorare lato linux creando uno script php che fa le query del caso e il parsing delle GET/POST
  • usando un framework js (jquery o meglio zepto http://zeptojs.com/)

Per la prima parte trovi un sacco di esempi in rete, ti basta cercare (e forse qualcosa hai già trovato) con San Google :P:
Per la parte invece di js, devi certamente guardarti gli esempi proposti nel sito Zepto e pure quelli che ha condiviso Matteo Loglio:
GitHub - mat-lo/yun-examples: A collection of Arduino Yún Examples that display interactions between web pages and physical elements. Scroll down for more info
e puoi studiarti l'esempio Bridge: così capisci come passare dati alla parte ATMega usando delle URL.
E sicuramente gli esempi legati a Yun presenti su scuola.arduino.cc

oook! Grazie! Ci lavoro e ti faccio sapere.

Grazie mille per l'aiuto!

A presto.

Ciao a tutti, ragazzi!

Sto continuando con questo progetto ma, come al solito, i problemi non sembrano abbandonarmi... Ora, quello che stavo cercando di fare è acquisire il value di una checkbox presente su una pagina php che genera di volta in volta, dinamicamente una pagina html contenente una tabella con dei dati. Allego di seguito uno screen per far meglio comprendere la questione:

Ora, quello che fa questa pagina è caricare dei dati da un db mysql per poi inizializzare una tabella con essi; il db è così strutturato:

code floor type device status date time
1115473 second light luce camera ON 2014-04-26 13:26:14
1118545 second light luce notturna OFF 2014-04-23 12:32:46

Nel mio programma php, quello che faccio è semplicemente far assegnare alle checkbox a lato di ogni riga come name il nome del piano selezionato (in questo caso il secondo) e come value il codice della rispettiva luce da controllare (ad esempio, se mi trovo nella riga della luce della luce notturna, i dati della checkbox saranno name=secondo value=1118545).

Quello che sto cercando di fare, mediante javascript, è, una volta rimossa o inserita la spunta sulla checkbox, inviare il codice di essa ad Arduino, in modo da inserirlo poi all'interno dello sketch in una variabile e utilizzare la funzione per inviarlo via radio.

Inserisco di seguito le porzioni di codice, in modo da consentirvi di comprendere meglio il tutto:

//pagina php che genera la tabella, recuperando prima da una form i dati relativi alla scelta effettuata, ovvero in questo caso "controllo luci" e "piano secondo"

<html>
<head>
	<script type="text/javascript" src="/sd/scripts/zepto.min.js"></script>

	<script type="text/javascript">

		var value;
		var piano;

	   	function sendVal() {		  	
		   		//bind the slider value to the URL
			  	$.get('/arduino/luci/' + value, function(){		  			
			  		}
			  	);
	  	}

	  	function invia(val) {
      		value = val; 
      		
      		//get pin from <select>
      		piano = $('#piano').val();

      		//send value
			sendVal();	
    	}	  

	</script>
</head>
<body>

Seleziona un apparecchio da controllare.



<?php

$piano=$_POST['floor'];
$scelta=$_POST['scelta'];

echo("<title>Controllo $scelta piano $piano</title>");

echo("
<B>&nbsp;&nbsp;Gestione $scelta piano $piano:

</B><table border=1>");

switch ($scelta) {
    
	case luci:

        	$user=$_SESSION['user'];
		$off='http://www.psdgraphics.com/file/light-bulb-icon.jpg';
		$on='http://www.psdgraphics.com/file/glossy-light-bulb.jpg';

		mysql_connect("server", "user", "pwd") or die ("Connessione fallita");
		mysql_select_db("db") or die ("Connessione al db fallita");
		$sql="SELECT dispositivo, stato, codice FROM am_prese WHERE piano='$piano' AND tipo='luci' ORDER BY dispositivo ASC";
	
		$ris=mysql_query($sql) or die ("Query fallita");
		//echo("<form action=comanda.php method=post>");
		echo("<tr><th>Descrizione</th><th>Stato</th><th>Cambia</th></tr>");
		while($x=mysql_fetch_array($ris)){
			echo("<tr>");
			if($x[1]=='ON')
				echo ("<td>$x[0]</td><td><img src='$on' width=150 height=120></td><td><center><input type=checkbox name=$piano id=piano value='$x[2]' checked onchange=invia(this.value)></center></td>");
			else
			{
				$spento=$x[2]+3;
				echo ("<td>$x[0]</td><td><img src='$off' width=150 height=120></td><td><center><input type=checkbox name=$piano id=piano value=$spento onchange=invia(this.value)></center></td>");
			}
			echo("</tr>");
		}
					
		echo ("</table>");
        mysql_close();
        break;
?>

//a partire dall'esempio ledPin di Matteo Loglio, lo sketch che dovrebbe -ma che non lo fa- recuperare i valori delle checkbox e inviare il codice via radio...

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h> 
#include <RCSwitch.h>

// Listen on default port 5555, the webserver on the Yun
// will forward there all the HTTP requests for us.
YunServer server;
String startString;
RCSwitch mySwitch = RCSwitch();

void setup() {
  Bridge.begin();
  server.listenOnLocalhost();
  server.begin();
  Serial.begin(9600);

mySwitch.enableTransmit(10);
}

void loop() {
  
  // Get clients coming from server
  YunClient client = server.accept();

  // There is a new client?  
  if(client) {  
    //readStringUntil() "consumes" the string.
    //this means that if command was led/20, now
    //it's just 20.
    String command = client.readStringUntil('/');    
    if (command == "luci") {
      
      //also parseInt "consumes" the string
      int value = client.parseInt();
      mySwitch.send(value, 24); //funzione che invia il codice della checkbox cliccata via radio
    }    
    client.stop();
  }
}

Il problema è che tutto ciò non va... Arduino riceve sì, ma riceve numeri folli =( Se clicco sulla prima checkbox, che di default è checked perchè sul database lo stato di quella luce è ON, sul serial monitor di Arduino leggo il valore 1361, che non sembra avere apparentemente alcuna relazione con i valori presenti in db...

Insomma, sono abbastanza disperato con sta funzione Javascript... Qualcuno mi può dare una mano, per favore?

Grazie in anticipo a tutti.

Up! =( per favore, ho bisogno di una mano per sbloccarmi da questo punto... Grazie!

Ciao,
io credo che tu debba scorporare il tutto e fare un passo alla volta, comprendendo bene tutto.

Potresti poi, per esempio:

  • guardarti il sorgente della pagina e verificare che tutto sia ok
  • utilizzare alert() lato javascript per verificare se la funzione vinene richiamata, e se il valor eletto è quello aspettato
    ....
    inzomm, debugga!