====== Komunikační knihovna pymlab ====== Jde o softwarový balík, který umožňuje vytvářet senzorovou síť založenou na komunikačních rozhraních RS232, [[cs:i2c|I²C]], Ethernet a USB. Jde o pokusnou implementaci [[cs:pdn|polymorfní sítě přístrojů]]. Princip funkce spočívá v definování struktury sítě a adres jednotlivých nódů v konfiguračním souboru ovládacího programu. Lze tak ke všem bodům v síti přistupovat pomocí jazyka Python. Pro routování I2C mezi jednotlivými segmenty obsahujícími čidla se stejnými adresami jsou využívány moduly [[cs:i2chub|I2Chub02A]], které slouží jako routovací body pro zařízení, která nemohou být na jedné větvi sběrnice. Což je například více senzorů se stejnou I²C adresou. Zdrojové soubory knihovny a příkladů použití jsou v repozitáři [[https://github.com/MLAB-project/MLAB-I2c-modules|pyMLAB]] na MLAB Githubu. Výsledkem je možnost testovat a demonstrovat všechna nová čidla a zařízení. Bez nutnosti udržovat aktuální specifické zdrojové kódy pro všechny používané MCU. Lze tak dosáhnout nezávislosti na aktuálně používaných mikrokontrolérech, protože v blízké době by mělo být možné z Pythonu generovat program pro různé architektury. ===== Instalace ===== Pokud potřebujeme na sběrnici přistupovat přes rozhraní USB pomocí modulu [[cs:usbi2c|USBI2C01A]], tak je potřeba nainstalovat balík s hidapi, libusb a další nástroje. sudo apt-get install libudev-dev libusb-1.0-0-dev libhidapi-dev python-setuptools python-smbus python-numpy cython git Viz [[cs:usbi2c|stránka tohoto modulu]]. Instalaci samotného softwarového balíku pymlab pak provedeme snadno pomocí: sudo easy_install pymlab nebo sudo pip install pymlab Oba příkazy jsou rovnocenné a využívají python balíčkovací systém ve kterém je [[https://pypi.python.org/pypi/pymlab/|pymlab zařazen]]. Tím by měly být staženy i závislosti se kterými pymlab pracuje, jako je například cython-hidapi v pythonu označovaný pouze jako modul hid. ==== Vývojová verze ==== Nejaktuálnější vývojová verze knihovny je k dispozici na githubu. Tu nainstalujeme následujícím způsobem. Výhoda využití gitu je v tom, že knihovnu můžeme snadno upravovat a vyvíjet. git clone https://github.com/MLAB-project/pymlab.git cd pymlab git checkout dev sudo python setup.py develop Následně je užitečné úpravy knihovny zpětně vystavit na githubu, nebo vytvořit pull-request. ==== i2c-tools ==== [[https://github.com/MLAB-project/i2c-tools|i2c-tools]] je balík nástrojů pro manipulaci s I²C zařízeními v prostředí Linuxu. Mimo jiné ale obsahuje zdrojové kódy knihovny python-smbus, která je důležitá pro fungování pymlabu. git clone https://github.com/MLAB-project/i2c-tools.git cd i2c-tools make EXTRA="py-smbus" sudo make install cd py-smbus sudo python setup.py install sudo ldconfig Verze I2C-tools umístěná na MLAB githubu má oproti verzi z repozitářů Ubuntu přidané metody read_i2c_block a write_i2c_block, které umožňují komunikaci se zařízeními, kterým nestačí SMBus podmnožina příkazů sběrnice. ===== Použití ===== Základní vlastností knihovny pymlab je možnost nadefinovat strukturu sítě senzorů. Obecně jde o síť zařízení se kterými komunikovat uživatelský kód. Definice sítě vypadá například takto: cfg = config.Config( i2c = { "port": '/dev/ttyUSB0', # I2C bus number eg 0 or system device address in case of serial driver'/dev/ttyUSB0'. "device": 'serial', # here you can explicitly set I2C driver with 'hid', 'smbus', 'serial' }, bus = [ { "type": "i2chub", "address": 0x73, "children": [ {"name": "thermopile", "type": "thermopile01", "channel": 4, }, ], }, ], ) Jde o JSON zápis struktury. Blok i2c definuje kořenové komunikační rozhraní. Ten má dva parametry. Parametr //port// určuje systémové rozhraní které bude využito pro komunikaci. Může mít hodnoty buď číslo systémového [[cs:i2c|I2C]] portu na který se má knihovna pymlab připojit. Nebo řetězec, který určuje adresu k systémovému souboru, který se má použít pro komunikaci. Volba "device" pak může mít několik hodnot podle typu rozhraní, které má být použito. Aktuálně jsou podporovány tyto typy: * 'smbus' - Systémové smbus/I²C rozhraní * 'hid' - Připojení přes HIDAPI, což je například případ použití modulu [[cs:usbi2c|]] * 'serial' - Systémové seriové rozhraní například kombinace [[cs:usb232r|]] a [[cs:i2c232v|]] Pokud má //device// hodnotu //None//, nebo není vůbec zadaný, tak se knihovna pokusí sekvenčně použít jednotlivé drivery. Pro přímý přístup ke sběrnici I²C bez sudo je třeba být ve skupině i2c. Uživatele tam přidáme například takto. sudo adduser kaklik i2c Změna se projeví po odhlášení a přihlášení uživatele. ---- Poznámka: Pro seznámení se s jazykem [[http://www.tutorialspoint.com/python/|Python]] můžete využít [[http://physics.muni.cz/~janak/pyzen/|Zenovou školu Pythonu]] od Zdeňka Janáka. ===== TODO ===== ==== Grafické rozhraní ==== Grafické rozhraní by v kombinaci s touto knihovnou mohlo být využito pro definování síťové topologie a případné vykreslování grafů ze senzorů zapojených do sítě. Jedním z již hotových nástrojů, které by pro takovou aplikaci bylo možné použít je například [[http://www.pyqtgraph.org/|PyQtGraph]] {{ :cs:sw:flowchart.png?direct&500 |}} ===== Python interpreter pro ARM ===== Pro použití Python frameworku na vyčítání čidel přímo z některého mikrokonroleru připojeného na sběrnici by bylo užitečné použít Python interpretr pro ARM. Například by mohl být použitelný [[https://micropython.org/|MicroPython]]. ===== Cubesat Space Protocol ===== Pro aplikace kde je potřeba větší spolehlivost, ale je výhodné zachovat fyzickou vrstvu [[cs:i2c|I2C]] by mohlo být výhodné implementovat [[https://en.wikipedia.org/wiki/Cubesat_Space_Protocol|Cubesat Space Protocol]].