[Python] [python] Help Lettura da Seriale
Riccardo Brazzale
riccardo.brazzale a gmail.com
Mar 5 Nov 2013 11:17:37 CET
Il giorno 04 novembre 2013 16:11, Manlio Perillo
<manlio.perillo a gmail.com>ha scritto:
>
> import sys
> import select
>
>
> # ... open serial port, init curses
> while 1:
> rfd, wfd, efd = select.select([stdin, conn], [], [], 0)
> if conn in rfd:
> dati = conn.read(64)
> # ... aggiorna schermo e file dati
> if stdin in rfd:
> cmd = stdin.read()
> if cmd.strip().lower() == "q":
> # ... salva il file excel
> break
> # close serial port, close curser
Ho cercato di sistemarlo un po', ne è uscito questo e pare funzionare ma
devo testarlo in loco per cantare vittoria:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import curses
import time
import serial
import xlwt
import sys
import select
def aprischermo():
stdscr = curses.initscr()
curses.noecho()
titolo = 'Ricezione Dati'
pos = int (40 - (len(titolo))/2)
stdscr.addstr(1, pos, titolo, curses.A_REVERSE | curses.A_BOLD)
stdscr.addstr(7, 5, "Lettura -- Pressione -- Flusso - Permeabilita'",
curses.A_BOLD)
stdscr.addstr(15, 5, 'Premi per uscire')
stdscr.addstr(15, 11, 'Q', curses.A_REVERSE | curses.A_BOLD)
stdscr.addstr(5, 5, 'Dati Ricevuti:', curses.A_BOLD)
stdscr.refresh()
return stdscr
def connessione(stdscr):
try:
#conn = serial.Serial("/dev/ttyUSB0", 9600, 7, "N", 1, timeout=1)
# <-- Senza connessione esce...
conn = serial.Serial("/dev/ttyS0", 19200, timeout=1)
# <-- per provare...
except:
stdscr.addstr(3, 20, 'Porta Seriale Non Disponibile')
stdscr.refresh()
time.sleep(3)
chiudi()
return conn
def ciclo(conn):
# Definizione file temporaneo
fou = open("/home/Dati.txt", "w")
a = 0
while 1:
# rfd = input ready
# wft = output reeady
# efd = exception ready
rfd, wft, efd = select.select([sys.stdin, conn], [], [], 0)
# Controllo la disponibilità di dati sulla seriale
if conn in rfd:
dati = conn.read(256)
# Elimino quello che non mi serve.
dati = dati.replace('*', '')
dati = dati.replace('SAMPLE --- PRESSURE --- FLOW ---
PERMEABILITY', '')
dati = dati.replace('2 SQUARE CM CLAMP', '')
dati = dati.replace('PPM100 V2.1 FIAL', '')
dati = dati.strip()
# Stringa vuota: continuo
if dati == '':
continue
# Visualizzo quanto ricevuto dalla seriale
stdscr.addstr(9, 5, dati)
stdscr.refresh()
# Scrivo i dati sul file temporaneo
fou.write(dati + "\n")
# Controllo la pressione del tasto 'Q' sulla tastiera.
if sys.stdin in rfd:
cmd = sys.stdin.read(1)
# Se premuto scrivo il file ed esco.
if cmd.strip().lower() == "q":
# Chiudo il file temporaneo
fou.close()
xlsout=xlwt.Workbook(encoding='latin-1')
foglio1=xlsout.add_sheet('Foglio1')
foglio1.write(0,0, 'Lettura')
foglio1.write(0,1, 'Pressione')
foglio1.write(0,2, 'Flusso')
foglio1.write(0,3, "Permeabilita'")
riga = 2
fin = open("/home/Dati.txt", "r")
lines = fin.readlines()
fin.close()
for line in lines:
riga += 1
sample = line[0:5].strip()
pressure = line[5:18].strip()
flow = line[18:27].strip()
permeability = line[27:].strip()
foglio1.write(riga, 1, sample)
foglio1.write(riga, 2, pressure)
foglio1.write(riga, 3, flow)
foglio1.write(riga, 4, permeability)
xlsout.save('/home/dati.xls')
chiudi()
def chiudi():
curses.echo()
curses.nocbreak()
curses.curs_set(1)
curses.endwin()
sys.exit(0)
stdscr = aprischermo()
conn = connessione(stdscr)
ciclo(conn)
Ma la domanda è:
Se lo porto su windows cosa devo cambiare?
Grazie!
--
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131105/67380fac/attachment-0001.html>
Maggiori informazioni sulla lista
Python