martes, 6 de marzo de 2018

Pygame I: Las bases.

Vamos a empezar esta serie de tutoriales sobre Pygame, como ya introduje la semana pasada, no pretendo hacer una guia completa de creación de videojuegos, simplemente vamos a presentar unas bases para que podamos integrar las cosas que hemos aprendido con OpenCV a Pygame, y así poder programar juegos al estilo Eye Toy de Play Station 2.

En este primer tutorial, mostraré la configuración inicial del juego, cargaremos musica y un sprite, con esto será suficiente para poder entender como  funciona pygame.

Para descargar pygame, usaremos la herramienta pip, de la que ya hemos hablado anteriormente:

Windows, en CMD: python -m pip install pygame
Linux, en la terminal: pip install pygame

Documentación de Pygame, https://www.pygame.org/docs/ref/display.html
El sprite utilizado:



Sin más y como siempre, pasamos al codigo, sobre el mismo código pondré los comentarios, creo que os resultará más práctico:


'''
Created on 2 mar. 2018

@author: Juanp
'''

import pygame
from pygame.locals import *

#Constantes

W = 680
H = 460

AZUL_CLARO = (190,220,255)


def main():
    
    #Iniciamos pygame:
    
    pygame.init()
    pygame.font.init()
    pygame.mixer.init(frequency=22050, size=16, channels=2, buffer=4096)
    clock = pygame.time.Clock()
    SCREEN = pygame.display.set_mode((W,H))
    
    #La funcion fill, nos sirve para definir el color de fondo
    
    SCREEN.fill(AZUL_CLARO)
        
    #Cargamos los archivos de juego y definimos variables
    
    sprite = pygame.image.load('globo.png').convert_alpha()
    mus_fondo = pygame.mixer_music.load("loopvint.mp3") #Importante diferenciar entre musica y sonido del juego
    pygame.mixer.music.play(loops=0, start=0.0)        
    
    running = True
    
    #Bucle del juego
    
    while running:
        
        #Mostramos el sprite en pantalla
        
        SCREEN.blit(sprite,(W/2,H/2))
                  
          
        
    
        #Eventos de juego, por el momento solo cerramos la aplicacion usando la ventana
        for event in pygame.event.get():

            if event.type == pygame.QUIT:
                running = False
                
    
        #Actualiza pantalla    
        pygame.display.update()            

main()


La pantalla deberia mostrar algo así:

miércoles, 28 de febrero de 2018

OpenCV y Python V (BackgroundSubstractor)

 


Extraer el fondo de una imagen es bastante sencillo, y nos proporciona una gran herramienta para los desarrollos posteriores y eliminar zonas de la imagen que no necesitamos reconocer, asi facilitamos reconocer los elementos moviles de nuestras capturas.

Imaginemos una cinta transportadora, los elementos van pasando pero el fondo siempre es fijo, esta herramienta nos permite eliminar todos los elementos, y poderlos clasificar uno a uno.


Sin más, os muestro el código y luego comentamos:
import cv2


def main():
    
    cap = cv2.VideoCapture(0)
    mog2 = cv2.createBackgroundSubtractorMOG2()
    cv2.BackgroundSubtractorMOG2.setDetectShadows(mog2,False)

    
    while(cap.isOpened()):
        
        ret, original = cap.read()
        mask = mog2.apply(original)        
        mask = cv2.erode (mask,cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)),iterations = 2)
        
        cv2.imshow('Original',original)
        cv2.imshow('Mask',mask)
        
        k = cv2.waitKey(25) & 0xff
        if k == 27:
            break
        
    cap.release()
    cv2.destroyAllWindows()

main()

Vamos a obviar las partes que ya hemos tratado en otros tutoriales y centrarnos en lo que nos ocupa:

En la siguiente linea asignamos a una variable mog2, la función para extraer el fondo:
mog2 = cv2.createBackgroundSubstractorMOG2()

MOG2, por defecto "intenta" identificar las sombras, que a la hora de mostrar la mascara en pantalla nos la indica en gris, algo así:



Pero a mi no es algo que me guste, asi que lo quitamos usando la siguiente linea de código:

cv2.BackgroundSubtractorMOG2.setDetectShadows(mog2,False)

Una vez dentro del bucle, asignamos a mask, la captura aplicandole el MOG2:

mask = mog2.apply(original)

Después, limpiaremos la imagen de ruido, aplicandole el filtro "erode", esto también es opcional, si quereis vosotros mismos probad como funciona si no lo aplicais, simplemente borrando la linea:

mask = cv2.erode (mask,cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)),iterations = 2)

Y  bien, en esto consiste substraer el fondo de la imagen, en los proximos tutoriales, que espero que sean pronto, haremos un inciso para explicar cómo funciona en un modo muy básico la libreria pygame, para despues aplicarlo a OpenCV, programando un minijuego basado en este mismo tutorial.

Un juego donde explotaremos globos usando nuestro cuerpo al puro estilo PSCamera de Play Station 2.



viernes, 25 de noviembre de 2016

Web Scraping con Python II (requests)




En este tutorial vamos a extraer información de una web, tal y como os adelanté en el anterior tutorial en esta ocasión la extraeremos de un dato que no sea una variable de JS. Lo que nos ahorrará tener que abrir el explorador mediante Selenium.

Si no tenemos instalado Beautiful Soup, lo haremos:

pip install beautifulSoup4

A continuación instalaremos Requests

pip install requests

El funcionamiento sería más o menos el mismo que con Selenium, a continuación el código comentado:

from bs4 import BeautifulSoup
import requests


url = 'http://geekyhour.blogspot.com.es'
# Le pasamos la web a request para convertirla en texto plano
r = requests.get(url)

soup = BeautifulSoup(r.text, 'html.parser')

# Buscamos en este caso todos los tags h3, que tengan class = post-title entry-title
html = soup.findAll('h3', 'post-title entry-title')

# Iniciamos un bucle para mostrar todos los valores que contienen esos tags
for i in html:
 print(i.getText())




Y hasta aquí el tutorial de esta semana, espero que le puedan sacar provecho, hasta la proxima!!

sábado, 19 de noviembre de 2016

Web scraping con Python

Buenas a todos !!

Después de un largo tiempo sin escribir, hoy por fin me he decidido a volver con Geeky Hour, falta de ideas, falta de tiempo... en fin.

Volvemos pues con un tutorial sobre web scraping, que es la acción de extraer información de una pagina web y luego poder usar esos datos para lo que necesitemos.

Para empezar instalaremos las librerias necesarias.

BeautifulSoup

pip install beautifulsoup4

Selenium

pip install selenium

Como web driver, un ejecutable que necesitaremos para poder extraer los datos cuando estos sean datos de javaScript nos descargaremos desde aquí chromedriver.


Una vez hecho todo esto vamos a pasar al código, en este caso vamos a hacer webscraping de la web weather.com para poder extraer la información en texto del tiempo que hace en la ciudad.

Concretamente este dato:


from bs4 import BeautifulSoup
from selenium import webdriver

#Cargamos el driver, el archivo chromedriver debe estar en la
#misma carpeta del código

driver = webdriver.Chrome()

# Introducimos la url y la pasamos al driver
url = "https://weather.com/es-ES/tiempo/hoy/l/41.38,2.18"

driver.get(url)

html = driver.page_source

# Transformamos al url a html con Beautifulsoup

html2 = BeautifulSoup(html, "html.parser")

# Aqui buscaremos dentro de ese código, el lugar donde se 
# encuentra el dato que necesitamos.
tiempo  = html2.find('div', {'class':'today_nowcard-phrase'})

# Imprimimos texto por consola y cerramos el explorador.

print (tiempo.getText())
driver.quit()

Como veis, es un código bastante cortito, no vamos a complicarnos mucho la vida para obtener un simple dato "Soleado / Tormenta ....".

Para poder encontrar el texto que nos interesa de una web, lo que haremos será localizar la posición dentro del código. Entraremos en el modo inspección de nuestro explorador "F12" en el caso de Chrome:


Si seleccionamos la parte de la pagina que nos interesa, en este caso el texto "PARCIALMENTE NUBLADO", en el inspector podremos obtener la información que nos interesa, <div class="today-nowcard-phrase" .... 
Lo usamos en nuestro código con el formato: ('div', {'class':'today-nowcard-phrase'})

Y listo, ejecutamos el código y obtendremos el dato actualizado.

En este tutorial hemos utilizado Selenium porque el texto que teniamos que extraer de la pagina se trataba de un codigo JavaScript, y otros métodos más rapidos y sencillos no logran extraer este tipo de información, en el próximo os mostraré como usar la libreria Requests.

jueves, 11 de diciembre de 2014

OpenCV y Python IV (Entrenamiento HAAR cascade)

En el anterior tutorial aprendimos a utilizar los clasificadores HAAR, usando los que trae por defecto OpenCV, ahora pasamos a algo más interesante, "entrenar" al software a reconocer los objetos que queremos.
Ya dije que hay diferentes tipos de procedimientos para localizar objetos, depende siempre de lo que queramos detectar.

OpenCV tiene dos herramientas para generar el archivo *.xml que necesitamos, las encontrareis en "OpenCV/Build/Common/x86" que es la carpeta donde trabajaremos por comodidad, los programas que usaremos son "opencv_createsamples" y "opencv_traincascade"

El procedimiento es el siguiente:

  • Creamos tres carpetas, en una pondremos las imágenes negativas ( las que no pertenecen a nuestro objeto), en otra las positivas (por eliminación, las que si) y en la ultima ira a parar el archivo *.xml, la llamaremos "cascade".
  • Creamos un archivo de texto, llamado "negative.txt" y en el insertamos las rutas de las imágenes negativas:
    neg/neg_img1.jpg
    neg/neg_img2.jpg
    ...
  • Creamos otro archivo de texto, llamado "positive.txt" y en este hacemos lo mismo, pero indicando los siguientes argumentos: "ruta del archivo" "numero de veces que sale el objeto en esa imagen" "posicion x de la esquina superior izquierda" "posición y de la esquina superior izquierda" "alto del recuadro" ancho del recuadro":
    pos/pos_img1.jpg 1 675 210 400 150





  • Una vez tengamos los archivos listos, cuantas más imagenes mejor funcionará, pasaremos a crear el primer archivo necesario. Para ello nos vamos a la consola y navegamos hasta la ruta de las herramientas, e introducimos:
    opencv_createsamples.exe -vec bin_desc.vec -info positive.txt -bg negative.txt
    Con esto generamos el archivo "bin_desc.vec", que es el que utilizamos para el próximo paso.
  • Aún dentro de la consola, introducimos:
    opencv_traincascade.exe -data cascade -vec bin_desc -bg negative.txt
  • Dentro de la carpeta "cascade" se generan unos cuantos archivos, de ahi solo nos interesa "cascade.xml" que es nuestro clasificador, para probarlo simplemente usaremos el ejemplo del post anterior, en el que cambiaremos el archivo de caras, por el nuestro.

miércoles, 3 de diciembre de 2014

OpenCV y Python III ( Reconocimiento por clasificadores HAAR)

El tercero de la serie lo voy a enfocar al reconocimiento de imágenes siguiendo HAAR cascade.
Si habéis probado los ejemplos, hay uno el facedetect, que como su nombre indica detecta los rostros en una imagen, aparece la imagen de nuestra querida Lena con un rectangulo en la cara en la cara.

Como simple curiosidad buscáis en la wikipedia a Lenna, veréis la historia de esta imagen.


martes, 25 de noviembre de 2014

OpenCV y Python II (Seguimiento de objeto por color)



Hoy vamos a aprender a seguir un objeto de un color determinado y en directo usando OpenCV.
Recordad, lo importante es entender el concepto, y para ello antes voy a explicar el procedimiento que vamos a usar para ello.

  1. Obtenemos la imagen de nuestra webcam.
  2. Convertimos esa imagen a el formato de color HSV (Matiz, Saturación, Brillo)
  3. Especificamos un rango de color para crear una plantilla, de blanco o negro, 0 y 1, verdadero falso... etc. ( para ello nosotros utilizaremos barras de configuración )
  4. Localizamos en la ventana el lugar que ocupa ese color en ese frame
  5. Dibujamos un circulo en esa posición.

De la libreria OpenCV usaremos estas nuevas funciones:

- cv2.createTrackbar ('Titutlo', 'ventana', rango inferior, rango superior, variable temporal).
Crea una barra deslizante.

- cv2.cvtColor (imagen, Tipo de conversion) Convierte la imagen de una paleta de colores a otra
- cv2.inRange(imagen, Rango min, Rango max)
- cv2.moments.
Datos sobre la posicion de un objeto donde:
    -m00 -> Area de blanco
    -m01 -> Posicion x
    -m10 -> Posicion y

- cv2.erode -> erosiona la imagen para eliminar puntos erroneos
- cv2.dilate -> dilata los pixeles detectados
- cv2.circle (imagen, posicion, color, tamaño de la linea)

El codigo fuente de la practica comentado.




import numpy as np
import cv2

def nothing(x):
    pass
# Creamos una variable de camara y asigamos la primera camara disponible con "0"
cap = cv2.VideoCapture(0)
cv2.namedWindow('Configuracion')

# Crearemos los controles para indicar el color que seguiremos

cv2.createTrackbar ('H min', 'Configuracion', 0,256,nothing)
cv2.createTrackbar ('H max', 'Configuracion', 0,256,nothing)
cv2.createTrackbar ('S min', 'Configuracion', 0,256,nothing)
cv2.createTrackbar ('S max', 'Configuracion', 0,256,nothing)
cv2.createTrackbar ('V min', 'Configuracion', 0,256,nothing)
cv2.createTrackbar ('V max', 'Configuracion', 0,256,nothing)

# Iniciamos el bucle de captura, en el que leemos cada frame de la captura
while(True):
    ret, frame = cap.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) #Convertimos imagen a HSV

    # Asignamos las variables del rango de color que seguiremos
    Hmin = cv2.getTrackbarPos('H min', 'Configuracion')
    Hmax = cv2.getTrackbarPos('H max', 'Configuracion')
    Smin = cv2.getTrackbarPos('S min', 'Configuracion')
    Smax = cv2.getTrackbarPos('S max', 'Configuracion')
    Vmin = cv2.getTrackbarPos('V min', 'Configuracion')
    Vmax = cv2.getTrackbarPos('V max', 'Configuracion')

    # Aqui mostramos la imagen en blanco o negro segun el rango de colores.
    bn_img = cv2.inRange(hsv, np.array((Hmin,Smin,Vmin)), np.array((Hmax,Vmax,Smax)))

    # Limpiamos la imagen de imperfecciones con los filtros erode y dilate
    bn_img = cv2.erode (bn_img,cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)),iterations = 1)
    bn_img = cv2.dilate (bn_img,cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)),iterations = 1)
    # Localizamos la posicion del objeto
    M = cv2.moments(bn_img)
    if M['m00']>50000:
        cx = int(M['m10']/M['m00'])
        cy = int(M['m01']/M['m00'])
    # Mostramos un circulo verde en la posicion en la que se encuentra el objeto
        cv2.circle (frame,(cx,cy),20,(0,255,0), 2)


    # Creamos las ventanas de salida y configuracion
    cv2.imshow('Salida', frame)
    cv2.imshow('inRange', bn_img)

    if cv2.waitKey(1) & 0xFF == ord('q'): # Indicamos que al pulsar "q" el programa se cierre
        break

cap.release()
cv2.destroyAllWindows()


Al ejecutarlo tendremos 3 pantallas, una con las barras de configuración, otra con la imagen en blanco y negro, y la captura de la imagen. En la imagen de abajo vereis un pequeño ejemplo visual de su funcionamiento.
Hay que tener en cuenta en el proceso de configuracion que hablamos de rangos, osea que el maximo debe ser superior que el minimo, si no, no veremos nada.

viernes, 21 de noviembre de 2014

OpenCV y Python I (Instalación y ejemplo)

El contenido de este blog normalmente gira entorno a la idea de realizar un proyecto robótico, algo que he buscado desde que de pequeñito vi la peli de Cortocircuito, es una de esas cosas que forman parte de la lista de "Cosas que debo hacer antes de morir"


Y claro, mi hipotético futuro superrobot tiene que ver y entender según que cosas, como llamarme papá al verme... ahí es cuando entra OpenCV, una librería de visión artificial que empezaremos a utilizar con estos tutoriales.

En este post, aprenderemos a instalarla en Python y dejarla lista para usar, y ya de paso cargaremos un ejemplo de los que lleva para comprobar que funciona.


lunes, 17 de noviembre de 2014

5 aplicaciones web que deberías conocer

Hoy os presento una serie de herramientas para trabajar online que nos sacan de algún apuro, y haciendo alusión con el post anterior, nos impide que con las prisas descarguemos cualquier software y con ello llenemos nuestro pc de basura.


  • CloudConverter, convierte archivos de audio, vídeo, documentos e imágenes a otros formatos directamente desde esta web.
    Nos permite convertir el formato de un archivo desde URL, de nuestro PC o desde nuestro Dropbox.
  • ClipConverter, descarga videos y musica en multiples formatos, desde webs como YouTube, MySpace, Metacafe, Veoh..

  • Easel.ly, crea tus infografias desde esta web. Nos proporciona herramientas suficientes para crear un diseño muy profesional, plantillas gratuitas, una gran selección de imágenes predefinidas a las que podemos añadir las nuestras, diferentes estilos de texto y herramientas de edición y dibujo, todo esto con una interfaz muy limpia y atractiva.
  • Awwapp.com, una pizarra virtual muy sencilla en la que podremos hacer nuestros esquemas como si de la pizarra del cole se tratase, lo más interesante, pues que podemos compartir la pizarra en directo y que nuestro compañero dibuje también. Muy útil para jugar al 3 en raya... aunque seguro que hay alguien que le da usos más profesionales.
  • Soundation, ahora le toca al sonido, si supiera algo de componer bases de canciones probablemente le daría algo de utilidad a esta web, por el momento seguiré jugando a componer ruiditos en mis ratos de ocio-aburrimiento. Pues este tiene muchas opciones, una gran librería de sonidos gratuitos, teclado, posibilidad de grabar voz, y efectos.

martes, 11 de noviembre de 2014

Un poco de seguridad y limpieza

Seguro que a más de uno le ha pasado, nos damos cuenta de que hemos instalado un malware y buscamos una herramienta en Internet para eliminarlo, nos descargamos una que nos promete limpiar nuestro PC, el del vecino y a Maroto el de la moto... Lo único que conseguimos es empeorar la situación, los ciberdelincuentes saben que buscaremos eso, y crean herramientas falsas de limpieza ocultas tras este software.

A continuación os presento una serie de herramientas gratuitas para mantener nuestro PC limpio de virus, malware y basura innecesaria.
Pero antes os voy a dar unos pequeños consejos para ahorrarnos más de un disgusto:

- Mantened siempre vuestras aplicaciones actualizadas a su ultima versión, las actualizaciones no son sólo mejoras del software, también son mejoras a nivel de seguridad, solucionan grietas que pueden comprometer gravemente nuestra privacidad aunque ese software en concreto no contenga información privada.

- Mirad siempre lo que instaláis, leed bien durante el proceso de instalación y desconfiad SIEMPRE de la opción instalación rápida, o mejor dicho desconfiad de los instaladores de terceros como por ejemplo Softo... y compañía.

- No descargueis software pirata, la mayoría de ocasiones encontraremos su equivalente en software libre.

Y después de esto, lo prometido:

 -Anti-Malware (Malwarebytes): Nos busca y elimina el malware que encuentre en el sistema.

 -CCleaner: este limpia el PC de archivos innecesarios y nos limpia el registro de windows, guardad            siempre una copia de seguridad.

 -Antivirus AVG: Un antivirus muy potente, y gratuito.

martes, 12 de agosto de 2014

Focus - Protección contra fisgones

Seguro que alguna vez has querido enseñar una foto de tu móvil de tus ultimas vacaciones y han acabado examinándote toda la galería encontrando la parte oscura de esas vacaciones, o aquella foto que tienes ahí porque el cochino de tu colega te lo pasó por whatsapp...

Pues bien, la solución a nuestros problemas la trae Focus, una aplicación para mostrar sólo lo que tu quieres que vean, avisando si nuestro espectador le da al dedito para buscar y le avisa de que llegó el momento de devolver el teléfono a su dueño. Podemos introducir un PIN de seguridad para evitar que haga caso omiso del aviso.


El uso es sencillote, seleccionamos las fotografías que queremos mostrar en la galeria y compartimos con Focus.


En fin, una sencilla pero útil aplicación. 

Aviso: Evitar utilizar dentro de lo posible con madres y novias, puede provocar preguntas como ¿Tienes algo que ocultarme?


viernes, 8 de agosto de 2014

ES File Explorer (Compartir carpetas en Red)

Cada vez que quería ver alguna película, enseñar alguna foto escuchar algo de música en casa me pasaba lo mismo.. que si a ver donde está el pen, que si no encuentro el cable para enchufar el móvil, que si me da palo...
Solucionado, es algo fácil, no es nuevo, pero nunca me puse a mirar como.

La semana pasada me instalé en la Raspberry un centro multimedia, conectado en red a mi PC central y voilá, todo conectado. Y claro quise más, y si pudiera acceder desde mi móvil y ver películas, series, fotos o cualquier archivo que necesite?

ES File Explorer nos permite realizar una conexión a nuestras carpetas compartidas en nuestra red local de windows y linux a través de Samba




El proceso es sencillo, instalamos la aplicación, y una vez abierta seleccionamos explorar via LAN, y buscamos nuestro PC.

Para compartir una carpeta a través de windows deberemos seleccionar la carpeta, segundo botón del mouse y compartir. En permisos pondremos "Todos". Es posible que tengamos que, si no lo tenemos, debamos crear una contraseña de usuario desde windows para poder acceder a los archivos.






jueves, 24 de julio de 2014

Raspberry Pi (Encendido de un led por servidor)

Bueno, siguiendo con el anterior tutorial sobre como instalar el servidor Apache, PHP y MySQL. Hoy vamos a ver como crear una web propia desde la que podemos encender un led desde cualquier dispositivo conectado a interntet.
Si sustituimos ese led y ponemos un relé conectado a una lámpara de casa, tendremos un sistema domótico, y si lo conectamos a una bomba de agua podremos automatizar el regado de nuestras plantas...

Aquí tocaremos Python, Html y Php, si tenemos algo de idea de programación en estos lenguajes perfecto, tampoco será muy complicado ya que con unas nociones basiquisimas de ellos, nos arreglamos.
Es un proyecto sencillo, no una web cargada de estilos en css, colorines y demás.. eso ya cada uno.

Utilizaremos los pines de salida de la Raspbery para conectar el led, haremos un pequeño script en Python para su encendido, luego haremos un sencillo botón en Html enviando la información a otro script de Php que llamará al script de Python para finalmente encender el led, y todo esto cargado en nuestro servidor hará el led se encienda.


Esquema de conexión del led
                                                                                               
Después de esta pequeña introducción, empecemos.

Descargaremos la librería GPIO para Python desde Raspberry pi, con esta libreria podremos acceder a los pines GPIO:.

sudo wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.1.0.tar.gz
tar zxf RPi.GPIO-0.1.0.tar.gz
cd RPi.GPIO-0.1.0
sudo python setup.py install

Crearemos los scripts para el encendido y apagado, podemos hacerlos en un editor externo y luego ponerlos en la carpeta "var/www/", o bien desde el shell de Raspberry:

sudo nano /var/www/on.py 

En el editor introduciremos el siguiente código para el encendido del led, y guardamos.
 
import RPi.GPIO as GPIO
GPIO.setup(7, GPIO.OUT);
GPIO.output(7, False);

Y para el apagado, creamos otro script:

sudo nano /var/www/off.py 

Introducimos:

import RPi.GPIO as GPIO
GPIO.setup(7, GPIO.OUT);
GPIO.output(7, True);

Creamos el archivo html, si entráis en "index.html", veréis que ya hay algo escrito, es la página de prueba de Apache, borramos sin problema.


sudo nano /var/www/index.html


<html><head> Control de led por servidor:
<form action="" method="post">
<input checked="" name="led" type="radio" value="1" />On
<input name="led" type="radio" value="2" />Off
<input name="Ok" type="submit" value="enviar" />
</form>
<?php
if ($_POST['on'] {
exec("sudo python /var/www/on.py")
}else{
exec("sudo python /var/www/off.py")
}
</head></html>

Debemos otorgar permisos para poder utilizar el comando exec de PHP, lo haremos de la siguiente forma:


sudo chmod 775 /var/www/
sudo usermod -a -G www-data pi
sudo visudo 
 
Agregamos una ultima linea:
www-data ALL=(root) NOPASSWD:ALL

Y reiniciamos el servidor:
sudo /etc/init.d/apache2 restart

Después de esto estaremos listos para probar el encendido y apagado del led desde cualquier pc, o incluso desde nuestro móvil, entrando a la dirección IP de nuestra Raspberry.
A partir de aquí, podríamos dejarlo más bonito diseñando un poco mejor la página, utilizando unas imágenes que muestren el estado actual del led. Por mi parte prefiero ver lo realmente necesario para funcionar, y luego perfilar hasta conseguir el diseño óptimo.

miércoles, 16 de julio de 2014

Raspberry ( Apache + PHP + MySQL)

Buenas a todos, en el siguiente tutorial mostraré cómo podemos configurar nuestro propio servidor web en Raspberry pi.

Para empezar, desde la linea de comandos de Raspbian, instalaremos Apache, que para quien no lo conozca es un servidor HTTP de codigo abierto y multiplataforma.

Una buena practica cada vez que vamos a instalar algo nuevo es comprobar que nuestros repositorios están actualizados.

sudo apt-get update 


Instalación

Empezamos instalando Apache:

sudo apt-get install apache2 apache2-doc apache2-utils

Y las librerias requeridas, entre ellas las de PHP:

sudo apt-get install libapache2-mod-php5 php5 php-pear php5-xcache

La conexión a la base de datos de MySQL:

sudo apt-get install php5-mysql

Instalamos MySQL, activando antes la interfaz loopback:

sudo ifup lo
sudo apt-get install mysql-server mysql-client


Comprobación

Desde cualquier navegador introducimos la IP de Raspberry, y nos tiene que salir una página con el título Its works!

Ahora comprobamos que funciona php, para ello crearemos un archivo de extension php en la carpeta "/var/www" Aquí pondremos siempre el contenido a mostrar desde el navegador.

sudo nano /var/www/test.php

Escribimos el siguiente texto y guardamos:

<?php phpinfo(); ?>


En el navegador de nuevo, introducimos nuestra IP seguida de "/test.php", y veremos que nos sale información sobre la version de PHP.






martes, 15 de julio de 2014

Solo Launcher



Los launchers por defecto suelen ser aburridos, poco personalizables, lentos y una de esas cosas que no solemos cambiar de nuestros terminales Android.

Pues bien, después de probar Solo Launcher, me quedo con él.

Rapido y ligero, bastante importante, sobre todo para los que tenemos un movil justito.
Podemos personalizar infinidad de cosas: temas, colores, tamaño de texto e iconos, tipos de menú.
Accesos directos con gestos, podemos elegir un gesto a realizar y lanzar la aplicación que nosostros queramos.
Ocultar aplicaciones, algunos encontrarán utilidad a esto...
Lo que también parece interesante es que trae un liberador de Ram a modo de widget, siempre ahí preparado para darle un respiro a tu terminal.
Y claro está, una aplicación que en su video presentación trae de fondo a AC/DC, pues se merece por lo menos ser probada. ;)

Los puntos malos, pues algunas funciones que hay que descargar y un acceso directo a la instalación de un juego.



Solo Launcher | Google Play Store

lunes, 14 de julio de 2014

Raspberry Pi. (Conectando remotamente)

En el anterior tutorial vimos como instalar Raspbian, ahora vamos a ver como conectarnos via  Secure Shell (SSH) en nuestra red local, algo realmente útil ya que nos evita tener que andar enchufando y desenchufando teclados, ratones, monitores...




VIA SSH

Primeramente configuraremos la Raspberry para poder realizar conexiones SSH.
Para ello entraremos en el menu de configuración de Raspbian:

Conectamos la Raspberry a un monitor y la encendemos.
La primera vez nos aparecerá el menu de configuración, si no introducimos nuestro usuario y contraseña cuando lo indique
User: pi
Password: raspberry
Y en el shell tecleamos:

sudo raspi-config


Nos aparecerá el siguiente menu:


Entramos en Advanced Options / SSH, lo dejamos como enabled y retrocedemos al menu principal.

Desde este menú podemos cambiar diferentes configuraciones que ya explicaré en otro post.
 
Es más que recomendable cambiar la contraseña que trae por defecto por cuestiones de seguridad, para ello entraremos en Change User Password, y seguimos las instrucciones.

Ahora debemos conocer la dirección IP de de la Raspberry para poder entrar remotamente, para ello debe estar conectada a la red.

Desde el shell tecleamos:

ifconfig

Ahi nos aparecerá la información de la conexion, apuntaremos la ip.

Una vez hemos configurado el SSH y sabemos la dirección, podemos desconectarla del monitor y dejarla simplemente conectada a la corriente y cable de red.

Desde windows nos descargaremos la aplicación PuTTY desde este enlace.





En Host Name:
  ip@vuestraip

Y pulsamos Open y ya estaremos dentro.



Via VNC




Desde aquí no podremos acceder a ningún contenido visual, para ello nos deberiamos descargar el VNC, lo encontrareis en este enlace https://www.realvnc.com/download/vnc/latest/


Ahora desde el shell de Raspberry:

sudo apt-get install tightvncserver
Nos pide que una contraseña para iniciar sesión, introducimos 2 veces.

Hecho esto nos quedará abrir el programa y configurar la sesión:

 tightvncserver :1 -depth 24 -geometry 800x600

Una breve descripción de los comandos utilizados:

":1 -name sesion1" El nombre de la sesión, podemos tener hasta 4 sesiones, cambiamos el número y ya está.

"-depth 24", es la profundidad del color, para un mejor rendimiento podemos utilizar "-depth 16"

"-geometry 800x600", la resolución de la pantalla.

Sólo nos queda conectarnos, abrimos VNC Viewer y ponemos la IP de la Rapberry indicando la sesión que hemos abierto, en nuestro caso :1.


Nos saldrá lo siguiente, y pulsamos continue.


Introducimos la contraseña que creamos al instalar tightvncserver.

Y ya estaremos en el modo gráfico de Raspbian.






sábado, 12 de julio de 2014

Raspberry pi. Primeros pasos (Instalación de SO)


Ya tenemos nuestra Raspberry pi, antes de comprarla hemos visto videos, leido tutoriales y visto cientos de proyectos divertidos para realizar... Y ahí la tienes delante de la mesa sin saber por donde empezar. Por lo menos es lo que me ocurrió a mi.




Bien, puedes ir pensando que quieres hacer, si quieres un centro multimedia, una televisión inteligente, un centro de videojuegos retro...  pero de momento vamos a trastear.

Le instalaremos el sistema operativo para ello, Raspbian es la opción que elegí, y no decepcionó:

Para ello necesitaremos:
     -Una tarjeta SD, se recomienda una de 8Gb o más.
     -Cable microusb, yo utilizo el cargador del movil.
     -Cable HDMI
     -Teclado y ratón.
     -TV
     -Y por supuesto la Raspberry pi.


Nos descargamos la última distribución de Raspbian.


http://downloads.raspberrypi.org/raspbian_latest









Si trabajamos en windows, nos descargaremos Win32 Disk Imager para poder grabar la imagen del sistema operativo en la SD.

1.- Descomprimimos la imagen en nuestro disco.
2.- Instalamos Win32 Disk Imager
3.- Insertamos microSd en el pc, y nos quedamos con la letra de la unidad.
4.- Abrimos el Disk Imager y seleccionamos la unidad.(1)
5.- Seleccionamos el archivo de imagen (2).
6.- Apretamos a write (3), y esperamos a que cargue la imagen a la micro.


Una vez finalizado podremos extraerla e introducirla en la Raspberry, conectarla a un monitor, conectar un teclado y comenzar a utilizarla.

Nombre de usuario: pi
Password: raspberry

Para entrar al modo grafico teclearemos:
startx



En el proximo tutorial, configuraremos Raspbian para entrar mediante SSH de forma remota.