Cover image

การใช้งาน Neo Pixel WS2812B กับ Raspberry pi2

23 May 2019

Share to:

ในบทความที่แล้ว เราทำความรู้จักกับ 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

Image

รูปการต่ออุปกรณ์

Image

เมื่อต่อสายเสร็จเรียบร้อย ให้ 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

Suggestion blogs

ใช้ Docker Compose กับ Docker Swarm

สวัสดีครับจากบทความตอนที่แล้ว "เริ่มต้นใช้ Docker Swarm" เราได้เรียนรู้พื้นฐานการใช้งาน Docker Swarm กันไปแล้ว ในบทความนี้เราจะมาต่อยอดโดยนํา Docker Compose มาใช้ใน Docker Swarm เพราะในงานจริงเราจะได้ทํางานได้ง่ายและสะดวกขึ้น ก่อนที่จะอ่านบทความนี้ควรจะต้องมีความรู้ในเรื่องของ Docker Swarm และ Docker Compose ก่อน กลับไปอ่านได้ที่นี่

การใช้งานคำสั่ง git init

สวัสดีครับ บทความนี้เราจะมาเรียนรู้การใช้งานคําสั่ง "git int" กันครับ

Arduino ตอน7 ใช้ DS18B20 (Digital Temperature Sensor) กับ Arduino

สวัสดีครับ ในบทความนี้จะมีเนื้อหาเกี่ยวกับวิธีการใช้งาน DS18B20 (Digital Temperature Sensor) กับ Arduino กันนะครับ เพื่อเรียนรู้การใช้งาน Arduino กับ Digital Temperature Sensor ผ่าน 1-Wire Protocol


Copyright © 2019 - 2024 thiti.dev |  v1.34.0 |  Privacy policy | 

Build with ❤️ and Astro.

Github profile   Linkedin profile   Instagram   X profile   Youtube channel   Telegram   Email contact   วงแหวนเว็บ