Translate

domingo, junio 11, 2017

Orange PI 2G IoT - Bluetooth 2.1 HOWTO, Como usarlo


Para poder usar la función de bluetooth 2.1 en nuestra opi iot 2g

1.Debemos instalar las utilidades para bluetooth :
     apt-get install bluez-tools
2.Debemos compilar el siguiente programa:
                  git clone https://github.com/RDA8810/RDA5991_BT_patchram
                  gcc bt_init.c -o bt_init
                      ./bt_init
                      Ahora Iniciamos el controlador:
                         hciattach -s 921600 /dev/ttyS1 any 921600 flow

         
3.para Emparejar dispositivos (todavía probando):
                                     $bluetoothctl
                                       [bluetooth]# power on
                                      Changing power on succeeded
                                     [bluetooth]# discoverable on
                                     Changing discoverable on succeeded
                                     [bluetooth]# pairable on
                                    Changing pairable on succeeded
                                     [bluetooth]# agent NoInputNoOutput
                                     Agent registered
                                    [bluetooth]# default-agent 
                                     Default agent request successful
                 

             
                  

sábado, mayo 20, 2017

Salidas GPIO Orange PI 2G IoT



Salidas GPIO Orange PI 2G IoT


En el anuncio de la Orange Pi 2G IoT dicen  "40 pins Header Compatibe witch Raspberry pi B+"
Voy a comparar los interfaces.

1.Orange Pi 2G IoT, SoC RDA8810:




Probando comunicación con los pins GPIO (pruebas, gracias a la ayuda del grupo de Telegram):

1.Bajar ultima distro, yo uso Ubuntu Server:

http://www.orangepi.org/downloadresources/

2. Aplicar modulo GPIO:

        #cd /lib/modules/3.10.62-rel5.0.2/kernel/drivers/gpio
        #insmod gpio-OrangePiRDA.ko

3. Con el comando dmesg vemos el log y como queda aplicado el modulo:
                [ 1299.883361] GPIO name B24
                [ 1299.883789] GPIO_INIT finish used!

4.De momento han activado un pin (el 7 que corresponde con el GPIO_B24), aparece tras aplicar el modulo del punto numero 2, y está en /sys/class/gpio_OrangePi/ .Si queremos encender / apagar un led debemos usar el pin GPIO numero 7 (GPIO_B24):

             

Encendio: /sys/class/gpio_OrangePi/B24# echo "1">data

Apagado:/sys/class/gpio_OrangePi/B24# echo "0">data




NOTA IMPORTANTE (otra forma de trabajar con los gpio de esta placa): 

Gracias al trabajo de Reinhard  http://ec.hobbykompetenz.de/index.php/2017/06/07/gpio/ también se puede trabajar sobre los puertos GPIO sin la carga del modulo GPIO en memoria en tal caso para encender/apagar el led sería usando el pin 7 de la placa (GPIO_B24) que en el sistema de archivos es gpio56:
Hay que habilitar en el sistema de archivos el puerto GPIO al pin 7 de la placa:
echo "56" > /sys/class/gpio/export

Apagar LED:  echo "in" > /sys/class/gpio/gpio56/direction
Enceder LED1: echo "out" > /sys/class/gpio/gpio56/direction

Para consultar el estado de entrada/salida del puerto: cat  cat /sys/class/gpio/gpio56/value

He realizado un script para que parpadee el LED (blink.sh):

#!/bin/sh

echo 56 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio56/direction

while true
do
        echo 1 > /sys/class/gpio/gpio56/value
        sleep 1
        echo 0 > /sys/class/gpio/gpio56/value
        sleep 1
done





domingo, mayo 07, 2017

Conexión por red de datos movil 2G, 3G y 4G tunel inverso por SSH, usando Orange Pi 2G IoT


Tipo Conexión 2: Usando SSH, tunel inverso:

Orange Pi (equipo1) ---P1234--router (ip publica) --P22-----Raspberry Pi (equipo 2)
                                     <------p2222:localhostp22---->
En mi afán de tener conexión ssh por red movil (uso freedompop), he probado esta conexión ssh y asi poder usar la conexión ssh a mi Orange Pi 2G IoT remota sin ip publica.

Esta forma es algo mas complicada que la anterior pero es mucho mas rapida y bajo mi punto de vista se comporta bastante mejor:

1 Necesitamos tener nuestra Orange Pi 2G IoT y otro equipo remoto que hará las veces de ssh inverso, yo uso una raspberry pi, asi que en adelante Llamaré al equipo 1 Orange pi (remoto) y equipo dos lo llamare Raspberry pi (equipo local, detras de mi router).

2.Lo primero es hacer un mapeo de puertos en nuestro router (NAT) de tal marera que toda conexion entrante por nuestra ip pública al puerto 1234 vaya directamente al puerto 22 de nuestra lan interna:

192.168.1.100TCP&UDP221234

3En la raspberry pi (equipo 2) debemos disponer de un usuario con acceso ssh, este usuario lo incluiremos en el siguiente fichero alojado en la Orange pi (equipo 1):

/etc/ssh/sshd_config

Lo editamos e incluiremos al principio del mismo al usuario :

AllowUsers pi

Podemos hacer pruebas desde la orange pi para probar que podemos logearnos en la raspberry pi

ssh pi@IP_PUBLICA_NUESTRO_ROUTER -p 1234


Luego instalaremos  sshpass en la Orange Pi. Sshpass evita la solicitud de contraseña ssh interactiva para que la conexión se pueda establecer automáticamente.

sudo apt-get install sshpass

Necesitamos crear el siguiente script que iniciará la conexión inversa entre nuestra orange Pi (equipo 1) y la raspberry Pi (equipo 2):

#!/bin/bash

REMOTE_PORT=1234
REMOTE_ADDRESS=pi@IP_PUBLICA_NUESTRO_ROUTER
PASSWORD="password_usuario_pi"

sshpass -p "$PASSWORD" \
ssh -o ServerAliveInterval=60 \
    -o ServerAliveCountMax=2 \
    -o StrictHostKeyChecking=no \
    -o UserKnownHostsFile=/dev/null \
    -o ConnectTimeout=15 \
    -N -R 2222:localhost:22 $REMOTE_ADDRESS -p $REMOTE_PORT

Desde la raspberry pi (equipo 2) ya podemos lanzar el siguiente comando para logearnos en Orange Pi (equipo 1):

ssh UsuarioOrangePi@localhost -p 2222


Ya está, hemos conseguido establecer un tunel ssh entre las dos máquinas y acceder la la Orange Pi (equipo 1) por red de datos 2G, GPRS sin necesidad de que nuestro operador nos de una IP pública.
Por supuesto que realmente queremos que la Orange  Pi (equipo 1) inicie la conexión automáticamente. Así que hay que incluir la llamada anterior en un bucle y añadir una línea @reboot en el crontab para ejecutar este script en el inicio (creamos el script reverse_ssh.sh con el siguiente código):

#!/bin/bash

FWD_PORT=1234
WAIT_SECONDS=60

if [ "$#" != "3" ]; then
 echo "Maintain a reverse ssh connection, forwarding port $FWD_PORT on the remote machine."
 echo "If the connection fails or is dropped, wait $WAIT_SECONDS seconds and retry."
 echo "Usage: $(basename $0) [remote_user@]remote_server port password"
 echo "Then, on the remote ssh server: ssh $USER@localhost -p $FWD_PORT"
 exit
fi

REMOTE_ADDRESS=$1
REMOTE_PORT=$2
PASSWORD=$3

# By default the tunnel never seems to timeout. This is bad because if the connection to the
# server has been established once, then the server disconnects (link down, or maybe it's a laptop
# that doesn't run 24/7), it could never be re-established. So it's important to set a timeout for
# the tunnel. Note that keepalive is handled transparently by ssh; it does not mean any payload data
# has to be sent through the tunnel at these intervals.
SERVER_ALIVE_INTERVAL=60
SERVER_ALIVE_COUNT_MAX=2

while true; do
 sshpass -p "$PASSWORD" \
 ssh -o ServerAliveInterval=$SERVER_ALIVE_INTERVAL \
 -o ServerAliveCountMax=$SERVER_ALIVE_COUNT_MAX \
 -o StrictHostKeyChecking=no \
 -o UserKnownHostsFile=/dev/null \
 -o ConnectTimeout=15 \
 -N -R $FWD_PORT:localhost:22 $REMOTE_ADDRESS -p $REMOTE_PORT
 sleep $WAIT_SECONDS
done


Ahora debemos incluir esta entrada en crontab:

@reboot ./reverse_ssh.sh pi@IP_PUBLICA_NUESTRO_ROUTER 1234 passwordUsrPi


Hay que tener en cuenta que despues de reiniciar la Orange Pi (equipo 1) debemos  esperar hasta un minuto (o cualquier intervalo que hayamos elegido) antes de establecer la conexión.

Nota: Para hacer que nuestra orange pi Iot conecte automaticamente a nuestro proveedor sin intervenir nada mas simple que editar el fichero /etc/network/interfaces y agregar lo siguiente:

auto ppp0
iface ppp0 inet wvdial

sábado, mayo 06, 2017

Tunel Entre Orange Pi 2G IoT y servidor netcat remoto - SSH por GPRS -

Acceder a la Shell de nuestra Orange Pi 2G IoT mediante red de datos GPRS




Tipo conexión 1: Usando NetCat:
 El principal problema es que carecemos de IP pública en nuestras conexiones de datos moviles.
Para acceder a una shell remota, necesitamos dos equipos, el equipo 1 será nuestro servidor y el equipo 2 será nuestra Orange Pi 2G IoT conectada a internet por GPRS, yo uso los datos de freedompop (gratis).
Usaremos en ambos equipos el software netcat, si no disponemos de el lo instalaremos en ambos equipos:

$sudo apt-get install netcat

 Voy a usar el puerto 87, ya que es uno de los miles que están disponibles:

1- Lo primero es hacer un mapeo del puerto 87 en nuestro router de tal manera que apunte por TCP y UDP a nuestro servidor netcat:


2- Equipo 1 en nuestro servidor, ejecutar:

$ sudo nc -vlp 87



3-Equipo 2:, nuestro cliente, en este caso nuestra Orange Pi conectada a internet por GPRS, yo uso los datos de Freedompop:
Ejecutamos el siguiente comando:
 $bash -i &> /dev/tcp/Ip_Pública_Servidor_remoto/87 0>&1




De inmediato en nuestro equipo servidor podremos acceder a la shell de nuestra Orange Pi, para este caso, mediante un tunel de datos GPRS y sin necesidad de usar una IP pública:



Ahora solo falta crear un watchdog que nos permita automatizar esta conexión:
            1. Vigilar la conexión ppp0 y lanzarla de nuevo en caso de no estar disponible
            2.Conectar por netcat a nuestro servidor para abrir un tunel a la shell de orange pi 2G IoT

La aplicación de este tunel es muy útíl de cara a acceder a una vivienda remota por ejemplo, así dispondremos de acceso a todas las funciones que deseemos dar a nuestra orange pi 2G IoT: Sensores de temperatura humedad, gases, video vigilancai, termistato, etc... las impicaciones son muy elevadas.


jueves, mayo 04, 2017

Orange Pi 2G IoT: Automatizando tareas. (autoconexión con operador)

Automatizando la conexión con nuestro operador para que se establezca en el arranque del sistema:

1. Editamos el fichero de interfaces para que espere el nuevo dispositivo:

Editamos con vim:
vim /etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

#MODEM_GPRS
allow-hotplug ppp0
iface ppp0 inet wvdial

Salimos salvando con Esc+crtl+x

2.Creamos un script en init.d para que haga la llamada a wvdial en cada inicio:

Editamos con vim:
vim /etc/init.d/wvdial

#!/bin/sh
#Le pedimos al script que espere 15 segundos para asegurarnos de que el
#el modem GPRS de la Orange Pi 2G Iot ya estara activo en el sistema

sleep 15

case "$1" in
  start)
    echo "Connectando a Freedompop..."
    # aplicacion que usaremos para conectar
    /usr/bin/wvdial
    ;;
  stop)
    echo "Disconnectando de Freedompop..."
    # aplicacion qeu queremos parar
     /sbin/ifconfig ppp0 down
    ;;
  *)
    echo "Usar: /etc/init.d/wvdial {start|stop}"
    exit 1
    ;;
esac

Salimos salvando con Esc+crtl+x

-Lo dejamos como ejecutable para que podamos usarlo también desde la shell:
sudo chmod 777 /etc/init.d/wvdial

-Para activar el script basta con teclear un ‘update-rc.d wvdial defaults’.
-Si queremos lanzarlo desde la shell como servicio hacemos:
 service wvdial start
  Ha yque esperar a que nos dé conexión, de esta manera dejamos la conexión ppp0 funcionado en segundo plano.
-Si queremos pararlo desde la shell como servicio hacemos:
service wvdial stop
-Por ultimo y muy importante, si queremos comprobar su estado (log de conexión)
  systemctl status wvdial.service
-También podemos ver si está activa la conexión ppp0 con un ifconfig.
- Ahora sólo necesitáis reiniciar, apagar, encender, dejar activo, volver a apagar, y así hasta que decidáis que ya lo habéis probado lo suficiente para confiar en que la conexión se restablecerá en cada arranque.

Orange Pi 2G IoT Ayuda y referencias


Orange Pi 2G IoT Referencias


Grupo de Telegran Orange Pi 2G IoT: 
Quitar el guion  t.m-e, es para evitar spam:

https://t.m-e/joinchat/AAAAAEHxVPlYqktFzY6Sxg


Links para trabajar con la Orange Pi 2G IoT desde cero:


1. Las descargas de Sistemas Operativos y Android SDK:

http://www.orangepi.org/downloadresources/
          -Android-Tcard
           -Ubuntu Server_For_OrangePi 2G_IOT
           -2G-IOT_Android SDK source Code
           -Android-Nand For OrangePi 2G-IoT
           -Armbian_Orangepi2g-iot


2. Manual muy completo para empezar a trabajar con la Orange Pi:

https://mega.nz/#!ds0BEB6Q!wYNc_gpWlzmt_P4eXCS5Ahr0lICTsUOFPnviib3z5IA

3.- Trabajar con la Orange Pi 2G IoT

3.1 Configurar modem GPRS :
http://surfero.blogspot.com.es/2017/04/freedompop-orange-pi-2g-iot.html



3.2 Orange Pi 2G IoT: Automatizando tareas. (autoconexión con operador):
http://surfero.blogspot.com.es/2017/05/orange-pi-2g-iot-automatizando-tareas.html

3.3 Una carcasa que he realizado para esta placa:
http://www.thingiverse.com/thing:2298826


3.4 Configurar la Conexión USB ---TTL


3.5 Tunel Entre Orange Pi 2G IoT y servidor netcat remoto - SSH por GPRS -
http://surfero.blogspot.com.es/2017/05/tunel-entre-orange-pi-2g-iot-y-servidor.html

                             
3.6: Otra forma de conectar por la red de datos a nuestra Orange Pi 2G IoT, en este caso con tunel
       inverso por SSH:
http://surfero.blogspot.com.es/2017/05/conexion-por-red-de-datos-movil-2g-g.html


4 Salidas GPIO Orange Pi 2G IoT
http://surfero.blogspot.com.es/2017/05/salidas-gpio-orange-pi-2g-iot.html

5.Usar el puerto USB en linux:

Hay que poner los swiches 1234 en OFF y 5678 en on:

6. Usar la función de bluetooth en nuestra tarjeta:
  http://surfero.blogspot.com.es/2017/06/orange-pi-2g-iot-bluetooth-21-howto.html

7.Orange Pi 2G IoT - Ubuntu 16.04 (basado en armbian)
http://surfero.blogspot.com.es/2017/06/orange-pi-2g-iot-ubuntu-1604-basado-en.html









jueves, abril 27, 2017

Usar datos gratis para proyectos IoT FreedomPop y Orange Pi 2G IoT (también Simyo).


Configuración PPP, freedompop y tarjera Orange Pi 2G IoT:

He preparado este pequeño tutorial para poder usar los datos de conexión gratuita de freedompop con esta pequeña tarjeta de Orange Pi, comprada en aliexpress por unos 12€.
La versión usada de Linux es Ubuntu Server, Link de descarga (http://www.orangepi.org/downloadresources/) también funcionará en Armbian, aunque no lo he probado.

Es necesario registar el modem de la Orange Pi 2G IoT en la red GSM de movistar (de momento es la predeterminada por freedompop). Sin este paso no se puede registrar en su red.

1.Instalar el software necesario:

#sudo apt-get install ppp wvdial

2. Configurar ficheros:

        2.1  fichero:  /etc/wvdial.conf para Freedompop:
[Dialer defaults]
ISDN = 0
Modem Type = Analog Modem
Phone = *99***1#
Stupid Mode = 1
Dial Command = ATDT
Modem = /dev/modem0
Baud = 460800
Init1 = AT+COPS=0
Init2 = AT+CFUN=1
Init3 = AT+CGATT=1
Init4 = AT+CGDCONT=1,"IP","freedompop.foggmobile.com","",0,0
Init5 = AT+CGACT=1,1
Username = " "
Password = " "


          2.2 fichero  /etc/ppp/peers/wvdial
                   noauth
                   name wvdial
                   # Descomenta esta linea si quieres utilizar los DNS de Freedompop (son las DNS de google)
                  #usepeerdns
                 defaultroute
                  replacedefaultroute
           2.3 fichero /etc/ppp/options
                 comentar la linea lcp-echo-failure 4, si no la comentamos se desconectará cada 2 minutos.



3.Ejecutar wvdial, este es el log:

+CREG: 5
OK
--> Sending: AT+CGATT=1
AT+CGATT=1
+CGREG: 5
--> Sending: ATQ0
ATQ0
+CGATT:1
OK
--> Re-Sending: AT+CGATT=1
AT+CGATT=1
+CGATT:1
OK
--> Sending: AT+CGDCONT=1,"IP","freedompop.foggmobile.com","",0,0
AT+CGDCONT=1,"IP","freedompop.foggmobile.com","",0,0
OK
--> Sending: AT+CGACT=1,1
AT+CGACT=1,1
OK
--> Modem initialized.
--> Sending: ATDT*99***1#
--> Waiting for carrier.
ATDT*99***1#
CONNECT
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Thu Apr 27 08:45:06 2017
--> Pid of pppd: 4484
--> pppd: ú¶P{
--> Using interface ppp0
--> pppd: ú¶P{
--> local  IP address 10.xxx.xxxx.xxxx
--> pppd: ú¶P{
--> remote IP address 192.xxx.xxxx.xxxx
--> pppd: ú¶P{
--> primary   DNS address 8.8.8.8
--> pppd: ú¶P{
--> pppd: ú¶P{
--> Script /etc/ppp/ip-up run successful
--> Default route Ok.
--> Nameserver (DNS) Ok.
--> Connected... Press Ctrl-C to disconnect
--> pppd: ú¶P{


4. Podemos probar la comunicacion con una ping al puerto ppp0 y DNS de google:
Deveremos iniciar antes una nueva sesión ssh a la Orange Pi, o bien hacerlo como lo ago yo, usando 
el gestor de ssiones "tmux", creo que tengo el tutorial en este blog:

ping -I ppp0 8.8.8.8

Y el resultado es este:


root@OrangePi:~# ping -I ppp0 8.8.8.8

PING 8.8.8.8 (8.8.8.8) from 10.186.19.228 ppp0: 56(84) bytes of data.

64 bytes from 8.8.8.8: icmp_seq=1 ttl=58 time=836 ms

64 bytes from 8.8.8.8: icmp_seq=2 ttl=58 time=1071 ms

64 bytes from 8.8.8.8: icmp_seq=3 ttl=58 time=944 ms

64 bytes from 8.8.8.8: icmp_seq=4 ttl=58 time=1025 ms

64 bytes from 8.8.8.8: icmp_seq=5 ttl=58 time=548 ms

64 bytes from 8.8.8.8: icmp_seq=6 ttl=58 time=302 ms

64 bytes from 8.8.8.8: icmp_seq=7 ttl=58 time=2372 ms

....

Nota: si usamos Simyo la configuración de /etc/wvdial.conf es:

[Dialer Simyo]
ISDN = 0
Modem Type = Analog Modem
Phone = *99***1#
Stupid Mode = 1
Dial Command = ATDT
Modem = /dev/modem0
Baud = 460800
Init1 = AT+COPS=0
Init2 = AT+CFUN=1
Init3 = AT+CGATT=1
Init4 = AT+CGDCONT=1,"IP","orangeworld"
Init5 = AT+CGACT=1,1
Username = " "
Password = " "

Podemos elegir entre conectar con Freedomopop o Simyo, podemos etiquetar [Dialer freedompop] y [Dialer Simyo] luego, dependiendo de la Sim que tengamos insertada usar: wvdial freedompop para conectar con freedompop o wvdial Simyo para conectar con Simyo.



lunes, abril 24, 2017

Configurar modem GSM en la Orange Pi 2G IoT (Orange España)

Configurar modem GSM en la Orange Pi 2G IoT
Comentaros que necesitáis unos conocimientos más o menos básicos para poder seguir esto, pero vamos, está todo cortado y pelado.
Empezamos. Abrimos terminal.
sudo apt-get install  ppp wvdial

Hacemos
sudo vim /etc/wvdial.conf
Y metemos:
[Dialer defaults]
Modem = /dev/modem0
Baud = 30720000
Dial Command = ATDT
Init1 = ATE1
Init2 = AT+CGDCONT=1,"IP","internet","",0,0
FlowControl = CRTSCTS
Init3 = ATM0
Phone = *99#
Username = orange
Password = orange
Stupid Mode = 1
"internet" es donde va el nombre del APN, que en el caso de Orange es, precisamente ese, internet. El username y password de Orange son orange para ambos, si teneis otra compañía estos datos serán diferentes. De hecho, quizá estas configuraciones no funcionen para ellos. NOTA: Lo he probado exitosamente también con Vodafone con el APN "airtelnet.es" y como usuario y contraseña vodafone.
Hacemos
sudo vim /etc/ppp/peers/wvdial
y metemos:
hide-password
noauth
name wvdial
debug
usepeerdns
defaultroute
noipdefault
mtu 472
Ahora hacemos
sudo vim /etc/ppp/peers/wvdial-pipe
y metemos:
noauth
name wvdial
plugin passwordfd.so
defaultroute
replacedefaultroute
Hacemos, finalmente,
sudo wvdial
Y a volar!!!!!!!!!! Para ahora deberíais estar conectados. Si no obtenéis conexión, puede deberse a varias cosas. Podríais tener una conexión abierta de otra red (LAN, Wireless) mientras conectábais al móvil, luego la habéis cerrado para probar la conexión móvil, y ésta no funciona. Desactivad otras redes antes de conectar con el móvil.
También podrían ser las DNS, vamos a descubrirlo.
ping -w 3 www.google.es
Si os responde correctamente, es que estáis conectados. Si no, probad:
ping -w 3 8.8.8.8
Si os responde este, pero no el anterior, es que os fallan las DNS. La solución es sencilla:
sudo echo "nameserver 208.67.222.222" >/etc/resolv.conf
sudo echo "nameserver 208.67.220.220" >>/etc/resolv.conf
Con estos dos comandos hemos añadido las DNS de OpenDNS. Ahora todo debería funcionar correctamente.
Hay unas últimas consideraciones a hacer.
Ya lo hemos configurado todo, pero ¿cómo desconectamos? y ¿cómo volvemos a conectar?
Los procesos "sudo rfcomm connect 0" y "sudo wvdial" se cierran haciendo Ctrl+C en la consola donde se ejecutan. Otra forma para cerrar ambos es matarlos mediante
sudo killall wvdial pppd rfcomm
Para volver a conectar, podemos hacer un script. El primero que os propongo es "silencioso", "ciego":
sudo rfcomm connect 0 & sleep 5 && sudo wvdial
El segundo que os propongo abre dos pantallas de xterm mostrando los procesos (debéis tener instalado xterm; sudo apt-get install xterm):
echo -e 'sudo xterm -e rfcomm connect 0 & sleep 5 && sudo xterm -e wvdial' >> ~/.conectbt.sh
chmod +x  ~/.conectbt.sh
Ahora teneis el script hecho, sólo teneis que crear un acceso directo a
gksudo sh ~/.conectbt.sh
Para desconectar, vamos a las pantallas donde se ejecutan los procesos, y hacemos Ctrl+C
Espero que os haya sido de utilidad!!

miércoles, abril 19, 2017

Control led con Arduino uno R3 y pantalla touch de 2.0" Driver: S6D1121



Este es el anuncio del dispositivo:
https://es.aliexpress.com/item/2-0-3-3V-TFT-LCD-Touch-Screen-Breakout-Board-With-Touch-Pen-For-Arduino/32780151979.html?spm=2114.13010608.0.0.k2mfBQ




  • se puede utilizar directamente para mostrar los caracteres, gráficos e imágenes en formato BMP.
  • compatibilidad: Porque el nivel lógico 3.3 V, es compatible con 3.3 V placa Arduino, por lo general, es necesario agregar un circuito de conversión de nivel si se utiliza un 5 V
  • Placa Arduino (Arduino uno R3/Mega2560 Arduino/Arduino Leonardo).
  • biblioteca de Arduino: UTFT
  • conductor IC: S6D1121
  • tipo de pantalla táctil: pantalla táctil resistiva
  • resolución: 240X320, $ number bits (262,000) color
  • tamaño de la pantalla: 2.0 pulgadas;
  • voltaje de funcionamiento: 3.3 V

Driver TFT:                        Http://www.rinkydinkelectronics.com/library.php?id=52
Driver touch 4 pines:                 Https://github.com/adafruit/Touch-Screen-Library
Todas las librerías necesarias: Https://drive.google.com/drive/folders/0B6uNNXJ2z4CxZmFlUGFNXzBnUDA?

Con el siguiente programa arduino controlamos la pantalla de tft touch de 2.0", comprada en aliexpress por 3€.
Controlaremos por medio de un botón en pantalla un led usando el pin 5 de la placa arduino y un sensor DHT22 temperatura/humedad. Para las pruebas use el arduino uno R3:




CODIGO ARDUINO :




/*
* Arduino 2″ TFT Touch Display and dht22 humidity and trmparature sensor.
*
* Created by surfero
* surfero.blogspot.com
*
*/

#include                         //http://www.rinkydinkelectronics.com/resource/UTFT/UTFT.pdf
#include                     //Touchscreen library
#include                          //Humidity and temperature sensor library

#define DCS  6                            // Chip select pin of touch screen
#define DCLK A1                            // Clock pin of touch screen
#define DIN  A2                            // Data in pin of touch screen
#define DOUT 7                            // Data out pin of touch screen

#define YAXIS 0                           //Axis of the TFT sceen
#define XAXIS 1

#define DHTPIN 3                        // Temp and humidity sensor
#define DHTTYPE DHT22                    //Sensor type

#define PRESSDELAY 200                   //Delay between touch screen readings

Touch_AS Touch(DCS, DCLK, DIN, DOUT);    // Initialize touchscreen
UTFT myGLCD(ITDB24E_8,A2,A1,A3,A0);  // Initialize display
DHT dht(DHTPIN, DHTTYPE);                // Initialize temp and humidity sensor

extern uint8_t BigFont[];                //Setting fonts for the LCD http://www.rinkydinkelectronics.com/r_fonts.php
extern uint8_t SmallFont[];
extern uint8_t SevenSegNumFont[];

unsigned long temparatureMillis = 0;     //Store the last temp reading time
int x, y;                                //Store touch cordinates
String tempUnit = "C";                  //Temperature measurement unit
unsigned long millisNow =0;             //Store touch time to ignore repeated touch signals

void setup()

{
// Initial setup
 Serial.begin(9600);
 myGLCD.InitLCD();
 myGLCD.clrScr();

 myGLCD.setFont(BigFont);
 myGLCD.setBackColor(0, 0, 255);

 drawScreen(0);                         //Call draw screen function
 dht.begin();                           //Sratr the temp and humidity sensor
}

void loop()
{
   if (Touch.Pressed()){               //Check to see if the touch screen is pressed
     x=Touch.GetCoord(XAXIS);          //Get X cord
     y=Touch.GetCoord(YAXIS);          //Get Y cord
     
     if(x>105 && x<225 amp="" y="">95 && y<130 span="">
       //Skip touchscreen readings for the next 500ms(set in PRESSDELAY).
       //This is used because whenever the sceen in touched it sends the cordinates continously.
       //We only need to toggle the unit once per touch.
       if(millis()-millisNow >= PRESSDELAY){
         millisNow = millis();      

        if(tempUnit == "C"){          //Toggle temparature unit
           tempUnit = "F";
        }
        else if(tempUnit == "F"){
          tempUnit = "C";
        }
        readTemparature();
       }
     }
   }
   //Check temparature every 2000ms (2 seconds)
   if(millis() - temparatureMillis >= 2000){
     temparatureMillis = millis();
     readTemparature();
     Serial.println(temparatureMillis);
   }
}
//Function to read temparature and humidity
void readTemparature(){
 float h = dht.readHumidity();              // Read humidity
 float t = 0;
 if(tempUnit == "C"){
   t = dht.readTemperature();               // Read temperature in C
 }
 else{
   t = dht.readTemperature(true);            // Read temperature in F
 }

 // Check if any reads failed and exit early (to try again).
 if (isnan(h) || isnan(t)) {
   Serial.println("Failed to read from DHT sensor!");
   return;
 }
 //Serial.print("Temp: ");
 //Serial.print(t);
 updateTemp(t, tempUnit);
 updateHumidity(h);
}

//Function to draw screens. Parameter will set which sreen to draw (When more than one screen)
//Documentation for the screen library- http://www.rinkydinkelectronics.com/resource/UTFT/UTFT.pdf
void drawScreen(int screen){
 //0= home screen (More screens will be added later)
 if(screen == 0){
   myGLCD.setBackColor(0,0,0);
   myGLCD.setColor(255,255,255);
   myGLCD.setFont(BigFont);
   myGLCD.print("Data from sensor", CENTER, 30);
   myGLCD.setColor(255, 0, 0);
   myGLCD.drawLine(0,60,319,60);
   myGLCD.setBackColor(0, 0, 0);
   myGLCD.setColor(255, 255, 255);
   
   myGLCD.setFont(BigFont);
   myGLCD.print("Temparature", CENTER, 70);
   
   myGLCD.setColor(255, 255, 255);
   
   myGLCD.setFont(BigFont);
   myGLCD.print("Humidity", CENTER, 150);
 }
}

//Function to update temparature
void updateTemp(float val, String unit){
   myGLCD.setColor(255,255,255);
   myGLCD.drawRoundRect (105, 95, 225, 130);
   myGLCD.setColor(0,255,0);
   myGLCD.setFont(BigFont);
   myGLCD.printNumF(val, 2, CENTER, 100);
   myGLCD.print(unit, 205, 100);
}

//Function to update humidity
void updateHumidity(float val){
   myGLCD.setColor(255,255,255);
   myGLCD.drawRoundRect (105, 175, 225, 210);
   myGLCD.setColor(0,255,0);
   myGLCD.setFont(BigFont);
   myGLCD.printNumF(val, 2, CENTER, 178);
   myGLCD.print("%", 205, 178);
}