Artikel ini hanya meliputi programming Arduino dengan XBee S2, tidak meliputi setting konfigurasi X-CTU.
Table of Contents
- XBee S2
- Arduino
- Contoh Pembacaan Packet Data
- Contoh Pembacaan Data Digital
- Contoh Pembacaan Data Analog
- Kesimpulan
XBee S2
XBee S2 memakai protocol Zigbee dengan spesifikasi sebagai berikut.
- Operating voltage: 2.1 up to 3.6 volts
- Operating current: 40 mA at 3.3 volts
- Range: 40 meters (indoor), 120 meters (Line of Sight)
- Max analog pin reading: 1.2 volts
- Digital I/O pins: 11
- Analog input pins: 4
- Frequency: ISM 2.4 GHz
- RF data rate: 250 kbps
- Mesh routable
Coordinator
Dalam setiap jaringan wajib mempunyai satu buah Coordinator yang harus selalu online. Coordinator (sesuai dengan namanya) berperan mengatur koordinasi jaringan.
Router
Router tidak wajib ada dalam jaringan, namun dalam suatu jaringan diizinkan untuk mempunyai banyak Router. Router sendiri sanggup berfungsi sebagai relay signal, sama ibarat Coordinator XBee yang berperan sebagai Router harus selalu online.
End Point Device
End Point Device (EPD) tidak wajib ada dalam suatu jaringan, namun dalam suatu jaringan diizinkan untuk mempunyai banyak EPD. EPD tidak sanggup dipakai untuk relay signal, namun sanggup offline (sleep mode) untuk menghemat daya.
Berikut ini yaitu gambar packet data byte XBee API format untuk request data.
Berikut ini yaitu gambar API format packet data byte yang diterima oleh XBee.
Dengan memahami gambar packet data yang diterima tersebut, memudahkan bagi para developer untuk membuatkan aplikasi dengan XBee.
Arduino
Berikut sedikit klarifikasi dan teladan integrasi XBee dengan Arduino.
Data yang dikirimkan oleh Arduino dengan Serial.print() akan diteruskan ke pin TX dari Arduino yang mana dihubungkan dengan pin RX dari XBee. Jika XBee berada dalam AT mode, XBee akan mengirimkan data tersebut secara wireless. Data yang diterima oleh XBee akan diolah oleh Serial dari Arduino.
Arduino Connectivity:
- Arduino TX hubungkan dengan data input RX dari XBee
- Arduino RX hubungkan dengan data output TX dari XBee
Contoh Pembacaan Packet Data
Berikut ini ialah source code (sketch) Arduino untuk membaca packet data yang diterima.
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 21)
{
for (int j = 0; j < 23; j++)
{
Serial.print(Serial.read(), HEX);
Serial.print(", ");
}
Serial.println();
}
}
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 21)
{
for (int j = 0; j < 23; j++)
{
Serial.print(Serial.read(), HEX);
Serial.print(", ");
}
Serial.println();
}
}
Pada setup() baud rate yang dipakai untuk komunikasi serial 9600. Pada main program, dilakukan investigasi panjang packet data yang diterima, kalau panjang packet data kurang dari 22 byte, packet data tersebut akan diabaikan. Bila packet data yang diterima sesuai kriteria (lebih dari 21 byte) maka akan dilanjutkan ke langkah selanjutnya.
Dengan mengacu pada gambar sebelumnya yakni packet data yang diterima XBee, maka ada setidaknya 24 byte data yang hendak ditampilkan. Dalam hal ini dipakai perulangan untuk menampilkan data tersebut. Serial.read() dipakai untuk membaca satu byte data, sebab ada 24 byte data maka pembacaan serial tersebut dimasukkan dalam perulangan sebanyak 24 kali. Dalam aktivitas data yang terbaca tersebut diubah terlebih dahulu dalam format hexadecimal, sebelum kemudian ditampilkan.
Contoh Pembacaan Data Digital
Berikut ini ialah source code (sketch) Arduino untuk membaca nilai digital yang diterima.
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 21)
{
if (Serial.read() == 0x7E)
{
for (int j = 0; j < 19; j++)
{
byte discard = Serial.read();
}
data = Serial.read();
if (data == 0)
{
Serial.println("Data low");
}
else if (data == 16)
{
Serial.println("Data high");
}
}
}
}
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 21)
{
if (Serial.read() == 0x7E)
{
for (int j = 0; j < 19; j++)
{
byte discard = Serial.read();
}
data = Serial.read();
if (data == 0)
{
Serial.println("Data low");
}
else if (data == 16)
{
Serial.println("Data high");
}
}
}
}
Pada setup() baud rate yang dipakai untuk komunikasi serial 9600. Pada main program, dilakukan investigasi panjang packet data yang diterima, kalau panjang packet data kurang dari 22 byte, packet data tersebut akan diabaikan. Bila packet data yang diterima sesuai kriteria (lebih dari 21 byte) maka akan dilanjutkan ke langkah selanjutnya.
Dengan memakai sebuah switch untuk menawarkan nilai high maupun low pada XBee transmitter (Router atau EPD), yang kemudian nilainya akan diteruskan ke XBee receiver (Coordinator), untuk kemudian mengenali isi packet data tersebut. Untuk switch digital yang dipakai hanya pada pin D4 XBee, sehingga byte 17 akan bernilai 0x10H.
Nilai 0x10H diperoleh sebab hanya pin D4 XBee yang terhubung dengan switch, sedangkan pin D0 sampai D7 tidak terhubung dengan apapun, tidak dipakai sama sekali.
Sedangkan untuk nilai digital yang terbaca apakah high atau low sanggup diamati dari byte 20. Bila byte 20 bernilai 0x10H maka kondisinya ialah high, sedangkan kalau nilainya 0x00H kondisinya low. Untuk nilai 0x10H sama dengan 16 desimal. Sehingga pada Arduino byte data yang harus dibaca ialah byte 20.
Dengan mengacu pada gambar sebelumnya yakni packet data yang diterima XBee, untuk memastikan packet data yang diterima tersebut itu sesuai, perlu dilakukan tahap authentication, yakni dengan membaca start byte 0 yakni 0x7EH dengan Serial.read(). Bila start byte 0 yang terbaca bukan 0x7EH, maka packet data tersebut akan diabaikan.
Untuk mengetahui kondisi switch high atau low, yang harus dibaca ialah byte 20. Sementara byte 1 sampai 19 akan diabaikan. Digunakan perulangan sebanyak 19 kali, dan dalam setiap cycle dilakukan discard data byte 1 sampai byte 19.
Variable data dipakai untuk menampung nilai pembacaan Serial.read() dari byte 20. Bila nilai data ialah 0 maka kondisi switch ialah low, sedangkan kalau nilai data ialah 16 maka kondisi switch ialah high. Serial.read() dipakai untuk membaca satu byte data serial.
Contoh Pembacaan Data Analog
Berikut ini ialah source code (sketch) Arduino untuk membaca nilai analog yang diterima.
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() >= 21)
{
if (Serial.read() == 0x7E)
{
for (int i = 0; i < 20; i++)
{
byte discard = Serial.read();
}
int analogMSB = Serial.read();
int analogLSB = Serial.read();
int analogReading = analogLSB + (analogMSB * 256);
Serial.println(analogReading);
}
}
}
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() >= 21)
{
if (Serial.read() == 0x7E)
{
for (int i = 0; i < 20; i++)
{
byte discard = Serial.read();
}
int analogMSB = Serial.read();
int analogLSB = Serial.read();
int analogReading = analogLSB + (analogMSB * 256);
Serial.println(analogReading);
}
}
}
Pada setup() baud rate yang dipakai untuk komunikasi serial 9600. Pada main program, dilakukan investigasi panjang packet data yang diterima, kalau panjang packet data kurang dari 22 byte, packet data tersebut akan diabaikan. Bila packet data yang diterima sesuai kriteria (lebih dari 21 byte) maka akan dilanjutkan ke langkah selanjutnya.
Dengan memakai sebuah sensor analog pada XBee transmitter (Router atau EPD), yang kemudian nilainya akan diteruskan ke XBee receiver (Coordinator), untuk kemudian mengenali isi packet data tersebut.
Dengan mengacu pada gambar sebelumnya yakni packet data yang diterima XBee, untuk memastikan packet data yang diterima tersebut itu sesuai, perlu dilakukan tahap authentication, yakni dengan membaca start byte 0 yakni 0x7EH dengan Serial.read(). Bila start byte 0 yang terbaca bukan 0x7EH, maka packet data tersebut akan diabaikan.
Untuk mengetahui nilai pembacaan analog ADC, yang harus dibaca ialah byte 21 dan byte 22. Sementara byte 1 sampai 20 akan diabaikan. Digunakan perulangan sebanyak 20 kali, dan dalam setiap cycle dilakukan discard data byte 1 sampai byte 20.
Data byte 21 disimpan ke analogMSB (Most Significant Bit) ADC sedangkan byte 22 disimpan ke analogLSB (Least Significant Bit) ADC.
Nilai analogMSB diperoleh dengan pembacaan Serial.read(), sesudah discard sebanyak 20 kali, maka data serial yang akan dibaca ialah byte 21. Nilai byte 21 inilah yang disimpan di variable analogMSB. Data byte 21 telah dibaca, maka selanjutnya data byte 22 yang akan dibaca dengan Serial.read(), yang mana akan disimpan di variable analogLSB.
Untuk mendapat nilai pembacaan ADC yang sebenarnya, maka perlu dilakukan adaptasi nilai analogMSB dan analogLSB. Nilai analogMSB harus dikalikan dengan 256 terlebih dahulu, hal itu dikarenakan analogMSB dan analogLSB dianggap sebagai satu-kesatuan. Dengan analogLSB sebagai 8 bit low, sedangkan analogMSB sebagai 8 bit high. Karena dianggap sebagai satu-kesatuan, maka nilai bit high (1) terkecil dari analogMSB bernilai 29 atau 256. Itulah alasan mengapa nilai analogMSB dikalikan dengan 256.
Nilai analogReadding merupakan hasil penjumlahan antara nilai analogLSB ditambah nilai analogMSB yang dikalikan dengan 256 terlebih dahulu.
Kesimpulan
Berikut beberapa ringkasan kesimpulan artikel ini.
- Komunikasi Arduino dengan XBee S2 dilakukan secara serial
- Start byte 0 pada packet data XBee bernilai 0x7EH dipakai untuk authentication
- Beberapa byte data yang tidak dipakai oleh Arduino sanggup diabaikan, discarded
- Serial.read() dipakai untuk membaca satu byte data serial secara berturut-turut
- Nilai data digital tersimpan di data byte 19 dan 20
- Nilai data analog tersimpan di data byte 21 MSB dan 22 LSB
EmoticonEmoticon