A gentile richiesta vi propongo il ripetitore dati NMEA che ho realizzato sulla mia barca con un Raspberry Pi Mod. B e un display LCD 4 righe x 20 caratteri.
Non è una realizzazione raffinata ma funziona.
Strumentazione Raymarine (plotter C80 Classic, autopilota ST6000, fish-finder DSM300, ST60+ Wind, ST60+ Tridata, GPS 125).
Plotter, autopilota e strumento del vento in pozzetto. Il tridata è al carteggio.
Tutti gli strumenti sono collegati in standard Seatalk.
Volevo un ripetitore di tutti i dati di navigazione al carteggio (e successivamente un server wi-fi per i dati di navigazione).
Questo è lo schema dei collegamenti:
Raymarine Tridata ST60+ ----> Interfaccia Seatalk-USB ----> Raspberry ----> display LCD 4x20
Il flusso di dati generato da tutta la strumentazione passa sulla rete Seatalk.
Ho acquistato una interfaccia Tiny USB Seatalk-NMEA Bridge (Seatalk link) da
http://www.gadgetpool.de
Ho collegato il Seatalk link al Tridata al connettore Seatalk (ma va bene qualsiasi strumento della catena Seatalk).
Sul connettore USB di uscita del Seatalk link è presente adesso tutto il flusso di dati in formato NMEA, quindi leggibile con qualsiasi notebook/pc.
Io uso sia un ASUS EEEpc 1215P che un MacBook Air con linux e opencpn e tutti i dati vengono letti dal software di navigazione dalla porta USB senza problemi.
Per costruire il ripetitore dei dati con un RaspberryPi e un display LCD seriale Netmedia 4 righe x 20 caratteri :
- installare sul RaspberryPi Raspbian linux nella versione più recente
- installare il modulo python serial
- nel cmdline.txt del Raspberry eliminare la console su seriale GPIO, quindi diventa
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
- collegare uscita USB del Seatalk Link ad una presa USB del RaspberryPi
- collegare connettore GPIO del RaspberryPi con LCD seriale
Raspberry Pi GPIO Netmedia LCD display
pin 2 (5V) --> pin 5V
pin 6 (GND) --> pin GND
pin 8 (TXD) --> pin RXD
Sorgente del programma di acquisizione e display in Python (seatalk2lcd.py)
=========================================================================
#! /usr/bin/env python
import serial
LCD = serial.Serial('/dev/ttyAMA0', 9600) # LCD Netmedia seriale 4x20 su GPIO
ser = serial.Serial('/dev/ttyUSB0', 4800) # SeaTalk data flow from USB
LCD.write(chr(20)) # LCD backlight
LCD.write(chr(200)) # LCD backlight value
LCD.write(chr(12)) # LCD clear screen
LCD.write("S/Y Polaris")
LCD.write(chr(10)) # new line
LCD.write("DVV,Venezia")
LCD.write(chr(10)) # new line
LCD.write(chr(10)) # new line
LCD.write("SR, febbraio 2014")
time.sleep(5)
LCD.write(chr(12)) # clear screen
while 1:
data = ser.readline()
# console check
# print data[:-1]
words = data.split(',')
if words[0] == '$IIDBT':
dep = words[3]
if words[0] == '$IIRMC':
timestamp = words[1]
validity = words[2]
lat = words[3]
NS = words[4]
lon = words[5]
EW = words[6]
sog = words[7]
cog = words[8]
datestamp = words[9]
variat = words[10]
#EW_var = words[11]
checksum = words[11]
LCD.write(chr(17)) # cursor position
LCD.write(chr(0)) # riga
LCD.write(chr(0)) # colonna
LCD.write("Lat: ")
LCD.write(lat[0:2])
LCD.write(" ")
LCD.write(lat[2:9])
LCD.write(" ")
LCD.write(NS)
LCD.write(chr(17)) # cursor position
LCD.write(chr(1)) # riga
LCD.write(chr(0)) # colonna
LCD.write("Lon: ")
LCD.write(lon[0:3])
LCD.write(" ")
LCD.write(lon[3:10])
LCD.write(" ")
LCD.write(EW)
LCD.write(chr(17)) # cursor position
LCD.write(chr(2)) # riga
LCD.write(chr(0)) # colonna
LCD.write("SoG: ")
LCD.write(sog[0:4])
LCD.write(chr(17)) # cursor position
LCD.write(chr(2)) # riga
LCD.write(chr(10)) # colonna
LCD.write("DEP: ")
LCD.write(dep)
LCD.write(chr(17)) # cursor position
LCD.write(chr(3)) # riga
LCD.write(chr(0)) # colonna
LCD.write("CoG: ")
LCD.write(cog[0:4])
LCD.write(chr(17)) # cursor position
LCD.write(chr(3)) # riga
LCD.write(chr(10)) # colonna
LCD.write("UTC:")
LCD.write(timestamp[0:6])
=========================================================================
NOTE:
1 - il firmware dell'interfaccia Seatalk-NMEA fa il check della consistenza dei dati ricevuti e scarta quelli eventualmente non buoni.
2 - per il programma in Python è necessario installare il modulo serial
Ciao a tutti.
sanrab