Jde o softwarový balík, který umožňuje vytvářet senzorovou síť založenou na komunikačních rozhraních RS232, I²C, Ethernet a USB. Jde o pokusnou implementaci 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 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 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.
Pokud potřebujeme na sběrnici přistupovat přes rozhraní USB pomocí modulu 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 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 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.
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 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.
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 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:
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 Python můžete využít Zenovou školu Pythonu od Zdeňka Janáka.
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 PyQtGraph
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ý MicroPython.
Pro aplikace kde je potřeba větší spolehlivost, ale je výhodné zachovat fyzickou vrstvu I2C by mohlo být výhodné implementovat Cubesat Space Protocol.