XIAOとスマホだけでnode.jsのJohnny-Fiveを動かす最短コースをご案内!

じゃんくはっく
じゃんくはっく

きたきたきたー!

なんか興奮してますね!w

ぴー
ぴー
じゃんくはっく
じゃんくはっく

スマホとXIAOだけでNodeのJohnny-Fiveを動かせるようになったよ!

NodeとかJohnny-Fiveとか何それ?

ぴー
ぴー

はい、ちょっと興奮気味なんですが今日のネタは、

「XIAOとスマホを接続して、それだけでXIAOを制御する!」

ってことがメインテーマです。物理的な接続イメージは図に書くとこんな感じです。node.js実行環境をtermuxに作り、johnny-fiveというnode環境で動作するものをFirmataプロトコルでXIAOとやりとりします。もっと簡単にいえば、

JavaScriptでXIAOを操る ですね。

通常、node.js実行環境はPCに作ったりしますので、物理的な接続イメージは以下のようになるかと思います。

JavaScriptでXIAOのGPIOを操作するのですが、まだこの構成のメリットがよくわかっていませんので、触ってみようと思いました。

物理的に用意するもの

(1) Androidスマホ
(2) Seeed XIAO
(3) ケーブル(Type-C x Type-C)

Androidスマホは手持ちのものでも、余ったものでもOKです。XIAOは3個入りで1800円くらいでアマゾンから購入できます。ケーブルは100円ショップですね。

Androidスマホ の必要アプリ

GoogleStore : Termux

https://play.google.com/store/apps/details?id=com.termux

まず、Androidスマホのアプリを入れておきます。あと、もう一つ有償アプリですが以下を入れておきます。日本円で190円です。

GoogleStore : BT/USB/TCP Bridge Pro

https://play.google.com/store/apps/details?id=masar.bluetoothbridge.pro

これはブリッジアプリで、今回の用途ではXIAOのUSB接続のシリアル通信をTCP上にブリッジする用途で使います。シリアルTCPのブジッジアプリは他にもいろいろありますが、XIAOと接続できた勇逸の神アプリです。

Termuxのセットアップ

アプリを入れたら、パッケージをアップデートしておきます。Termuxのコンソールからタイプするのが面倒なら、PCからSSHして作業するといいかもです。

pkg update
pkg upgrade

以下が今回必要なものです。

pkg install nodejs python clang make openssh -y

手持ちの環境、HUAWEI P20 liteでは以下が入りました。

$ dpkg --list | egrep 'node|python|clang|make|openssh' | cut -b 5-50
clang              11.1.0         aarch64     
make               4.3-1          aarch64     
nodejs             14.15.4-1      aarch64     
openssh            8.4p1-1        aarch64     
python             3.9.2          aarch64     
termux-exec        1:0.8          aarch64 

nodejsはもう14なんですね。速すぎる!ぜんぜんついていけないです。

サンプルソースとインストール

まず、termuxでの操作です。コピペしやすいよう$ は省いておきます。

cd
mkdir j5
cd j5
wget https://github.com/take-i/j5-termux/archive/main.zip

まだ説明も何も書いていませんがそのうち、簡単に書いておきます。

サンプルソース

https://github.com/take-i/j5-termux

サンプルソース解凍しインストール

example にLEDが光るサンプルソースが入っています。

unzip main.zip 
cd j5-termux-main/example/
npm install

IPアドレスを修正

WiFiに接続していると思いますので、termux上でIPを確認しておきます。

ifconfig | grep inet

以下のようなIPv4が出ますので、それをメモしておきます。この場合は、192.168.1.36が自分のスマホのIPですね。

inet 192.168.1.36  netmask 255.255.255.0  broadcast 192.168.1.255

サンプルソースのIPを修正します。portは、あとでブリッジアプリで設定しますので、1024番〜の適当なポートにしておきます。1234でもOKです。

------- example/index.js
::
var options = {
  host: '192.168.1.36',  //host name or IP
  port: 1234  // port
}

XIAOにFirmataをセットアップ

この記事を書いている時はまだ、XIAOはFirmataのコードをビルドするとエラーになりますが、以下を適用すればOKです。そのうち、masterにマージされると思うので、ビルドエラーが出なければOKです。

add seeedunio xiao to boards.h please #475

https://github.com/firmata/arduino/issues/475

具体的には、以下からFirmataをダウンロードします。

firmata/arduino Releases
Arduino-1.0.x-Firmata-2.5.8.zip

https://github.com/firmata/arduino/releases/

先ほどのFixをBoards.hに反映し、ArduinoIDEからインポートします。

スケッチ例>Firmata>StandardFirmata のスケッチをXIAOに書込みます。

エラーなく書き込めたらOKです。

スマホでブリッジアプリを設定

次はスマホで BT/USB/TCP Bridge Pro のアプリを設定します。このアプリはDevceAとBをブリッジしますので画面のように設定します。

XIAOをUSB接続するとアクセス許可がでますのでOKします。「このUSBデバイスをデフォルトにする」はチェックしておいたほうがいいですね。

USBデバイスに接続(USB connect)し、TCP Serverをスタートさせます。2つ上の画像、右側のようになっていればOKです。

起動!

Termuxのindex.jsがある場所で以下のコマンドを実行すると動作します。

node index.js

成功すれば、以下のようにターミナルに表示されているはずです。

Connected to USB2TCP Bridge
IO ready!
1614296838868 Available Firmata  
1614296838874 Connected Firmata  
1614296838882 Repl Initialized  
>> Board connected!

XIAOの青色LEDが光っていれば成功です。写真では青色LEDが光っているタイミングを写せなかったので光っていませんが、チカチカしているはずです。

お疲れ様です。

まとめ

今回、なんとなくわかったのは以下となります。

・Termux上でJ5を使う時は、USBに接続したボードを認識しないので、別アプリでUSBをTCPにブリッジさせて使う
・ブリッジさせるアプリはたくさんあるが、J5からXIAOと通信できたのはこれだけ
・実際に開発するときは、スマホ充電しながらUSB接続しないと電池持ちが。
・J5の使い所がまだよくわかっていないので、例をこなしながらどんなメリットがあるのか体験してみる

あとがき

node.js実行環境をTermuxに作ってそこから有線USB接続したXIAOを操れることがわかりました。まだ、どんなことができるのか、そしてどんなメリットがあるのかまーったく分かっていませんが今後、面白い活用方法などがあれば紹介、DIYしたいなと思います。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

Arduino Nano互換機に書き込めないだと!

じゃんくはっく
じゃんくはっく

5年振りにArduino Nano(互換機)を触ったら書き込みできなーい!

あら、壊れたのかしら?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

「マイコンボードに書き込もうとしましたが、エラーが発生しました。」と出るのよ

アリエクでまた買えば

200円くらいでしょ?

ぴー
ぴー

いやはや、5年も触っていないといろいろ完璧に忘れています。ArduinoNanoという小さなArduino があるんですが、それにLチカでも書き込んで動作確認しようとしたら、書き込めずエラーが出てしまいました。持っているNano互換機はこれです。

JunkHack : arduino hello world! 投稿日: 2015年3月15日
6年くらい前の記事で、$3でアリエクでポチったもの

https://hack.gpl.jp/2015/03/15/arduino-hello-world/

今回のエラーログは以下のようになります。

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Applications/Arduino1.8.12.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/Users/junkhack/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/cu.wchusbserial14120
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
::(省略)
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00

avrdude done.  Thank you.

マイコンボードに書き込もうとしましたが、エラーが発生しました。
このページを参考にしてください。
http://www.arduino.cc/en/Guide/Troubleshooting#upload

通信が出来ていないような感じですね。キーワード「avrdude: stk500_recv(): programmer is not responding」でググってみるとブートローダーが壊れたとか、いろいろ出て来て壊れたのかなと。でも、実は違うようです。

プロセッサ:ATmega328P(Old Bootloader)を選べば大丈夫!

Arduino / micro:bit / M5Stick勉強会の電録簿
ボード・アップデートで書き込みエラー

http://www.umek.topaz.ne.jp/mameduino/boardupdate_error/

このサイトによれば、どうやら、ボード設定メニューのプロセッサー種別選択のサブメニューにて「ATmega328P(Old Bootloader)」を選択するだけでいいようです。

はい、ちゃんと書き込めました。どうやら、Nanoの新しいやつは、通信速度が112.5kbps ということで、古いNanoは57.6kbpsということのようです。

ブートローダーを新しくすることもできるようで、もう一台arduinoがあれば以下のように書き込めるようです。

Arduino as ISP and Arduino Bootloaders

https://www.arduino.cc/en/Tutorial/BuiltInExamples/ArduinoISP

また今度やってみようかな。今日はいろいろ違う目的がありますので。

いや、こういうのはわかった時に即実行が良いですね。ブログのネタにもなるし少し休憩後、書き込んでみました。

UnoをISPにしてNanoに書き込みする!

こういうのは全体の流れを把握するのが大事です。大きくは以下と理解。

(1) UnoをISPにして、Nanoに書き込む
  → 手持ちにUnoがあったのですが、それ以外でもOK
(2) まず、UnoにArduinoISPのスケッチを書き込む
  → スケッチ例>11.ArduinoISP>ArduinoISP
    ※書き込んだら、次に配線をしますのでUSBを外します
(3) UnoとNanoを配線する
  → 配線は6本
(4) IDEのツールからブートローダーを書き込む
  → UnoをUSBでPCに接続。その後書き込みます

(1) UnoをISPにして、Nanoに書き込む

ISPとは、インサーキットシリアルプログラマーということで、ICSPとも略されるようですね。基板に繋いだまま内蔵メモリにプログラムを書き込むことを言うようです。今回の例だと、Nanoのブートローダーを書き込むにあたり、UnoをISPにして書き込むわけです! 

(2) まず、UnoにArduinoISPのスケッチを書き込む

アリエクで昔、本物のUnoをポチっていました。裏が白い基板のです。

まずは、ISPのスケッチをIDEから引っ張りだしてきて、Unoに書き込みます。

スケッチ例 > 11.ArduinoISP > ArduinoISP

次に配線しますので、USBを外しておきます。

(3) UnoとNanoを配線する

配線は6本で、こんな感じです。写真ではUSBが接続さていますが書き込みが終わったときに撮ったからです。配線するときは、外してやってくださいね。

ISP UNO 書込ターゲットNANO
D13 D13
D12 D12
D11 D11
D10 RST
+5V +5V
GND GND

実体配線図だとこういうことですね。

さて、書き込みましょうか! USBをUno(ISP)に接続します。

(4) IDEのツールからブートローダーを書き込む

ツールからボート、プロセッサ、シリアルポート、書込装置を程よく選択して「ブートローダを書き込む」でOKです。ログには以下のように流れました。

/Applications/Arduino1.8.12.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino1.8.12.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega328p -cstk500v1 -P/dev/cu.usbmodem14111 -b19200 -Uflash:w:/Applications/Arduino1.8.12.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex:i -Ulock:w:0x0F:m 

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Applications/Arduino1.8.12.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/Users/junkhack/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/cu.usbmodem14111
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: reading input file "0xFD"
avrdude: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xFD:
avrdude: load data efuse data from input file 0xFD:
avrdude: input file 0xFD contains 1 bytes
avrdude: reading on-chip efuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0xDA"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDA:
avrdude: load data hfuse data from input file 0xDA:
avrdude: input file 0xDA contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude done.  Thank you.

         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "/Applications/Arduino1.8.12.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex"
avrdude: writing flash (32768 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against /Applications/Arduino1.8.12.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: load data flash data from input file /Applications/Arduino1.8.12.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: input file /Applications/Arduino1.8.12.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex contains 32768 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 32768 bytes of flash verified
avrdude: reading input file "0x0F"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x0F:
avrdude: load data lock data from input file 0x0F:
avrdude: input file 0x0F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lock verified

avrdude done.  Thank you.

新しいブートローダをNanoで確認

今書き込んだNanoの動作確認です。ボード設定メニューのプロセッサー種別選択のサブメニューにて「ATmega328P」を選択します。Old Bootloaderじゃないやつです。

LEDブリンクをNanoに書き込み! 以下がログですが、115200kbpsで通信していますね。

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Applications/Arduino1.8.12.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/Users/junkhack/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/cu.wchusbserial14120
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
         Hardware Version: 3
         Firmware Version: 4.4
         Vtarget         : 0.3 V
         Varef           : 0.3 V
         Oscillator      : 28.800 kHz
         SCK period      : 3.3 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: reading input file "/var/folders/f1/5d6ycdnj6v58mcq9kn4b3ksm0000gn/T/arduino_build_539320/Blink.ino.hex"
avrdude: writing flash (924 bytes):

Writing | ################################################## | 100% 0.48s

avrdude: 924 bytes of flash written
avrdude: verifying flash memory against /var/folders/f1/5d6ycdnj6v58mcq9kn4b3ksm0000gn/T/arduino_build_539320/Blink.ino.hex:
avrdude: load data flash data from input file /var/folders/f1/5d6ycdnj6v58mcq9kn4b3ksm0000gn/T/arduino_build_539320/Blink.ino.hex:
avrdude: input file /var/folders/f1/5d6ycdnj6v58mcq9kn4b3ksm0000gn/T/arduino_build_539320/Blink.ino.hex contains 924 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.45s

avrdude: verifying ...
avrdude: 924 bytes of flash verified

avrdude done.  Thank you.

flash verified が出ていますね。うまくいったようです! ログをよく見てみるとファームウェアバージョンは4.4ということのようです。

Hardware Version: 3
Firmware Version: 4.4

まとめ

今回、なんとなくわかったのは以下となります。

・ブートローダが古ければ、Arduino を書込機器(ISP)にして新しくできる
・古いArduinoなら、プロセッサー種別選択で「ATmega328P(Old Bootloader)」を選択
・違いは、通信速度のようです。それ以外の違いはまだ不明

あとがき

5年も使っていなかったので、扱いが悪くて壊れたのかな? と思っていましたが、対応方法があってよかったです! まさかブートローダが新しくなっていてIDEから古いのを選択しないとダメだとは思っていませんでした。壊れていなくてよかったです。

5年経過しているので、いろいろな環境が変わっていますね。5年前よりいろいろ進化しているので、ハマることもあるかもですが以前より楽しいことができそうな気がします。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

久しぶりに一目惚れしたArudio互換機のSeeeduino XIAO

じゃんくはっく
じゃんくはっく

可愛すぎて一目惚れしました!

ぽっ! きゃー

ぴー
ぴー
じゃんくはっく
じゃんくはっく

・・・いや、ぴーちゃんの事じゃなくて、SeedのXIAOっていうArduio 互換機のことよ。

こんなチビっこいマシンに負けたのか・・・w

ぴー
ぴー

サムネでもわかるとは思いますが、これ全体のフォルムがかわいいんですよね。あと想像よりもちっさいんです。親指くらいの大きさなんですよ。発売は去年の3〜6月ごろだったみたいですが、今頃発見です。

3個入りパッケージで1,750円!

Wiki Seeeduino Xiaoをはじめよう

https://wiki.seeedstudio.com/jp/Seeeduino-XIAO/

Seeedの日本語版のWikiもありますので、大きさなどはそちらでどうぞ。上の写真は3個入りのをアマゾンからゲットしました。3個入りで1800円弱です。1つ600円ってとこですかね。

中身! 想像より、ちっちゃい!親指に乗りますよ。

ESP32と遊んでからだいぶ月日が経ちましたが、大きさはそのくらいです。ブレッドボードに刺さるのでPinつけてすぐ楽しめますね!

まずはボードをじろじろと見る!

Type-Cコネクタが付いていて、端面がスルーホールになっていて面実装も考慮されていますね。このType-Cコネクタは6ピンタイプじゃなくて12ピンです。あと、LEDらしきものが4つ付いています。

金属のカバーで覆われていますので、その中が気になるところですがまずは、PIN番号が表からわかるようにシールを貼っておきました。なかなか気が利いていますね! Seeedさん、このプロダクトをリリースするにあたりいろいろ気合いが入っているようです。

裏面を見ると、SMD実装したときのVIN,GNDがありますね。4つの丸いのは、なんでしょうか?

調べてみると、英語版Wikiによれば、Newバージョンだとこの丸いのが4つあるようです。

Seeed 英語版Wiki:hardware-overview

Wiki

どうやら、SWCLK (PA30) と SWDIO (PA31) のGPIOのようです。

qita : Seeeduino XIAO 背面パッドをGPIOとして使う

https://qiita.com/nanase/items/37ecca24aee8fbd4492e

だいぶ時間が経過しているので、先輩たちがあれこれ情報をあげていてくれて助かりますね。

やっぱり、Type-C が付いているところがうれしいです。接続しやすいですからね!

動作確認

Type-Cケーブル(スマホでいつも使っているやつね)をPCに繋げて、おもむろにXAIOに繋げてみます。ケーブルのほうが重いので、本体が浮きます! 

オレンジ色のLEDがピカピカしてますね!

とりあえずLチカ

Arudio IDEを使って、Lチカでもやってみます。SeeedのWikiにしたがってIDEは仕込みんでおきます。久しぶりすぎて書き方、だいぶ忘れちゃいました。

この2つのブルーLEDは、RX/TXのLEDなんですがIDEからも定義されているので、光らせることができるようです。デジタル出力だけかなと思っていましたが、アナログでもいけるようですね。

//setup()内の処理は最初の一回だけ行われる
void setup() {
  pinMode(PIN_LED2, OUTPUT );//Pinを出力用に設定
  pinMode(PIN_LED3, OUTPUT);
  int led_pw = 255; // 明るさ(通常とは逆) 明るい0 - 255暗い
}

void loop() {
  rx_led2( 2 ); //明るさ調整ステップ
  rest();
  tx_led3( 2 ); //明るさ調整ステップ
  rest();
}

// RXとLED 基盤側の青LED
void rx_led2(int n){
  int led_pw = 255;
  //点滅周期
  for (int i=0;i < 255;i++ ) {
    analogWrite(PIN_LED2, led_pw );
    led_pw = led_pw + n;
    if( led_pw ==   0 ) n =  n;
    if( led_pw == 255 ) n = -n;
    delay( 5 );//だんだん暗くなる速度
  }
//  digitalWrite(PIN_LED2, HIGH ); //通常とは逆 LOW で点灯、HIGH で消灯
analogWrite(PIN_LED2, 255 );// LED Off 上より暗くなる
}

// TXのLED USBコネクタ側の青LED
void tx_led3(int n){
  int led_pw = 255;
  for (int i=0;i < 255;i++ ) {
    analogWrite(PIN_LED3, led_pw );
    led_pw = led_pw + n;
    if( led_pw ==   0 ) n =  n;
    if( led_pw == 255 ) n = -n;
    delay( 5 );
  }
analogWrite(PIN_LED3, 255 );// LED Off
}

void rest() {
    delay( 500 );
}

いろんな値を書き換えて遊んでみてください。

注意点としては、HIGHとLOWが逆なのと、255が暗く、0が明るい状態となるようです。これは仕様なのかバグなのか? Seeedさん、これは修正してほしいです。

XIAOはどんなスペックなのか?

このボード、一目惚れして速攻買ったのでどんなスペックかまだよくわかっていません。改めて、記載してみます。

製品名称 Seeeduino XIAO
マイコン ARM Cortex-M0+ CPU(SAMD21G18) 
動作電圧 3.3V
デジタル I/O ピン 11
PWM Pins 10
アナログ I/O ピン 11
フラッシュメモリ 256 KB
SRAM 32KB
EEPROM
クロックスピード 48 MHz
大きさ 23.5mm x 17.5mm
価格 $4.90

だいぶarduinoから離れていて、このあたり疎いのですがどうやら ATSAMD21は、アーキテクチャーはARM Cortex-M0+ CPU(SAMD21G18) のようです。Arduino Zero・M0 Proっていうボードにも使われているやつみたいですね。SAMD21系のarduinoとか表現されている感じです。または、単にSAMD系Arduinoとか。

ARM CORTEX-M0+

https://www.arm.com/ja/products/silicon-ip-cpu/cortex-m/cortex-m0-plus

メジャーなArduino との比較表です。自分は、Nanoシリーズ互換機か、Pro Miniが好きです。安いからw

ボード マイコン 動作電圧 Digital I/O PWM Analog I/O Flash Memory SRAM EEPROM クロックスピード 大きさ 価格
Arduino Nano v3 ATmega328 5V 22 6 8 32KB 2KB 1KB 16MHz 45 mm x 18 mm $45.90
Seeeduino Nano ATmega328 5V 22 6 8 32KB 2KB 1KB 16MHz 45 mm x 18 mm $6.90
Arduino Micro ATmega32u4 5V 20 7 12 32KB 2.5KB 1KB 16MHz 48 mm x 18 mm $24.90
Arduino Pro Mini ATmega328 5V / 3.3V 14 6 6 32KB 2KB 1KB 8 /16MHz 33 mm x 18 mm $9.95
Trinket M0 ATSAMD21 3.3V 5 2 3 256KB 32KB 48MHz 27mm x 15.3 mm $8.95
Seeeduino XIAO
ATSAMD21
3.3V 11 10 11 256KB 32KB 48MHz 23.5mm x 17.5mm $4.90

NanoやProMiniの互換機は、アリエクで200〜300円くらいなんですが、それと比べると600円は高いかもしれませんが、倍以上のスペックはありますね。

こうして比較してみると、コスパがいいんじゃないでしょうか。まぁ、こんな高スペックは必要ないっていう用途もあるんで使い所次第ですかね。

今後に備え応用例や試したことなどメモ

発売からもうすぐ1年経過するので、どんな応用例があるかリサーチしてみました。また、開発する上で役立ちそうなメモをしておきます。

Seeed:Seeeduino XIAO Resources Roundup. What will be your next project idea made by Seeeduino XIAO?

リンク

まず、オフィシャルのSeeedのブログでいくつか紹介されています。その中から独断と偏見で面白そうなプロジェクトをピックアップ。

MIDIをコントロールできるので、オリジナルコントローラとかセンサー駆動の楽器とか?

サイトでは、違うボードを使っていますがXIAOでも同じことが可能。画像や図形を組み合わせて空中にお好みの絵を投影する装置。

PovRanian 装置

PovRanian (ポブラニアン):画像や図形を組み合わせて空中にお好みの絵を投影する装置

これ作りたいなー!

エアロバイクでストリートビュー進みたい!! (その3)(Seeeduino XIAO化してみた)

ツールのUSB Stack は、 TinyUSBを選択とな。ほほー。

あれこれ調査していると、PlatformIOも対応しているようです。まだ試していませんが、メモしておきます。

開発環境:PlatformIO Seeeduino XIAO

USBホストライブラリSAMD

SeeedのWikiにあるやつですが、リンク先だけメモしておきます。

Seeeduino XIAOをUSBデバイス(TinyUSB)として使う

Seeeduino XIAO の使い方

カムロボの顔用基板を作ってみた [Xiao版]

Seeeduino XIAOを使って二酸化炭素測定する SparkFunライブラリVer

fritzingのパーツ

Seeeduino XIAOのタッチ入力

Seeeduino XIAOのデジタル入力

Seeeduino XIAOのデジタル出力

Arduinoで超音波センサHC-SR04の使い方【距離測定】

ArduinoでOLED

シリアルLED(WS2812B)をArduinoで制御

【Seeeduino XIAO】RS232cから受信した信号をUSB HIDで送信してみる

Seeeduino XIAO でPWM調光のLチカとI2CのLCDを使ってみる

いろいろありますねー。こんなこともできるみたいです。

Seeeduino XIAO マイコンで TOPPERS を始めよう

TOPPERS/R2CAというマルチタスク処理ができる

Seeeduino_XIAOでArduino Keyboard.h互換ライブラリを利用してMicrosoft Teamsミュートキーを作製する

楽しそうなのがいっぱいありますね。

XIAOを組み込んでいるハードウェア作家さんもいましたよ!

XIAO DAP
Seeeduino XIAO をメインコントローラとした、DigitalAudioPlayer

https://sites.google.com/view/chikoidac/home/xiao_dap

まだ販売はされていないとのことですが、販売されたら組み立てKITを買ってみたいです!

まとめ

今回、なんとなくわかったのは以下となります。

・XIAOはコスパ最高でないか!
・Type-Cが良い!
・Arduino IDE 互換で、SAMD21系のarduino
・本家では、Arduino Zero・M0 Proに使われている
・3.3v動作でクロックが速く、フラッシュメモリも多い
・しかしEEPROMがないようです フラッシュメモリに保存する?
・USB関連のプロダクトやシリアル通信系の応用とか相性良さそう
・SMD実装がやりやすい(ので、基板設計して使うのとか良いですね)

あとがき

このボード、本当に小さくて応用次第では面白い組込ができそうだなーと感じています。まずは3つあるので、何か実用的な何かを1、2つ作ってみたいですね。1つは、開発用にしておいて残りは実験的に何か実際に作ってみようと思います。まずは、できそうなことからやってみましょうか!

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

リポ充電基盤のType-C版が出てたんでポチった!

じゃんくはっく
じゃんくはっく

最近また、電子工作熱が出てきたのでアリエク物色!

はいはい、今日は何をポチったんですか?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

ぐぬぬぅ! なぜポチったのがわかるのだ! 

衝撃だったんでしょ?w

ぴー
ぴー

はい! またアリエクでポチってしまいました。

今回は、備忘録として記載。まだ到着していませんが、到着するころには「これなんだっけ?」という事態になることが多発していましたので、ポチッとしたらブログに書いていくことにします。

 副次効果としては、ぽちったら記事を書かないといけなくなるので衝動買い防止にもなるかなと!今日買ったのはこれです。

なんとお値段、送料込みで10個450円です。1個あたり45円と、価格破壊な値段ですね。たぶん、このUSB Type-Cコネクタは6pinだと思いますが、簡単な工作であればこれで十分です。マイクロUSBのタイプもありますが、やっぱり差し込む方向を意識しなくていいType-Cは便利です。今では100円均一でもケーブル売っていますしね。

リポ充電基盤とは?

5V 18650 リチウムバッテリー充電モジュール

投稿日: 2015年5月10日

5年くらい前にも購入していましたが、だいぶ数が少なくなったので追加購入です。この基盤は、リチウム電池を過充電、過放電しないための基盤です。メインチップは、TP4056で保護回路に、DW01A と ML8205A が乗っています。今回購入したのがどんなチップが乗っているかはまだ未調査ですが、まぁ仕様は同じでしょう。

この基盤、ちょっと電子工作して何か試作版を作る際に、リチウム電池とともに組込セットで詰め込むときに重宝します。

例えば、こんな感じで試作版に使っていました。

2

これはESP8266 ESP-12を使った温度・湿度・照度系のIoTデバイスなんですね。

5

ちょっと見えにくいですがマイクロUSBが刺さっている部分にその基盤があります。5Vからリチウム電池に充電し、5Vを放電します。他にも、ポケットオシロスコープを充電持ち運び仕様にしてみたりと。

これの工作の記事は忙しくて書いていませんでしたが中にリポ電池とこの基盤などが入っています。簡単にでも書いておけばよかったなー。ちょっと持ち運んで何か計測したりとか便利でした。

あと、自作基盤にこの充電ボードを乗っけた例もありますね。

DSC00219
ESP8266 BackBoost

この白い基盤は自作基盤でESP8266とバックブースト電源回路などが乗っています。充放電管理基盤は自作だと高くつくのでこんな感じで基盤にリフローして、くっつけて使っていました。

まとめ

今回、なんとなくわかったのは以下となります。

・Type-C版のTP4056充電管理基盤はケーブル接続が便利そう
・以前のマイクロUSB版より安くなっていた
・仕様が変更になっているのか、未調査
・今後、この基盤で工作していこうと思う
・基本的な構造は前のと同じだと思う
・到着したらまた検討してみる

あとがき

 それにしても以前、マイクロUSB版のを購入したときは1個あたり97円だったのに。Type-C版でさらに安くなっています。余分な機能をなくし需要があるものを大量に作って、良いものを広く販売するという基本的な考え方はすごく好きです。反面、検品コストという考え方も日本とは違いますので不良品率はあがります。しかし、入念に検品して全体のコストをあげるより、ある程度の検品品質で不良品が混入すれば交換すれば良いという考え方もあるのも事実のようです。

 薄利広商 という言葉があるようです。中国の文化なのか日本の文化なのか歴史に疎いので良くはわかりませんが、中国の商人の中にはこういう考え方があるんじゃないのかなと思います。意味合い的には、薄利多売と似ていますが、これは少しネガティブなイメージもあります。しかし、薄利広商 というのはあまり聞かない言葉ですが、薄い適切な利益を乗せて広く客に販売することが本来の商売であり、それは社会も良くしていくのだという考えのようです。売り手もどこよりお得にお客に販売するのは、本来気持ちの良いものだと思いますし、お客も安く良いものが入手できたら嬉しい。それは転じて地域もよくしていくのだという思想のようです。

 少し前のマスク買い占め転売、プレステ5 の転売などそういうのは本来の商売ではない、長く商売をやっていくためにはもっと違う視点を持つべきだというのが「薄利広商」という言葉の真意なのではと思います。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

MQAは実際に体感できるほどの高音質なのか?

じゃんくはっく
じゃんくはっく

Tidalで配信されているMQA音源について今日は体感できるか検証してみました!

MQAってなんだっけ?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

一言で言えば、CDスペック以上のハイレゾ音源を圧縮する技術みたいです。

へー、なんか良いことあるの?

ぴー
ぴー

そもそも、MQAとの接点はTidalという音楽配信サービスでした。Tidalの詳細は以下リンクを見ていただくとして、その特徴はSpotifyにはない高音質の音源を配信しています。

TIDALとは何ですか?

https://tidal.com/whatistidal

以下の図のように、Tidalでは、masterラベルがついている音源があります。

ちなみに、この音源のラベルには以下の種類があります。

CD品質の16bit/44.1khzは、HiFiという表記になり、ほとんどの音源はこの品質以上です。MQAとはこのラベルでいえばMasterとなっているラベルが相当し、これはハイレゾ相当になります。MQA云々の前に、まずはハイレゾとは何?っていうところをまとめてみます。

ハイレゾとは?

ハイレゾ音源はサンプル程度にしか買ったことがありません。意味的にはWIKIの通りなんですが、ちょっとわかりにくいですね。

Wiki
ハイレゾリューションオーディオ (: High-Resolution Audio) とは、CD-DAのサンプリングパラメータ(44.1 kHz, 16bit)よりもレゾリューションが高い(デジタル)オーディオのこと[1]。略して「ハイレゾオーディオ」、「ハイレゾ音源」または単に「ハイレゾ」と呼ばれることもある(高分解音質・高解像度音質)。

Wikiへのリンク

日本オーディオ協会の図が一番わかりやすいですので引用します。

日本オーディオ協会 ハイレゾ 定義と運用

https://www.jas-audio.or.jp/hi-res/definition

つまり、赤枠がハイレゾの定義です。厳密には、量子化ビット数が24bitでサンプリング周波数が96khz以上のようですね。赤枠の中の黄色部分がそれです。

量子化ビットとは平たく言えば、音の強弱の細かさです。16ビットより24ビットのほうがより、小さい音から大きな音まできめ細かということになります。サンプリング周波数というのは1秒間に採取する音の密度です。cd品質の44.1khzより、96khzとか192khzとかのほうが理論上は高周波まで正確に記録できる密度があります。正しく元の信号を再現するため、サンプリング周波数は記録する周波数の2倍である必要があるようです。つまり、サンプリング周波数が44.1khzであれば、22.05khzまでで、192khzであれば96khzとなりますね。

人間の耳で聞き分けられるかはここでは横においておきますね。

ハイレゾだと無条件に音質がいいのか?

答えは、いいえです。音の良し悪しは、趣味趣向がありますがここでいう音質はより音像が明確で、音の存在が明確なことを指しています。もちろん、人間がですよw

これはアップサンプリングしてデジタル処理した音もハイレゾっていうことになります。実際、ノイズが入った古いアナログ音源をアップサンプリングしてノイズ除去した音源もたくさんあり、これもハイレゾとなって流通しています。また、録音機材や録音条件が悪い(例えばライブとか)マスター音源からハイレゾ音源を作ってもこれはそれなりな音になります。

 無圧縮のマスター音源はデータサイズが大きすぎるので、CD規格に収まる16bit/44.1khzのサイズにしているわけですが、それより良い品質にしましょうよということで、ハイレゾ音源というのがあるというわけです。

また配信サービスはCD品質の規格以上でも問題ないわけです。映像の配信データと比べたら、音の配信データなんて小さなものです。Tidalでは、CD品質をHiFiとし、それ以上をMasterというラベルをつけているわけです。

あと、そもそも24bit/192khz 音源は意味がないと言い切っているエンジニアがいます。一度、読んでみると考え方がかわるかもしれませんね。

モンゴメリーさんの 【24/192 音源は本当に馬鹿げている】翻訳

https://nk-productions.net/column/monty-24-192/

MQAとは何か?

これは、今でも実はよくわかっていません。オフィシャルの説明はいろいろあるんですが、すごく大雑把にいえば以下が要点のようです。

(1) 時間軸解像度(音のにじみ)が人間の時間に対する感度(10μ秒以下)相当
  → なんのことですか?(笑)
(2) ハイレゾに比べて、ファイルサイズが小さい
  → 例えば、Flac 24bit/96khz よりMQA Flacはサイズが小さい
(3) ファイル互換性がある
  → MQAファイルでも普通の再生環境で再生できる

(1) は、検証できませんでした。検証する方法がわかりません。

(2) は、実際に比較してみました。(3) は、問題なく再生できました。

TidalのMQAファイルをダウンロードして観察

手持ちのハイレゾとTidalのMQAファイルを比べてみます。まず、Tidalの楽曲は、Donald Fagen のKamakiriad アルバムの1曲目です。曲名は Trans-Island Skywayで、24bit/96khz です。

ちなみにAudirvanaプレイヤーで再生したとき、上記のようにMQAマークの横に青い点がありますが、これは緑色と青色の2つの状態があります。青い色は、MQA Studio品質であることを認証しています。緑は出所が不確実であるか、まだ最終リリースではないことを示すということです。

MQA AUTHENTICATION

http://bobtalks.co.uk/blog/mqa-philosophy/mqa-authentication-and-quality/

Tidalユーザーの方は以下のリンクからその曲を確認できますので埋め込んでおきますね。

https://tidal.com/browse/track/76891279

さて、この楽曲をTidal-dlというPythonツールでダウンロードしてみます。

====================================================
CHOICE                 FUNCTION                     
Enter '0':             Exit                         
Enter '1':             Check AccessToken            
Enter '2':             Settings                     
Enter '3':             Logout                       
Enter '4':             Set AccessToken              
Enter 'Url/ID':        Download by url or id        
====================================================
Enter Choice:https://tidal.com/browse/track/76891279
+----------------+---------------------+
| TRACK-PROPERTY | VALUE               |
+----------------+---------------------+
| Title          | Trans-Island Skyway |
| ID             | 76891279            |
| Album          | Kamakiriad          |
| Version        | None                |
| Explicit       | False               |
+----------------+---------------------+
100%|▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓| 80.81/80.81 mb
[SUCCESS] 01 - Donald Fagen - Trans-Island Skyway.flac

わかりやすいように、ファイル名は01-Tidal-master-Trans-Island Skyway.flacとリネームしておきました。

$ ll
total 476824
drwxr-xr-x@  6 junkhack  staff        192  2 14 01:11 .
drwxr-xr-x@ 37 junkhack  staff       1184  2 14 00:38 ..
-rw-r--r--@  1 junkhack  staff   85081022  2 14 01:05 01-Tidal-master-Trans-Island Skyway.flac
-rwxr-----@  1 junkhack  staff  136805551 11  7  2019 01-Trans-Island Skyway.flac

2つのファイルがあり、Tidalからダウンロードしたものは、約85Mbyteです。もう一つのファイルは日本の配信サイトから購入したものです。flacの24bit/96khz です。

こちらは、ファイルサイズは約136Mbyte です。File コマンドでそれぞれの内容を確認してみると以下のようです。

$ file 01-Tidal-master-Trans-Island\ Skyway.flac 
01-Tidal-master-Trans-Island Skyway.flac: FLAC audio bitstream data, 24 bit, stereo, 48 kHz, 18726328 samples

$ file 01-Trans-Island\ Skyway.flac 
01-Trans-Island Skyway.flac: FLAC audio bitstream data, 24 bit, stereo, 96 kHz, 37452654 samples

おや? Tidalのは、24bit/96khzではなくて、24bit/48khz とありますね! ここがMQAの(2) 番目のポイントのようです。

これは、調べてみると Music Origami という愛称でMQAの仕組みの1つのようです。

JASジャーナル2015年11月号(Vol.55 No.6)
::
新デジタルコーディング方式 ‐ MQA(和訳) -鈴木 弘明 (P45~57)

すごくわかりやすい資料で(多少謎はありますが)、現在これが一番日本語で書かれた資料として参考になるかと思います。詳細はPDFを参照いただくとして、図を引用してポイントをわかりやすく補足したいと思います。

まず、今回の例で確認した TidalのMQA24bit/96khzのファイルは実際には 24bit/48khz でした。これはCのデータをノイズ領域であるBの120db以下(図中では24khz〜48Khzの紫の部分)に”折りたたまれる”とのこと。

ほほー、なるほどねー。確かに、120db以下なんてアンプのノイズで消されちゃうし、人間の耳のダイナミックレンジは120dbということなので問題なさそうです。ちなみに、24bitでは144dBの音の強弱を数値化できます。32bit では、192dBです。図中の-144db〜-168dbあたりは何を表現しているのでしょうか?いろいろ謎が多い資料ではあります。不明なポイントとしては、以下ですかね。

・CのデータがB領域の120db以下にロスレスで収まるのか?
・Bの領域のデータが120db以下にロスレスで収まるのか?
・24bitでは144dBだが、図中の-144db〜-168dbあたりは何を示しているのか?

おそらく、BやCの実際のデータ(おそらく120db以下をカット)は大きな音量レベルでは記録されていない(0データが多い)のでロスレス圧縮すれば収まるのかと想像。しかし、3番目については理解不能です。

実際にMQAレンダリングできるDACで聴感の違いは感じるか?

過去の実験から、AAC320kbpsの音源とFlac16bit/44.1khz ではなんとか音の違いを感じることができました。しかし、これもギリギリなんとか違いを見つけられたくらいです。Flac16bit/44.1khzと、Flac24bit/44.1khzでは聴感では違いを見つけられませんでした。そして今回、聴感の違いを比較する対象は、改めて書きますと以下となります。ハードウェアMQAレンダリングだと24bit/96khz以上のMQAファイルでないとDACの本領を発揮できません。まずは、この楽曲で確認してみました。

(1) 24bit/96khz MQA Flac
(2) 16bit/44.1khz Flac

Tidalでは以下の楽曲となります。Jack Johnson (ジャック・ジョンソン)のBanana Pancakesです。他も何か見つけたら追加しておきます。以外に見つけるのが難しいんですよね。まぁ、これも1つの楽しみですか?w

TidalユーザーでMQAデコード(これはMQAのDACがなくても可能)できる環境であれば比較してみてください。

24bit/192khzのMQAファイルでも試して見ました。こちらはMQAハードウェアデコードが必要です。

(1) 24bit/192khz MQA Flac
(2) 16bit/44.1khz Flac

192khzのMQAと音圧レベルが違うので、自動ゲイン調整を使っています。MQAファイルのほうが、音圧レベルが低かったです。違いといえば、そのくらいでしょうか?w

自分の結論は、まぁ予想通りというか判別不能でした。言い訳となりますが、16bitか24bitかの違いを体感するのは、相当S/N比の良いノイズがない環境で試さないとNGです。ノイズが少ないDACにヘッドフォンをつけてやっと違いがわかるかという程度のものですが、それでも自分には無理でした。

 また、サンプリング周波数の違い44.1khz と 96khzの違いを体感できるかという点においては、細かな音の出方を観察しましたが、これも判別不能でした。1つ1つの音の出方というよりも、全体の雰囲気が違うと思うのですが、ブラシーボなのか明確な違いなのかしっかりと判別することができませんでした。

 また、MQAのいう(1) の時間軸解像度(音のにじみ)という部分についてもまったくわかりませんした。

まとめ

今回、なんとなくわかったのは以下となります。

・16bit/44.1khz Flacと、24bit/96khz MQA Flacの違いは聴感上、体感できず。
・ハードウェアデコードするなら、24bit/96khz以上のMQAファイルが必要。
・MQA 24bit/96khzファイルは同条件と比較して、約136Mbyte→約85Mbyteまで小さくなっていた
・少なくとも、自分にとってはハイレゾもMQAもオーバースペックで無駄
・ハイレゾとCD品質のFlacを正確に聞き分けできる人っているのかな?
・しかし、曲によってはSpotifyの320kbpsとFlacまたはMQAファイルの違いは体験できる。ここにTidalの価値を見出す!
・検証中、発見したTidal-dlは神ツール! これでTidalの価値がまた上がりました
・今回購入したMQAレンダリングできるDACは、MQAのオマケとして考えよう
・人にオススメするとしたら、S/N比120dbの32bit/384khzのDACで十分かな!
・これは2000円〜4000円くらいで買えます
・MQAを体験してみたい人は7500円でこのDAC(Hiby FC3)を買ってもいいかもです
・しかしTidalのオフィシャルアプリでは今の所、DACのハードウェアMQA再生はできません。
・Winか、MacならAudirvanaプレイヤー(1万円くらい)が必要
・androidなら、UAPP(USB Audio Player Pro)850円と、MQA Studio Master Quality(450円)が必要。それ以外のアプリもあるかもですが。
・iPhoneは未調査ですが、Amarra Play があるようです。
・macでDACに排他利用する場合(MQAハードウェアデコードする場合は必須)は、coreaudio を通さないのでmac側で音量調整やバランスなど各種フィルタは使えません。

あとがき

今回はMQAとしての価値がDACにあるか、その聴感上の違いを体感したのですが明確な違いはわかりませんした。こういうのは、人や機材によって変わると思うので、Tidalユーザーはぜひ、チャレンジしてみてください。

 今の所、聴き放題サービスとして、SpotyfiとTidalは継続していこうと思います。Spotyfiは外部APIからのアクセスができない仕組みなので、こういうところはTidalが有利ですね。

 MQA環境にしたら、明確な違いがわかったよという方がいたらぜひどこかで発信してください。それが良い方向の記事でも悪い方向でも、検索でいつか辿りつけるはずです。あと今回、世界中のフォーラムも見て回ったのですが、MQAに対しては否定的な意見も見受けられました。でも、少なくとも面白いアプローチだと自分は思います。まずナンセンスなハイレゾ音源商法に終止符をうって、MQAブルーマークが付いていれば、それはほぼマスター品質と変わりないよと認証するその全体の仕組み作りとしては評価しても良いのではないかと思います。無圧縮のマスターと比べて、ほぼ違いがなく、それがマスター保持者から認証されるのは消費者としてはアリだと思います。多分、24bit/96khzのMQAで今のマスターデータとほぼ遜色ないレベルを保てるはずだと思います。そもそも人間の耳で判別可能かどうか怪しいものです。マスター保持者が聴感上、認識するのではなく、機械的にマスターデータとMQAデータを比較してxx%の差なら、認証するというようなことでOKではないかと思うのですが。

それ以上のクオリティーを求める人はマーケット的にも少数でしょうし、別途で販売するなり提供するなり、なんとでも対応方法はあると思いますが。

でも、MQAファイルを作るロジックはオープンソースにすべきです。MQA組織側は認証の手続きやマスター保持者(メジャーレーベル)とのやりとりに特化すべきだと思いますね。Win Winになれるスキームは作れそうなんじゃないかと思いますが。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

MQAレンダリングできる世界一安いDACを買ったよ!Hiby FC3 Portable MQA USB DAC

じゃんくはっく
じゃんくはっく

今日は新しいDACを買ったんで使用感など書いてみます!

DACってなんだっけ?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

デジタルをアナログに変換する機械で、今回の用途だと音楽を鳴らすヤツだね。

へー、なんか良いことあるの?

ぴー
ぴー

ぴーちゃんのように、DACって興味がないと???ってなりますよね。これは、スマホとかPCからUSB接続してヘッドフォンなどを接続して音を出すヤツです。「Digital Analog Converter」の略ですね。

実際、自分も今まで外付けのDACってのは1つしか買ったことがありません。アリエクで2000円くらいのものです。

Meizu HiFi DAC Cirrus Logic CS43131 Chip

Androidデバイスから有線ヘッドフォンを接続する時に使うので、なんとなく安いのを選んだだけです。Pixel3 とかは、ヘッドフォンジャックを挿す穴がないんですよね。

 で、今回購入したDACは、TidalでMQAをフルレンダリングできるものです。TidalっていうFlacやそれ以上の高音質を配信している聴き放題サービスを使っていて、その中にMQAっていうものがあるんですよね。面白いテクノロジーで、こういうのは実際体験してみないと! なんですよね。

今回買った新しいDACの特徴は?

HiFiGo : Hiby FC3 Portable MQA USB DAC Headphone Amplifier
::
ES9281Pro DAC chip
32-Bit/384kHz PCM
DSD DoP128
124 dB DNR
4x MQA decoding
::

https://hifigo.com/products/hiby-fc3

スペック詳細はリンク先で確認していただくとして、簡単に特徴だけ書いておけば、「世界一、安くMQAをフルデコードできるDAC」です。今の所ね。そのうち、もっと安くなるかもしれませんが。お値段は7000円ちょいです。

DACとして比較・比較条件はこれ!

MQAは何っていうのを説明すると長くなるので、ちょっと横においておきます。今回は、MQAはさておきDACとして評価してみることにします。比較の対象は、今使っているマザーボードについているDACチップです。スペックは以下です。

Realtek ALC892
::
95dB SNR
16/20/24-bit PCM
44.1k/48k/96k/192kHz sample rate
::
PDF

https://www.realtek.com/ja/products/computer-peripheral-ics/item/alc892

音源やアンプやスピーカーは同じ条件です。アンプは2000円のあまり良くないとされているデジタルアンプですが、結論を先に書いておきますとこんな構成でもDACの違いはわかりました。

音源:Julia Michaels / Anxiety
   Tidal で配信のFlac 24bit/44.1khz
アンプ:中華デジタルアンプ(Dクラス)TPA3116D2
スピーカー:エレクトロボイス Sx100+
PC:macos(Audirvana Mac Version 3.5.43)

比較対象のDACは改めて記載しておくと以下です。

Realtek ALC892(マザーボード上)
Hiby FC3 ES9281Pro (外付けUSB DAC)

違いはわかるのか?具体的にどこが違う?

まず、Tidalのプレイリストの33曲目が一番わかりやすいです。耳が良い人はもっと違う部分でもはっきりわかるんでしょうが、言葉で説明しやすいのは33曲目の Julia Michaels / Anxiety です。

 ※曲順は今後入れ替えるかもしれませんのでご注意ください。

この曲、冒頭にギターがなっているですが、4秒くらいと6秒くらいに強めに弾く音があります。この鳴り方が決定的に違います。ちなみに自分は1.6khz以上は聞こえないんですが、この違いははっきりわかります。多分、注意深く聞けばだれにでもわかるはずです。

あと、違う曲でも言葉で説明するのが難しいですが全体的に聴こえ方が違います。あえて言葉で説明するとすれば、「背筋がぞくっと感じる」感覚があります。好きな曲でなんとも言えない「ええわぁー!最高!!」っていう「背筋がぞくっと感じる」感覚ってありますよね? あの感覚があるか・ないかの違いと言えばわかってもらえるでしょうか。

ちなみに、Spotifyでも同じ曲があります。

spotify ジュリア・マイケルズ / Anxiety

今回購入した同じDACで、この曲をTidalとSpotifyで聴き比べてみるとはっきり違いがわかりました。これはTidalのHi-Fiプランは価値があると感じました。

参考にしたリンクなど

今回は、主にDACについてだけでしたが、次回はTidalとMQAとDACについて、もう少し掘り下げていろいろ書いてみたいなと思います。今回いろいろ参考になったのは以下のフォーラムでした。

head-fiフォーラム
Hiby FC3 Portable DAC&AMP, MQA Compatible

https://www.head-fi.org/threads/hiby-fc3-portable-dac-amp-mqa-compatible.951633/

まとめ

今回、なんとなくわかったのは以下となります。

・マザボのDACと外付けDACの違いは明確にわかった!
・しかし、音の変化の違いはスピーカーの方が大きいのは確か
・このDACにしたおかげでSptifyとTidalの音の違いにも気がつけた!
・この違いはDACを変えないとわからなかった
・この差に価値があるかどうかは個人の価値観
・僕はこの差はかなり大きいと思うし、価値があると思う
・すべての曲で違いがわかるか? と言われればわからない事のほうが多い
・しかし好きな曲でゾクっとなる感覚があるか・ないかは大きな違い
・7000円ちょいで購入できるHiby FC3は、Tidalを契約しているなど、Flacクオリティー以上を再生する人にはアリかな
・HiFiGo(深圳)から日本までポチってから8日間で届いた(香港経由で空輸)
・今回、MQAについては未評価。以下、MQA再生する上での注意点です
・AndroidでTidalからMQA再生する場合は、UAPP+MQAアドオンが必要
 ※オフィシャルのTidalアプリではMQA再生できません(MQAだと紫にLEDが光ります)
・MacでMQA再生するには、Audirvanaが必要です。オフィシャルアプリではできませんでした。

あとがき

最初、DACなんかで音の違いはわかるかなー?と思っていました。実際、自分の耳は16Khz以上の高音域が聴こえませんので、DAC変えてもなー、TidalのFlacやMaster(MQA)聞いてもなーと思っていました。しかし実際にはDACを変えたこと、スピーカーを変えたことで、Spotifyとの差もはっきりわかってすごく嬉しかったです。

 今回はMQAの価値観についてはまったく触れていませんので、自分が体感できればそのうちネタとして取り上げたいなと思います。Tidalのオフィシャルアプリは、もう少しがんばってもらわないとですね。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。