2019年4月18日木曜日

フルカラー LED PL9823-F8 を Raspberry Piで使うメモ

マイコン搭載のPL9823-F8を、Raspberry Piでつかうためのメモ。
PL9823-F8は、秋月で購入。

こちらで書かれている事のポイントを実施しながら自分用にまとめました。
元の原稿は良く説明されていて解りやすいです。
感謝 m(__)m

ただ、Pythonのプログラムは、NeoPixel が開発したものであり、
このPython Libralyが本当の肝。
サンプルプログラムは、Ctl-Cがきちんと処理されていないので、
その部分だけ、下記のように直せばよい。
strandtest.py のif __name__ == '__main__': 部分の最後
Ctl-Cを受けるところが下記ようになっているが、それを修正する

修正前
    except KeyboardInterrupt:
        if args.clear:
            colorWipe(strip, Color(0,0,0), 10)
修正後
    except KeyboardInterrupt:
        colorWipe(strip, Color(0,0,0))

        if args.clear:
            colorWipe(strip, Color(0,0,0), 10)

ポイントは、PL9823-F8 に内臓されているマイコンWS2812の制御モジュール。
これは、公開されている。それを使ってPL9823-F8を制御する。

(1) /boot/config.txt の変更
# dtparam=audio=on

sudo sed -i -e "s/^dtparam=audio=on/# dtparam=audio=on/g" /boot/config.txt

(2) 必要なモジュールのインストール
cd ~/prj
僕は、開発するディレクトリーとして~/prjを使っている。
プロジェクト毎にディレクトリーを作って管理している。
理由は、バックアップや複数のRaspberry Piを使っているので管理が楽だから。
例えは、ロボット一台に3つのRaspberry Piなんかつかうし、ルール決めて管理しないと大変です。脱線した(笑)

sudo apt-get -y install build-essential python-dev git scons swig
git clone https://github.com/jgarff/rpi_ws281x.git
cd rpi_ws281x
scons
cd python
sudo python setup.py install
cd examples
vi strandtest.py
sudo sed -i -e "s/^LED_COUNT      = 16/LED_COUNT      = 8 /g" strandtest.py
sudo sed -i -e "s/^LED_PIN        = 18/LED_PIN        = 12/g" strandtest.py
sudo sed -i -e "s/^LED_BRIGHTNESS = 255/LED_BRIGHTNESS = 8  /g" strandtest.py


配線は、こんな感じ
GNDは、一番長い端子
VDDには100Ωの抵抗をはさんでRaspberry Piの3.3V電源を使っている
DINは、GPIO12
DOは使っていない




Peace!!

以下は、点灯したままのLEDを消すプログラムでけど、
上記のCtl-Cを処理する部分を加えれば使わない。


# NeoPixel library strandtest example
# Author: Tony DiCola (tony@tonydicola.com)
#
# Direct port of the Arduino NeoPixel library strandtest example.  Showcases
# various animations on a strip of NeoPixels.
import time

from neopixel import *   # この行を追加する。そうしないとエラー
#from rpi_ws281x import *  #この行はコメントする

# LED strip configuration:
LED_COUNT      = 8       # Number of LED pixels.
LED_PIN        = 12      # GPIO pin connected to the pixels (must support PWM!).
LED_FREQ_HZ    = 800000  # LED signal frequency in hertz (usually 800khz)
LED_DMA        = 5       # DMA channel to use for generating signal (try 5)
LED_BRIGHTNESS = 8       # Set to 0 for darkest and 255 for brightest
LED_INVERT     = False   # True to invert the signal (when using NPN transistor level shift)

# Define functions which animate LEDs in various ways.
def colorWipe(strip, color, wait_ms=0):
        """Wipe color across display a pixel at a time."""
        for i in range(strip.numPixels()):
                strip.setPixelColor(i, color)
                strip.show()
                time.sleep(wait_ms/1000.0)

# Main program logic follows:
if __name__ == '__main__':
        # Create NeoPixel object with appropriate configuration.
        strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS)
        # Intialize the library (must be called once before other functions).
        strip.begin()

        colorWipe(strip, Color(0, 0, 0))  # clear wipe

0 件のコメント:

コメントを投稿