Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:communication:zigbee [2011/02/25 21:09] eero.valjaotset:examples:communication:zigbee [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +<pagebreak>
 ====== ZigBee ====== ====== ZigBee ======
  
-//Vajalikud teadmised: [HW] [[et:hardware:homelab:controller]], [AVR] [[et:avr:usart]], [LIB] [[et:software:homelab:library:usart]], \\ [LIB] [[et:software:homelab:library:module:lcd_alphanumeric]]//+//Vajalikud teadmised:  
 +[HW] [[et:hardware:homelab:controller]], [HW] [[et:hardware:homelab:combo]],  
 +[AVR] [[et:avr:usart]],  
 +[LIB] [[et:software:homelab:library:usart]], \\  
 +[LIB] [[et:software:homelab:library:module:lcd_graphic]]//
  
 ===== Teooria ===== ===== Teooria =====
Line 7: Line 12:
 [{{  ::examples:communication:xbee.jpg?220|XBee moodul.}}] [{{  ::examples:communication:xbee.jpg?220|XBee moodul.}}]
  
-ZigBee on odav, lihtne ja madala voolutarbega standard juhtmevabade võrkude rakendusteks. See on mõeldud kasutamiseks madala andmeedastuskiirusega lihtsatesse juhtmevaba ühendust nõudvatesse seadmetesse, näiteks igasugu infotablood, tööstuslik- ja koduautomaatika. ZigBee iseorganiseeruv võrk on üsna säästliku energiatarbega erinevalt Bluetooth rakendustest, moodulite ärkamise ajad on kiired ja ärkveloleku aeg on minimiseeritud.+ZigBee on odav, lihtne ja madala voolutarbega IEEE 802.15.4 standardil baseeruv spetsifikatsioon juhtmevabade võrkude rakendusteks. See on mõeldud kasutamiseks madala andmeedastuskiirusega lihtsatesse juhtmevaba ühendust nõudvatesse seadmetesse, näiteks igasugu infotablood, tööstuslik- ja koduautomaatika. ZigBee iseorganiseeruv võrk on üsna säästliku energiatarbega erinevalt Bluetooth rakendustest, moodulite ärkamise ajad on kiired ja ärkveloleku aeg on minimiseeritud. ZigBee töötab 2.4 GHz sagedusalas.
  
 ===== Praktika ===== ===== Praktika =====
  
-Kodulabori sidemooduli plaadil on alus ZigBee mooduli „Xbee“ paigaldamiseks. Suhtlus selle Xbee mooduliga toimub kasutades kontrolleri USART liidest. ZigBee funktsioonide sees lülitatakse moodul ümber AT käsustiku peale saates talle "+++" ja edasine seadistamine toimub vastavate AT käskude saatmisega. Kui ühendus on teise mooduliga loodud, siis minnakse tagasi andmeühenduse peale.+Kodulabori sidemooduli plaadil on alus ZigBee mooduli „Xbee“ paigaldamiseks. Suhtlus selle Xbee mooduliga toimub kasutades kontrolleri USART liidest. ZigBee funktsioonide sees lülitatakse moodul ümber AT käsustiku peale saates talle "+++" käsu ja edasine seadistamine toimub vastavate AT käskude saatmisega. Kui ühendus on teise mooduliga loodud, siis minnakse tagasi andmeühenduse peale.
  
-Näiteprogramm otsib esmalt ümbruskonnast teisi ZigBee seadmeid ja vastav abifunktsioon kuvab nende aadresside nimekirja ekraanil. Globaalsel 0000FFFF aadressil on eriomadus, sinna saates saavad andmed kätte kõik moodulid võrgus. Näites luuakse ühendus ühe soovitud mooduliga, misjärel saab nuppe vajutades vastastikku muuta moodulite LED-ide olekut.+Näiteprogramm otsib esmalt ümbruskonnast teisi ZigBee seadmeid ja vastav abifunktsioon kuvab nende aadresside nimekirja ekraanil. Globaalsel 0000FFFF aadressil on eriomadus, sinna saates saavad andmed kätte kõik võrgus kättesaadavad moodulid. Näites luuakse ühendus ühe soovitud mooduliga, misjärel saab nuppe vajutades vastastikku muuta moodulite LED-ide olekut.
  
 <code c> <code c>
 #include <homelab/usart.h> #include <homelab/usart.h>
-#include <homelab/module/lcd_alpha.h> 
 #include <homelab/module/lcd_gfx.h> #include <homelab/module/lcd_gfx.h>
 #include <homelab/delay.h> #include <homelab/delay.h>
Line 24: Line 28:
 //Lisame ZigBee mooduli toe //Lisame ZigBee mooduli toe
 #include <homelab/module/zigbee.h> #include <homelab/module/zigbee.h>
 +#include <homelab/xmega/clksys_driver.h>
  
 // USART liidese määramine // USART liidese määramine
-usart port = USART(1);+static usart port = USART(1);
  
 // LEDid ja nupud määrata // LEDid ja nupud määrata
-pin leds[3] = { PIN(C, 5), PIN(C, 4), PIN(C, 3) }; +pin leds[3] = { PIN(H, 5), PIN(H, 4), PIN(H, 3) }; 
-pin buttons[3] = { PIN(C, 0), PIN(C, 1), PIN(C, 2) };+pin buttons[3] = { PIN(H, 0), PIN(H, 1), PIN(H, 2) };
  
 // ZigBee moodulite max arv võrgus + broadcast aadress + 1 // ZigBee moodulite max arv võrgus + broadcast aadress + 1
Line 43: Line 48:
 int main(void) int main(void)
 { {
-    uint8_t adr = 0; //ühendatava mooduli jrk. nimekirjas + uint8_t adr = 1; //ühendatava mooduli jrk. nimekirjas
-  +
-    // seadista LEDide ja nuppude I/O pordid +
-    for (int i=0; i<3; i++) +
-    { +
-        pin_setup_output(leds[i]); +
-        pin_setup_input(buttons[i]); +
-    }+
  
-    // USART liidese seadistamine ZigBee side jaoks + // seadista LEDide ja nuppude I/O pordid 
-    usart_init_async(port, + for (int i=0; i<3; i++) 
-                     USART_DATABITS_8, + { 
-                     USART_STOPBITS_ONE, + pin_setup_output(leds[i]); 
-                     USART_PARITY_NONE, + pin_setup_input(buttons[i]); 
-                     USART_BAUDRATE_ASYNC(9600));+ }
  
-    // LCD ekraani algseadistamine + // USART liidese seadistamine ZigBee side jaoks 
-    lcd_gfx_init();+ usart_init_async(port, 
 +                  USART_DATABITS_8, 
 +                  USART_STOPBITS_ONE, 
 +                  USART_PARITY_NONE, 
 +                  USART_BAUDRATE_ASYNC(57600));
  
-    // Ekraani puhastamine + // LCD ekraani algseadistamine 
-    lcd_gfx_clear();+ lcd_gfx_init();
  
-    // Taustavalgustuse tööle lülitamine + // Ekraani puhastamine 
-    lcd_gfx_backlight(true);+ lcd_gfx_clear();
  
-    //Oota kuni teisi ZigBee mooduleid otsitakse läbiümbrusest + // Taustavalgustuse tööle lülitamine 
-    lcd_gfx_clear(); + lcd_gfx_backlight(true);
-    lcd_gfx_goto_char_xy(0, 0); +
-    lcd_gfx_write_string("  ZigBee demo");+
  
-    lcd_gfx_goto_char_xy(0, 1); + //Oota kuni teisi ZigBee mooduleid otsitakse läbiümbrusest 
-    lcd_gfx_write_string("Otsin...");+ lcd_gfx_goto_char_xy(0, 0); 
 + lcd_gfx_write_string("  ZigBee demo");
  
-    // Otsib ümbrusest teisiZigBee mooduleid + lcd_gfx_goto_char_xy(01); 
-    // täidab nodelist massiivi leitud moodulite infoga. + lcd_gfx_write_string("Otsin...");
-    zigbee_find_nodes(portnodelist, ZIGBEE_MAX_NODES);+
  
-    //lcd_gfx_clear(); + // Otsib ümbrusest teisiZigBee mooduleid 
-    lcd_gfx_goto_char_xy(0, 1); + // täidab nodelist massiivi leitud moodulite infoga. 
-    lcd_gfx_write_string("Leitud:  ");+ zigbee_find_nodes(port, nodelist, ZIGBEE_MAX_NODES);
  
-    // Kuvab ekraanil leitud moodulite nimekirja + //lcd_gfx_clear(); 
-    // (mis reale kirjutab, kust võtab adr, mitu tk max) + lcd_gfx_goto_char_xy(0, 2); 
-    zigbee_lcd_show_nodes(2, nodelist, ZIGBEE_MAX_NODES);  + lcd_gfx_write_string("Leitud:  ");
-    hw_delay_ms(3000); +
-    lcd_gfx_clear(); +
-  +
-    // Kuvab ekraanil ühendamise teate +
-    lcd_gfx_goto_char_xy(0, 0); +
-    lcd_gfx_write_string("Yhendan..."); +
-    lcd_gfx_goto_char_xy(0, 1); +
-    //kuvab ainult aadressi tagumise osa (8 tähemärki) +
-    lcd_gfx_write_string((nodelist + adr)->address64l); +
-  +
-    // Seadista ZigBee saatma infot valitud ZigBee nodele, +
-    // antud juhul esimesele [0] +
-    // (mis porti kasutab, kust võtab adr) +
-    zigbee_set_destination(port, &nodelist[adr]);+
  
-    // Joonistab ekraanile infot + // Kuvab ekraanil leitud moodulite nimekirja 
-    lcd_gfx_goto_char_xy(00); + // (mis reale kirjutabkust võtab adr, mitu tk max) 
-    lcd_gfx_write_string( ZigBee demo");+ zigbee_lcd_show_nodes(48, nodelist, ZIGBEE_MAX_NODES); 
 + hw_delay_ms(3000); 
 + lcd_gfx_clear();
  
-    lcd_gfx_goto_char_xy(0, 1); + // Kuvab ekraanil ühendamise teate 
-    lcd_gfx_write_string("Nupp1: LED1");+ lcd_gfx_goto_char_xy(0, 0); 
 + lcd_gfx_write_string("Yhendan..."); 
 + lcd_gfx_goto_char_xy(0, 1); 
 + //kuvab ainult aadressi tagumise osa (8 tähemärki) 
 + lcd_gfx_write_string((nodelist + adr)->address64l);
  
-    lcd_gfx_goto_char_xy(0, 2); + // Seadista ZigBee saatma infot valitud ZigBee nodele, 
-    lcd_gfx_write_string("Nupp2: LED2");+ // antud juhul esimesele [0
 + // (mis porti kasutabkust võtab adr
 + zigbee_set_destination(port, &nodelist[adr]);
  
-    // Hoia meeles eelmist nuppu selleks, et vältida olukorda, + lcd_gfx_clear(); 
-    // kus nuppu all hoides tuleb sada nupuvajutusi järjest. + // Joonistab ekraanile infot 
-    // Algatuseks olgu see -1 ehk ükski nupp pole all. + lcd_gfx_goto_char_xy(0, 0); 
-    int8_t previousButton = -1;+ lcd_gfx_write_string("  ZigBee demo");
  
-    // Lõputu tsükkel moodulite andmetevahetuse näitamiseks + lcd_gfx_goto_char_xy(0, 1); 
-    while (true+ lcd_gfx_write_string("Nupp1: LED1");
-    { +
-        int8_t button; //muutuja nupuvajutuse registreerimiseks+
  
-        // Oota nuppu 1 millisekund + lcd_gfx_goto_char_xy(0, 2); 
-        button = wait_button(1);+ lcd_gfx_write_string("Nupp2: LED2");
  
-        // Kui eelmises tsüklis oli nupp üleval ja nüüd on all + // Hoia meeles eelmist nuppu selleks, et vältida olukorda, 
-        if (previousButton == -1 && button != -1) + // kus nuppu all hoides tuleb sada nupuvajutusi järjest. 
-        { + // Algatuseks olgu see -1 ehk ükski nupp pole all. 
-            // teisenda nupu indeks liites A täht + int8_t previousButton = -1;
-     // ja saada teisele moodulile +
-            // A täht on esimene nupp, B täht teine nupp jne +
-            usart_send_char(port, 'A' + button); +
-        }+
  
-        // Loe USART'st + // Lõputu tsükkel moodulite andmetevahetuse näitamiseks 
-        if (usart_has_data(port)+ while (true
-        +
-            // loe bait, teisenda leds massiivi indeksiks + int8_t button; //muutuja nupuvajutuse registreerimiseks
-     //ja muuda väljundit. +
-            pin_toggle(leds[usart_read_char(port) - 'A']); +
-        }+
  
-        // Jäta meelde mis nupp oli hetkel alla vajutatud + // Oota nuppu 1 millisekund 
-        previousButton = button; + button = wait_button(1); 
-    }+ 
 + // Kui eelmises tsüklis oli nupp üleval ja nüüd on all 
 + if (previousButton == -1 && button != -1) 
 +
 + // teisenda nupu indeks liites A täht 
 + // ja saada teisele moodulile 
 + // A täht on esimene nupp, B täht teine nupp jne 
 + usart_send_char(port, 'A' + button); 
 +
 + 
 + // Loe USART'st 
 + if (usart_has_data(port)) 
 +
 + // loe bait, teisenda leds massiivi indeksiks 
 + //ja muuda väljundit. 
 + pin_toggle(leds[usart_read_char(port) - 'A']); 
 +
 + 
 + // Jäta meelde mis nupp oli hetkel alla vajutatud 
 + previousButton = button; 
 + }
 } }
  
Line 151: Line 156:
 int8_t wait_button(uint16_t ms) int8_t wait_button(uint16_t ms)
 { {
-    // Vaikimisi -1 tähendab, et ükski nupp pole vajutatud. + // Vaikimisi -1 tähendab, et ükski nupp pole vajutatud. 
-    int8_t button_nr = -1; + int8_t button_nr = -1; 
-    uint16_t counter = 0; + uint16_t counter = 0; 
-    do + do 
-    +
-        // vaata kas mõni nupp on all + // vaata kas mõni nupp on all 
-        for (uint8_t i=0; i<3; i++) + for (uint8_t i=0; i<3; i++) 
-        +
-            if (!pin_get_value(buttons[i])) + if (!pin_get_value(buttons[i])) 
-            +
-                button_nr = i; + button_nr = i; 
-                break; + break; 
-            +
-        }+ }
  
-        // oota 1 millisekund + // oota 1 millisekund 
-        hw_delay_ms(1);+ hw_delay_ms(1);
  
-        // suurenda millisekundi loendurit + // suurenda millisekundi loendurit 
-        counter++; + counter++; 
-    } while (button_nr == -1 && (counter < ms));+ } 
 + while (button_nr == -1 && (counter < ms));
  
-    return button_nr;+ return button_nr;
 } }
 </code> </code>
 +
et/examples/communication/zigbee.1298668154.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0