phone: 02-954-2408-9, 089-514-8111

Learning XBee With XBee Series 2 Starter Kit

Mar 24,2017

XBee Learning Practice with XBee Series 2 Starter Kit

 

 

1. XBee คืออะไร
           XBee โมดูล RF Transceiver (อุปกรณ์รับ-ส่งสัญญาณคลื่นความถี่วิทยุ) ผลิตโดยบริษัท Digi International® Inc. รับส่งแบบ Half Duplex ความถี่ย่าน 2.4 GHz เป็นอุปกรณ์ที่มี Microcontroller และ RF IC อยู่ภายใน มีการจัดการโดยใช้พลังงานต่ำ ใช้งานง่าย มี interface ที่ใช้รับและส่งข้อมูลเป็น UART (LVTTL) ซึ่งเหมาะสำหรับทางด้านไมโครคอนโทรลเลอร์ ต่อเข้ากับ UART ของไมโครคอนโทรล เลอร์ได้เลย
           โมดูล XBee สามารถใช้งานตามมาตรฐาน ZigBee ได้ โดยไม่ต้องเขียนโปรแกรมสร้างเครือข่าย ZigBee เลย เพราะทางผู้ผลิตได้จัดทำเฟิร์มแวร์ที่โหลดเข้าไปในตัว XBee ให้สามารถเซตพารามิเตอร์ผ่าน Software Interface ที่เรียกว่าโปรแกรม X-CTU ผ่านทาง AT command (เหมือนกับการควบคุม GSM Module) หรือผ่านทางการรับ-ส่งข้อมูลด้วยไมโครคอนโทรลเลอร์ได้อย่างง่ายดาย โดยเมื่อเซต XBee ให้ทำงานเป็นอุปกรณ์ในเครือข่าย ZigBee แล้วเราจะเรียก XBee แต่ละตัวว่าเป็น Node
2. ZigBee คืออะไร
           ZigBee เป็นมาตรฐานสากลในการสื่อสารแบบไร้สายสำหรับงานประเภท Personal Area Networks กำหนดโดยกลุ่ม ZigBee Alliance เป็นมาตรฐานที่มีอัตราการรับ-ส่งข้อมูลสูงสุดไม่เกิน 250 kbit/s ใช้พลังงานต่ำ เหมาะสำหรับงานที่ไม่ต้องการอัตราการรับ-ส่งข้อมูลที่สูงมาก แต่มีจุดเด่นที่ประหยัดพลังงาน และมีระยะรับ-ส่งที่ไม่ไกล เช่น Monitoring Wireless Sensor Network Smart Home เป็นต้น มีข้อแตกต่างกับมาตรฐานไร้สายอื่นดังภาพ

 

 

           ZigBee กำหนดย่านความถี่ใช้งานตามมาตรฐานไว้ 3 ย่านความถี่คือ ย่าน 2.4 GHz ย่าน 915 MHz และย่าน 868 MHz โดยแต่ละย่านจะมีช่องสัญญาณ 16 ช่อง 10 ช่อง และ 1 ช่อง ตามลำดับ ส่วน อัตรารับส่งข้อมูล (ทางอากาศ) จะอยู่ที่ 250 Kbps 40 Kbps และ 0 Kbps ตามลำดับเช่นกัน

 

 

           ZigBee นำ Physical Layer และ MAC Layer ของ IEEE 802.15.4 ซึ่งเป็นมาตรฐานการกำหนดการสื่อสารไร้สายแบบ WPAN (Wireless Personal Area Network) มาทำงานใน 2 Layer ล่างสุดในเรื่องของ ระดับกำลังสัญญาณ Link Quality Access Control Security แต่ใน Layer ถัดขึ้นไปจะเป็นรูปแบบของ ZigBee

 

 

3. ขนาดและขาต่างๆของโมดูล XBee 
           ขนาดของโมดูล XBee มาตรฐานกว้าง 24.38 mm ยาว 27.61 mm มีขาเชื่อมต่อ 20 ขา แต่ละขาห่างกัน 2.00 mm แต่ถ้าใน XBee รุ่น Pro ความยาวของโมดูลจะยาวขึ้นเป็น 32.94 mm แต่ตำแหน่งและจำนวนของขาเท่าเดิม

 

 

รายละเอียดขาต่างๆ ของ XBee มีดังนี้

 

 

4. ประเภทของโมดูล XBee
           Digi แบ่ง XBee แบ่งออกเป็นรุ่นที่มีคุณสมบัติที่ต่างกันออกไป เช่น XBee DigiMesh 2.4 XBee ZB XBee-PRO XSC เป็นต้น การเชื่อมต่อ XBee ในเครือข่ายเดียวกันต้องใช้ XBee รุ่นเดียวกัน จากนั้นในแต่ละรุ่นจะมีรุ่นย่อยที่มีกำลังส่งหรือเชื่อมต่อสายอากาศต่างกัน เช่น XBee-PRO DigiMesh 2.4 XBee-PRO ZB รุ่นย่อยเหล่านี้สามารถสื่อสารกับรุ่นย่อยอื่นที่มีกำลังส่งต่ำกว่าหรือสูงกว่าได้ เช่น XBee ZB สามารถสื่อสารกับ XBee-PRO ZB หรือ XBee-PRO ZB Wire Antenna ได้ แต่ไม่สามารถสื่อสารข้ามรุ่นกับ XBee-PRO XSC ได้ มีรายละเอียดดังนี้
XBee 802.15.4 (หรือเรียกว่า XBee Series 1)
           เป็นโมดูล XBee 802.15.4 ใช้ความถี่ 2.4 GHz บนมาตรฐาน IEEE 802.15.4 แต่ไม่มีชั้น Stack Layer ของ ZigBee อยู่ การเชื่อมต่อแบบ Mesh จึงใช้ firmware ของทาง Digi ชื่อว่า DigiMesh โดยใน Series 1 ก็จะแบ่งรุ่นตามกำลังส่งดังนี้

 

 

            *ระยะ (Line-of-Sight) โดยระยะที่ทำได้ขึ้นอยู่กับสภาพแวดล้อมของระบบและสายอากาศที่ใช้ เนื่องจากความถี่ 2.4 GHz เป็นย่านความถี่สูง ทำให้อัตราการลดทอนสัญญาณสูงและสิ่งกีดขวางมีผลอย่างมากกับระยะทางที่ใช้งานได้
Series 2 (หรือเรียกว่า XBee Series 2)
            เป็นโมดูล XBee ใช้ความถี่ 2.4 GHz บนมาตรฐาน IEEE 802.15.4 และมี Stack Layer ของ ZigBee โดยใน Series 2 แบ่งรุ่นตามกำลังส่งดังนี้

 

 

XBee 900MHz
             เป็นโมดูล XBee ความถี่ 900 MHz ทำให้ระยะการรับส่งได้ไกลกว่าทั้ง Series 1 และ 2 โดยจะมีรุ่นย่อย 2 รุ่นที่เป็นเฟิร์มแวร์ที่มีการเชื่อมต่อแบบ Point to Multipoint และ DigiMesh อัตราการรับส่งข้อมูลสุงสุดที่ 200 Kbps กำลังส่ง3.3V ที่ 250 mW โดยยังมีรุ่นย่อยออกเป็นประเภทของสายอากาศต่างๆ ***สำหรับ XBee 900MHz ทางร้านไม่ได้นำมาจำหน่ายเนื่องจากเป็นช่วงความถี่ที่ต้องขออนุญาตในการใช้งานจาก กสทช. เป็นการเฉพาะ

 

 

XBee Wifi
             เป็นโมดูล XBee ความถี่ 2.4 GHz บนมาตรฐาน IEEE 802.11 (มาตรฐานเดียวกับ Wireless LAN) นอกจากสามารถสื่อสารกับโมดูล XBee Wifi ด้วยกันเองได้แล้วยังสามารถสื่อสารกับอุปกรณ์ WiFi อื่นได้ หรือนำโมดูลเชื่อมต่อกับ Internet สามารถเชื่อมต่อกับ Cloud ที่ทาง Digi ให้บริการแบบคิดค่าบริการรายเดือนตามจำนวนอุปกรณ์ที่เชื่อมต่อ อัตราการรับส่งข้อมูลสุงสุดที่ 72Mbps กำลังส่ง 3.3V ที่ 309mA สำหรับ XBee Wifi ทางร้านยังไม่ได้นำเข้ามาจำหน่าย

 

 

5. เริ่มต้นการใช้งาน XBee
             ในงานต้องมีการกำหนดรูปแบบการเชื่อมต่อ (Topology) ก่อนโดยต้องทราบหน้าของ XBee แต่ละตัวที่จะอยู่บนเครือข่ายก่อน ซึ่งมี 3 แบบคือ
             1. Coordinator มีหน้าที่สร้างการสื่อสาร เชื่อมโยงเครือข่ายระหว่าง End Device กับ Router หรือ Coordinator กับ Coordinator ด้วยกันเอง หรือ Coordinator กับ Router เป็นตัวกำหนด address ให้กับ device ที่อยู่ในวงเครือข่ายไม่ให้ซ้ำกัน ดูแลจัดการเรื่องการ Routing เส้นทางเรียกว่าเป็น Full-Function Device (FFD)
             2. End Device เป็นอุปกรณ์ที่ใช้รับสัญญาณจากเซ็นเซอร์ที่อยู่ปลายทางหรือส่งออกเอาท์พุตที่ปลายทาง ใช้พลังงานต่ำในการทำงานเรียกว่า Reduced-Function Device (RFD) หรืออาจกำหนดให้ทำงานแบบ FFD ในบางกรณี ขึ้นอยู่กับเซ็นเซอร์หรืออุปกรณ์ปลายทางที่ใช้เชื่อมต่อด้วย
             3. Router มีหน้าที่รับ-ส่งข้อมูลในเส้นทางต่างๆ ของเครือข่ายถือว่าเป็น FFD
6. รูปแบบ Topology
Point to Point
การเชื่อมต่อแบบตัวต่อตัวโดยกำหนดให้ตัวแรกเป็น Coordinator ส่วนอีกตัวกำหนดเป็น Router

 

 

Star (Broadcast)
การเชื่อมต่อแบบ Star หรือแบบ Broadcast เป็นการรับส่งข้อมูลแบบไม่เฉพาะเจาะจงจุดหมายปลายทาง โดย XBee ทุกตัวที่อยู่ในระบบเครือข่ายเดียวกันสามารถรับข้อมูลได้ทุกตัว ประกอบไปด้วย XBee ที่ทำงาน 2 รูปแบบคือ แบบที่ 1 เป็น Coordinator ทำหน้าที่สร้างเครือข่าย และแบบที่ 2 เป็น End Device ทำหน้าที่เป็นลูกข่าย

 

 

Cluster Tree
การรับส่งข้อมูลแบบส่งผ่านหรือส่งต่อ เช่น A ต้องการติดต่อ กับ C แต่ C อยู่ไกลจาก A จน A ไม่สามารถ ติดต่อกับ C ได้โดยตรง แต่เนื่องจากมี B อยู่ระหว่าง A กับ C ดังนั้น Cluster Tree จะใช้ B เป็นเหมือน ตัวกลางเชื่อมการติดต่อ (Repeater) ระหว่าง A กับ C

 

 

Mesh
การเชื่อมต่อเครือข่ายแบบ Mesh เป็นโครงข่ายที่มีประสิทธิภาพสูงเนื่องจากข้อมูลสามารถส่งไปถึงเป้าหมายได้หลายเส้นทาง ทำให้ระบบสามารถรับ-ส่งข้อมูลไปยังจุดหมายปลายทางได้แน่นอนแม้จะเกิดความเสียหายของระบบในบางส่วนก็ตาม (ทั้งนี้ขึ้นอยู่กับการออกแบบระบบของผู้ใช้ด้วย) ระบบนี้จึงเป็นระบบที่ได้รับความนิยมเป็นอย่างมาก

 

 

7. โหมดการสื่อสารของ XBee
XBee รองรับการใช้งานได้ 2 โหมด คือ AT mode และ API mode
            - AT mode ตัว XBee มีการติดต่อกันและรับ-ส่งข้อมูลกันตลอดเวลา (Transparent) ข้อมูลที่ส่งจาก XBee ตัวหนึ่งจะส่งไปยัง XBee อีกตัวหนึ่งตามที่อยู่ปลายทาง (Destination Address) ที่กำหนดไว้ในรีจิสเตอร์ของโมดูลนั้นๆ โดยสามารถเปลี่ยนเป็นโหมดคำสั่งเพื่อปรับเปลี่ยนค่าพารามิเตอร์บนโมดูล XBee ได้เรียกว่าการใช้คำสั่ง AT
            - API mode เป็นการส่งข้อมูลที่มียืดหยุ่นมากกว่า แต่ก็ซับซ้อนกว่าด้วยเล็กน้อย โดยต้องรับ-ส่งข้อมูลตามโปรโตคอลที่กำหนดไว้

ทดลองเชื่อมต่อ XBee Module ด้วยชุด XBee Series 2 Starter Kit

 

 

(ดูรายละเอียดสินค้า PROMO03 : XBee Series 2 Starter Kit)

             ในการทดลองนี้เชื่อมต่อ XBee Module จำนวน 2 ตัวเข้าด้วยกัน (ใช้อุปกรณ์ในชุดของ XBee Starter Kit) โดยเลือกการเชื่อมต่อแบบ Point to Point โหมด AT ซึ่งในชุด XBee Series 2 Starter Kit ประกอบด้วยอุปกรณ์ต่างๆ ที่ทำหน้าที่

             1. Mini XBee USB Dongle V2 จำนวน 1 ตัว พร้อมสาย Mini USB จำนวน 1 เส้น ใช้สำหรับกำหนดค่า Config ต่างๆ ให้กับ XBee ผ่านโปรแกรม X-CTU หรือเชื่อมต่อ XBee เพื่อสือสารกับเครื่องคอมพิวเตอร์เมือเสียบโมดูลเข้าที่พอร์ต USB ของเครื่องคอมพิวเตอร์จะมองเห็นเป็น Serial Communication (COM) พอร์ต

 

 

 2. โมดูล XBee Series 2 จำนวน 2 ตัว รุ่น XBee 2mW U.FL Connection - Series 2

 

 

    3. เสาอากาศ 2.4GHz Duck Antenna 3 dBi with RP-SMA (Male) จำนวน 2 ต้น

 

 

             4. Interface Cable RP-SMA (Female) to U.FL จำนวน 2 เส้น เป็นสายแปลงหัวแบบ U.FL เป็นหัวแบบ RP-SMA สำหรับเชื่อมต่อระหว่างโมดูล XBee และเสาอากาศเข้าด้วยกัน

 

 

5. บอร์ด Arduino Uno R3 จำนวน 1 บอร์ด สำหรับใช้ทดลองติดต่อกับโมดูล XBee

 

 

 6. สาย USB type B จำนวน 1 เส้น สำหรับใช้โหลดโปรแกรมและจ่ายไฟให้กับบอร์ด Arduino

 

 

             7. XBee Shield ใช้เชื่อมต่อโมดูล XBee ต่อเข้ากับบอร์ด Arduino โดยบน Shield มีวงจรลดแรงดันแยกจากบอร์ด Arduino เนื่องจากโมดูล XBee ระดับแรงดันขา I/O เป็น 3.3 โวลต์ แต่ Arduino Uno R3 เป็น 5 โวลต์จึงต้องแปลงแรงดันก่อน มีไฟ LED แสดงสถานะของโมดูลทั้ง 4 (PWR RSSI ASSOC ON/SLEEP) ปุ่ม Reset ทั้งโมดูล Arduino และ XBee และคอนเน็คเตอร์เพื่อเลือกขาเชื่อมต่อกับ XBee

 

 

การกำหนดค่าใน X-CTU มีขั้นตอนดังนี้ 
1. ติดตั้งโปรแกรม X-CTU โดยดาวน์โหลดไฟล์ติดตั้งได้จาก http://www.digi.com/products/wireless-wired-embedded-solutions/ZigBee-rf-modules/xctu

 

 

ถ้าข้อมูลเกินกว่าหรือต่ำกว่าที่กำหนดไว้ใน Set Limit ของแต่ละค่า โปรแกรมจะแสดงข้อความในช่อง Alert เป็น Warning

 

 

โดยโค้ดโปรแกรมบนเครื่องคอมพิวเตอร์มีดังนี้ 

 

1
2
3
private void serial_XBee_DataReceived(object sender, SerialDataReceivedEventArgs e) {
    tbx_data_in.BeginInvoke(new InvokeDelegate(updateTextbox_));
}

 

             เมื่อมีข้อมูลส่งเข้ามาที่ Serial port ที่เชื่อมต่อจะไปคอนโทรล Text Box tbx_data_in เข้าไปทำงานในฟังก์ชั่น updateTextbox()

1
2
3
buffer_raw = serial_XBee.ReadExisting();
tbx_data_in.Text += buffer_raw;
buffer_process += buffer_raw;

 

             ในฟังก์ชั่น updateTextbox() จะอ่านค่าจาก Serial เก็บไว้ในตัวแปร buffer_raw ซึ่งจะส่งค่าไปยัง Text Box tbx_data_in และตัวแปร buffer_process 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (buffer_process.IndexOf("Stop") != -1) {
           int index_humid = buffer_process.IndexOf("Humidity:");
           int index_temp = buffer_process.IndexOf("Temperature:");
           int index_heat = buffer_process.IndexOf("Heat index:");
           int index_air = buffer_process.IndexOf("Air Quality:");
           str_humid = buffer_process.Substring(index_humid + 10, 5);
           str_temp = buffer_process.Substring(index_temp + 13, 5);
           str_heat = buffer_process.Substring(index_heat + 12, 5);
           str_air = buffer_process.Substring(index_air + 12);
           int index_air_value = str_air.IndexOf(":");
           str_air_value = str_air.Substring(index_air_value + 1, 3);
           lb_state_ss_temp.Text = str_temp + " °C";
           lb_state_ss_humid.Text = str_humid + "%";
           lb_state_ss_air.Text = str_air_value;
           buffer_process = "";
           count++;

 

             นำตัวแปร buffer_process มาเลือกเฉพาะข้อมูลที่ต้องการเก็บข้อความที่ต้องไว้ในตัวแปร str_humid str_temp str_heat str_air นำไปแสดงในแท็บหน้า Overview 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
try {
    temp_value =  Convert.ToDouble(str_temp);
    humid_value = Convert.ToDouble(str_humid);
    heat_value = Convert.ToDouble(str_heat);
    air_value = Convert.ToInt32(str_air_value);
 
    index_histo_temp = (int)(temp_value * 100);
    index_histo_humid = (int)(humid_value * 100);
    index_histo_heat = (int)(heat_value * 100);
 
   }
catch {
    MessageBox.Show("Temp:" + str_temp + "\r\n" +
    "Humid:" + str_humid + "\r\n" +
    "Heat:" + str_heat + "\r\n" +
    "Air:" + str_air);
     }

 

            แปลงข้อความในตัวแปรทั้ง 4 (str_humid str_temp str_heat str_air) เป็นข้อมูลตัวเลข

ถ้ามีข้อผิดพลาดเกิดขึ้นให้แสดง Message Box พร้อมข้อมูลที่รับเข้ามา  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---------- Graw graph & histogram Temp----------//
chart_graph_temp.Series[0].Points.AddXY(count, temp_value);
chart_histo_temp.Series[0].Points.AddXY(temp_value, histogram_temp[index_histo_temp] += 1);
//---------- Graw graph & histogram Temp----------//
 
//---------- Graw graph & histogram Humid----------//
chart_graph_humid.Series[0].Points.AddXY(count, humid_value);
chart_histo_humid.Series[0].Points.AddXY(humid_value, histogram_humid[index_histo_humid] += 1);
//---------- Graw graph & histogram Humid----------//
 
//---------- Graw graph & histogram Heat----------//
chart_graph_heat.Series[0].Points.AddXY(count, heat_value);
chart_histo_heat.Series[0].Points.AddXY(heat_value, histogram_heat[index_histo_heat] += 1);
//---------- Graw graph & histogram Heat----------//
 
//---------- Graw graph & histogram Air----------//
chart_graph_air.Series[0].Points.AddXY(count, air_value);
chart_histo_air.Series[0].Points.AddXY(air_value, histogram_air[air_value] += 1);
//---------- Graw graph & histogram Air----------//

 

นำข้อมูลตัวเลขที่ได้จากการแปลงข้อความข้างต้นเก็บข้อมูลเซ็นเซอร์ทั้ง 4 มาวาด Graph และ Histogram