jueves, 20 de junio de 2013

Snippets para Debian en Olinuxino A13-WIFI


OLINUXINO A13 WIFI

1. BASIC
-Descargar "A13 Advanced Debian 4GB card image with XFCE4" del apartado "Official Debian images by Olimex" en: https://www.olimex.com/wiki/Prebuilt_SD_card_images_running_debian
- Descargar http://sourceforge.net/projects/win32diskimager/ para grabar imagen en SDcard con Windows.
- Una vez introducida la SDcard e iniciado Debian, logearse con root/password.
- dpkg-reconfigure console-setup (para configurar teclado español. Elegir UTF8)
- startxfce4

Notas:
1. Cerciorarse de la fecha que tenemos (#hwclock) de lo contrario nos dará KEYEXPIRED u otros tipos de errores cuando queramos instalar paquetes
# date --set "2000-02-25 16:25"
# hwclock --set --date="2000-02-25 16:25"


2. LOGIN AUTOMÁTICO EN TERMINAL
# nano /etc/inittab
Comentar 1:2345:respawn:/sbin/getty 38400 tty1
e insertar 1:2345:respawn:/bin/login -f root tty1 </dev/tty1 >/dev/tty1 2>&1


#3. LOGIN AUTOMÁTICO EN X (no comprobado)
nano /etc/lightdm/lightdm.conf
autologin-user=root
autologin-user-timeout=0


4. WIFI
- # iwconfig // para ver número de wlan asignado
- # nano /etc/network/interfaces
1. cambiamos por el wlan correcto (en auto y iface) y decomentamos auto.
2. //WPA
wpa-ssid RED
wpa-psk PASSW
2. //WEP
wireless-essid RED
wireless-key s:XXXXXXXXXXXXX # Para una cadena ASCII
wireless-key XXXXXXXXXXXXX # Para una cadena hexadecimal
o
#iwconfig wlan0 essid nombre-punto-de-acceso
#iwconfig wlan0 key clave-de-acceso
#iwconfig wlan0 key s:clave-de-acceso (SI ASCII)
3. grabar y salir.
- #service networking restart (o /etc/init.d/networking stop y /etc/init.d/networking start)


5. IP
// IP DINAMICA
- #dhclient -r
- #dhclient wlanX
// IP FIJA
ifconfig wlan0 192.168.1.9 netmask 255.255.255.0
route add default gw 192.168.1.1
echo nameserver 192.168.1.1 > /etc/resolv.conf


6. NUEVO USUARIO PARA USAR VLC (CREADO DE FÁBRICA)
#sudo
#adduser vlc
#chmod 777 /dev/video* (Debe estar la cámara conectada)
#su vlc
#cvlc v4l2:// :v4l2-vdev=”/dev/video0″ :v4l-adev=”/dev/null” –sout 
‘#transcode{vcodec=mpg1,vb=1024,width=320,height=240}:standard{access=http,mux=ogg,dst=:8080}’

'#transcode{vcodec=h264,venc=x264,scale=0.75,vb=512}:std{access=http,mux=ps,dst=/stream.mp4}'



7. REPOS

#apt-get update
#nano /etc/apt/sources.list y añadir deb http://ftp.es.debian.org/debian/ sid main contrib non-free
#apt-get update
#apt-get dist-upgrade


8. ERROR DE GPG AL HACER APT-GET UPDATE. NO_PUBKEY.
# gpg --keyserver pgpkeys.mit.edu --recv-keys LLAVE
# gpg -a --export LLAVE | apt-key add -

Notas:
1. En /root/.gpg/gpg.conf añadir allow-non-selfsigned-uid
2. Comprobar hora del sistema (Notas del paso 1)
3. Usar #apt-key list y #apt-key del KEY para listar o borrar las llaves actuales.


#9. CHROME (no comprobado)
# apt-get update
# apt-get install synaptic
Desde synaptic instalamos chromium-browser


10. SERVIDOR APACHE
# apt-get install apache2 php5 libapache2-mod-php5

Notas:
1. Al entrar con el navegador en http://A13_IP mostrará el contenido que se tenga en /var/www y podremos tener un index.php que use por ejemplo <?php shell_exec("COMANDO") ?> para arrancar algún script SH o programa (permisos 777) y que active algún dispositivo conectado al A13 por puerto serie por ejemplo (PASO 14). Aunque este solo enviaría por serie, no recibiría datos. Para recibir datos seguir PASO 13.
2. Para reiniciar servidor apache /etc/init.d/apache2 restart
3. Otros ficheros de interés:
/etc/apache2/apache2.conf
/etc/apache2/mods-available/php5.conf
/etc/php5/apache2/php.ini 



11. TEST ACELERACIÓN GRÁFICA
#apt-get install mesa-utils
#glxinfo | grep rendering
#glxgears


12. WEBGL EN ICEWEASEL
# apt-get install libosmesa6 mesa-utils
En iceweasel > about:config > webgl.osmesalib /usr/lib/arm-linux-gnueabihf/libOSMesa.so.6


13. 
RS232 (UART1) POR WEB MEDIANTE NODEJS.  Disponible en SID (unstable)
- INICIAR EN PASO 7 y 10
# apt-get install nodejs npm
# npm install -g socket.io
# npm install -g serialport@1.0.0 (Esta versión, de lo contrario al compilar con node-gyp dará problemas)
# npm install -g node-gyp
# ln -s /usr/bin/nodejs /usr/bin/node 
# cd /usr/local/lib/node_modules/serialport (compilamos serialport)
# node-gyp clean
# node-gyp configure
# node-gyp build
(node-gyp rebuild = clean,configure y build)
(Para desinstalar: /usr/local/lib/node_modules# node-gyp uninstall serialport)
# cp /usr/local/lib/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.min.js /var/www
# cd /var/www
- Creamos archivo nodeServer.js e index.html con lo siguiente:
nodeServer.js
var sys = require('util');
var io = require('/usr/local/lib/node_modules/socket.io').listen(3400);
var serialport = require('/usr/local/lib/node_modules/serialport');
var SerialPort = serialport.SerialPort;

io.sockets.on('connection', function (socket) {
  socket.emit('newconnection', { hello: 'world' });

  socket.on('dataclient', function (data) {
    sys.puts('DATO CLIENTE '+data.theword) // escribir en la consola
    serial.write(data.theword);
  });
 
  socket.on('disconnect', function () {
    sys.puts('user disconnected');
    serial = undefined;
  });

    var serial = new SerialPort("/dev/ttyS0", {baudrate:9600});
    serial.on('open', function() {
        sys.puts('conectado a ttyS0');
    });
    serial.on('data', function(dat){
        var str = dat.toString();
        sys.puts('DATO SERIAL '+str);
        socket.emit('datatcp', { data: str });
    });
});

index.html
<html>
    <head>
        <title>NODE</title>
        <script id="stormEngineC" src="socket.io.min.js"></script>
    </head>
    <body style="background:#FFF">
        <script>
            var ws;
            openWebSocket = function(ip, port) {
                ws = io.connect('ws://'+ip+':'+port+'/');
             
                ws.on('newconnection', function(data) {
                    console.log(data);
                    document.getElementById('DIVID_webSocketStatus').innerHTML = "<span style='color:#00CC00'><b>CONECTADO A WEBSOCKET</b></span>";
                });
                ws.on('datatcp', function(data) {
                    console.log(data);
                    document.getElementById('DIVID_webSocketResponse').innerHTML = data.data;
                });
            }
            sendTX = function(word) {
            ws.emit('dataclient', { theword: word });
            }
        </script>
        <table border='0' cellpadding='15' cellspacing="0">
            <tr>
                <td>
                    <div id="DIVID_webSocketStatus"></div>
                    <script>
                    if ("WebSocket" in window) {

                    }else{
                    document.getElementById('DIVID_webSocketStatus').innerHTML = "<span style='color:#CC0000'>Navegador NO soporta WebSocket</span>";
                    }
                    </script>
                </td>
                <td id="TDID_webSocket" align="left" valign="top" style='width:200px;'>
                    <input type="text" id="INPUTID_ipWebSocket" value="192.168.0.9"/>
                    <input type="text" id="INPUTID_portWebSocket" value="3400"/>
                    <a href="#" onclick="openWebSocket(document.getElementById('INPUTID_ipWebSocket').value, document.getElementById('INPUTID_portWebSocket').value)">Conectar a servidor WebSocket</a>
                </td>
            </tr>
            <tr>
                <td id="TDID_webSocketResponse">
                    <div id="DIVID_webSocketResponse"></div>
                </td>
                <td>
                    <input type="text" id="INPUTID_sendTX" value="L"/>
                    <button type="button" onclick="sendTX(document.getElementById('INPUTID_sendTX').value)">SEND</button>
                </td>
            </tr>
        </table>

    </body>
</html>

# nodejs nodeServer.js (desde /var/www)
- Entramos con el navegador en http://A13_IP


14. RS232 (UART1)
- Nos situamos en la carpeta de nuestro proyecto.
# wget http://www.teuniz.net/RS-232/RS-232.tar.gz
# tar -xzvf RS-232.tar.gz
- Creamos main.c con lo siguiente:
Copiar el código de http://robertereter.blogspot.com.es/2012/11/rs232-c-linux.html
- Compilamos y ejecutamos enviando letra L en ASCII:
# gcc main.c rs232.c -Wall -o test
# ./test 0x4C


Notas:
- # dmesg | grep tty // lista los puertos serie. /dev/ttyS0 (COM1 on windows)
- Podemos ejecutar "test" desde PHP con system("/var/www/test 0x46 2>&1"); y dando permisos:
# chmod 777 /dev/ttyS0
# chmod 777 test


15. FACE DETECTION CON NODE-OPENCV
- INICIAR EN PASO 7
# apt-get install nodejs npm
# npm install -g opencv@0.2.0 (la 0.3.0 da error)
- Creamos archivo nodeServerCam.js en el directorio de nuestro proyecto con lo siguiente:
nodeServerCam.js
var cv = require('/usr/local/lib/node_modules/opencv');

var camera = new cv.VideoCapture(0);
frame = function() {
    camera.read(function(err, im) {
        im.save('/tmp/cam.png',function(){
     
        // face detect
        cv.readImage("/tmp/cam.png", function(err, img) {
            img.detectObject(cv.FACE_CASCADE, {}, function(err, faces){
                for(var i=0, f=faces.length; i < f; i++) {
                        var x = faces[i];
                        img.ellipse(x.x + x.width/2, x.y + x.height/2, x.width/2, x.height/2);
                   
                }
                //serial.write(data.theword); //Ver PASO 13
                img.save("/tmp/camE.png", function(){frame();});
            })
        });
        });
    });
};
frame();
#chmod 777 /dev/video* (Debe estar la cámara conectada)
# nodejs nodeServerCam.js


16. WIFI TOOLS
# apt-get install aircrack-ng reaver










SCRIPT SH PARA AUTOGRABAR CON WEBCAM CONECTADA AL ARRANCAR Y EMITIR POR ETHERNET CON VLC
- INICIAR EN PASOS y 2
- nano /etc/init.d/startWebCam.sh
#!/bin/sh
ifconfig wlan7 down
ifconfig eth2 up
ifconfig eth2 192.168.0.9 netmask 255.255.255.0
route add default gw 192.168.0.1

chmod 777 /dev/video*


ping -c 1 192.168.0.1

if [ $? -eq 2 ]; then {
echo inet is not ready;
} else {
echo inet is ready;
su vlc -c 'cvlc v4l2:// :v4l2-vdev=”/dev/video0″ :v4l-adev=”/dev/null” –sout 
"#transcode{vcodec=mpg1,vb=1024,width=320,height=240}:standard{access=http,mux=ogg,dst=:8080}"; ';
echo 1 > /sys/devices/virtual/misc/sun4i-gpio/pin/pg9;
} fi

- nano /etc/rc.local (para lanzar al inicio)
sh /etc/init.d/startWebCam.sh &









CONNECTING WEB CAMERA TO A13-OLINUXINO FOR VIDEO STREAMING

DESCARGAR TOOLCHAIN GCC PARA ARM
- #apt-get install gcc-4.6-arm-linux-gnueabi ncurses-dev uboot-mkimage build-essential git
Fuentes: https://www.olimex.com/wiki/Build_Bootable_SD_Card_with_Debian

viernes, 19 de abril de 2013

Amplificador operacional modo inversor y no inversor. Cálculo de resistencias online.

Amplificador operacional en modo inversor y no inversor. Cálcula el valor de la ganancia introduciendo el valor de las resistencias. Clickea encima para ver la simulación.

INVERSOR


Ganancia para un amplificador inversor:
R1:Ohm
R2:Ohm
Gain = -(R2/R1) =

NO INVERSOR


Ganancia para un amplificador no inversor:
R1:Ohm
R2:Ohm
Gain = 1+(R2/R1) =

Frecuencia de corte en filtro paso bajo y paso alto

Cálculo online de la frecuencia de corte en un filtro activo de paso bajo y un filtro activo de paso alto:

FILTRO PASO BAJO

Esquema de un filtro paso bajo

R1:Ohm
R2:Ohm
C:F
Cut-off = 1.0/((2.0*Math.PI)*(R2*C)) = >=Hz
Gain = -R2 / R1 =

FILTRO PASO ALTO

Esquema de filtro paso alto

R1:Ohm
R2:Ohm
C:F
Cut-off = 1.0/((2.0*Math.PI)*(R1*C)) = <=Hz
Gain = -R2 / R1 =

miércoles, 20 de marzo de 2013

JAVA SNIPPETS


NOTAS:
- CHROME USA UN JRE 32 bits.
- EN CASO DE PROBLEMAS CON JAVA DESINSTALAR TODO DE ESTE.
- MATAR PROCESO DE JAVA AL RECOMPILAR LA CLASE.



CREAR UNA LLAVE EN ALMACÉN DE CLAVES

cd PROJECTFOLDER
keytool -genkey -keystore myKeystore -alias myself
keytool -selfcert -validity 365 -keystore myKeystore -alias myself
keytool -list -keystore myKeystore // PARA CHEQUEAR LA KEY CREADA

javac JavaFiles.java // COMPILAMOS UNA CLASE
jar -cf test.jar JavaFiles.class // CREAMOS UN JAR Y AÑADIMOS LA CLASE
jarsigner -keystore myKeystore test.jar myself // SIGNEAMOS EL JAR

EN EL HTML
<object type="application/x-java-applet" height="300" width="550" id="appletFiles">
    <param name="archive" value="test.jar" />
    <param name="code" value="JavaFiles.class" />
    Applet failed to run.  No Java plug-in was found.
</object>
<script>
    document.getElementById('appletFiles').openAndReadFile("E:\\");
</script>

SI TRABAJAMOS LOCALMENTE Y QUEREMOS ACCESOS A TODOS LOS DISCOS MODIFICAMOS EL FICHERO Java\jre7\lib\security\java.policy AÑADIENDO permission java.security.AllPermission;

martes, 26 de febrero de 2013

EasyPHP acceso local desde diferentes ordenadores (Windows)

Editar httpd.conf de EasyPHP
Sustituir Listen 127.0.0.1:80 por Listen *:80

- Abrir propiedades de la conexión de area local -> Opciones avanzadas -> Configuración de Firewall -> Opciones avanzadas -> Configuración de conexión de red local -> Permitir servicio HTTP

- Se puede acceder desde otro ordenador al servidor escribiendo la IP del servidor en un navegador.

sábado, 24 de noviembre de 2012

C OPENCV 2.4.3 LINUX


INSTALAMOS LAS DEPENDENCIAS NECESARIAS
# su
# apt-get install build-essential
# apt-get install cmake
# apt-get install pkg-config
# apt-get install libpng12-0 libpng12-dev libpng++-dev libpng3
# apt-get install libpnglite-dev libpngwriter0-dev libpngwriter0c2
# apt-get install zlib1g-dbg zlib1g zlib1g-dev
# apt-get install pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools
# apt-get install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs
# apt-get install ffmpeg libavcodec-dev libavcodec52 libavformat52 libavformat-dev
# apt-get install libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev
# apt-get install libxine1-ffmpeg libxine-dev libxine1-bin
# apt-get install libunicap2 libunicap2-dev
# apt-get install libdc1394-22-dev libdc1394-22 libdc1394-utils
# apt-get install swig
# apt-get install libv4l-0 libv4l-dev
# apt-get install python-numpy
# apt-get install libpython2.6 python-dev python2.6-dev
# apt-get install libgtk2.0-dev pkg-config


DESCARGAMOS E INSTALAMOS OPENCV
# su
# cd /home/user

# wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.3/OpenCV-2.4.3.tar.bz2/download

# tar -xvf download
# cd OpenCV-2.4.3
# mkdir release
# chmod -R 777 release
# cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..
# make (dura un poco bastante)
# make install

PREPARAMOS PATH PARA LA COMPILACIÓN
# su
# gedit /etc/ld.so.conf.d/opencv.conf

-añadimos esto:
/usr/local/lib
-guardar y salir
# ldconfig -v

gedit /etc/bash.bashrc

-añadimos esto al final del documento:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
-guardar y salir

EJECUTAR LOS EJEMPLOS EN PYTHON DE OPENCV
# su
# cd /home/user/OpenCV-2.4.3/samples/python
# ./contours.py

COMPILAR LOS EJEMPLOS EN C DE OPENCV
# su
# cd /home/user/OpenCV-2.4.3/samples/c
# chmod +x build_all.sh
# ./build_all.sh

- probamos uno
# ./facedetect –cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" –scale=1.5 lena.jpg

COMPILAR CON C
Creamos archivo main.c para nuestro proyecto y agregamos estos includes al inicio:
#include "opencv2/highgui/highgui.hpp"



/proyecto# gcc -ggdb `pkg-config --cflags opencv` -o test main.c `pkg-config --libs opencv`
/proyecto# ./test