Jste zde

Meranie teploty s IQRF v linuxe

tucnak-320.png

IQRF je platforma ,ktorá je čitatelom HW.cz už celkom známa. Poznáme jej výhody (nevýhody :)), dokážeme programovať aplikácie. Medzi jednu z nevýhod by som zahrnul aj poproru iba pre os windows. Pre zarytých linuxákov a ľudí propagujúcich open source je to neakceptovateľné a preto som sa rozhodol niektoré veci v tejto oblasti vyriešiť resp. urobiť nanovo.

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:

  1.  ./configure
  2.  make
  3.  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.

Okno testovacieho programu.  

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

 

PřílohaVelikost
Package icon temp_meter.zip2.16 KB
Hodnocení článku: 

Komentáře

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.