Čeština / English
Login

Návody / Terminál v Pythonu pomocí knihovny libkitclient

Autoři: Zdeněk Vašíček (); Marek Vavruša ()

Abstrakt: V tomto článku naleznete ukázku použití modulu pro Python, který umožňuje komunikaci s FITkity. Jedná se o wrapper nad knihovnou libkitclient. Informace o dostupných třídách a metodách je proto možné čerpat z dokumentace této knihovny.

Update: 19.3.2009

Terminál využívá multiplatformní knihovnu libkitclient, která slouží ke komunikaci s FITkitem a poskytuje jednotné uživatelské rozhraní. Jelikož tato knihovna komunikuje přímo s USB převodníkem, odpadá tak nutnost konfigurace virtuálních seriových portů.

1. Co je zapotřebí

Abychom mohli s kitem pracovat v prostředí jazyka Python, je nutné nainstalovat C knihovnu libkitclient a modul do Pythonu.

Na Windows je modul distribuován formou instalátoru, který je možné nalézt v privátní sekci Download. Jediné, co je nutné mít nainstalované pro správný chod jsou ovladače pro obvod FT2232. Návod popisující instalaci ovladačů naleznete zde

V linuxu je libkitclient distribuován formou balíčku, viz dokument Zprovoznění FITkitu v nativním prostředí Linuxu

2. Zdrojový kód

import sys
import threading
from fitkit import *
 
# Inicializace - manažer zařízení
devices = pyDeviceMgr()
ret = devices.discover()
if (ret < 1):
    raise Exception("No device")
 
# Výběr prvního zařízení
dev = devices.acquire()
if (dev is None):
    raise Exception("No device")
 
print "VID: %04X  PID: %04X  SN: %s DECR: %s" % (dev.vid(), dev.pid(),
        dev['b'].serial(), dev['b'].product())
 
# Otevření komunikačního kanálu B (mikrokontroler)
ch = dev['b']
ret = ch.open()
if (ret != FitKitChannel.Ok):
   raise Exception("Can't open")
 
ch.resetMCU()
 
# Čtecí vlákno - obsluha
def read_thread(*args):
    while (ch.isOpen()):
        try:
            data = ch.read(1, 200)
            if (data <> None):
                sys.stdout.write(data)
                sys.stdout.flush()
 
        except RuntimeError, e: #read terminated
            print "Exception",e
            break
 
 
print "Ukonceni: Ctrl+C"
 
#Spuštění vlákna
treader = threading.Thread(name="readthread", target=read_thread)
treader.start()
 
try:
    while (ch.isOpen()):
        char = sys.stdin.read(1)
        ch.write(char, 1)
except:
    ch.terminateReader()
 
#reset MCU
ch.setRts(False)
ch.setDtr(False)
 
ch.close()

Volání close() automaticky vyvolá terminateReader na read(), čímž se ukončí čtecí vlákno read_thread()

Zobrazeno: 1222x Naposledy: 17.11.2017 15:21:35