ในบทความที่แล้ว เราทำความรู้จักกับ Neo Pixel WS2813 กันไปแล้ว วันนี้ผมจะมาแนะนำเรื่อง การนำ Raspberry Pi2 มาควบคุม Neo Pixel WS2812B
อุปกรณ์ที่ต้องใช้
- Raspberry Pi2 ติดตั้ง OS เรียบร้อย
- Neo Pixel WS2812B
- สายไฟสําหรับจัมพ์ระหว่าง Neo Pixel WS2812B กับ Raspberry Pi2
เมื่อเตรียมอุปกรณ์เสร็จแล้วให้คุณต่อสายตามนี้ครับ
- Raspberry pi2 ขา 2 <-----> NeoPixel ขา 1(VDD 5V)
- Raspberry pi2 ขา 6 <-----> NeoPixel ขา 3(GND)
- Raspberry pi2 ขา 12 <-----> NeoPixel ขา 4(DIN)
ตําแหน่ง ขา ของ Raspberry Pi2
รูปการต่ออุปกรณ์
เมื่อต่อสายเสร็จเรียบร้อย ให้ Download Source code ที่
github.com/thitiblog/ws2812b-raspberry-pi2.git
และไฟล์ต่วอย่างการใช้งาน ดังนี้
- neo-test.cpp <--- ไฟล์ตัวอย่างการใช้งาน library
- neopixel <--- ไฟล์ตัวอย่างที่ถูก compile แล้ว
- ws2812b.cpp <--- ไฟล์ library .cpp
- ws2812b.h <--- ไฟล์ library .h
หลังจากนั้นให้เปิดไฟล์ neo-test.cpp ขึ้นมาจะมีเนื้อหาตามนี้
#include "ws2812b.h"
int main(int argc, char **argv){
ws2812b *_ws2812b = new ws2812b(1); //1 pixel LED
_ws2812b->initHardware();
_ws2812b->clearLEDBuffer();
int tmp;
for(;;){
//RGB Blink.
_ws2812b->setPixelColor(0, 255, 0, 0);
_ws2812b->show();
usleep(1000*1000);
_ws2812b->setPixelColor(0, 0, 255, 0);
_ws2812b->show();
usleep(1000*1000);
_ws2812b->setPixelColor(0, 0, 0, 255);
_ws2812b->show();
usleep(1000*1000);
//Rainbow
for( int i=0 ; i<=255 ; i++){
if( i < 85 ){
_ws2812b->setPixelColor(0, i*3, 255-i*3, 0);
_ws2812b->show();
}else if( i < 170 ){
tmp = i-85;
_ws2812b->setPixelColor(0, 255-tmp*3, 0, tmp*3);
_ws2812b->show();
}else{
tmp = i-170;
_ws2812b->setPixelColor(0, 0, tmp*3, 255-tmp*3);
_ws2812b->show();
}
usleep(1000);
}
usleep(1000*1000);
}
delete _ws2812b;
return 0;
}
ผมจะอธิบายการใช้งาน library จากตัวอย่าง Code ด้านบนเลยนะครับ
- บรรทัดที่ 1: include library เข้ามาก่อนครับ(parameter ที่ส่งไปเป็นเลข 1 คือ จํานวนของ NeoPicel ที่เราต่อครับ)
- บรรทัดที่ 5: คือ ให้เราสร้าง object ของ class ws2812b ขึ้นมาก่อน
- บรรทัดที่ 6: ให้เรา Init hardware ก่อน คือ library จะไป config ค่า hardware ต่างๆให้เรา
- บรรทัดที่ 7: คือ clear ค่า buffer
ขั้นตอนเมื้อกี้คือขั้นตอนแรกก่อนจะเริ่มสั่งให้ NeoPixel ทํางาน ขั้นตอนต่อไปให้เราดูที่ 2 method นี้
- _ws2812b->setPixelColor(pixel, r, g, b); <--- เป็นคําสั่ง Set ค่าสีว่าจะให้แสดงสีอะไร
- _ws2812b->show(); <--- เป็นคําสั่ง ที่สั่งให้ Neo Pixel ติดขึ้นมาเป็นสีตามที่เรา Set ไว้
รายละเอียดของ parameter
- pixel: ตําแหน่งของ Neo Pixel ที่เราต้องการ Set ค่าสี(ในกรณีที่ต่อ Neo Pixel หลายๆตัว)
- r: ค่าของสี แดง (0-255) 0คือ ปิดสีนี้ไปเลย 255 คือสว่างสุด
- g: ค่าของสี เขียว (0-255) 0คือ ปิดสีนี้ไปเลย 255 คือสว่างสุด
- b: ค่าของสี นํ้าเงิน (0-255) 0คือ ปิดสีนี้ไปเลย 255 คือสว่างสุด
เสร็จแล้ว Compile ให้เรียบร้อยครับ
จบเพียงเท่านี้ครับ ผิดพลาดตรงไหนขออภัยด้วยนะครับ :)
ข้อมูลจาก element14