PDF de programación - ESP8266 GPS SERVIDOR NTP STRATUM1

<<>>
Imágen de pdf ESP8266 GPS SERVIDOR NTP STRATUM1

ESP8266 GPS SERVIDOR NTP STRATUM1gráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 2 de Enero del 2018)
434 visualizaciones desde el 2 de Enero del 2018
3,4 MB
51 paginas
SERVIDOR NTP STRATUM1
INALAMBRICO CON ESP8266

DISPOSITIVOS CONECTADOS A INTERNET Y SINCRONIZACION DE TIEMPO

Muchos dispositivos, que en general tienen acceso a internet hacen uso del protocolo NTP para
sincronizar los relojes internos cada cierto tiempo. Los computadores personales (PC) son el
caso mas comun. Si bien estos tienen un reloj interno (RTC) generalmente estos relojes se
desfasan uno o mas segundos al dia, por lo cual cabo de unos cuantos dias este desface se puede
acumular hasta llegar al orden de los minutos y las horas.

Con la popularidad del internet casi omnipresente, muchos dispositivos del Internet De las Cosas
(IdC), para abaratar costos de fabricacion, no poseen ningun tipo de RTC, por lo que cada vez
que requieren ejecutar algun proceso que involucre estampa de tiempo, recurren a tomar el
tiempo de un servidor de tiempo NTP.

Que sucede si en algun momento se pierde la conexion a internet y cientos de dispositivos
requieren una estampa de tiempo para realizar algun proceso?

Como se podrian sincronizar cientos de dispositivos conectados inalambricamente entre si, pero
que no cuentan con algun tipo de conexion a internet, por ejemplo sensores en un bosque
apartado lejos de cualquier señal de internet o celular?

Como se podrian sincronizar dispostivos industriales en fabricas, donde por seguridad y/o
paranoia estos se encuentran conectados entre si, pero desconectados fisicamente del internet?

SERVIDOR NTP INALAMBRICO Y SIN REQUERIR CONEXION A INTERNET

Si se requiere una fuente de tiempo confiable, que no requiera conexion a internet, existen varias
posibilidades: Receptor de señales de radio de tiempo , reloj atomico, gps entre otros.

Mas informacion:

Automatizanos.com

@automatizanos

Los receptores de señal horaria son una opcion economica, pero su utilizacion depende de la
relativa cercania a una emisora de este tipo. Ademas existen diferentes frecuencias dependiendo
de la zona o el pais donde se encuentre, por lo que no es una alternativa universal para cualquier
sitio.

Los relojes atomicos son probablemente la mejor opcion cuando se requiere un alto grado de
precision. Inicialmente eran grandes aparatos, poco portatiles y con gran consumo de energia.
Sinembargo con el pasar del tiempo ya es posible conseguir relojes atomicos del tamaño de un
circuitos integrados y que consumen unos cuantos milivatios. Si el precio no es un factor
determinante (precios alrededor de los miles de dolares), esta seria la opcion usar!.

El sistema de posicionamiento global GPS o sistemas equivalentes en otras naciones
(GLONASS, GALILEO, BAIDU) son una opcion intermedia que proporcionan una mayor
flexibilidad de uso con respecto a las señales de tiempo de radio (claro, hay que tener algo de
vista despejada al cielo ) y a unos precios mucho mas bajos que un reloj atomico.

En caso de requerirse un alto grado de robustez, por ejemplo si se tiene en mente construir un
reactor nuclear casero,o se desean conectar una enorme cantidad de dispositivos que estaran
haciendo miles de consultas de tiempo cada segundo, existen soluciones listas en el mercado
para este tipo. Por el contrario si se desea algo mas simple para fines de experimentacion, que
puedan soportar desfases de tiempo del orden de 1 segundo, es posible construir uno por menos
de $10 USD usando un ESP8266-01 y un modulo GPS, tambien se podria utilizar un GPS de
mano que tenga salida serial NMEA.

PROTOCOLOS DE FECHA Y HORA: DAYTIME, TIME Y NTP

Desde que las primeros computadores practicos empezaron a operar, se ha tenido la inquietud de
poder sincronizarlos la hora de la forma mas precisa en cada uno de ellos. Existen varios
protocolos para ello, unos de los mas conocidos son: daytime, time y NTP.

Protocolo daytime:

Este protocolo esta descrito en el RFC 867. Es uno de los mas antiguos y practicamente ya no es
usado. Algunos servidores aun proporcionan este servicio para fines educativos y como posible
alternativa a aplicaciones muy viejas de hardware y/o software que todavia puedan usarlo. Este
protocolo funciona mediante el puerto 13 y la informacion de fecha y hora es enviada en texto
claro. No hay una recomendacion especifica sobre el formato del texto, lo unico que se exige es
que pueda ser leido y entendido por humanos.

Protocolo time:

Este protocolo esta descrito en el RFC 868. Funciona mediante el puerto 37 y envia la
informacion de fecha y hora, codificada en segundos transcurridos desde las 00:00:00
(medianoche) del primero de Enero de 1970 en un numero de 32 bits.

Mas informacion:

Automatizanos.com

@automatizanos

Protocolo NTP:

El protocolo NTP fue pensado para proveer informacion de tiempo, esta descrito en el RFC 5905
y cuenta con una precision del orden de milisegundos, para ello usa una version modificada del
algoritmo de Marzullo que entre otras cosas tiene en cuenta el tiempo del paquete de datos de ida
y de regreso. Este protocolo es ampliamente usado en la actualidad, hace uso del puerto 123 e
implementa conexiones tipo UDP para minimizar el tiempo tanto de envio como de recepcion de
paquetes.

ESP8266 + GPS

Este proyecto inicio como una mejora al Tardis Time de Ray Burnette que tiene basicamente los
mismos componentes de hardware, pero no transmite la informacion del tiempo en protocolos
estandar, teniendo que desarrollarse alguna pequeña aplicacion especifica en cada dispositivo a
sincronizar. Este proyecto hace uso de los demonios y aplicaciones que y vienen incorporados en
computadores portatiles, raspberry pi, e incluso usarse con las librerias para obtener tiempo que
poseen los modulos ESP8266.

El GPS usado fue un EM-506 el cual no posee señal PPS. Tambien es posible utilizar un GPS de
mano que tenga una salida NMEA RS232. La programacion se realizo mediante el SDK para el
ESP8266 en su version 1.5.2. Hay que recordar que programar el ESP8266-01 se requiere algun
tipo de interfaz USB-TTL. El programa se puede ver como 3 grandes partes

RECEPCION DE DATOS SERIAL

El ESP8266 cuenta con una FIFO en hardware para la UART de un tamaño maximo de 256
caracteres, ademas de multiples tipos de interrupcion. Se utilizo la interrupcion de cantidad de
caracteres recibidos y la interrupcion de timeot.

Mas informacion:

Automatizanos.com

@automatizanos

La interrupcion de numero de caracteres recibidos, se utiliza para disparar automaticamente una
rutina de interrupcion cuando han llegado un determinado numero de caracteres al FIFO de la
UART. En este caso como se esperan cadenas NMEA procedentes del GPS, y las cadenas pueden
tener longitudes entre 30 y 80 caracteres, se programo un numero en este rango como umbral
para disparar la funcion que se encargara de sacar los datos de la FIFO de la UART.

La interrupcion de timeout se utiliza cuando se reciben unos pocos caracteres ( menor al umbral
anteriormente descrito ) y no se reciban mas dentro de un intervalo de tiempo programable. En
este caso particular se programo un timeout equivalente a diez veces el tiempo de byte.

Estas dos funciones por estar ejecutadas mediante interrupciones, se requiere que retornen lo mas
rapido posible, asi que su labor, es simplemente tomar los caracteres que hay en la FIFO de la
UART y copiarlos a un buffer circular, sin ejecutar ninguna tarea de procesamiento y poder
retornar con rapidez.

PROCESAMIENTO DE CADENA, FECHA ACTUAL Y CORRECCION DE
MICROSEGUNDOS

Las rutinas de interrupcion del serial escriben los caracteres recibidos en un buffer circular, cuya
longitud es el doble del tamaño de la cadena que se requiere analizar. En este caso es la cadena
NMEA que empieza con el identificador $GPRMC. Dicha cadena es la que contiene el dato de la
fecha/hora. La funcion de procesamiento es llamada por las rutinas de interrupcion una vez que
los datos esten escritos en el buffer circular mediante el mecanismo de mensajes provisto por el
SDK system_os_post.

Las cadenas NMEA pueden tener longitud variable, por lo que no se deben usar posiciones
absolutas de caracteres para extraer los valores. El numero de separadores, en este caso las
comas "," son invariables y son usadas para extraer los parametros de fecha y hora. Un ejemplo
de esto es el siguiente:

$GPRMC,201705.000,A,0000.0000,N,00000.0000,W,1.10,265.50,120816,,,A*79

Entre los separadores coma "," #1 y #2 se encuentra el numero 201705.000 que corresponde a 20
horas, 17 minutos, 05.000 segundos. Entre los separadores coma "," #9 y #10 se encuentra el
numero 120816 que corresponde al dia 12 mes 08 (Agosto) y año 16 (2016).

Como dato adicional, se lee el valor del contador ciclico de microsegundos del sistema (no del
GPS), para hacer un ajuste y dar un tiempo mas acertado en el momento que se haga una
peticion de tiempo

ENTREGA DE RESULTADOS, SOCKETS

Se crearon 3 sockets independientes para atender cualquier tipo de servicio daytime, time o NTP.
Para el caso de daytime, al recibir una peticion, se toma las variables globales que contienen los
datos de fecha y hora y se transforman en una cadena de texto que pueda ser leida por un
humano. En el caso de una peticion time, se debe transformar

Mas informacion:

Automatizanos.com

@automatizanos

la fecha y la hora al formato exigido por este protocolo, para ello se creo la funcion
SecondsSince1900. Este numero es enviado como respuesta

En el caso del servicio NTP, se debe almacenar el paquete recibido, hacerle algunas
modificaciones a dicho paquete y luego enviarlo como respuesta. Puesto que el GPS usado solo
entrega datos de hora en intervalos de cada segundo, y una peticion por parte de un cliente podria
llegar en la mitad de dicho intervalo, para mitigar un poco este inconveniente, se toma los datos
del contador de microsegundos del sistema mediante system_get_time() cada que llega una
nueva trama. En el momento que se recibe una peticion de NTP, se lee de nuevo dicho contador,
y asi se puede obtener el tiempo en microsegundos que ha transcurri
  • Links de descarga
http://lwp-l.com/pdf8125

Comentarios de: ESP8266 GPS SERVIDOR NTP STRATUM1 (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad