年末年始が近づいているため、既存のRaspberry Pi Bモデルを使用して年末年始を行うことが決定されました。 それ以前は、Webサーバーとして使用していました。 その後、PythonでGPIOを少し試して、LEDを点灯させました。
まあ、小さな人工木は私の欲求を私のスキルと組み合わせる方法を教えてくれました。 LEDガーランド!
ガーランド? うーん...私は彼女が好きなように点滅させることができます! 私はすぐに、その「点滅」のさまざまな効果を簡単に追加できるようにすることにしました。 拡張可能なアプリケーションを作成します。
必要なもの
Raspberry PiでOSをオンにしてインストールする方法については説明しません。 これについて多くの記事が書かれています。 Arch LinuxがインストールされたRaspberry Pi Model Bがあったと言います。 ここで説明することのほとんどは、他のGNU / Linuxディストリビューションにも当てはまると思います。 たとえば、Raspbian。
したがって、ハードから必要なものは次のとおりです。RaspberryPi、マルチカラーLED、100Ω〜1 KOhmの公称値の抵抗、ボタン、GPIO用の端子、ワイヤ。
LEDの数は異なる場合があります。 私の場合、それらは関係していました6. LEDを抵抗を介してGPIO出力に接続する必要があります。 LEDの起源は完全に異なるため、最適な輝度を実現するには、抵抗器の値を個別に選択する必要がありました。 一般に、330オームの公称値でできます。
ボタンを使用して、ガーランドの効果を切り替えることができます。
つなぐ
配線図:
GNDとマークされたポートに注意してください。 これは土地であり、入口または出口として使用することはできません。 ボタンには抵抗は必要ありません。 回路保護は、Raspberry Piですでに提供されています。
これはどのように見えるかです:
LEDを接続すると、実験することができます。 いくつかのポートでは、2つのLEDを組み合わせて多様性を高めています。
ソフトウェアを準備します
Python 3が必要になります。ArchLinuxでは、次のように設定します。
sudo pacman -S python
おそらく他のディストリビューションでは、パッケージはpython3と呼ばれます。
PythonモジュールRPi.GPIOも必要です。 easy_installを使用してインストールしました:
sudo easy_install RPi.GPIO
おそらく他のディストリビューションでは、このモジュールはリポジトリにあるため、検索できます。
接続後、LEDとボタンの動作をテストすることをお勧めします。 これを行う方法の小さな例を次に示します。
#gpio_test.py import RPi.GPIO as GPIO import sys GPIO.setmode(GPIO.BOARD) led = 8 button = 5 # GPIO.setup(led, GPIO.OUT) GPIO.setup(button, GPIO.IN) # GPIO.output(led, 1) # while GPIO.input(button): pass # -- if GPIO.input(button) == False: GPIO.output(led, 0) print("Button pressed") GPIO.cleanup()
ここでは、出力としてled変数の番号を使用してポートを設定し、入力としてボタンを使用してポートを設定します。 次に、信号1をLEDポートに送信し(点灯!)、ボタンが押されるまで待ちます。 ボタンが押されるとすぐに、LEDを消してきれいにします。
上記の例では、8番目のポートに接続されたLEDと5番目に接続されたボタンをテストします。 次のようにスクリプトを実行できます。
sudo python3 gpio_test.py
ルート権限でスクリプトを実行する必要があることに注意してください。 たとえば、sudoを使用します。 起動後、8番目のポートに接続されているLEDが点灯します。 ボタンをクリックした後、外に出ると、スクリプトは作業を終了します。
スクリプト内のled変数の値を目的のポートの番号に変更すると、すべてのLEDの動作をテストできます。
私のソフトウェア
必要な機能についてさらに記述したコードについては詳しく説明しません。 https://github.com/jhekasoft/raspberry-led-garland:githubへのリンクを提供します 。
エフェクトをカスタマイズして記述する方法を説明します。
設置
アプリケーションを/ opt / raspberry-led-garlandに配置するか、シンボリックリンクを作成します。 例:
sudo ln -s /home/jheka/raspberry-led-garland /opt/raspberry-led-garland
もちろん、どこにでも配置できますが、そこにあると思います。
カスタマイズ
設定は、settings.jsonファイル内のJSON形式です。 前に示したスキームに従ってLEDとボタンを接続した場合、設定で何も変更できません。 settings.jsonファイルの例:
{ "leds": [ {"num": 8, "state": 0}, {"num": 11, "state": 0}, {"num": 12, "state": 0}, {"num": 13, "state": 0}, {"num": 15, "state": 0}, {"num": 16, "state": 0} ], "button": {"num": 5}, "effects": ["static", "blink", "slow_blink", "fast_blink", "run", "fast_run", "off"], "logfile": "/var/log/raspberry-led-garland.log" }
ここでは、接続されたLEDのポート(num)とその初期状態(状態、0-オフ)がリストされます。 LEDの数は任意です。主なことは、GPIOに十分なポートがあることです。
次に、ボタンのポート番号がボタン(num)に設定されます。
エフェクトは、ボタンによって切り替えられる順序でエフェクトの名前をリストします。 すべての効果は、Pythonクラスのファイルとして効果ディレクトリにあります。
すべてがログファイルで指定されたファイルに記録されます。
効果
実際には、3つの主な効果があります。静的、点滅、および実行中のLEDです。
前述のように、エフェクトはエフェクトディレクトリにあります。 そこにエフェクトを追加できます。 また、設定に追加することを忘れないでください。 まばたき効果を見てみましょう。 その内容は次のとおりです。
#blink.py import RPi.GPIO as GPIO class GarlandEffect(object): delay = 1.0 ledstate = 0 def __init__(self, garland): self.garland = garland self.ledstate = 1 def iterate(self): if not self.garland.checkIterationDelay(self.delay): return False self.garland.setLedsState(self.ledstate) self.garland.gpioOutSetState() self.ledstate = 1 - self.ledstate return True
初期化中(関数__init__)、ガーランドオブジェクトをそれに設定します。 これは、ほぼすべての効果で発生するはずです。 次に、すべてのLED 1(オン)の初期状態を示します。
各反復(反復関数)で、設定された1秒の遅延に等しい時間が経過したかどうかを確認します(遅延= 1.0)。 そうでない場合は、何もしません(Falseを返します)。 合格した場合、すべてのLEDにledstate状態を設定し、次の繰り返しで異なるように状態変数の値を反対に変更します。
fast_blink効果を見てください。
#fast_blink.py import effects.blink class GarlandEffect(effects.blink.GarlandEffect): delay = 0.1
ご覧のとおり、点滅から継承し、0.1秒の遅延があります。 つまり、反復間の遅延が少ないだけで、LEDがより速く点滅するのと同じ点滅です。
エフェクトがオフになっていることに注目してください。 その中で、初期化中にすべてのLEDが消灯し、反復中に何も起こりません。 したがって、花輪の減衰が実現します。
systemdサービス
ガーランドをスタンドアロンにしてシステムの起動後に機能させるために、バイオリンをサービスとして起動するための小さな設定を作成しました。 systemd / garland.serviceファイルを/ etc / systemd / system /にコピーする必要があります。 次に実行します:
sudo systemctl enable garland.service
スクリプトはシステムの起動時に起動されます。 すぐに開始するには、次のようにします。
sudo systemctl start garland.service
systemdを使用するのに多すぎないことを願っています。 Arch Linuxには長い間使用されていて、慣れています。 かつて、彼らはこれについてもホロビリです。
デモ
これは次のようなものです。
また、このビジネスに接続して、多数のLEDを使用して独自のガーランドを作成し、興味深い効果を作成してください。 来て!