Ho ritirato fuori da un cassetto un convertitore seriale-USB che usavo per scaricare i dati da un GPS sotto Windows. Mi e' venuta voglia di vedere come funziona sotto Linux attacandolo ad un modem seriale US Robotics FaxModem 56 Kb. Peraltro il convertitore mi e' stato venduto praticamente senza nessuna indicazione del chip interno ed io ovviamente non ho piu' il miniCD di installazione
Una volta inserito il convertitore in /var/log/messages compaiono le seguenti righe
Aug 21 16:21:06 kranz kernel: [ 107.649459] pl2303 2-1:1.0: pl2303 converter detected
Aug 21 16:21:06 kranz kernel: [ 107.661505] usb 2-1: pl2303 converter now attached to ttyUSB0
Aug 21 16:21:06 kranz kernel: [ 107.661557] usbcore: registered new interface driver pl2303
Aug 21 16:21:06 kranz kernel: [ 107.661565] pl2303: Prolific PL2303 USB to serial adaptor driver
Aug 21 16:23:24 kranz kernel: [ 245.756599] Marking TSC unstable due to TSC halts in idle
come si puo' vedere in Debian il convertitore e' riconosciuto come un pl2303 e si collega in automatico come porta virtuale alla /dev/ttyUSB0
per la cronaca non ho mai avuto l'alimentatore del modem (perche' mi e' stato regalato) e tirando a caso ho visto che servono 12 V con la seguente pedinatura
martedì 21 agosto 2012
Esempio GUI con TKinter
Un esempio di uso della GUI Tkinter su Python 3.2 (da confrontare con questo post)
------------------------------------------
import tkinter as tk
from tkinter import ttk
class App:
def __init__(self):
self.root = tk.Tk()
self._job = None
self.root.title("Progress Bar")
self.frame = tk.Frame(self.root, width=200, height=10)
self.frame.pack()
self.slider = tk.Scale(self.root, from_=0, to=100,
orient="horizontal",
command=self.updateValue, length=200)
self.slider.pack()
self.lab = tk.Label(self.root, text=" ")
self.lab.pack()
self.pbar = ttk.Progressbar(self.root, length=200,mode="determinate", maximum=100)
self.pbar.pack(padx=5, pady=5)
self.pbar.start
self.root.mainloop()
def updateValue(self, event):
if self._job:
self.root.after_cancel(self._job)
self.pbar["value"] = int(self.slider.get())
self.lab.config(text=str(self.slider.get()))
app=App()
------------------------------------------
------------------------------------------
import tkinter as tk
from tkinter import ttk
class App:
def __init__(self):
self.root = tk.Tk()
self._job = None
self.root.title("Progress Bar")
self.frame = tk.Frame(self.root, width=200, height=10)
self.frame.pack()
self.slider = tk.Scale(self.root, from_=0, to=100,
orient="horizontal",
command=self.updateValue, length=200)
self.slider.pack()
self.lab = tk.Label(self.root, text=" ")
self.lab.pack()
self.pbar = ttk.Progressbar(self.root, length=200,mode="determinate", maximum=100)
self.pbar.pack(padx=5, pady=5)
self.pbar.start
self.root.mainloop()
def updateValue(self, event):
if self._job:
self.root.after_cancel(self._job)
self.pbar["value"] = int(self.slider.get())
self.lab.config(text=str(self.slider.get()))
app=App()
------------------------------------------
Confronto Webcam
Esempio GUI con PyQt
Un esempio di GUI mediante PyQT
import sys
from PyQt4 import QtGui, QtCore
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.setGeometry(200, 100, 220, 120)
widget.setWindowTitle('Slider Example')
label1 = QtGui.QLabel("Valore: ", widget)
label1.move(80, 50)
slider = QtGui.QSlider(QtCore.Qt.Horizontal, widget)
slider.setGeometry(10, 10, 200, 30)
slider.setFocusPolicy(QtCore.Qt.NoFocus)
pb = QtGui.QProgressBar(widget)
pb.setGeometry(10, 70, 215, 20)
def getValue(value):
label1.setText("Valore: "+str(value))
pb.setValue(value)
widget.connect(slider, QtCore.SIGNAL('valueChanged(int)'), getValue)
widget.show()
sys.exit(app.exec_())
import sys
from PyQt4 import QtGui, QtCore
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.setGeometry(200, 100, 220, 120)
widget.setWindowTitle('Slider Example')
label1 = QtGui.QLabel("Valore: ", widget)
label1.move(80, 50)
slider = QtGui.QSlider(QtCore.Qt.Horizontal, widget)
slider.setGeometry(10, 10, 200, 30)
slider.setFocusPolicy(QtCore.Qt.NoFocus)
pb = QtGui.QProgressBar(widget)
pb.setGeometry(10, 70, 215, 20)
def getValue(value):
label1.setText("Valore: "+str(value))
pb.setValue(value)
widget.connect(slider, QtCore.SIGNAL('valueChanged(int)'), getValue)
widget.show()
sys.exit(app.exec_())
lunedì 20 agosto 2012
Nokia 6161 e comandi AT
Dovendo fare qualche prova con uno script seriale e non avendo a tiro nessun modem seriale vero ho tirato fuori il vecchio Nokia 6161 che ha una interfaccia con comandi AT
Il collegamento con il telefono puo' essere effettuato con accoppiamento Bluetooth mediante il menu del telefono oppure mediante il cavo USB (che non porta corrente ma solo segnale per cui e' bene inserire anche l'alimentatore per le prove)
Collegamento Bluetooth
per il collegamento bluetooth si accoppia con il classico comando
rfcomm bind 0 00:1B:EE:58:93:22
la porta su cui collegarsi e' /dev/rfcomm0
Collegamento USB con cavo Ca-53
per il collegamento via cavo devono essere caricati i moduli
usbcore,usbserial,cdc_acm,usbhid,ehci_hcd,ohci_hcd
la porta su cui collegarsi e' /dev/ttyACM0
il syslog riporta le seguenti linee
Aug 20 09:35:25 kranz kernel: [ 1858.174324] usb 5-1: New USB device found, idVendor=0421, idProduct=04d2
Aug 20 09:35:25 kranz kernel: [ 1858.174340] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Aug 20 09:35:25 kranz kernel: [ 1858.174346] usb 5-1: Product: Nokia 6151
Aug 20 09:35:25 kranz kernel: [ 1858.174351] usb 5-1: Manufacturer: Nokia
il primo corretto ed il secondo errato
-------------------------------------------------------------
import time
import serial
ser = serial.Serial()
ser.baudrate = 9600
ser.bytesize = 8
ser.stopbits = 1
ser.port = '/dev/rfcomm0'
ser.parity=serial.PARITY_NONE
ser.open()
ser.isOpen()
while True :
#controlla il livello della batteria
out = ''
ser.write("AT+CBC\r\n")
print "AT+CBC"
time.sleep(1)
while ser.inWaiting()> 0:
out += ser.read(1)
if out != '':
print out
#print "<<"+out[24]
#if out[24] == "O":
#print "Ok"
#forza un comando errato
out = ''
ser.write("AT+CGMM1\r\n")
print "AT+CGMM1"
time.sleep(1)
while ser.inWaiting()> 0:
out += ser.read(1)
if out != '':
print out
#print out[12]
#if out[12] == "E":
#print "Errore"
-------------------------------------------------------------
La risposta al comando corretto e' composta dalla ripetizione del comando
il valore di risposta (in questo caso lo stato di carica della batteria) ed infine
una riga con il codice OK
-------------------------------------------------------------
AT+CBC
+CBC: 1,93
OK
La risposta al comando scorretto e' composta dalla ripetizione del comando
e la stringa ERROR
-------------------------------------------------------------
La risposta al comando scorretto e' composta dalla ripetizione del comando
e la stringa ERROR
-------------------------------------------------------------
AT+CGMM1
ERROR
-------------------------------------------------------------
come si puo' osservare la risposta e' data da una stringa unica con piu' ritorni a capo e senza un separatore univoco..per questo motivo per fare un check da programma del corretto funzionamento si puo' controllare nel primo caso se il carattere 24 della stringa di out contiene una "O" di "OK" mentre nel secondo caso se il carattere 12 contiene una "E" di Error
come si puo' osservare la risposta e' data da una stringa unica con piu' ritorni a capo e senza un separatore univoco..per questo motivo per fare un check da programma del corretto funzionamento si puo' controllare nel primo caso se il carattere 24 della stringa di out contiene una "O" di "OK" mentre nel secondo caso se il carattere 12 contiene una "E" di Error
sabato 18 agosto 2012
Bluetooth su Debian
per installare il pacchetto di utility di Bluetooth si digita
apt-get install bluetooth
successivamente per ricercare il device Bluetooth a cui si vuole collegare
hcitool scan
si copia l'indirizzo esadecimale e si lancia il comando
rfcomm bind 0 00:0A:3A:1F:A4:2E
che apre la seriale /dev/rfcomm0
venerdì 17 agosto 2012
Terminale per porta seriale
Alcuni esempi di terminale su porta seriale (reale o virtuale) su Linux. Le prove sono state effettuate con GPS Bluetooth impostato su /dev/rfcomm0
altrimenti usando la libreria pyserial (che si installa con il seguente comando)
apt-get install python-serial
si puo' usare uno script in Python per fare la stessa cosa
--------------------------
import time
import serial
ser = serial.Serial()
ser.baudrate = 9600
ser.bytesize = 8
ser.stopbits = 1
#ser.xonxoff = 0
#ser.rtscts = 0
#ser.timeout = 0
ser.port = '/dev/rfcomm0'
ser.parity=serial.PARITY_NONE
ser.open()
ser.isOpen()
input=1
out = ''
while True :
time.sleep(1)
while ser.inWaiting()> 0:
out += ser.read(1)
if out != '':
print ">>" + out
Gtkterm
Configurazione |
Schermata del terminale |
Minicom
(da lanciare come minicom -s)
Configurazione |
Schermata del terminale |
altrimenti usando la libreria pyserial (che si installa con il seguente comando)
apt-get install python-serial
si puo' usare uno script in Python per fare la stessa cosa
--------------------------
import time
import serial
ser = serial.Serial()
ser.baudrate = 9600
ser.bytesize = 8
ser.stopbits = 1
#ser.xonxoff = 0
#ser.rtscts = 0
#ser.timeout = 0
ser.port = '/dev/rfcomm0'
ser.parity=serial.PARITY_NONE
ser.open()
ser.isOpen()
input=1
out = ''
while True :
time.sleep(1)
while ser.inWaiting()> 0:
out += ser.read(1)
if out != '':
print ">>" + out
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...