Configure Series 2 Xbee (S2C) to work with the Zigbee home automation profile and connect to Samsung SmartThings

Dependencies:   C12832 mbed

Files at this revision

API Documentation at this revision

Comitter:
Cameron
Date:
Thu Sep 15 08:12:49 2016 +0000
Commit message:
V1

Changed in this revision

C12832.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 4c470d040789 C12832.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/C12832.lib	Thu Sep 15 08:12:49 2016 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/chris/code/C12832/#7de323fa46fe
diff -r 000000000000 -r 4c470d040789 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Sep 15 08:12:49 2016 +0000
@@ -0,0 +1,87 @@
+#include "mbed.h"
+#include "C12832.h"
+
+C12832 lcd      (p5, p7, p6, p8, p11);                                  //configure LCD
+Serial xbee     (p9,p10);                                               //Set Serial to XBee
+DigitalOut led1 (LED1);                                                 //configure onboard LEDs
+
+volatile char x;
+volatile int length;
+
+char api_frame_RE[8]    = {0x7E, 0x00, 0x04, 0x08, 0x01, 0x52, 0x45, 0x5F};                             // 0 = Restore Defaults        
+char api_frame_EE[9]    = {0x7E, 0x00, 0x05, 0x08, 0x01, 0x45, 0x45, 0x01, 0x6B};                       // 1 = Encryption Enabled
+char api_frame_KY[24]   = {0x7E, 0x00, 0x14, 0x08, 0x01, 0x4B, 0x59, 0x5A, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6C, 0x6C, 0x69, 0x61, 0x6E, 0x63, 0x65, 0x30, 0x39, 0x9A}; // HA Encryption key  0x5A,69,67,42,65,65,41,6C,6C,69,61,6E,63,65,30,39
+char api_frame_NJ[9]    = {0x7E, 0x00, 0x05, 0x08, 0x01, 0x4E, 0x4A, 0x5A, 0x04};                       // 5A = 90 seconds Node Join Time
+char api_frame_ZS[9]    = {0x7E, 0x00, 0x05, 0x08, 0x01, 0x5A, 0x53, 0x02, 0x47};                       // 2 = Zigbee PRO stack.
+char api_frame_EO[9]    = {0x7E, 0x00, 0x05, 0x08, 0x01, 0x45, 0x4F, 0x01, 0x61};                       // 1 = Encryption Options
+char api_frame_AO[9]    = {0x7E, 0x00, 0x05, 0x08, 0x01, 0x41, 0x4F, 0x03, 0x63};                       // API Output frame = 3 ZDO Pass through.
+char api_frame_WR[8]    = {0x7E, 0x00, 0x04, 0x08, 0x01, 0x57, 0x52, 0x4D};                             // Write. Write parameter values to non-volatile memory
+char api_frame_CB[8]    = {0x7E,0x00,0x04,0x08,0x21,0x43,0x42,0x51};                                    // Create AT command to leave network.
+
+void APIsend(char API_packet[]);                                        //Create subroutine to send API commands  
+void ATsend(char AT_packet[], int Length);                              //Create subroutine to send API commands  
+void Reset();
+
+int main(){
+    lcd.cls();                                                          //clear lcd screen.
+    lcd.locate(0,1);                                                    //locate the cursor.
+    lcd.printf("   Configure Xbee Module");                             //Print to lcd screen
+
+    Reset();  
+    
+    lcd.cls();                                                          //clear lcd screen.
+    lcd.locate(0,1);                                                    //locate the cursor.
+    lcd.printf("   Configuration complete");                            //Print to lcd screen
+}
+
+void APIsend(char API_packet[])
+{
+    led1 = 1;                                                           //Set onboard LED1 on for diagnostics
+    length = (API_packet[2] + 4);                                       //Calaculate packet length using packet length identifier and add the start byte, 2 byte length and checksum.
+    x = 0;
+    while (x < length){                                                 //Send the command
+        xbee.putc(API_packet[x]);
+        x ++;
+    }
+    led1 = 0;                                                           //Set diagnostics LED1 to off
+}
+
+void ATsend(char AT_packet[], int Length)
+{
+    led1 = 1;                                                           //Set onboard LED1 on for diagnostics
+    x = 0;
+    while (x < Length){                                                 //Send the command
+        xbee.putc(AT_packet[x]);
+        x ++;
+    }
+    led1 = 0;                                                           //Set diagnostics LED1 to off
+}
+
+void Reset()
+{    
+    APIsend(api_frame_RE);          //Restore defaults
+    wait(1.5);                      //IMPORTANT- GUARD TIME must be > 1 second
+    ATsend("+++", 3);
+    wait(1.5);                      //IMPORTANT- GUARD TIME must be > 1 second
+    ATsend("ATAP1\r", 6);           //Set XBee to API mode.
+    wait(0.25);
+    ATsend("ATWR\r", 5);            //Write command.
+    wait(0.25);
+    ATsend("ATCN\r", 5);            //Exit command mode.
+    wait(0.25);
+    APIsend(api_frame_EE);          //Encryption enabled.
+    wait(0.1);
+    APIsend(api_frame_KY);          //HA Encryption key.
+    wait(0.1);
+    APIsend(api_frame_EO);          //Encryption Options.    
+    wait(0.1);
+    APIsend(api_frame_NJ);          //Node join time.
+    wait(0.1);
+    APIsend(api_frame_ZS);          //Zigbee Stack.
+    wait(0.1);
+    APIsend(api_frame_AO);          //API output frame.
+    wait(0.1);
+    APIsend(api_frame_WR);          //Write.
+    wait(0.1);
+    APIsend(api_frame_CB);          //Leave network.
+}
\ No newline at end of file
diff -r 000000000000 -r 4c470d040789 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Sep 15 08:12:49 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/6c34061e7c34
\ No newline at end of file