Discusión: Electrónica Proyecto OpenPlotter
Ver mensaje
  #1438  
Antiguo 08-01-2016, 10:08
Avatar de gypsylyon
gypsylyon gypsylyon esta desconectado
Hermano de la costa
 
Registrado: 19-07-2012
Edad: 67
Mensajes: 2,307
Agradecimientos que ha otorgado: 289
Recibió 1,345 Agradecimientos en 816 Mensajes
Sexo:
Predeterminado Re: Proyecto OpenPlotter

Cita:
Originalmente publicado por sailoog.com Ver mensaje
Añade al principio de tu script:

Código:
import socket, pynmea2
El primero es la libreria para enviar/recibir datos TCP/UDP y el segundo es el parser NMEA

A continuación abres una instancia del socket para poder enviar la sentencia generada:

Código:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Y generas la sentencia con el parser. Te pongo el ejemplo de como creo la sentencia NMEA del rumbo mahnetico que capto del sensor IMU:

Código:
hdg = pynmea2.HDG('OS', 'HDG', (str(heading_m),'','','',''))
Te explico que es cada parte para que puedas adaptarlo a la sentencia de viento correspondiente:

pynmea2.HDG es el tipo de talker que quieres generar. Busca en este código si el talker que se corresponde a la dirección y velocidad del viento está soportado. Seguro que si. Escoges solo talkers que no estén obsoletos.
'OS' dejalo como está porque eso indica que es una sentencia generada por openplotter y corresponde a un sensor.
'HDG' será el talker que elijas.
(str(heading_m) heading_m es la variable que contiene el valor en grados del rumbo magnetico. Usa tu tus variables que contengan los datos de velocidad y direccion. El comando str lo convierte de valor numérico a texto y es necesario para que el parser lo entienda.
,'','','','' esto son el resto de valores que tiene que contener esta sentencia y que pueden estar vacios si no dispones de esa información o no es relevante. Asegurate que campos tiene que llevar tu talker escogido y rellenalo con variables o espacios vacios.

Una vez tenemos la varible que contiene la sentencia NMEA generada la enviamos a openplotter:

Código:
hdg1=str(hdg)
hdg2=hdg1+"\r\n"
sock.sendto(hdg2, ('localhost', 10110))
con str(hdg) convertimos la sentencia en texto ya que el parser nos devuekve un objeto. Con hdg2=hdg1+"\r\n" le añadimos el final de linea a la sentencia para que luego pueda sert interpretada por los clientes. Con la última linea la enviamos a donde se envián todo el NMEA generado por openplotter ya sea a traves de sus calculos o sus sensores: UDP localhost 10110 consiguiendo que se expanda por todo el sistema.

Cualquier problema ya sabes. Por cierto tienes el código publicado en algún sitio? Porque no abres un github y así podremos clonarlo y añadirle cambios fácilmente?
Hola Aqui estoy de nuevo.
Gracias Sailog a tu tutorial, Openplotter ya lee los datos del anemometro. En la foto se puede ver el flujo de datos NMEA y el reloj de OpenCPN.
He abierto una cuenta en Github para pasar el programa. Este fin de semana lo modificare primero para que lea los datos de calibracion de un fichero, en caso de que alguien quiera calibrar los sensores, y lo copiare en Github. Tambien lo probare con un cable de 30 metros. Si funciona vere de meterlo en una caja que se pueda montar en el palo. Seguire informando
Imágenes adjuntas
Tipo de archivo: jpg 20160106_231147b (Copy).jpg (98.6 KB, 88 vistas)
4 Cofrades agradecieron a gypsylyon este mensaje:
caspar (14-04-2016), foner68 (15-03-2016), RIGLOS (07-02-2016), sailoog.com (11-01-2016)