jueves, 10 de enero de 2013

Sistema web de control con JQUERY

Uniendo múltiples disciplinas con un único propósito

Hola, no sabia exactamente qué título ponerle a esta entrada. Resumiendo un poco, esto es un ejemplo de como podemos ejecutar scripts en el RaspberryPi, llamándolos desde la web. No es nada nuevo, llevamos siglos usándolo, pero lo que vamos a ver es muy interesante porque vamos a hacerlo con JQUERY, que en principio, no esta pensado para este propósito.
Como seguro que sabrás, JQUERY se ejecuta en el navegador, por lo que al servidor donde se aloja, ni se entera. Necesitamos por tanto crear un evento vía AJAX, que llame ejecute un post PHP y otra web lo recoja, ejecutando un script. Seguramente ni lo habré escrito bien, así que vamos al lío.
Lo primero será instalar algunas dependencias:
apt-get install apache2 php5
creo que esas son todas. Como son necesarios varios archivos, los he comprimido todos para que los podáis descargar desde Dropbox.

  1. cd /var/www/
  2. aqui se supone que tenemos el archivo prueba.tar.gz
  3. tar -xvzf prueba.tar.gz
  4. chown -R www-data:www-data prueba
  5. touch /tmp/resultado.log
  6. chmod 777 /tmp/resultado.log
Tiene que aparecer de la siguiente forma:
/var/www/
/var/www/prueba
/var/www/prueba/js
/var/www/prueba/js/jquery-1.8.3.js
/var/www/prueba/js/script.sh
/var/www/prueba/js/my-script-molon.js
/var/www/prueba/js/jquery-ui.js
/var/www/prueba/index.html
/var/www/prueba/test.php
/var/www/prueba/css
/var/www/prueba/css/jquery-ui.css

Y ya está. Ahora navegáis a http://ip_del_raspberrypi/prueba/ y podemos hacer lo siguiente:

A lo mejor no resulta "impresionante" pero desde luego si que es muy interesante. Si se tratase de un simple formulario PHP, cada vez que se envía, se refrescaría la web. En el archivo /var/www/prueba/js/my-script-molon.js he dejado varios comentarios y varios ejemplos ... comentados. La idea es tener en cada momento el valor del slider. Lo que tenemos aquí, viene a ser más o menos esto:

Una de las grandes ventajas de la simplicidad de este ejemplo, es que usa JQUERY, que es compatible con cualquier navegador (paso de probarlo en IExplorer).

¿y para que queremos esto?

En el ejemplo que os pongo, se ejecuta un script con un parámetro númerico, correspondiente al valor actual del slider. Puedes aprovecharlo para controlar la intensidad de la luz, controlar algunos leds, un servo en velocidad y sentido o ... puedes usarlo como control remoto para el ardu-quad-raspby-copter!


agradecimientos especiales a ...

Como poco a poco me vais conociendo un poco más, sabréis que yo sólo no era capaz de hacer toda la parte del JQUERY, PHP ... así que desde aquí mando un saco de agradecimientos a mi colega Lucas (el Mago) por ayudarme con sus infinitos conocimientos en la materia ;)

30 comentarios:

  1. si pones dos slideBar ya tienes el control remoto del ardu-quad-raspby-copter!....

    Uno en horizontal y otro en vertical.

    ResponderEliminar
  2. yeees :) junto con los botones de subir, bajar, luces, activar el "laser", buscar zombis ...

    ResponderEliminar
    Respuestas
    1. y que cuando sueltes, vuelva al centro.... estoy haciendo una prueba desde mi movil ya que se supone que es multitactil no??

      entonces le puede estar diciendo.... sube y gira a la derecha pulsando con dos dedos....

      sino digo nada es que desde el movil se puede hacer pulsando con varios dedos.

      Eliminar
    2. Dolphin beta para Android (recomendado) tiene un modo "juegos" que se supone que tiene que hacer esto que buscamos.

      Eliminar
    3. yo lo que vi una vez y no me lo guardé.... fue un circulo con un punto en medio que era el joystic... y tu podias ir moviendo el punto por dentro del circulo.... sabiendo las coordenadas del punto en el circulo puedes saber lo que quieres....

      Eliminar
  3. era esto....

    https://github.com/tiefenb/ardrone-webcontroller

    pero no consigo que funcione

    ResponderEliminar
    Respuestas
    1. te dejo algo de cosecha propia

      http://www.gsbrownsea.es/slideBar/circulo.html

      (falta delimitar que no se salga del circulo)

      Eliminar
    2. perfecto perfecto perfecto. Te mencionaré en mis memorias ;)

      Eliminar
    3. javi he borrado los comentarios que habias borrado. Se que cada uno es celoso de su código pero ... ¿lo compartes? prometo que no habrá represalias si no quieres compartirlo, al fin y al cabo es tuyo.

      Eliminar
    4. claro que si... utiliza el código que necesites....

      Mirate lo de https://github.com/tiefenb/ardrone-webcontroller porque hay archivos .js con funciones implementadas para saber donde esta pulsando dentro del circulo.

      He actualizado http://www.gsbrownsea.es/slideBar/circulo.html con un jQuery modificado para moviles.... porque a mi no me iba el joistic en el movil.... ahora si que me va ;)

      Eliminar
    5. ahora mismo lo miro. Estaría aun mejor que si pulsas dentro de la "zona blanca" el circulo rojo se posicionara ahí, que no haga falta arrastrarlo desde primeras desde el centro. Con el slider del ejemplo que puse, se puede, así no habría que prestar tanta atención al mando y no perdemos de vista al ardu-quad-raspbi-copter.

      Eliminar
    6. habia pensado igual... buscaré solución

      Eliminar
    7. esto te puede servir http://www.lewebmonster.com/ejemplos/eventos-del-raton-jquery/

      Eliminar
  4. Y esto tambien http://jsbin.com/akiwo

    ResponderEliminar
  5. Fantástica web, la verdad es un lujo poder leer artículos de esta calidad en castellano
    Tengo una duda, que usuario es el que ejecuta los scripts? www-data?
    gracias y saludos!

    ResponderEliminar
  6. Ahora si pulsas te lleva el joistic donde has pulsado y si sueltas vuelve al centro.

    Hay una primera prueba para no salirse del circulo

    http://www.gsbrownsea.es/slideBar/circulo.html

    ResponderEliminar
    Respuestas
    1. no es por ser quisquilloso pero ... la primera version iba mejor. Esta, desde movil, es algo regulera. Me quedo con la primera ;)

      Eliminar
    2. venga para compensar te he creado unos botones para activar el laser y hacer fotos...

      cuando los pulsas el jquery llama al PHP

      http://www.gsbrownsea.es/slideBar/circulo.html

      Eliminar
    3. buaaaa como molaaaaaaa!! pásate los archivos y lo pruebo en mi Raspberry ¿no?

      Eliminar
    4. este finde te los paso...

      otra cosa que se me ha ocurrido es que cuando pulses el boton de "FOTO", aparezca abajo de la pantalla la foto que acabas de hacer. Por lo que he visto en el blog esta parte tu la tienes controlada y sabes hacerlo con un .sh

      Aqui entra la magia de Jquery.... tendriamos que tener un txt un contador para que las fotos se llamasen : 1.jpg, 2.jpg, 3.jpg, 4.jpg

      Cuando pulses el boton, se incrementa el contador, se hace la foto y desde jquery leemos el txt para saber la ultima foto tomada y se carga en la web con CSS desde donde se controla el raspiCopter sin refrescar.

      Si consigues la retransmision de video.... es solamente incluir en la web el joistic y ha volaaar!

      Eliminar
    5. Aquí lo tienes !!

      el ejemplo empieza el contador 2 y carga las fotos 2.jpg, 3.jpg y 4.jpg cuando pulsas el botón de FOTO

      Faltaría solo hacer el .sh que capture la foto y la guarde con esos nombres ;)

      http://www.gsbrownsea.es/slideBar/circulo.rar

      Ya me dices si te gusta o que.

      Eliminar
    6. Ola ke ase!! xD eres un crá. Te importa que publique y modifique el código siempre y cuando te mencione en el código y los comentarios?

      Eliminar
    7. eres libre de publicar y modificar lo que quieras ;)

      Eliminar
  7. Podrías publicar o enviarme por mensaje privado la lista de la compre de ebay para las piezas del arduCopter ;)

    ResponderEliminar
    Respuestas
    1. Yo lo pedí a mama noel... Estaria bien saber las piezas. :)

      Eliminar
    2. yo me la pedí el 1 de enero y ya he recibido hoy!!! La compre en RS

      Eliminar
  8. Ui comente en el anterior sin haber leido este, que tal es la latencia por ajax? responde bien?

    ResponderEliminar
  9. muy buewn trabajo tamto juanmol como javi la verdad curradisimo, no me queda claro una cosa... como usais los datos de el joystick por que intento ver como esta montado pero no lo logro encontrar, yo estoy con un coche teledirigido que tiene 2 motores, uno de direccion y otro de propulsión y claro intento adaptarlo para usarlo con el ejemplo del circulo pero no encuentro la forma, si me podeis ayudar....

    mil gracias

    ResponderEliminar
  10. Muy buenas, estoy muy interesado en realizar este proyecto, pero al parecer los enlaces de dropbox han caducado.. Podría alguien volver a facilitar los archivos..? :(

    ResponderEliminar