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...
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.
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).
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
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
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> 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?