イドラさんの髭アンテナ

気になったデバイス・ガジェットと電子工作関連について

SayoDevice E1 RGB の導入と設定 (その2)

前回からの続き

前回はハードの概要とファームウェアのアップデートについての記載でしたが、今回は機能設定について書いていきます。とは言っても大体「SayoDevice OSU O3C」のノブへの設定部分と同じなんですが・・・。

まずはSayoDeviceの設定WEBサイトを開いてUSBに挿します。

左上のSearchSayodeviceボタンを押下すると以下のようなダイアログが表示されます。

※名前を変えていなければSayodevice E1 RGBという名前で認識されます

接続をクリックすると設定画面へ移行します。

設定画面と設定方法

接続が完了すると以下のような画面に遷移します。(※説明の日本語は表示されません)

タイトルバー

Device: デバイス選択画面へ戻る
Keyboard: ノブへの機能の割り当て
Password:  パスワードの管理

Light: デバイスのライトの表示モードを制御するために使用

Device Option: 本体の機能設定

Setting: その他の設定

バイス名の右側のペンアイコンで名前の変更も可能です。

Keyboardメニュー

「SayoDevice OSU O3C」の設定画面のノブの部分だけ切り出したような形になっています。

設定の流れも同じですが

  1. 設定したいキー、ノブをクリック
  2. 右側のメニューから割り当てたいキーや機能を選択
  3. Submitボタンを押して設定内容を確定
  4. 画面右上のSave to Deviceボタンを押して本体へ書き込み

になります。※4のSave to Deviceを押し忘れると本体へ設定されませんので注意しましょう

 

右側メニューのModeには以下のモードが有り、機能毎に選択して設定します。

Default:1つのキー設定

ボタンをクリックすると、ボタン モードがデフォルトに変わります。
変更キーまたは一般キーから必要なキーを選択します。

例)Aキーを設定する

例)Ctrl キーの設定

注: LeftCtrl、RightCtrl は別です

短按长按2功能:2つキーのショートカット機能

ショートカットキーの組み合わせを設定するにはボタンモードをデフォルトに変更し、
修飾キーと一般キーの間で必要なキーを選択します。

例)設定コピーのショートカット キー Ctrl+C

例)設定スクリーンショットのショートカット キー Win+Shift+S

修飾キーを送信した後、一般キーを送信する前に自動的に 10 ミリ秒の遅延が発生します。 これは、一部のソフトウェア (例: リモート デスクトップ) が同時に押されたキーをショートカット キーとして認識しないためです。 、順番に実行する必要があります。 1 つのキーを設定するだけであれば遅延は発生しません。

Mouse Mode:マウスの動作をエミュレート

マウスの左ボタン、右ボタン、中ボタンなどを設定します。
キーモードをマウスに変更し、マウス キーで必要なボタンを選択します。

例)マウスの左ボタンを設定します

マウスカーソルの移動とスクロールホイールを設定する
キーモードをマウスに変更し、マウスキーではキーを選択しません。

X は水平移動を意味し、負の数値は左に移動します。 正の数は右にシフトします。 数値が大きいほど速度が速くなります。

Y は垂直方向の移動で、負の数は上に移動し、正の数は下に移動します。 数値が大きいほど速度が速くなります。

スクロールとはマウスホイールのことです。 負の数値の場合は下にスクロールし、正の数値の場合は上にスクロールします。

例)上にスクロールするように設定します

Multimedia control:マルチメディア機能(音量変更、画面の明暗) ※基本機能のみ版

マルチメディアボタンの設定(音量、曲の切り替えなど)
ボタンモードをマルチメディアコントロールに変更し、マルチメディアボタンで必要な機能を選択します。

例)音量を設定 + に設定

Two-step operation:2段階操作

2回連続のキー操作を設定する場合、方法はデフォルト モードと同じです。

例)貼り付け+Enterを設定

Game Controllerジョイスティックのボタンエミュレート

これは追加のアドオンであり、Windows でのみ使用できます。 マックではオンにしないで下さい。デバイス オプション ジョイスティックで HID 機能をオンにした後、保存して再挿入します。

ボタンモードをゲームコントローラーに変更し、次にボタン番号を選択します。このボタンは、ゲーム コントローラーのキーボード ボタンとは何の関係もありません。 ゲームはカスタム ボタンをサポートする必要があります。

Keyboard+LED Control:キーへの設定(3つまで)

不明

One-click Password:ワンクリックウェブページ(パスワードタブで設定したパスワード)

まずは入力内容を設定します
「パスワード」タブに内容(文字、数字、または ASCII 記号)を入力します。

「キーボード」タブで、キーモードを「ワンキーパスワード」に変更し、パスワード番号を選択します

追加のキー
パスワードの後に Enter などの任意のキーを挿入できます。None は追加しないことを意味します。

ロックケース
パスワードを入力するときにキーボードの大文字化(Caps)を自動的にロックします。
この機能をオンにすると、パスワード入力は入力方法に影響されなくなります。

ワンクリックパスワードインターバル時間
パスワード入力速度 (ミリ秒単位)、デフォルト値 2。
通常、変更は必要ありません。 入力が失われる場合は、この値を増やす必要があります。

その他のキーボードレイアウト
デフォルトのキーボード レイアウトは ANSI です。 AZERTY レイアウトに変更する必要がある場合は、「Option Byte」をクリックしてオンにしてください。

Lock-selfMode:セルフロックモード
一度押すと自動的にホールドされ、もう一度押すとボタンが解放されます。
デフォルトモードの設定方法を参照

Multimedia control - full version:マルチメディアコントロール、WEBサイトを戻る進めるなどの機能 ※フルバージョン

WEBサイトを進める、戻る等のマルチメディアのフル機能を設定することが出来ます。

A+B+C+D:不明 四つのキーを設定可能?

One-click Password v2:ワンクリックパスワード(パスワードタブで設定したパスワードVersion2)

Passwordメニュー

1~5のパスワードを設定できます。

上記One-click Passwordの項目を参照

Lightメニュー

LEDの光り方を設定します。ライト モードを変更し (各効果については以下に記載)、カラー モードを [Select Color] に変更します。

例)ライトの色をアイスブルー(#00ffff)に変更します

LEDを消すには黒に設定するとオフになります。 RGBA値 0 0 0 0

ライトモードの詳しい説明

・Static:固定色を設定し、押すと点灯、離すと消灯などイベントと連動して実施可能。
・Indicator light:Numlock、CapsLock、ScrollLock、その他のキーボードのステータス インジケーターに設定できます。
・breathe:呼吸効果を実現します。 カラー モードが選択されている場合、カラー テーブルで色を循環できます。
ライトホールドとオフホールドを設定すると、ライトが完全に点灯したときと完全に消灯したときに、一定時間点灯し続けることができます。 単位8ms
take one breath:上記と同じですが、キーを押すごとに 1 回呼吸する効果を実現するには、照明イベントと連携して照明設定を実行する必要があります。
Gradient:このモードは、カラー モードのカラー テーブル ループまたはランダム カラーでのみ機能します。
switch:指定した周波数に応じて色を切り替えることができます。
点灯時間間隔も同時に設定する必要があります。 単位8ms
このモードは、カラー モードのカラー テーブル ループまたはランダム カラーでのみ機能します。
switch once:上記と同じですが、キーを押すたびに切り替わる効果を実現するには、照明イベントを押して照明設定を実行する必要があります。
flashing:指定した頻度と持続時間に従って点滅できます。
点灯時間と消灯間隔は同時に設定する必要があります。 単位8ms
Flash once:上記と同じですが、キーを押すたびに 1 回点滅する効果を実現するには、照明イベントと連携する必要があります。 照明設定を押して実行します。
・fade:照明イベントと連携する必要があるため、照明設定を実行します。
・Fadein:照明イベントと連携する必要があるため、照明設定を実行します。

カラーモードの詳しい説明
Select color:指定した色を設定し、黒は照明を消すことと同じです。
色が暗いほど明るさは低くなります。
Color Table cycle:キーボードのカラーテーブルで色を順番に循環させます
Random Color Table:キーボードのカラーテーブルからランダムな色を選択します
random color:カラー パレットのランダム性と比較して、真のランダム性は黒 (光らない) または白になります。

DeviceOptionメニュー

設定手順

Power-on startup delay:電源投入時の起動遅延
このオプションをオンにすると、USB は接続されてから 0.5 秒遅れて認識されます。一部の遅いコンピューターに適しています。
バイスが正常に認識できない場合は、電源を入れてみてください

Enable Joystick:ジョイスティックを有効にする
このオプションをオンにすると、ゲーム コントローラーとして認識されるようになります。
これは追加のアドオンであり、Windows でのみ使用できます。 Mac システムでは決してオンにしないでください。
保存して再挿入するには、オプション バイトでジョイスティックをオンにします。
ボタンモードをゲームコントローラーに変更し、次にボタン番号を選択します。
このボタンはゲーム コントローラーのどのボタンとも関係がありません。 ゲームはカスタム ボタンをサポートする必要があります。

KVM Compatibility mode:KVM互換モード
非推奨

Disable lights:ライトを無効にする
名前が示すように、この機能をオンにすると光が遮断されます。

surface dial mode:表面ダイヤルモード
シングルノブのみが便利なオプションです。
Windowsでは、ソフトウェアごとに異なる機能を設定できます。
設定後、保存してデータ ケーブルを再接続する必要があります。

AZERTY Keyboard:アゼルティキーボード
このモードをオンにすると、フランス語キーボードでワンタッチ パスコードが機能します。他のキーボードではこの機能を有効にしないでください。

Key debounce time:キーのデバウンス時間
デバウンスを解放します。デフォルト値は 6 であり、通常はこれを変更することはお勧めできません。
ボタンをダブルクリックした場合は、この値を 20 より大きくしてみてください。

Encoder channel:エンコーダチャンネル
ノブにのみ役立つオプションについては、変更しないでください。

Settingsメニュー

数据日志:データログ
HID 报告日志:HIDレポートログ
HID 指令面板:HIDレポートコマンドパネル

OpenまたはCloseを設定、利用方法については不明

終わりに

設定についてはWEB上にマニュアルからも確認できます。

manual.sayodevice.com

ファームウェアアップデートで表示する内容も変化しているようです。

SayoDevice E1 RGB の導入と設定 (その1)

この前の投稿でも書いたようにミニキーボード「SayoDevice OSU O3C」を購入して使っていたわけですが、しばらく使ってみて音量調整ノブしか使ってないじゃない?ということに気づき、それじゃノブだけの商品のほうが場所取らなくてもいいかも、と探すことに。

「USBボリュームコントローラー」や「USBサウンドコントローラー」とかで検索して出てきたのが以下のこれです。

製品紹介ページには音量コントロールとミュートができて、プラグアンドプレイで挿したら使えるようなこととLEDの設定もできる様な事が書いてありましたが、肝心の設定ソフトについては書いてない・・・。商品にマニュアルみたいなのが付いてるんだろうと思って買ったわけですが、商品がプチプチに包まれてそれだけで送られてきました。

本体ハードについて

ノブは金属製(アルミ?)で裏側は樹脂、引き抜けば外れます。本体側は樹脂が重ねてあり丸くカットされている部分は少々ガタガタしてますがそんなに悪くはありません。O3Cと同じ様な作りになってるようです。

サイズは本体直径約5cm、ノブ直径は約4cm、全高が約3cmで、付属のUSBケーブル(USB C to A)長は約2mでした。

樹脂の透明部分から光が漏れて光るようになっています。(後ほど書きますが設定で消すことも可能)

裏側はゴム足が5個付いていてずれないようになっています。

設定用ソフトウェアについて

まぁ最悪音量コントロールができればいいと思って買ったのですが、せっかくなのでやはり設定もしたいと思い同じ形の商品をGoogle画像検索で探したら、SayoDeviceと書いてある販売ページがありました。多分同じ商品だろうとSayoDeviceの設定WEBサイトを開いてUSBに挿してみたら以下のような表記になりました。 

これはSayoDevice(のシリーズの一つ?)として認識されているようです。接続をクリックするとO3Cの時と同じ様にファームウェアのアップデートが始まりました。

しばらくすると元のページに戻りアップデートが完了します。

バイス名について

初めて接続したときは「SayobotDEV BL Mode」なる表記でしたが、ファームウェアをアップデートした後接続し直すと「SayoDevice E1 RGB」という名称に変化していました。

この名前で検索してもその様なデバイスについて書かれたページがヒットしないのですが、便宜上ここでは「SayoDevice E1 RGB」としておきます。

 

次回の投稿で設定等について記載していきます。

SayoDevice OSU O3C 導入と設定(その3)

前回の投稿からだいぶ経ってしまいましたが、残っていたSayoDevice OSU O3Cのキー設定について書いておこうと思います。

設定方法の種類

SayoDevice OSU O3Cの設定は現時点で3種類の方法があります。

WEB版は前回の導入と設定(その2)で記載したブラウザで設定をしていくバージョン、オフライン版はダウンロード版です。

オフライン版でのみ提供されている機能もあるのですが(本体画面へのイメージの表示・変更など)今回はWEB版での設定について記載していきます。

追記)こちらにダウンロードサイトが有りましたので追記しておきます

osu.sayobot.cn

設定サイトへの接続

https://sayodevice.com/device

上記サイトをブラウザで開きます(ChromeまたはEdge ※筆者はFirefoxでは動作しませんでした)

以下の様なサイトが開きますので

中国語だとわかりにくいので右上の言語選択でEnglishを選択します。

選択すると左上のボタンがSearch Sayo-Deviceに変化しますのでこのボタンを押します。

すると以下の様なダイアログが表示されますのでSayoDevice O3Cをクリックして接続ボタンを押します。

ここまでは前回と同じです。

設定画面と設定方法

接続が完了すると以下のような画面に遷移します。

タイトルバー

Device: デバイス選択画面
Keyboard: 各ボタン、ノブへの機能の割り当て
Password:  パスワードの管理
String: 上記と同じ。(任意の文字列の管理) 

Light: デバイスのライトの表示モードを制御するために使用

Device Option: 本体の機能設定

Screen Edit: カラースクリーンの設定はオフライン版のみにつき、ダウンロードサイトへのリンク

Setting: その他の設定

バイス名の右側のペンアイコンで名前の変更も可能です。

Keyboardメニュー

左上がノブの部分、下3個の四角が各キーに対応していて現在の設定内容がそれぞれに表示されています。この画像の状態の場合、一番右のキーには「c」が割り当てられています。

設定の大まかな流れは

  1. 設定したいキー、ノブをクリック
  2. 右側のメニューから割り当てたいキーや機能を選択
  3. Submitボタンを押して設定内容を確定
  4. 画面右上のSave to Deviceボタンを押して本体へ書き込み

になります。※4のSave to Deviceを押し忘れると本体へ設定されませんので注意しましょう

 

右側メニューのModeには以下のモードが有り、機能毎に選択して設定します。

Default:1つのキー設定

Keyboard:キーへの設定(3つまで)

Mouse Mode:マウスの動作をエミュレート

Multimedia control:マルチメディア機能(音量変更、画面の明暗、WEBサイトを戻る進めるなど)

Game Controllerジョイスティックのボタンエミュレート

一键密码v2:ワンクリックパスワード(パスワードタブで設定したパスワードVersion2)

一键网页:ワンクリックウェブページ(パスワードタブで設定したパスワード)

短按长按2功能:2つキーのショートカット機能

one-click Write poetry:Stringタブで設定した文字列

Two-step keyboard operation:2段階操作

FN:レイヤー切り替え(押下時)

SW:レイヤー切り替え(設定したレイヤーへ)

BLE_SW:不明(レイヤー切り替えと思われる)

control_option:機能設定(再起動、ライトとブルートゥースのOnOff)

wooting key to asix:不明

User Script 1~64:不明(パラメタ4つ)

※不明のものはわかりましたら更新します

レイヤー切り替えについて

SayoDeviceO3Cはレイヤーの切り替えにより、少ない数のキーでもそれ以上の機能を割り当てることが可能です。設定画面「Keyboard」下部の以下の部分

BasicからFn4までの5つのレイヤーにそれぞれ機能を割り当てることが出来ます。

※以下の図のように必ず次のレイヤーに移るわけではなく、BasicからFn3へ等、自分の好きなように設定が可能

FN:設定したキーを押下している間レイヤーを切り替え

SW:押下したら設定したレイヤーへ切り替え

機能割当によりそれぞれのレイヤーに切り替えることが可能です。

設定例

右側のキーを押したときFn1のレイヤーへ切り替える場合

Passwordメニュー

1~64のパスワードを設定できます。

キーへの設定は「一键密码v2」か「一键网页」で行います。

Stringメニュー

1~64の文字列を設定できます。

キーへの設定は「one-click Write poetry」で行います。

Lightメニュー

LEDの光り方を設定します。設定の仕方はキーへの設定と同じ様に設定したいキーをクリック→右側のメニューで設定、Submitで確定します。

モードは

Static:固定色、押すと点灯、離すと消灯などイベントと連動して実施可能。

Indicator light:Numlock、CapsLock、ScrollLock、その他のキーボードのステータス インジケーターに設定できます。

Breath:呼吸効果を実現します。 カラー モードが選択されている場合、カラー テーブルで色を循環できます。
ライトホールドとオフホールドを設定すると、ライトが完全にオンになったとき、ライトが完全にオフになったときに、一定時間点灯し続けることができます。 単位8ms

Breath once:上記と同じですが、キーを押すごとに 1 回呼吸する効果を実現するには、照明イベント Press と連携して照明設定を実行する必要があります。

Gradient:このモードは、カラー モードのカラー テーブル ループまたはランダム カラーでのみ機能します。

Switch:指定した周波数に応じて色を切り替えることができます。
点灯時間間隔も同時に設定する必要があります。 単位8ms
このモードは、カラー モードのカラー テーブル ループまたはランダム カラーでのみ機能します。

Switch once:上記と同じですが、キーを押すたびに切り替わる効果を実現するには、照明イベントを押して照明設定を実行する必要があります。

Flash:指定した頻度と持続時間に従って点滅できます。
点灯時間と消灯間隔は同時に設定する必要があります。 単位8ms

Flash once:上記と同じですが、キーを押すたびに 1 回点滅する効果を実現するには、照明イベントと連携する必要があります。 を押して照明設定を実行します。

Fade:照明イベントと連携する必要があります。 

Fade in:照明イベントと連携する必要があります。 

色はカラーテーブルかRGBを数字で指定、黒に設定するとオフになります( RGB値 0 0 0 )。また、ランダムカラー設定、ループするものの場合は速度を指定できます。

Device Optionメニュー

◆Key chattaring time:チャタリングタイム

◆HID:拡張機能はオンデマンドで有効にできます。
有効にした後、データ ケーブルを保存して再接続する必要があります。
Bluetooth モードでは、デバイスを削除して再度追加する必要があります。

・Relative Mouse:カーソルの移動、マウスボタンのクリック、その他の操作を制御します

・Multimedia control:音量などを調整します。

・joystick:このオプションをオンにすると、キーボードがゲーム コントローラーとして認識されるようになります。
 これは追加のアドオンであり、Windows でのみ使用できます。 Mac システムでは決してオンにしないでください。
 オプションバイトでジョイスティックをオンにし、保存してデータケーブルを再接続します。
 ボタンモードをゲームコントローラーに変更し、次にボタン番号を選択します。
 このボタンはゲーム コントローラーのどのボタンとも関係がありません。 ゲームはカスタム ボタンをサポートする必要があります。

・Absolute to the mouse:この機能をオンにすると、スクリプト内でカーソル位置調整機能を使用したり、マウス操作を記録および再生したりできるようになります。 Windows システムおよび単一画面のみ。

・controller:不明

◆sleep timeout (minutes):スリープまでの時間(分)

◆indicator light timeout(soconds):無線モードは利用可能ですが、有線モードは利用できません。 変更するにはキーボードを接続するためのデータケーブルが必要です。

◆wireless mode:Bluetoothまたは2.4Gから選択

◆启用AZERTY布局:AZERTY レイアウトを有効にする、ワンキーパスワード機能のキー出力です。 有効になっていない場合、デフォルトは ANSI です。

Screen Editメニュー

Web版は画面編集には対応しておりません。 編集するにはデスクトップ版をダウンロードしてください

Settingsメニュー

数据日志:データログ
HID 报告日志:HIDレポートログ
HID 指令面板:HIDレポートコマンドパネル

OpenまたはCloseを設定、利用方法については不明

 

終わりに

設定についてはWEB上にマニュアル

manual.sayodevice.com

からも確認できますが、現在の設定画面上の表記と一致していない部分もあり不明部分が出てしまいました。

今後判明次第アップデートできればと思います。

 

SayoDevice OSU O3C 導入と設定(その2)

「SayoDevice OSU O3C」の導入と設定についての記事の続き。

 

前回は外観とスペック関連について書きましたが、今回はSayoDevice OSU O3C本体で行う設定について書いていこうと思います。

 

端末で出来る設定

まずは端末で出来る設定についてですが、ノブを長押しすると以下のような画面に切り替わり設定が出来るようになります。

SayoDevice OSU O3C設定画面

設定画面の階層と内容

設定画面はノブの押下で選択、回して移動・設定値を変更します。

設定TOP (TOPからメニュー一番上Exitで設定画面から抜ける)

・Display

  -语言(日本語で言語の意味)

    中文/English

  -Backlight

    StandbyLight:ON/OFF

    ScreenSaver:5min

・Button

  -Calibration

    K1~K3:キー押下でキャリブレーション

  -Key stroke

    K1~K3:Press、Release、DeadZoneを各0.05mm間隔で設定

・Device

  -Refresh rate

    8000HZ/1000HZ

  -Device info

    ハードウェアとファームウェアのバージョンを表示

  -Key count

    K1~K4:各キーの押下回数

    Reset key count:キーの押下回数をリセット

上記がSayoDevice OSU O3C単体で出来る設定内容についてです。

と思ってこの記事を書いていたのですが、どうもファームウェアがアップデートされていたようなのでここでアップデートの手順について記載しておきます。

ファームウェアをアップデートすると(上記はv1.2の内容でアップデートするとv1.3になります:2023/11/13 現在)設定内容についても基本的には同じですが、表記が変わっていたりします。後日修正するかもしれません・・・

ファームウェアアップデート手順

以前はローカル端末で動作する設定用ソフト*1で設定していたのですが、現在以下のサイトでブラウザから直接SayoDevice O3Cに設定できるようになっていますので、ここからアップデート・設定を行うことにします。

SayoDevice OSU O3Cをパソコンに接続しておきます

https://sayodevice.com/device

上記サイトをブラウザで開きます(ChromeまたはEdge ※筆者はFirefoxでは動作しませんでした)

以下の様なサイトが開きますので

中国語だとわかりにくいので右上の言語選択でEnglishを選択します。

選択すると左上のボタンがSearch Sayo-Deviceに変化しますのでこのボタンを押します。

すると以下の様なダイアログが表示されますのでSayoDevice O3Cをクリックして接続ボタンを押します。

ファームウェアのアップデート

新しいファームウェアがあった場合、以下のようなダイアログが表示されますのでOKを押します。

SayoDeviceの画面が黒くなりアップデートが開始されます。

 

※初めてこのサイトに接続して設定を行った場合には、下の画面が表示されますので再度左上のSearch Sayo-Deviceをクリックします。

その後Bootloaderをクリックして選択して接続ボタンを押します。

以下のような画面が表示され、ファームウェアがアップデートされます。(途中でケーブルを抜いたりWindowsを終了したりしないでください)

アップデートが終了すると最初の画面に戻りますので、中国語表記に戻っていたら右上の言語設定でEnglishを選択して左上のSearch Sayo-Deviceをクリックします。

以下のダイアログが表示されますので、接続ボタンを押します。

SayoDevice O3Cの設定画面が表示されます。

今回はここまで、次回はSayoDevice O3Cのキーに設定していきます。

*1:Sayo_CLI_Windows V2、V3とがある

SayoDevice OSU O3C 導入と設定(その1)

少し前から気になっていたミニキーボード「SayoDevice OSU O3C」を購入したのでこれについて使い方とレビューをしたいと思います。

一応買ったパッケージにはマニュアルが入っていたんですがイマイチわかりにくく、自分の備忘録としてここに書いておく事にします。

 

そもそもこのキーボード、OSU!という無料のリズムゲーム用に開発されたものらしいんですが、私はこのゲームをするために買ったわけではなく評判が良さそうだったので普通にショートカットなどを登録して使おうと思って買いました。

 

OSU!って何?という方はWikipediaにもありますので以下をどうぞ

ja.wikipedia.org

 

外観とスペック

3つのキーと金属ノブそして0.96インチ(160*80)IPSカラースクリーンが付いています。USBはType-Cです。
キーはCherryの赤軸(互換?軸は赤くなかった)スイッチ、ケースには滑り止めが付いていて樹脂等についても全体的に質感は良いと思います。

 

ハードについて

キー

キーは3つですがレイヤーが4つあり、レイヤーを切り替えるごとに別の機能を割り当てられます。(設定方法等は後述)

また、バックライトが付いていて各キー毎に発光パターンと色が変えられます。

さらになんとアクチュエーションポイントが設定できます。アクチュエーションポイントとはキーを押した時にスイッチがONになるポイントのことで、SayoDevice O3Cではこれを0.05mm単位で設定できます。

高価なゲーミングキーボードなどで設定することが出来るのですが、シビアなゲームやったりしないなら使わないんですけどね・・・。

ノブ

ノブは押下可能でデフォルトではミュートとミュート解除が押す度に切り替わります。また、左右に回すと音量ボリュームになっていますが、これも別の機能を割り当て可能です。(スクロールなど)

スクリーン

基本状態では各キーの押下数カウント表示、また設定モードでは本体自体で出来る設定を表示します。

カラースクリーンには自分の好きな画像(静止画か動画gif)が設定できるようです。

デフォルトでは約5分操作がないと画像に切り替わる設定になっています。

 

取り敢えず今回はハードの説明まで。

次回はそれぞれの設定について掘り下げていこうと思います。

インターホンが押されたのをM5Stackでスマホに通知する

在宅勤務中にイヤホンをしていたり、エアコンの吹き出し音でインターホンが鳴ったのに気づかなかったことがあったので、鳴ったらスマホに通知すればいいのでは?ということでM5Stackで実装することにしました。

どうやって鳴ったことを取得するか?

うちはマンションでインターホンは共用部のものになるので、インターホンを外して裏側から取ってくるのは難しそうです。それではどうしたら良いのか?インターホンが鳴ったら画面が光るので、その光を画面に貼ったセンサーで取得することにしてみます。 同じような手法で検出していないか「M5Stack インターホン」などで検索してみたところ、以下のセンサーを使用している人がいました。
M5Stack用光センサユニット [U021]www.switch-science.com
ただこのユニットはページにも書いてあるとおり

アナログ値を出力するため、黒色のGrove Bポートに接続する必要があります。M5Stack Basic本体のGrove Aポートでは使用できません。

とのことでBasicしか今うちに無い・・・アナログポートにジャンパワイヤーで繋げば使えるでしょうけどせっかくI2C接続でコネクタが付いているところですのでケーブルを増やしたくない、他にもないか探したところ以下のものがありました。
M5Stack用環境光センサユニット(BH1750FVI-TR)www.switch-science.com
これならGroveケーブルだけで繋ぐことが出来そうです。
ライブラリもこのページからドキュメントページへのリンクが貼られていて、その先のGithubへもリンクされていましたのでこれを参考にして進めることにします。

ここでM5StackのGroveポートって色が違ってる(黒とか赤とか)のは良いんだけど他にもどんなのがあるんだろう?と疑問に思い調べてみたところ、現在はPort.A,B,Cがあるようです。以下のページに接続可能なセンサ類も載っていて詳しいので参照ください。
www.marutsu.co.jp

スマホへの通知をどうするか

これについてはインターホンが押されてすぐに通知が来ないと意味がありません。それではどうするのか?LINEで通知すれば良いのでは、ということで調べたところLINE Notifyなるサービスで通知することが出来るようです。これを使うと今後も色々な通知が出来るようになりそうですのでここで一度試してみることに。

使い方については以下のページの内容を参考にさせて頂きました。
sample.msr-r.net
大雑把にはLINEトークンを取得してM5Stackから notify-api.line.me にHTTPポストする時にトークンとメッセージを一緒に送るという感じです。

というわけで以下のようなコードで動かしてみました。

#include <M5Stack.h>
#include <WiFiClientSecure.h>

#include <hp_BH1750.h>  //  include the library
hp_BH1750 BH1750;       //  create the sensor

const char* ssid     = "Your-SSID";
const char* password = "Your-Password";
const char* host     = "notify-api.line.me";
const char* token    = "Your-LINE-Token";

unsigned long displayTime = 0;

boolean line_notify(String msg) {
  WiFiClientSecure client;
  client.setInsecure();
  if(!client.connect(host, 443)) {
    Serial.println("connect error!");
    return false;
  }
  String query = String("message=") + msg;
  String request = String("")
              + "POST /api/notify HTTP/1.1\r\n"
              + "Host: " + host + "\r\n"
              + "Authorization: Bearer " + token + "\r\n"
              + "Content-Length: " + String(query.length()) +  "\r\n"
              + "Content-Type: application/x-www-form-urlencoded\r\n\r\n"
              + query + "\r\n";
  client.print(request);
  return true;
}

void setup() {

  bool avail =
    BH1750.begin(BH1750_TO_GROUND);  // init the sensor with address pin
                                     // connetcted to ground result (bool)
                                     // wil be be "false" if no sensor found
  M5.begin();
  M5.Lcd.setTextSize(2);
  M5.Lcd.fillScreen(BLACK);

  if (!avail) {
      M5.Lcd.println("BH1750 sensor not found!");
      while (true) {
        delay(500);
     };
  }
  
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.printf("WIFI START:%s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    M5.Lcd.print(".");
  }
  M5.Lcd.println(" - READY");

  M5.Lcd.setCursor(0, 110); // x, y
  M5.Lcd.printf("intercom monitoring:");
}

char info[40];

void loop() {
  M5.update();

  // put your main code here, to run repeatedly:
  BH1750.start();                  // starts a measurement
  uint16_t lux = BH1750.getLux();  //  waits until a conversion finished

  if(lux>20) {    //輝度が20以上のとき
    line_notify("インターホンが押されました ");
    M5.Lcd.setTextSize(2); // size
    M5.Lcd.setCursor(0, 220); // x, y
    M5.Lcd.print("LINE-NOTIFY SEND");
    delay(30000); //押されてから30秒はLINEへ送信しない
    M5.Lcd.setCursor(0, 220); // x, y
    M5.Lcd.print("                  ");
  }
  M5.Lcd.setCursor(235, 110); // x, y
  M5.Lcd.printf("%3d", lux);
}

我が家のインターホンは押されてから30秒間は点いたままになっていたので、30秒間はLINEへの再通知をしないようにdelay(30000)で待機させています。

設置と動作

インターホンの画面下部分はタッチパネルのボタンが表示されることがあり、左下にコンセントがあるので画面左上にセンサーを貼り付けることにしました。

インターホン

インターホンが押された時にどれぐらいの輝度でメッセージを送るかは、何度か家人に押してもらってセンサーの位置を変えてテストしました。
玄関扉とマンション入口、通用口とカメラの画像によってセンサを貼った左上の取得輝度が違って送信されなかったりでしたが、しきい値を下げて反応するようにしています。部屋の照明など関係ない明かりで誤反応しないと良いんですが・・・。
ここ2~3日動かしたままにしてみましたが、熱くなったり止まったりすることもなく動いています。

M5StackでWEBラジオを鳴らす(VS1003デコーダボード)

前回M5Stack BASIC単体でWEBラジオを鳴らすところまで行きましたが、やはり内蔵スピーカーでは音質的に音楽を聴くという感じではなかったので、外付けのMP3デコーダを使って聴く形に変更することにしました。

どのデコーダを使用するか?

M5StackとMP3再生などで検索すると、VS1053Bというチップを搭載したデコーダボードを利用している人が多そうだったので、この情報を元に更に検索してみることにしました。
VS1053BはVLSI Solution Oy製のMP3デコーダチップで他にもVS1063、VS1003、VS1103、VS1011等のシリーズが展開されているようです。
この中からデコーダボードになっている(チップ単体ではなく基板に実装されている)もので、安いものを探しVS1003を使用することにしました。

VS1003ボード

ライブラリの追加

前回使用したESP8266Audioというライブラリー
github.com
をゴニョゴニョしてみたところ知識不足で上手く鳴らずだったので、VS1003との接続方法から見直しすることに。
VS1053のライブラリと書いてあったのですが、SPI通信が出来ていれば大丈夫だろうということで以下のライブラリを試してみることにしました。
github.com
※Exampleフォルダ内にWebRadioDemoというサンプルが入っており、その中に結線が記載されていたため参考にさせて頂きました

M5StackとVS1003ボードとの接続

以下のピン同士を結線しました
VS1003 → M5StackBASIC

  • 5V → 5V
  • DGND → GND
  • MISO → 19
  • MOSI → 23
  • SCK → 18
  • DREQ → 17
  • XRST → RST
  • XCS → 5
  • XDCS → 16
VS1003結線
サンプルスケッチの変更

上記のライブラリ内のサンプル、WebRadioDemoを変更していくことにします。

  /**
  A simple stream handler to play web radio stations using ESP8266

  Copyright (C) 2018 Vince Gellár (github.com/vincegellar)
  Licensed under GNU GPL v3

  Wiring:
  --------------------------------
  | VS1053  | ESP8266 |  ESP32   |
  --------------------------------
  |   SCK   |   D5    |   IO18   |
  |   MISO  |   D6    |   IO19   |
  |   MOSI  |   D7    |   IO23   |
  |   XRST  |   RST   |   EN     |
  |   CS    |   D1    |   IO5    |
  |   DCS   |   D0    |   IO16   |
  |   DREQ  |   D3    |   IO4    |
  |   5V    |   5V    |   5V     |
  |   GND   |   GND   |   GND    |
  --------------------------------

  Dependencies:
  -VS1053 library by baldram (https://github.com/baldram/ESP_VS1053_Library)
  -ESP8266Wifi/WiFi

  To run this example define the platformio.ini as below.

  [env:nodemcuv2]
  platform = espressif8266
  board = nodemcuv2
  framework = arduino
  build_flags = -D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH
  lib_deps =
    ESP_VS1053_Library

  [env:esp32dev]
  platform = espressif32
  board = esp32dev
  framework = arduino
  lib_deps =
    ESP_VS1053_Library

  Instructions:
  -Build the hardware
    (please find an additional description and Fritzing's schematic here:
     https://github.com/vincegellar/Simple-Radio-Node#wiring)
  -Set the station in this file
  -Upload the program

  IDE Settings (Tools):
  -IwIP Variant: v1.4 Higher Bandwidth
  -CPU Frequency: 160Hz
*/

#include <VS1053Driver.h>

//M5Stackでの動作
#include <M5Stack.h>

#define UNDEFINED    -1
#ifdef ARDUINO_ARCH_ESP8266
#include <ESP8266WiFi.h>
#define VS1053_CS     D1
#define VS1053_DCS    D0
#define VS1053_DREQ   D3
#endif

#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>
#define VS1053_CS     5
#define VS1053_DCS    16
#define VS1053_DREQ   17
#endif

// Default volume
#define VOLUME  70

VS1053 player(VS1053_CS, VS1053_DCS, VS1053_DREQ, UNDEFINED, SPI);
WiFiClient client;

// WiFi settings example, substitute your own
const char *ssid = "TP-Link";
const char *password = "xxxxxxxx";

//  http://ais-edge89-dal02.cdnstream.com/b76353_128mp3
const char *host = "ais-edge89-dal02.cdnstream.com";
const char *path = "/b76353_128mp3";
int httpPort = 80;

// The buffer size 64 seems to be optimal. At 32 and 128 the sound might be brassy.
uint8_t mp3buff[64];

void setup() {
    M5.begin();                 // 本体初期化
    M5.Lcd.begin();             // 画面初期化
    delay(1000);
    M5.Lcd.setTextSize(2);
    M5.Lcd.println("VS1003 WEB Radio");

    Serial.begin(115200);

    // Wait for VS1053 and PAM8403 to power up
    // otherwise the system might not start up correctly
    delay(3000);

    // This can be set in the IDE no need for ext library
    // system_update_cpu_freq(160);

    //M5.Lcd.println("\nSimple Radio Node WiFi Radio");

    SPI.begin();
    player.beginOutput();
    player.setVolume(VOLUME);

    M5.Lcd.print("Connecting to SSID ");
    M5.Lcd.println(ssid);
    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    M5.Lcd.println("WiFi connected");
    M5.Lcd.print("IP address: ");
    M5.Lcd.println(WiFi.localIP());

    M5.Lcd.print("connecting to ");
    M5.Lcd.println(host);

    if (!client.connect(host, httpPort)) {
        M5.Lcd.println("Connection failed");
        return;
    }

    M5.Lcd.print("Requesting stream: ");
    M5.Lcd.println(path);

    client.print(String("GET ") + path + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n\r\n");
}

void loop() {
    if (!client.connected()) {
        Serial.println("Reconnecting...");
        if (client.connect(host, httpPort)) {
            M5.Lcd.print(String("GET ") + path + " HTTP/1.1\r\n" +
                         "Host: " + host + "\r\n" +
                         "Connection: close\r\n\r\n");
        }
    }

    if (client.available() > 0) {
        // The buffer size 64 seems to be optimal. At 32 and 128 the sound might be brassy.
        uint8_t bytesread = client.read(mp3buff, 64);
        player.playChunk(mp3buff, bytesread);
    }
}

元のサンプルではESP32用の内容になっており進捗状況がわからないので、LCD上へどこまで処理が進んだのかわかるようにSerial.printをM5.Lcd.printに変更して表示されるようにしています。

動作確認

上記でコンパイル→ボードに書き込み、VS1003ボード上の3.5mmイヤホンジャックにスピーカーを接続したところ、無事WEBラジオを聞くことができました。
音質についてもPCやスマホで聴くのと同様のレベルで、途中で止まるようなこともなく電源を入れたらすぐにラジオが聞けるようになりました。

VS1003WEBラジオ

今後について

今後は複数のラジオ局のボタンでの選択(SDカードからの読み込みで追加削除が可能)、音量調整、メタデータとして配信される楽曲名やアーティスト名の表示等も機能追加していければと考えています。
ハード的にも基板サイズが43mm*43mmでスタックできるので、M-BUSピンにて重ねて使えるようにするのも良いかもしれません。