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

23 May 2019,
Share: 
Cover image

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

Go EP.3 Go packages คืออะไร

สวัสดีครับ ในบทความนี้ก็เป็น EP.3 แล้วนะครับ โดยเนื้อหาจะเป็นเรื่องเกี่ยวกับ Go packages ว่าคืออะไร ใช้ทําอะไร และมีประโยชน์อย่างไรสําหรับท่านใดที่ยังไม่ได้อ่าน EP.2 ท่านสามารถกลับไปอ่านก่อนได้นะครับที่นี่ Go EP.2 ทําความรู้จักกับ Go module

PWM คืออะไร

PWM ย่อมจาก Pulse Width Modulation คือการนําสัญญาณสามเหลี่ยม และสัญญาณที่ต้องการปรับความกว้างของพัลซ์มาเปรียบเทียบกัน ตัวย่างเช่น ถ้านําสัญญาณสามเหลี่ยมมาเปรียบเทียบกับสัญญานไฟฟ้ากระแสตรง จะได้ความกว่างของพัลซ์คงที่ และความกว้างของพัลซ์นั้นจะขึ้นอยู่กับแอมพลิจูดของสัญญาณไฟฟ้ากระแสตรงดังรูป

วิธีการเข้ารหัส และถอดรหัส BASE64

BASE64 คืออะไรBASE64 คือ วิธีการเข้ารหัสข้อมูลรูปแบบหนึ่ง ที่จะเปลี่ยนข้อความ หรือข้อมูลต้นฉบับไปเป็นข้อความ หรือข้อมูลชุดใหม่ ที่ไม่สามารถอ่าน หรือรู้ว่าข้อมูลชุดนี้คืออะไร ซึ่งการเข้ารหัสชนิดนี้จะแทนที่ข้อมูลด้วยตัวอักษร 64 ตัว นั่นคือที่มาของ BASE64 ตามตารางImageวิธีการเข้ารหัส BASE64ยกตัวอย่างที่ต้องการเข้ารหัสข้อความนี้ "abcd" จะมีขั้นตอนคือ1.นําข้อมูลที่ต้องการเข้ารหัสมาแปลงเป็นเลขฐานสอง 8 bita = 01100001b = 01100010c = 01100011d = 011001002.นําเลขฐานสองที่ได้มาเรียงต่อกันตามลําดับดังนี้01100001 01100010 01100011 011001003.แบ่งเลขฐานสองออกเป็นชุด ชุดละ 6 bit กรณีที่ชุดสุดท้ายไม่ครบ ให้เติม 0 ไปจนครบ 6 bit จะได้ดังนี้01100001 01100010 01100011 01100100 00004. นําเลขฐานสองที่แบ่งไว้มาแปลงเป็นตัวอักษรตามตาราง BASE64 (ตามรูปด้านบน) โดยใน BASE64 จะนับ bit ที่ถูกเติมเข้าไปที่เป็น 00 แทนด้วย "="011000 = "Y"010110 = "W"001001 = "J"100011 = "j"011001 = "Z"000000 = "A=="** bit ที่ถูกเติมเข้าไปที่เป็น 00 แทนด้วย "=" 5.นําตัวอักษรมาเรียงต่อกันตามลําดับ YWJjZA==วิธีการถอดรหัส BASE64วิธีการถอดรหัส BASE64 ก็ไม่ยาก ทําย้อนกลับครับให้นําข้อมูลมาแปลงเป็นฐานสอง 6 bit มาเรียงต่อกันก่อน แล้วนํามาจัดกลุ่ม กลุ่มละ 8 bit โดย bit สุดท้ายที่เหลือไม่ครบ 8 bit ให้ตัดทิ้ง หลังจากนั้นก็แปลงเลขฐานสอง 8 bit แต่ละชุดเป็นข้อมูล ASCII เท่านี้ก็จะได้ข้อมูลต้นฉบับแล้วครับ


Copyright © 2019 - 2025 thiti.dev |  v1.59.0 |  Privacy policy | 

Build with ❤️ and Astro.

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