3DプリンターでLチカ
Lチカがしたいです
はじめまして カブクのJenkinsおじさん 大橋です。
普段はKabuku MMSというサービスの開発をしたり、Jenkinsおじさんしたり、3Dプリンターを直したりしています。
ところでLチカしたいですね!
夏になるとLチカしたくなりますよね
でも手元にあるのはオフィスの棚で見つけたRaspberry Piだけです。LEDがありません。
でも弊社には3Dプリンター(Ultimaker3)があります。そして3DプリンターにはLEDがついています。
そこで今回はRaspberry Piと3DプリンターでLチカしてみたいと思います。
用意するもの
- Raspberry Pi (なんのモデルでもおk)
- 下記のUltimaker3と同一ネットワークに接続してください。
- 3Dプリンター
- 弊社ではUltimaker3という3Dプリンターを使っています。
-
今回の記事におけるFirmwareは
3.6.2.20170322
です。
-
今回の記事におけるFirmwareは
- 弊社ではUltimaker3という3Dプリンターを使っています。
Ultimaker3のAPIとLED制御
Ultimaker3にはネットワーク経由でUltimaker3を制御するためのREST APIがあります。
REST APIのドキュメントはSwagger形式で記述されており、以下のURLで参照できます。
http://{Ultimaker3のIPアドレス}/docs/api
このドキュメントはSwagger UIと呼ばれるもので、このドキュメント上から直接APIを叩くことが出来ます。
なおSwagger JSONは以下から取得できます。
http://{Ultimaker3のIPアドレス}/docs/api/api_documentation.json
もし手元にUltimaker3がなくてドキュメントだけ見たい場合は、以下から参照ができます。
http://software.ultimaker.com/jedi/api/
ただし、Ultimaker3のファームウェアによってAPIが若干違うので、可能であれば実機のドキュメントを参照してください。
※今回Swaggerについての詳細は記述しません。
APIの認証方式
APIの認証方式は2段階あります。
- ultimaker3へハードウェア上での認証を利用してユーザ名を登録し、ID/KEYを取得
- ID/KEYを利用してHTTP Digest認証
なおUltimeker3のステータスや、現在のプリント状況の取得など、Ultimaker3から情報を取得するAPIを叩く場合は、1. のみ必要で、2.のHTTP Digest認証は必要ありません。
手順については後ほど詳しく記載します。
Ultimaker3のLED API
上記のSwagger UIの中に Printer > /printer/led
と /printer/led/blink
というAPIがあり、これらがLED制御に関するAPIです。
/printer/led
は現在のLED設定の取得と更新が行なえます。
LEDの情報はJSON形式の色情報(HSV値)で取得/更新することが出来ます。
なお現在、弊社のUltimaker3のfirmwareでは若干このSwaggerの記述に誤りがあり、
ドキュメント上では、value
というプロパティがありますが、実際にはbrightness
になります。
- LED APIのパラメータ
hue
- HSV色空間のHue(色相)の値 0~254の数値
saturation
- HSV色空間のSaturation(彩度)の値 0-100の数値
brightness
- HSV色空間のbrighness(明度)の値 0-100の数値
swagger定義上はvalue
になっているが実際はbrightness
- HSV色空間のbrighness(明度)の値 0-100の数値
GETメソッドにより値を取得、PUTメソッドにより値を更新できます。
注意点として、ハードウェア上で明るさやLEDのON/OFFを設定している場合、そちらの設定が勝ち、
更新を行っても反映はされるが、LEDがつかなかったり、実際の明度よりかも落ちた状態で点灯します。
/printer/led/blink
はLEDを点滅することができます。
このAPIには周波数(frequency
)と点滅回数(count
)を設定でき、それにより点滅する長さと、間隔を設定できます。
- Blink APIのパラメータ
frequency
- 周波数(hz)
count
- 点滅回数
なお色については上記のLED APIで設定された値が利用されます。
今回の記事中ではこのAPIは扱いません。
LED APIを叩いてみる
では実際にLED APIを叩いていきたいと思います。
Swagger UI
まずは簡単に試すことができるSwagger UI上から以下の手順で実施していきます。
- 認証
- ユーザ登録 & ハードウェア認証
- Digest認証は実際にAPIを叩く際に行います。
- ユーザ登録 & ハードウェア認証
- LED API
- 現在のLED設定を取得
- Lチカ
認証(ユーザ登録 &ハードウェア認証)
ユーザ登録とハードウェア認証を行うにはAuthentication
にあるPOST /auth/request
APIを利用します。
application
とuser
input formに任意の値を入れて、Try it out
ボタンをクリックします。
すると、APIよりid
とkey
が返却されます。
これらの値は後でDigest認証を行う際に利用しますので、どこかにメモしておいてください。
またUltimaker3上で以下のようにAPIアクセスをしても良いかの確認が表示されますので、ALLOW
を選択、決定してください。
これで認証は完了です。
現在のLED設定を取得(GET /printer/led
)
次にLED設定を状態を取得してみたいと思います。
Printer
にあるGET /printer/led
APIを開き、Try it out
ボタンをクリックしてください。 このAPIにはパラメータはありません。
すると以下のように現在のLEDの値が取得できるはずです。
{
"blink": {},
"brightness": 1,
"hue": 0,
"saturation": 0
}
Lチカ(PUT /printer/led
)
いよいよ3DプリンターでLチカをしてみたいと思います。
LチカをするにはPrinter
にあるPUT /printer/led
APIを利用します。
hue
パラメータのvalue欄に以下を設定し、Try it out
ボタンをクリックします。
この時、Digest認証を一度も行っていない場合はusername/passwordを聞かれるダイアログが表示されるので、
それぞれ先程取得したID/KEYを設定します。
{
"hue": 0,
"saturation": 100,
"brightness": 100,
}
どうですか? Ultimaker3が赤色に光りましたか?
もし光っていない場合は、ハードウェア上で認証を行ったか、ハードウェア上のLED設定が点灯する設定になっているかなどを確認してください。
Raspberry Piから叩く
ここまでくればRaspberry PiからLチカするのも簡単です。
今回は簡単にshellを利用してLチカを行ってみたいと思います。
認証周りは面倒なのでSwagger UI上で行い、ID/KEYを控えておいてください。
また今回はDigest認証が簡単に行えるのでcurlを利用してAPIを叩きます。
まず Raspberry Piにsshなどで入ります
$ ssh pi@raspberrypi.local
以下のスクリプトのUM_IP
、UM_ID
、UM_KEY
を設定、viなどでを作成し、実行権限を追加します。
lchika.sh
#!/bin/bash
UM_IP="" # UltimakerのIP
UM_ID="" # /auth/request APIで取得したID
UM_KEY="" # /auth/request APIで取得したKEY
if [[ "${UM_IP}" = "" || "${UM_ID}" = "" || "${UM_KEY}" = "" ]]; then
echo "UM_IP、UM_ID、UM_KEYを設定してください"
exit 1
fi
LED_API_URL="http://${UM_IP}/api/v1/printer/led"
## APIを叩く (赤→青→黄)*3→消す
HSV_COLORS=(
'0 100 100' # 赤
'240 100 100' # 青
'60 100 100' # 黄
'0 100 100' # 赤
'240 100 100' # 青
'60 100 100' # 黄
'0 100 100' # 赤
'240 100 100' # 青
'60 100 100' # 黄
'0 0 0' # 消す
)
for hsv in "${HSV_COLORS[@]}"
do
hsvVal=(${hsv[@]})
curl --digest -u $UM_ID:$UM_KEY \
-H "Accept: application/json" \
-H "Content-type: application/json" \
-X PUT -d "{\"hue\":${hsvVal[0]},\"saturation\":${hsvVal[1]},\"brightness\":${hsvVal[2]}}" \
$LED_API_URL
sleep 0.1
done
echo finish
$ vi ~/lchika.sh
$ chdmoe +x ~/lchika.sh
起動してみましょう
$ ./lchika.sh
いかがですか? Lチカ出来ましたか?
まとめ
今回は3Dプリンターを利用して、Lチカを行いました。 Lチカが出来てスッキリしましたね。
Ultimaker3にはLED以外にも実際にプリントを行ったり、ファンを回したり、ビープ音を出すAPIなどもあり、
またそれらがSwagger形式で書かれていることにより、Swagger Generatorなどを利用して、
簡単にAPIクライアントライブラリを作成しすることが出来ます。
また今回のケースではぶっちゃけRaspberry Piは何も必要じゃなかったですが、
実際に弊社では余ったRaspberry PiとこのAPIを利用して、Ultimaker3の状態を監視し、プリントが始まったらタイムラプスを作成するなどのことを行っています。
※この話はまた別の機会にブログに上げたいと思います。
3DプリンターにAPIがあることでとても楽しいLチカが出来ましたね
では良いLチカライフを
その他の記事
Other Articles
関連職種
Recruit