LoginSignup
12
10

More than 5 years have passed since last update.

Mi-Light (limitless led) をRubyから制御する

Last updated at Posted at 2016-01-20

ここ最近HueやMi-Lightなどの無線LAN経由で制御できるLEDランプが増えてきた。
とりわけMi-Lightが価格面でお手頃感があるので遊んだメモ。

Mi-Lightについて

未来のライト~Milightシリーズ
http://item.rakuten.co.jp/illumica/c/0000000205/

楽天ですぐに買えます、Amazonにも有りますが転売だったりして値段が高いです。
フルカラー対応モデルと、白色光源2色タイプ(白~アイボリー)がありそれぞれ対応するリモコンが異なります。
今回はRubyからたたいて遊ぶだけなので、下記の組み合わせで購入

  • IT_M001 調光・調色 LED電球フルカラー
  • IT_M005 無線LANコントローラ

無線LANコントローラは必須です。また802.11(bgn)環境でしか使えないので注意が必要。
そしてこの製品、中身は LimitlessLED という製品そのものです(おそらくOEM)。

LED Light Bulbs | LimitlessLED Color WiFi Bulbs For iPhone And Android
http://www.limitlessled.com/

基本的な機能は以下のとおり。

  • LEDのON/OFF
  • 明るさの制御(26段階)
  • 色の変更(256段階フルカラー)
  • プレセットの再生(全8種)

純正のiPhone APPがありますので、まず動作確認はこれで行うと良いでしょう。

LimitlessLED
https://itunes.apple.com/us/app/limitlessled/id594759938?mt=8
(Mi-light純正のものも有りますが、無線LANコントローラのIPアドレスが見れないためこちらを使う)

コミュニティが活発で各言語向けのライブラリーなども作られてます。
最近はNode.jsからも制御できるようになったので使い幅があって◎。

基本的な使い方

Mi-LightはLED単体では使えません。専用のリモコンか無線LANコントローラとペアリングして使います。
プログラムやiPhone APPから制御する場合は、無線LANコントローラに命令を送ると実行される仕組みです。

[ Script / iPhone APP ] >>> Wifi経由 / UDP >>> [ 無線LANコントローラ ] >>> 何かしらのプロトコル >>> LEDランプ

制御の基本

ScriptからMi-Lightを制御するには、無線LANコントローラの UDP/8899 に3バイトの命令を投げれば良いです。
命令については下記をよく見ること。

LED Light Bulbs | LimitlessLED Color WiFi Bulbs For iPhone And Android
http://www.limitlessled.com/dev/
色の扱いに若干癖がありますが慣れればOK

Ruby向けには gem/limitless-led があるので、これを使えばすぐに制御可能。

led-test.rb
require 'limitless_led'

# 基本操作
bridge = LimitlessLed::Bridge.new(host: '無線LANコントローラのIPアドレス', port: 8899)
bridge.all_on   # ペアリングされたすべてのLEDを点灯
bridge.all_off  # ペアリングされたすべてのLEDを消灯
bridge.color(Color::RGB::Red)  # 色情報は Color::RGB オブジェクトで渡す
bridge.brightness(2)   # 明るさ最小
bridge.brightness(27)  # 明るさ最大

# 直接制御も可能
bridge.send_packet "\x40\xB0\x55"   # LEDがREDに

# グループの個別制御も可能
group = bridge.group(1) 
group.color(Color::RGB::Blue)
group.brightness(2)

# 16進色コードからの変換
# LEDの都合、色相256段階でのみ制御となるため注意が必要、くすんだ色などは指定できませ
# 一度RGBからHSLに変換し、その後戻してあげればOK
color_rgb = Color::RGB.from_html(FF0000)  # RED
color_hsl = color_rgb.to_hsl
color_hsl.s = 0.5  # 彩度
color_hsl.l = 0.5  # 輝度は共にニュートラルに
bridge.color(color_hsl.to_rgb)

あとは煮るなり焼くなり。

色の扱いについて

色相256段階となっているので、普通の256色とは異なります。
対応は下記の通り

0x00 (0xFF) Violet
0x10 Royal_Blue
0x20 Baby_Blue
0x30 Aqua
0x40 Mint
0x50 Seafoam_Green
0x60 Green
0x70 Lime_Green
0x80 Yellow
0x90 Yellow_Orange
0xA0 Orange
0xB0 Red
0xC0 Pink
0xD0 Fusia
0xE0 Lilac
0xF0 Lavendar
http://www.limitlessled.com/dev/

0x00と0xFFが紫となる色相環です。
上記コードのように一度HSLにしたColorオブジェクトを投げればよしなに変換されます。

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10