Servidor horario mediante GPS

En un articulo anterior, vimos como se podia trabajar con un GPS. Ahora vamos a utilizar este montaje para sincronizar la hora y fecha con ese dispositivo.

Con el GPS funcionando, podemos utilizarlo para configurar la hora. Para hacer esto, debemos configurar ntp para usar el GPS como fuente de tiempo. 

Si no tienes instalado el ntp instalado, lo instalamos de la siguiente forma:

Debemos editar el fichero /etc/ntp.conf, agregando las siguientes líneas:

# gps ntp

server 127.127.28.0 minpoll 4

fudge  127.127.28.0 time1 0.183 refid NMEA

server 127.127.28.1 minpoll 4 prefer

fudge  127.127.28.1 refid PPS

Reseteamos el servicio ntp

Ahora, si consulta el servidor, debería verlo sincronizar después de un tiempo:

las lineas en rojo, muestran los servidores que hemos creado. Cuando no tengamos conexión a internet, se pondrán como principales.

GPS USB para Raspberry

Hace tiempo un amigo me regalo un GPS con conexión mediante USB. Como muchas cosas ha dormido en el cajon de los proyectos. Al abrirlo encontré este dispositivo y pensé en darle alguna utilidad.

En algunas ocasiones utilizo la raspberry en aplicaciones que no están constantemente conectadas a internet. Y como necesitaba una fuente de reloj fiable, decidí hacerlo mediante un GPS.

En esta primera parte, conectaremos el GPS veremos los datos que se recogen, en la segunda parte, crearemos el servidor NTP.

Conectamos el Receptor USB  a un puerto y comprobamos si lo ha detectado, con la orden lusb

Deberíamos tener una respuesta del tipo:

Lo ha detectado como un dispositivo Prolific Technology y lo ha configurado como un puerto serie.

Si buscamos  en /var/log/syslog, vemos que ha  creado el puerto como /dev/ttyUSB0, ya que es el primer puerto serie.

El siguiente paso es conseguir que el pi reciba los datos de los satélites. Hay un conjunto de herramientas denominado gpsd, los cuales instalaremos.

A continuación, iniciamos el demonio:

Ignoramos cualquier mensaje en el terminal o en los archivos de registro.

editamos /etc/default/gpsd 

Añadimos a ese fichero las siguientes lineas:

# Default settings for the gpsd init script and the hotplug wrapper.

# Start the gpsd daemon automatically at boot time

START_DAEMON=»true»

# Use USB hotplugging to add new USB devices automatically to the daemon

USBAUTO=»false»

# Devices gpsd should collect to at boot time.

# They need to be read/writeable, either by user gpsd or the group dialout.

DEVICES=»/dev/ttyUSB0″

# Other options you want to pass to gpsd

GPSD_OPTIONS=»» 

#tried -F, -n in here too – no difference

GPSD_SOCKET=“/var/run/gpsd.sock»

Reiniciamos el sevicio

Comprobación que recibe datos

Ejecutamos la orden: cgps

De esta forma escribe los datos procesados, mostrándo la siguiente pantalla.

Aquí puede ver que está recibiendo de 7 satélites y que tiene la hora y su ubicación. La sección 3D FIX dice que tiene suficientes datos para una corrección 3D en su ubicación (es decir: Altitud, Longitud, Latitud, Velocidad). Las líneas Err le indican el error en su posición. Los valores de Err cambian cada segundo más o menos.

Botón de Encendido apagado RASPBERRY PI 3

Instalar un botón de encendido no es complicado

 

Las Raspberry Pi tienen la particularidad de que se encienden al recibir tensión por el puerto de alimentación microUSB. Después de apagar el sistema, aunque la placa se queda en “stand by” debemos desconectar la fuente de alimentación y volverla a conectar para activarla.

Para no romper este conector. Podemos utilizar los pines marcados como RUN.

Para mayor protección, soldaremos unos terminales en dichas patillas, y a ellas conectaremos un pulsador.

Hace las dos funciones.

Si esta en “stand by”, la enciende.

Si esta encendida la pone en “stand by”.

MCP3008

Añadiendo un ADC a la Raspberry Pi

La raspberry no tiene entradas analógicas, para ello podemos utiliza el chip MCP3008. Y con un script en Python ya lo tenemos.

MCP3008

El chip MCP3008 es un convertidor analógico-digital con 8 canales de 10 bits de resolución e interfaz SPI,

Conexiones:

 

El ADC es 10bit por lo que puede informar un rango de números de 0 a 1023 (2 a la potencia de 10). Una lectura de 0 significa que la entrada es 0V y una lectura de 1023 significa que la entrada es 3.3V.

La conversión del valor se realiza de la siguiente forma:

Voltaje = (adc * Vref)/1023

Vref = Voltaje de referencia

Interfaz SPI en Raspberry Pi 2

Raspberry Pi no tiene habilitado el módulo de comunicación SPI, lo primero que hay que hacer es habilitar la interfaz para poder comunicarnos con nuestro MCP3008.

La forma de hacerlo es mediante:

Script de Python

Script de Python, para leer el canal 1 (CH0) la tension obtenida mediante un potenciometro:

Instalando TELEGRAM

Instalación

Para instalar en Raspbian ejecutamos desde la terminal:

instalamos lo siguiente:

Ejecutamos el archivo de configuración y copilamos el programa:

da el error: configure: error: no libevent found

volvemos a ejecutar

Ejecutamos

da el error:

make: *** No rule to make target ‘tgl/scheme.tl’, needed by ‘auto/scheme.tl’. Alto.

Se ha solucionado poniendo – – recursive en:

Simplemente debemos ejecutar en la terminal:

da lo siguiente:

pi@raspberrypi:~/tg $ sudo bin/telegram-cli -k tg-server.pub -W

change_user_group: can’t find the user telegramd to switch to

Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman

Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type show_license'.

This is free software, and you are welcome to redistribute it

under certain conditions; type show_license’ for details.

Telegram-cli uses libtgl version 2.1.0

Telegram-cli includes software developed by the OpenSSL Project

for use in the OpenSSL Toolkit. (http://www.openssl.org/)

I: config dir=[/root/.telegram-cli]

[/root/.telegram-cli] created

[/root/.telegram-cli/downloads] created

> telegram-cli: tgl/mtproto-utils.c:101: BN2ull: Assertion `0′ failed.

SIGNAL received

Grabar Tarjeta SD en Linux


Sin conectar la tarjeta, saldra una pantalla parecida a esta:

Colocamos la tarjeta SD y repetimos el comando.

Vemos que apararece un dispositivo nuevo, /dev/sdc1. Esta es la tarjeta SD

Ahora desmontamos la SD (hacedlo con todas las particiones de esta):

copiamos la imagen con el comando:

no hay que poner el numero de la partición.

Este comando no muestra ninguna salida, parece que está ‘congelado’. Hay que esperar ya que puede tardar unos minutos.

Lighttpd con php

Instalación del servidor Web (lighttpd) 

Para la instalación ejecutaremos

Por defecto, las paginas están en /var/www/html, para cambiarlo a /var/www.

Editamos en el fichero /etc/lighttpd/lighttpd.conf con:

server.document-root        = “/var/www/html»

por

server.document-root        = “/var/www»

Para cambiarlo al puerto 8080

 

server.pot=8080

server.socket = “[::]:8080′′

En este caso pusimos en escucha el puerto 8080.

Después hay que reiniciar el servicio con:

Instalación/configuración de PHP

Para su instalación ejecutamos:

Una vez instalado PHP, hemos de efectuar alguna configuración adicional para que el servidor reconozca los scripts PHP, por ello habilitamos el módulo fastcgi-php mediante

y, a continuación, reiniciamos el servicio ya actualizado mediante

Para comprobar que el servidor web está ejecutándose miramos que el puerto 80 esté en modo Listen

Ahora podemos ir a un navegador y poner en la dirección lo siguiente: http://IP_Raspberry

 

Activar y desactivar el servicio manualmente

Si hace falta parar el servidor web la orden es:

Para volver a ponerlo en marcha:

Para reiniciarlo:

Ver los Logs

Para ver el log de acceso a la pagina, este fichero es  /var/log/lighttpd/access.log

Modificamos el fichero:

server.modules = (

«mod_access»,

«mod_alias»,

«mod_compress»,

«mod_accesslog»,

«mod_redirect»,

# «mod_rewrite»,

)

server.document-root = «/var/www»

server.upload-dirs = ( «/var/cache/lighttpd/uploads» )

server.errorlog = «/var/log/lighttpd/error.log»

accesslog.filename = «/var/log/lighttpd/access.log» — creas el archivo access.log

server.pid-file = «/var/run/lighttpd.pid»

server.username = «www-data»

server.groupname = «www-data»

server.port = 80

index-file.names = ( «index.php», «index.html», «index.lighttpd.html» )

url.access-deny = ( «~», «.inc» )

static-file.exclude-extensions = ( «.php», «.pl», «.fcgi» )

compress.cache-dir = «/var/cache/lighttpd/compress/»

compress.filetype = ( «application/javascript», «text/css», «text/html», «text/plain» )

# default listening port for IPv6 falls back to the IPv4 port

include_shell «/usr/share/lighttpd/use-ipv6.pl » + server.port

include_shell «/usr/share/lighttpd/create-mime.assign.pl»

include_shell «/usr/share/lighttpd/include-conf-enabled.pl»

reiniciamos el servicio de lighttpd

Ya con esto, ya se genera el archivo access.log, se nos guardara los accesos a la web