IoTアンビエントライト:ゼリンスランプ
コンポーネントと消耗品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
低電力のワイヤレス規格と低コストの超小型LED、センサー、通信デバイスを組み合わせることで、スマート照明はモノのインターネットとホームオートメーションの触媒になりました。
このチュートリアルでは、Zerytnhアプリを使用してモバイル経由でNeoPixel LEDストリップを制御する方法を説明します。このアプリには、カラーピッカーとさまざまな事前構成済みアニメーションを選択するためのメニューが表示されます。
ステップ1:必要な資料 <図> <図> <図> <図> <図>
プロジェクトに必要な要素はほとんどありません:
- ゼリンススタジオ :クラウド同期およびボード管理機能を備えたマルチプラットフォームおよびブラウザーベースのPython開発環境。どのOSを使用しても、Zerynthは実行されます。 Zerynthをダウンロードしてインストールするだけです(http://www.zerynth.com/zerynth-studio/)。
- Zerynthアプリ: スマートオブジェクトおよびIoTシステム用のZerynthモバイルインターフェース。すべての携帯電話がオブジェクト表示とリモコンになります。ダウンロード:http://www.zerynth.com/zerynth-app/
- ゼリンスシールド (ここで入手可能:https://store.open-electronics.org/index.php?_route_ =Shield_ZERYNTH&search =toi)。日常生活にスマートな機能を追加する、すぐに使えるマルチセンサーボード
- Arduino DUE または ST Nucleo F401RE または ParticlePhoton 。または UDOO または Flip&Clip Mikroelektronika 。どのボードを使用しても、Zerynthはマルチボード互換です!サポートされているすべてのボードの詳細は、http://www.zerynth.com/zerynth-studio/ にあります。
- Particle Photon(wifiモジュールが搭載されている)を使用しない場合は、 wi-fiシールドなど、ボードをWebに接続する要素が必要です。 Adafruit 。ただし、wifiチップをマウントする他のアダプターを使用できます CC3000 Texas Instruments (http://www.ti.com/product/cc3000)。
- NeoPixel のストリップ(またはリング) Adafruit のLED (ここで入手可能https://www.adafruit.com/products/1426)
- ガラスまたは3Dプリントランプ 。選択はあなた次第です。
ステップ2:組み立て <図>
- Wi-FiシールドとZerynthシールドをArduino(またはST NucleoまたはUDOO)にピギーバックするだけです。パーティクルフォトンを使用する場合は、Zerynthシールドの専用コネクタにピギーバックするだけです。
- NeoPixelLEDをZerynthシールドの関連するポートに接続します。
- すべてのボードとLEDをランプに入れます。
ステップ3:プログラミング <図>
Zerynthの使用は非常に簡単です!
- ボードを接続して「仮想化」します(http://bit.ly/Hackster-VIPER-Thereminですでに説明されています)
- Zerynthで新しいプロジェクトを作成します(http://bit.ly/Hackster-IoT-Notes-Printerですでに説明されています)。重要:main.py、animation.py、template.html(およびproject.md)の3つの(+1)ファイルを作成する必要があります
- 投稿されたコードをコピーする
- ボード上のコードをアップリンクすれば完了です!
ランプをオンにすると、プリセットネットワークに自動的に接続されます。
次に、ネットワークに接続されているZerynthオブジェクトを検索するZerynthアプリを開き、目的のオブジェクト(この場合は「ZerytnhLamp」)を選択すると、操作できます。この場合、Zerynthアプリには、事前に構成されたさまざまなアニメーションを選択するためのカラーピッカーとメニューが表示されます。
コードは非常にシンプルで、コメントがたくさんあります。ご質問やご提案がございましたら、Zerynthコミュニティフォーラムに投稿してください:http://community.zerynth.com/
ステップ4:IoTを明るくする! <図>
気に入りましたか?筋金入りになりましょう!
Zerynth Shieldは、タッチ検出用のセンサー、赤外線LED、マイク、光センサー、温度センサーなど、一連のセンサーとアクチュエーターを提供します。この非常に単純なサンプルコードから始めて、好みの動作を開発できます。ゼリンスシールドを使用して、ランプの機能を拡張してください!
Luigi F. Cerfeda(@L_F_Cerfeda)-Zerynthチーム
コード
- main.py
- template.html
- animation.py
main.py Python
################################################ ################################## Zerynth Lamp ## Zerynth Team 2015 CC#作成者:G。Baldi 、D。Mazzei############################################## ###################################必要なモジュールをインポートするbcm43362からストリームをインポートするbcm43362をwifi_driverとしてワイヤレスでインポートするwifiimportanimationfromtoishieldインポートtoishield#そしてzerynthappからzerynthappモジュールをインポートしますimport zerynthappstreams.serial()#wifiネットワークに接続します:wifi_driver.auto_init()print( "Establishing Link ...")wifi.link( "SSID"、wifi.WIFI_WPA2、 "password ")print(" Ok! ")例外をeとして除く:print(e)#template.htmlをボードフラッシュにnew_resourcenew_resource(" template.html ")#### ZerynthApp Setup#::Javascript to Python: :#ボタンが押されると、次の関数が呼び出されますdef change_color(r、g、b):animation.setup_color(r、g、b)def change_animation(n):animation.setup_anim(n)def chang e_speed(n):animation.setup_anim_speed(n)#名前、説明、テンプレートを使用してZerynthアプリを構成しますurlvp =zerynthapp.ZerynthApp( "Zerynth Lamp"、 "Try me!"、 "resource://template.html ")#Javascriptがイベントを生成するたびに、対応する関数が呼び出されますvp.on(" change_color "、change_color)vp.on(" change_animation "、change_animation)vp.on(" change_speed "、change_speed)#ZerynthApp!vp.run( )#vp.runは新しいスレッドを開始するので、ここで他のことを行うことができます!#ledsanimation.start(D6、24)を制御しましょう
template.html HTML
Zerynthランプ
Powered by Zerynth(www.zerynth.com )
animation.py Python
################################################ ################################## Zerynth Lamp ## Zerynth Team 2015 CC#作成者:G。Baldi 、D。Mazzei############################################## ###################################ランプアニメーション関数fromneopixel import ledstrips as neoimport threadinglock =threading.Lock() #Zerynth color:)color =[0x54,0x9a、0x97] anim =0anim_speed =50leds =Nonelayer0 =Nonelayer1 =Nonelayer2 =Nonenpins =0stopped =Falsestopcolor =[0xff、0xff、0xff]#必要なすべてのレイヤーを作成します#定義しましょう滑らかなアニメーション(半正弦波)のいくつかの係数animation_coefficients =[0、0.2588190451、0.5、0.7071067812、0.8660254038、0.9659258263、1、0.9659258263、0.8660254038、0.7071067812、0.5、0.2588190451] rainbow =[(0xff、0x00,0x00)、( 0xff、0x7f、0x00)、(0xff、0xff、0x00)、(0x00,0xff、0x00)、(0x00,0x00,0xff)、(0x4b、0x00,0x82)、(0x8f、0x00,0xff)] def setup_anim( n):グローバルlayer0、 layer1、layer2、anim#レイヤーを初期値で塗りつぶしますlock.acquire()leds.clear()layer2.clear()layer0.clear()layer1.clear()n =n%4 if n ==0:layer0 [ 0] =(100,0,0)layer0 [1] =(100,0,0)layer0 [2] =(100,0,0)layer1 [0] =(0,100,0)layer1 [1] =( 0,100,0)layer1 [2] =(0,100,0)elif n ==1:for x in range(npins // 2):layer0 [x] =(100 //(2 * x + 1)、0、 0)layer1 [npins-x-1] =(0,100 //(2 * x + 1)、0)layer2.clear()elif n ==2:layer1.clear()pstep =0 for x in range(npins ):step =x * len(rainbow)/ npins rx =(rainbow [int(step)] [0] + rainbow [int(pstep)] [0])// 4 gx =(rainbow [int(step)] [1] + rainbow [int(pstep)] [1])// 4 bx =(rainbow [int(step)] [2] + rainbow [int(pstep)] [2])// 4 layer0 [x] =(rx、gx、bx)pstep =step elif n ==3:layer0.clear()layer1.clear()anim =n lock.release()def setup_anim_speed(n):グローバルanim_speed anim_speed =n def setup_color(r、g、b):グローバルカラー#print( "Color:"、r、g、b)color [0] =r color [1] =g color [2] =b#関数を作成します背景アニメーションを処理するdefanimate_background(delay):グローバルカラーstep =0 while True:if(anim ==3 or anim ==0)and not stop:lock.acquire()layer2.setall(int(color [0] * animation_coefficients [step] / 2)、int(color [1] * animation_coefficients [step] / 2)、int(color [2] * animation_coefficients [step] / 2))lock.release()step + =1 if step> =len(animation_coefficients):step =0 else:lock.acquire()layer2.clear(); layer2.setall(stopcolor [0]、stopcolor [1]、stopcolor [2])lock.release()sleep(delay + 500-5 * anim_speed)def animate_foreground(delay):while True:停止していない場合:lock.acquire ()if anim ==0:layer0.lshift()layer1.rshift()elif anim ==1:layer0.rshift()layer1.rshift()elif anim ==2:layer0.rshift()layer1.rshift() elif anim ==3:layer0.lshift()layer1.lshift()lock.release()else:lock.acquire()layer0.clear()layer1.clear()lock.release()sleep(delay + 100-anim_speed )def start(pin、numpins):グローバルleds、layer0、layer1、layer2、npins npins =numpins leds =neo.LedStrip(pin、numpins)layer0 =neo.LedStrip(pin、numpins)layer1 =neo.LedStrip(pin、 numpins)layer2 =neo.LedStrip(pin、numpins)setup_anim(0)setup _anim_speed(50)#バックグラウンドアニメーションスレッドスレッドを開始します(animate_background、500)#フォアグラウンドアニメーションスレッドスレッドを開始します(animate_foreground、50)True:#クリアleds leds.clear()#今、ロックを取得しますlock.acquire() #第1層と第2層をマージleds.merge(layer0)leds.merge(layer1)#ledsが透明な場合にのみ背景レイヤーをマージ(0,0,0)leds.merge(layer2、neo.first_color)#ロックを解除lock.release()#そしてそれを照らします! leds.on()sleep(50)def stop(r、g、b):グローバル停止グローバルstopcolor stopcolor [0] =r stopcolor [1] =g stopcolor [2] =bstopped =True def resume():グローバル停止停止=False setup_anim(anim)
回路図
製造プロセス