V nasledujúcich seriáloch sa budem snažťt opísať programovanie a testovanie iqrf modulčekov priamo v linuxe a tiež zopár príkladov vývoja linuxovych aplikacií pre komunikáciu s iqrf modulčekmi pomocou usb zbernice.
LIBIQRF
Libiqrf je knižnica na prístup k iqrf zariadeniam ,ktoré su pripojené k hostu cez usb rozhranie. Táto knižnica tvorí základ tiež pre IDE a ostatné testovacie aplikácie ,ktoré budú opísané v ďalších častiach.
Knižnica poskytuje zopár funkcií potrebných pre prácu s iqrf.
Exportované funckie:
- iqrf_init_device - inicializácia a deinicializácia zariadenia
- iqrf_release_device
- iqrf_reset_device - reset zariadenia
- iqrf_get_status - vráti SPI status
- iqrf_read_write_spi_cmd_data - zápis a čítanie dát zo zariadenia
Knižnicu je možné stiahnut tu: github
Kompilácia:
- ./configure
- make
- sudo make install (pre opensuse je cesta k nainštalovanej knižnici v /usr/local/lib)
Knižnica sa dá samozrejme skompilovať aj pre iné architektúry (arm, ppc ...). Knižnica bola použitá na vytvorenie programu pre sledovanie zmien na platforme freerunner.
ZOBRAZOVANIE NAMERANEJ TEPLOTY Z IQRF NA LINUXE
Testovací program zobrazuje teplotu ,ktoru posiela periodicky modulček cez USB. Základ tvorí libiqrf a aplikácia napisaná v QT. Aplikácia periodicky testuje SPI status (každú sekundu). Ak su dáta dostupné zobrazí ich.
Ukážka kódu:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); this->timer = new QTimer(this); /* inicializacia iqrf zariadenia */ if(iqrf_init_device() < 0) { qDebug() << "No device connected"; return; } /* time 1s */ connect(timer, SIGNAL(timeout()), this, SLOT(update_temperature())); timer->start(1000); } void MainWindow::update_temperature() { int stat = 0, len; unsigned char buff[35]; memset(buff, 0 , sizeof(buff)); /* poziadame o status SPI*/ stat = iqrf_get_spi_status(); switch(stat) { case COMMUNICATION_MODE: printf("SPI ready (communication mode)\n"); break; default: if (stat >= 0x40 && stat <= 0x63) { printf("SPI data %x\n", stat); /* precitame data z SPI */ len = iqrf_read_write_spi_cmd_data(buff, stat-0x40, 0); printf("len = %d\n", len); buff[len] = '\0'; QString str; str.append((char *)&buff[0]); /* zobrazenie */ ui->label->setText(str); } break; } }
Celý zdrojový kód s príkladom si možete stiahnuť v prílohe.
Pre správne fungovanie je treba mať nainštalovanú knižnicu libusb-devel a libiqrf.
Download a odkazy:
Domovská stránka autora: open-nandra.com
Domovská stránka IQRF: www.iqrf.org
Komentáře
Super snaha
Díky za tento článek. IQRF jsou zajímavé moduly, ale protože už windows nepoužívám tak pro mě nebyly úplně dostupné. Doufám, že se mi podaří tuto platformu ovládnout i z linuxu.
IQRF v linuxe
Díky za článek, díky Linuxu se tato platforma stává velmi zajímavou.