2020年1月15日、Edge Chromiumの最初のリリースはChromium 80として公開された。なので当然WebUSBが入っているはず。
そう思ってEdge Chromium for Macで「MakeCode for micro:bit」を開いてみたところ、「デバイスの接続」メニューがあった。ファームウェアが0254のmicrobitを接続して、「デバイスの接続」ボタンに進むと、Chromeと同じようにデバイス名の確認があり、編集したプログラムの書き込みが、「ダウンロード」を押すだけで完了した。
「Python Editor for micro:bit」でもペアリング、Flash、Serialコンソールどれも問題なくできた。
よって、少なくともmicro:bitに関して、Edge ChromiumのWebUSBは問題なく使えるようだ。
2020年1月23日木曜日
2019年4月24日水曜日
Samsung X5 Thunderbolt 3 SSDをAPFSでフォーマットする
Samsung X5はThunderbolt 3接続なのでPCIexpressデバイスとして、システム情報では内蔵のSSDと同じ並びに表示されるが、ディスクユーティリティで選べるフォーマットはHFS+とexFATだけだった。
一方、ベンチマーク記事ではAPFSの数値も出ているので、何がおかしいのかわからなかった。
検索してみたところ、Appleの英文フォーラムに、ディスクユーティリティでGUIDパーティションにすることで自己解決したとあった。説明がわからなかったので他をいくつか読んでみると、スクリーンショット付きの解説があり、解決できた。
How to Format a Drive with GUID for macOS High Sierra, Mojave Installation - the Mac Observer by Jeff Gamet
X5は出荷時状態はexFATでフォーマットされていたが、パーティションテーブルがMBRのようだ。APFSはGPTであることが必要なので、ボリュームでなく、ドライブ全体を選べばパーティションのボタンが有効になり、そこでGUIDを選択すれば、APFSでフォーマットできる、ということらしい。
ドライブ全体を選ぶために、ディスクユーティリティのウインドウ左上の「表示」メニューで、「ボリュームのみの表示」から「すべてのデバイスを表示」に切り替え、現れたドライブ全体を選択するのがポイントだった。デバイス名では、例えばdisk3s1はボリューム、disk3がドライブ全体にあたる。
結果は、とにかく快適のひとことに尽きる。SATA3のSSDをUSB 3.0接続して、ファイルのコピーに45MB/s程度までしか出ない経験をして(カタログ上の数値の上限ではあるが)残念に思ったことがあるが、Thunderbolt 3接続では内蔵SSDと遜色ない反応をしている、と思う。
なお、何も考えずにフォーマットしたので、添付のアプリケーションを消してしまったが、Samsung Portable SSDのダウンロードページから「Activation Software for MacOS」として入手できた。ドライブの暗号化がメイン機能のようだが、ファームウェア更新ができたので、入れておくことにした。Cmd-Qで終了できないしメニューに項目がないのでどうやって終了するのかと思ったが、よく見ると右上に大きなバツが描かれていて、それをクリックする仕様だった。Appleのデザインガイドラインは気にしないらしい。
ちなみに、Thunderbolt Displayを使っている旧Mac mini Mid 2010に、Apple Thunderbolt 3 to Thunderbolt 2 Adapter経由でつないでみたが、認識しなかった。直結すればいいのかもしれないが、よくわからない。
X5は出荷時状態はexFATでフォーマットされていたが、パーティションテーブルがMBRのようだ。APFSはGPTであることが必要なので、ボリュームでなく、ドライブ全体を選べばパーティションのボタンが有効になり、そこでGUIDを選択すれば、APFSでフォーマットできる、ということらしい。
ドライブ全体を選ぶために、ディスクユーティリティのウインドウ左上の「表示」メニューで、「ボリュームのみの表示」から「すべてのデバイスを表示」に切り替え、現れたドライブ全体を選択するのがポイントだった。デバイス名では、例えばdisk3s1はボリューム、disk3がドライブ全体にあたる。
結果は、とにかく快適のひとことに尽きる。SATA3のSSDをUSB 3.0接続して、ファイルのコピーに45MB/s程度までしか出ない経験をして(カタログ上の数値の上限ではあるが)残念に思ったことがあるが、Thunderbolt 3接続では内蔵SSDと遜色ない反応をしている、と思う。
なお、何も考えずにフォーマットしたので、添付のアプリケーションを消してしまったが、Samsung Portable SSDのダウンロードページから「Activation Software for MacOS」として入手できた。ドライブの暗号化がメイン機能のようだが、ファームウェア更新ができたので、入れておくことにした。Cmd-Qで終了できないしメニューに項目がないのでどうやって終了するのかと思ったが、よく見ると右上に大きなバツが描かれていて、それをクリックする仕様だった。Appleのデザインガイドラインは気にしないらしい。
ちなみに、Thunderbolt Displayを使っている旧Mac mini Mid 2010に、Apple Thunderbolt 3 to Thunderbolt 2 Adapter経由でつないでみたが、認識しなかった。直結すればいいのかもしれないが、よくわからない。
macOSでホームディレクトリを外付けディスクに移動(owner問題の解決)
macOS Mojaveで動いているメインマシンは、Mac mini Mid 2011。最初のIntel Core(Sandy Bridge)な機種。実は昨年、2018年版が出る前にお亡くなりになり、急遽中古で入手したもの(松竹梅の竹から梅へダウングレードしたけれどしかたない)。店によっては2014年モデルも置いていたけれど、予算的に無理だった。
ところがそれも間もなく死亡のサインが現れてきた。経年劣化は避けられない。
そこでやむなく、積立てを崩すことにして、Mac mini 2018の梅モデルを購入。SSDはThunderbolt 3接続のSamsung X5にして補うことにした。500GB×2で運用していたけれど予算上500GBが限界だったので空きが足りず、まず現行のホームディレクトリをUSB 3.0(AkitoのThunderbolt 2 - USB 3.0変換ボックスを使っていたので)の外付けHDDに移すことにした。こうすれば、少なくともホームディレクトリの移行はスムーズになる。
移動にはdittoでコピーすればいいよ、-rsrcForkオプション忘れないでね、という記事は結構見かける(例えばこちらの記事など)。
再起動して同じようにログインできることまでは確認したのだけれど、Finderでフォルダに通行禁止マークがついていることに気がついた。開けないし、では、とchownしても全く変わらない。ls -lすると、owner:groupが_unknown:_unknown。あれ?
別の記事で、Cmd-iして「このボリューム上の所有権を無視」チェックボックスを外してからchownしてね(例えばこちらの記事)、というのがあり、これでようやく解決した。記事が分散している理由がmacOSのバージョン依存なのかどうか、ちょっと調べがつかなかったので、ここに両者をまとめた記事を置くことにした。
Samsung X5をAPFSでフォーマットするにはひと手間かかったのだけれど、日本語の記事が見当たらなったので次のエントリへ続く。
ところがそれも間もなく死亡のサインが現れてきた。経年劣化は避けられない。
そこでやむなく、積立てを崩すことにして、Mac mini 2018の梅モデルを購入。SSDはThunderbolt 3接続のSamsung X5にして補うことにした。500GB×2で運用していたけれど予算上500GBが限界だったので空きが足りず、まず現行のホームディレクトリをUSB 3.0(AkitoのThunderbolt 2 - USB 3.0変換ボックスを使っていたので)の外付けHDDに移すことにした。こうすれば、少なくともホームディレクトリの移行はスムーズになる。
移動にはdittoでコピーすればいいよ、-rsrcForkオプション忘れないでね、という記事は結構見かける(例えばこちらの記事など)。
再起動して同じようにログインできることまでは確認したのだけれど、Finderでフォルダに通行禁止マークがついていることに気がついた。開けないし、では、とchownしても全く変わらない。ls -lすると、owner:groupが_unknown:_unknown。あれ?
別の記事で、Cmd-iして「このボリューム上の所有権を無視」チェックボックスを外してからchownしてね(例えばこちらの記事)、というのがあり、これでようやく解決した。記事が分散している理由がmacOSのバージョン依存なのかどうか、ちょっと調べがつかなかったので、ここに両者をまとめた記事を置くことにした。
Samsung X5をAPFSでフォーマットするにはひと手間かかったのだけれど、日本語の記事が見当たらなったので次のエントリへ続く。
2019年3月2日土曜日
Parallels 14上のWindows 10でBluetooth LEを使うには
Bluetooth LEで通信するデバイスが、Parallels 14上のWindows 10で接続できないことに困っていた。
Windowsの設定からは、デバイスの名前は見えて、ペアリングもできるのに、アプリケーションからはデバイスに接続できないという状態。
ヒントは思いがけずParallelsのKnowledge Baseにあった。Parallels 12までのようだが、「Bluetooth端末をWindowsと共有する」のチェックを外せばデバイスとして現れるので、そこにAppleのデバイスドライバを与えてやればよいという話。ところがParallels 14では、このチェックを外しても「デバイス」→「USBとBluetooth」に「Apple Built-in Bluetooth」は現れない。チェックした場合、Windows 10の設定には「Virtual Bluetooth Controller」が現れて、Microsoftの標準デバイスがインストールされる。
そしてこのとき、デバイスマネージャの「Bluetooth」の項目をみて、おや、と思った。
BLEデバイスがいない。別の、BootcampでネイティブのWindows 10を動かしたMacBook Proでは、「Microsoft Bluetooth LE Emulator」というデバイスがいたのに、ここにいるのは「Microsoft Bluetooth Emulator」。Parallelsが用意する仮想コントローラは、Windows10にはBLE対応だと思ってもらえないもののようだ。
Windowsの設定からは、デバイスの名前は見えて、ペアリングもできるのに、アプリケーションからはデバイスに接続できないという状態。
ヒントは思いがけずParallelsのKnowledge Baseにあった。Parallels 12までのようだが、「Bluetooth端末をWindowsと共有する」のチェックを外せばデバイスとして現れるので、そこにAppleのデバイスドライバを与えてやればよいという話。ところがParallels 14では、このチェックを外しても「デバイス」→「USBとBluetooth」に「Apple Built-in Bluetooth」は現れない。チェックした場合、Windows 10の設定には「Virtual Bluetooth Controller」が現れて、Microsoftの標準デバイスがインストールされる。
そしてこのとき、デバイスマネージャの「Bluetooth」の項目をみて、おや、と思った。
![]() |
| ParallelsでBluetoothを共有したとき BLE非対応となっている |
現在うまくいっているのは、MacBook Pro内蔵のBluetoothを使わずに、ドングルを使う方法。負けた気分だけれど、しかたがない。戦える時間のある方にお任せしたい。
以下は手順。
まず、「Bluetooth端末をWindowsと共有する」のチェックを外して、内蔵BluetoothモジュールをParallelsの管理対象外にする。
そして、適当なBluetooth 4.0対応のUSBドングルを接続。USB-Cの方はアダプタ経由で。Parallelsの選択画面でWindows 10を選ぶ。
デバイスマネージャを開いて、「Microsoft Bluetoorh LE Emulator」が生えていれば成功。
アプリケーションによっては実行途中で固まることがあるけれど(BootcampのMBPでも不具合があるので、なにか別の理由があるんだと思う)、普通のWindowsマシンと同様に使えるようになった。
以下は手順。
まず、「Bluetooth端末をWindowsと共有する」のチェックを外して、内蔵BluetoothモジュールをParallelsの管理対象外にする。
![]() |
| 内蔵BluetoothをParallelsから使わないようにする |
![]() |
| Bluetooth 4.0対応のUSBドングルを接続してWindows 10に接続 |
![]() |
| Microsoft Bluetooth LE Emulatorが生えた |
ご参考になれば。
ラベル:
BLE,
Parallels,
Windows 10
2018年5月19日土曜日
Windows 10上でNW.jsを使ったシリアル通信する
NW.jsで外部機器との通信をするとき、LinuxやMacは実績があるのだがWindowsではだめ、ということがとても多いようだ。
いくつか試して、とりあえずシリアル通信について、なんとか動かすことができたので手順を記録しておく。
NW.jsはNode.js + Chromiumなアプリ開発プラットフォーム。JavaScriptで書くところがミソだが世の中はElectronのほうが多いような気がしている。それはともかく。
通信に限らないとはいえ、C++によるネイテイブコードを含むNode.jsのモジュールはWindowsではやっかいだ。UNIXとWindowsで挙動の違う関数、Windows側にバグがある関数などがあって動かない、というのが多く見受けられるパターン。
また、ビルドにはnode-gypを使うようだが、 この環境作りにPython2.7とVisual Studio 2015が必要という、そこそこのハードルがある。VSもまともにインストールするとおおごとだし、node-gyp開発者側にPython3対応にする気が全くないようなので(GitHubのIssueのつれない感じからの類推)、node-gypだけの小さな閉鎖環境が望ましいことになる。というわけで、そんなパッケージが用意されたようだ。以下のコマンドを「管理者権限つきの」コマンドプロンプトに
と入力して実行すると、ユーザのホームディレクトリ直下に、.windows-build-toolsというディレクトリができて、そこにPython2.7とVS2015のコマンドラインと必要なライブラリが一式入って、とてもありがたい。
ただし、すでにVS2015が入っていると、node-gypは一通り動くものの、NW.js対応にするときにやっかいなことになった(普段VSをC++の開発環境に使っているなら問題はないんだろうと思う)。詳しくはhttps://github.com/nodejs/node-gyp#installationのWindowsの注意書きを参照していただきたいが、「Common Tools fot C++」としてまとめられたツールやライブラリ群をVS2015を起動し、C++のプロジェクトを作る作業をすることでインストール開始させなければならない。
準備ができたところで、いきなりNW.js対応を作る前に、通常のNode.js用インストールをして動作テストをするのがよいと思う。これはnpmを使うなら、プロジェクトのディレクトリを作り、そのなかでnpm initしてpackage.jsonを作成したあと、、
とする。node_modules以下に、大量の依存関係のあるモジュールとともに一式が入る。このあと適当に、サンプルプログラムなどを動かせばよいのだが、シリアルポートのデバイス名がLinuxやMacでは '/dev/tty.なんとか'のファイル名になっているところを、Windowsでは'COM3'などのように置き換える必要がある。もしシリアルポートがなくても、examples\mockings.js は仮想ポートデバイスを作って送受信のようなシミュレーションができるので、これで動作確認としてもいいかもしれない。
動作確認ができたあとは、NW.js用にリビルドが必要となる。Node.js用のままNW.jsで読み込もうとしても、はDLLエラーのようなことが生じて動かない。
NW.js用には、nw-gypという、node-gypのフォークモジュールがあって、それを入れておく必要があるらしい。また、node-pre-gypモジュールも入っていたほうが無難なようだ。
nw-gypの実行には、binding.gyp(C++のオブジェクトをJavaScriptのオブジェクトに結びつける設定ファイル)のある場所でなければならないようだ。そこで、node_modulesの下の、serialportの下にcdする。(cd node_modues\serialport)
このあたりになってくると、UNIXの操作に近くなってくるので、Gitをインストールし、その際に、コマンドプロンプトでMingWin由来のUNIX互換コマンドが動くよう設定しておくと気持ちが楽になると思う。GIt Bash上でやってもよいのかもしれないけれど、試してはいない。
リビルドのコマンドを実行する前に、NW.jsのバージョン(Node.jsやChromiumのバージョンではない)を確認しておく必要がある。NW.EXEを実行すれば、右下のいちばん上に、「nw.js v0.30.5」などのような表示が見えるので、それを控えておく。あるいは、ZIPを展開したフォルダ名が配布されたままならば、フォルダ名にバージョン番号が入っているので、それをみてもよい。
この先は、相性によって2つの方法を試してコンパイルが通るほうを選ぶようだ。また、python.exeが環境変数PATHに通っていなければいけないようなので(node-gypは%HOME%\.npmrcファイルの設定を読んでPython2.7の実行パスを決めてくれるが、nw-gypやnode-pre-gypは見ないようだ。Windowsでは、コマンドプロンプトに「set PATH=%PATH%;Python2.7のパス」のように、セミコロンで連結するのが流儀。%ではさんだ変数名は、変数参照を意味するので、既存のPATHに、Python2.7のパスを追加したことになる。
これでようやく実行。
バージョン番号を指定してリビルドしていることから、NW.jsのバージョンが変わるたびにリビルドが必要になるんだろうと思う。
動作チェックに使った、シリアルポートの一覧表示スクリプトを含むHTMLファイルを掲載しておく。ポートオブジェクトをJSONで、見えた数だけ列挙するというもの。console.log()も入れているのでデバッガのコンソールにも出る。元ネタはこちら。NW.js用ではないけれど、シンプルかつ丁寧に説明されていて、わかりやすいと思う。DOM操作は、VSCodeエディタの予測候補を見ながら適当に書いた。index.htmlのファイル名として、npm initしてpackage.jsonを作るときのmainに、デフォルトのindex.jsではなくindex.htmlと入力してある。
いくつか試して、とりあえずシリアル通信について、なんとか動かすことができたので手順を記録しておく。
NW.jsはNode.js + Chromiumなアプリ開発プラットフォーム。JavaScriptで書くところがミソだが世の中はElectronのほうが多いような気がしている。それはともかく。
通信に限らないとはいえ、C++によるネイテイブコードを含むNode.jsのモジュールはWindowsではやっかいだ。UNIXとWindowsで挙動の違う関数、Windows側にバグがある関数などがあって動かない、というのが多く見受けられるパターン。
また、ビルドにはnode-gypを使うようだが、 この環境作りにPython2.7とVisual Studio 2015が必要という、そこそこのハードルがある。VSもまともにインストールするとおおごとだし、node-gyp開発者側にPython3対応にする気が全くないようなので(GitHubのIssueのつれない感じからの類推)、node-gypだけの小さな閉鎖環境が望ましいことになる。というわけで、そんなパッケージが用意されたようだ。以下のコマンドを「管理者権限つきの」コマンドプロンプトに
npm install --global --production windows-build-tools
ただし、すでにVS2015が入っていると、node-gypは一通り動くものの、NW.js対応にするときにやっかいなことになった(普段VSをC++の開発環境に使っているなら問題はないんだろうと思う)。詳しくはhttps://github.com/nodejs/node-gyp#installationのWindowsの注意書きを参照していただきたいが、「Common Tools fot C++」としてまとめられたツールやライブラリ群をVS2015を起動し、C++のプロジェクトを作る作業をすることでインストール開始させなければならない。
準備ができたところで、いきなりNW.js対応を作る前に、通常のNode.js用インストールをして動作テストをするのがよいと思う。これはnpmを使うなら、プロジェクトのディレクトリを作り、そのなかでnpm initしてpackage.jsonを作成したあと、、
npm install serialport
動作確認ができたあとは、NW.js用にリビルドが必要となる。Node.js用のままNW.jsで読み込もうとしても、はDLLエラーのようなことが生じて動かない。
NW.js用には、nw-gypという、node-gypのフォークモジュールがあって、それを入れておく必要があるらしい。また、node-pre-gypモジュールも入っていたほうが無難なようだ。
nw-gypの実行には、binding.gyp(C++のオブジェクトをJavaScriptのオブジェクトに結びつける設定ファイル)のある場所でなければならないようだ。そこで、node_modulesの下の、serialportの下にcdする。(cd node_modues\serialport)
このあたりになってくると、UNIXの操作に近くなってくるので、Gitをインストールし、その際に、コマンドプロンプトでMingWin由来のUNIX互換コマンドが動くよう設定しておくと気持ちが楽になると思う。GIt Bash上でやってもよいのかもしれないけれど、試してはいない。
リビルドのコマンドを実行する前に、NW.jsのバージョン(Node.jsやChromiumのバージョンではない)を確認しておく必要がある。NW.EXEを実行すれば、右下のいちばん上に、「nw.js v0.30.5」などのような表示が見えるので、それを控えておく。あるいは、ZIPを展開したフォルダ名が配布されたままならば、フォルダ名にバージョン番号が入っているので、それをみてもよい。
この先は、相性によって2つの方法を試してコンパイルが通るほうを選ぶようだ。また、python.exeが環境変数PATHに通っていなければいけないようなので(node-gypは%HOME%\.npmrcファイルの設定を読んでPython2.7の実行パスを決めてくれるが、nw-gypやnode-pre-gypは見ないようだ。Windowsでは、コマンドプロンプトに「set PATH=%PATH%;Python2.7のパス」のように、セミコロンで連結するのが流儀。%ではさんだ変数名は、変数参照を意味するので、既存のPATHに、Python2.7のパスを追加したことになる。
これでようやく実行。
nw-gyp rebuild --runtime=node-webkit --target=バージョン番号
または
node-pre-gyp rebuild --runtime=node-webkit --target=バージョン番号
のようだ。当方では今回は、nw-gypでコンパイルが通った。詳しくは、Qiitaの@sashimizakanaさんのエントリ「node-webkitでネイティブモジュールを使う」を参照。バージョン番号を指定してリビルドしていることから、NW.jsのバージョンが変わるたびにリビルドが必要になるんだろうと思う。
動作チェックに使った、シリアルポートの一覧表示スクリプトを含むHTMLファイルを掲載しておく。ポートオブジェクトをJSONで、見えた数だけ列挙するというもの。console.log()も入れているのでデバッガのコンソールにも出る。元ネタはこちら。NW.js用ではないけれど、シンプルかつ丁寧に説明されていて、わかりやすいと思う。DOM操作は、VSCodeエディタの予測候補を見ながら適当に書いた。index.htmlのファイル名として、npm initしてpackage.jsonを作るときのmainに、デフォルトのindex.jsではなくindex.htmlと入力してある。
<!DOCTYPE html>
<head>
<title>Hello World!</title>
<script>
var SerialPort = require('serialport');
// list serial ports:
SerialPort.list(function (err, ports) {
ports.forEach(function(port) {
portString = JSON.stringify(port);
console.log(portString);
title = document.getElementById('h1');
p = document.createElement('p');
text = document.createTextNode(portString);
document.body.appendChild(p).appendChild(text);
});
});
</script>
</head>
<body>
<h1 id="title">Hello World!</h1>
<p id="port"></p>
</body>
</html>
NW.jsからは、プロジェクトのディレクトリ名を引数に与えるのが簡単だと思う。
以上、ご参考まで。
以上、ご参考まで。
2017年5月31日水曜日
ソフマップ秋葉原本店閉館に思うこと
変化の多い秋葉原に対していちいち感慨を持つほど若くもないのですが、ここだけは個人的に特別な意味があるので記しておきます。
それは2008年6月8日。
前日宿泊していて、この日は秋葉原で電子部品等を買う予定でした。ただ、まだ朝早かったため、秋月開店まで、まだ真新しいヨドバシAkibaに寄り道をして、書籍とCD等を物色することにした。まだ名古屋では書籍もCDも売れ筋は遅れがちで、また哲学や文芸評論など人文系を中心に教養の読書にはまっていたため、ヨドバシの有隣堂でも十分に魅力があり、秋葉原だけにコミックその他のディスプレイに惹かれ、立ち読みをして何をどこまで買えば予算内に収まるか、持って帰られれる重量になるか(どうせ新幹線に乗る前に丸善丸の内本店で大量に買うことはわかっていたから)、厳選をしているうちに、昼時になってしまった。
ついでなのでタワレコも若干ひやかし、上階のインド料理店(だったと思う)でカレーを食べ、それから大ガード下をくぐって電気街に出ようと、疲れた身体に気合を入れながら歩いていた。坂を上がり交差点まで行ったら左に折れ、ヒロセ横の路地から丹青通称の上林ビル方面に抜けるのだ。千石電商をひやかして、秋月へ向かうのだ。ヒロセ横の路地は人が少なく歩きやすい。もう2時をまわっていただろうか。
だが、なんだか様子が変だ。なぜ路肩に何台も消防車が停まっているのか。救急車も見える。人の流れが遅い。
やや人が少ないな、と思いながら坂を登ったところで空気が一変した。大量の人、人、人。路上でノートPCを開き、必死の形相で原稿を書いているスーツ姿の若い男女が縁石や生け垣の低いブロック塀を使っている。呆然と交差点方面を向いている人がその先に人垣を作っている。張り詰めた空気が一帯に漂っている。
何かが起きている。
当時はまだi-Mode携帯だった。でもニュース速報はわかる。
冒頭のたった1行を読んで、すべてを理解し、背筋が凍った。ここは無差別殺人現場だ。何人もの命がこの先で失われた。
動けなくなった。なにも考えられなくなり、気持ちを取り戻そうと、妻に一行、メールを送った。何の返信もなかった、と思う。思考は凍ったままだった。
人垣の向こうは非常線が張られていて、入ることはできない。ともかく手前で左に折れ、JR駅方向の路地から中央通りに出ようと思った。普段なら歩行者天国でどこでも渡れるはずだったが、非常線は中央線ガード下まで続いていたと思う。やっと出られたのは、結局ラジオセンターの前だった。
そこから北方面を覗くと、もう現場検証も終わろうかとしているところだったと思う。加藤智大氏はすでに取り押さえられ護送されたあとだったはず。交差点中央は空いていて、周辺に救急車何台かと警察車両はあったが、動き出す気配はなかった、と思う。
信号を渡ったのがどこか、その後の動きは記憶がない。もしかしたら、昌平橋方面にまわらざるを得ず、鈴商方面から入ったのかもしれない。
ただ、予定通りの動きをしたはずだ。千石で工具類をいくつか買い、秋月で大袋いっぱいに何かを買ってJR駅に戻ったのだと思う。その頃はもう夕方なので、もとの秋葉原の喧騒が、あのあたりの一帯には戻っていたはずだ。
後日、名古屋に戻って何ヶ月も経った頃、酒席で突然「(名古屋支店長だった頃は気安く接していただいていた、現在本社取締役)さんのお嬢さんのことは残念だった。就職も決まっていたけれど、ソフマップの店頭のいちばん目立つ場所でチラシを配っていたから狙われた」と、聞かされた。
それを聞き終えるまでの間に、すべてがフラッシュバックした。口がきけなくなった。
テレビも新聞も、ことあるごとに加藤智大氏の動きが詳細に繰り返され、そこにどのぐらいの人がいて、どこに何があるか、立体的に思い浮かべられるほどだったからだ。
その、鮮明な建物の並びと人混み以外は漠然とした脳内映像に、彼がダガーナイフを持って走り回るなか、大学4年生の女性に突撃し、刺しながら、次の相手に向かっていく映像が追加された。店頭の案内状の制服はわかる。背格好や容姿は似た人物が選ばれるので、顔だけが不鮮明な映像だが、多くの人混みが混乱するなか、下がることもできずにいる、一際華やかな容姿と制服に彼の目が注がれ、次の相手を探すように顔をそむけながらまっすぐ突入したのだろう。
その生々しい現場の情報は知らないし、知りたくもない。
2010年、伊坂幸太郎「ゴールデンスランバー」映画化作品を、名古屋のシネコンで観た。ビートルズはAbbey Roadのジャケットが幼い記憶にありリアルタイムはLet It Beだけなので伊坂小説作品にいまひとつ入り込めないのだが、映画は中村監督の手腕が発揮され素晴らしかったと思う。仙台旅行の記憶もあるので町並みにも見覚えがあり感情移入できた。
劇中、ゲームソフトを手に入れた小学生がクラスの仲間2人から奪われるシーンがヒロセ横の路地だった。周辺は人が多いにもかかわらず、ここはなぜか湿っぽく、暗くて人があまり通らない。路地にしては広いのに、両側が店の表でも裏口でもなく壁ばかりなので、人混みを避けるべきこのシーンにはうってつけのロケーションだ。観た瞬間にわかる。ああ、やっぱりここだよね。彼が逃げ込んだのもわかる。
秋葉原ラジオセンターの半畳の店で家業の手伝いをして育った、同じ年の知人も言う。あそこは特別だよね、と。
ソフマップAkiba本館に戻る。ここはなんだったけ。
1997年のアキバマップをarchive.orgで探ると、ヤマギワ本店とあった。なるほど、インテリア照明を中心としたショウルームだったっけ。本店は、上野方面の次ブロック手前角T-ZONE本店の中央通り反対側だ。いまはどうもじゃんぱららしい。トヨムラが元気だった頃。
ビックカメラに転換するのは合理的。立地の良さと秋葉原の客層に一般客が多いことを考えればそうすべきだろうと思う。開店10年を節目にしたのは何かを待っていたのか、それはわからない。
それは2008年6月8日。
前日宿泊していて、この日は秋葉原で電子部品等を買う予定でした。ただ、まだ朝早かったため、秋月開店まで、まだ真新しいヨドバシAkibaに寄り道をして、書籍とCD等を物色することにした。まだ名古屋では書籍もCDも売れ筋は遅れがちで、また哲学や文芸評論など人文系を中心に教養の読書にはまっていたため、ヨドバシの有隣堂でも十分に魅力があり、秋葉原だけにコミックその他のディスプレイに惹かれ、立ち読みをして何をどこまで買えば予算内に収まるか、持って帰られれる重量になるか(どうせ新幹線に乗る前に丸善丸の内本店で大量に買うことはわかっていたから)、厳選をしているうちに、昼時になってしまった。
ついでなのでタワレコも若干ひやかし、上階のインド料理店(だったと思う)でカレーを食べ、それから大ガード下をくぐって電気街に出ようと、疲れた身体に気合を入れながら歩いていた。坂を上がり交差点まで行ったら左に折れ、ヒロセ横の路地から丹青通称の上林ビル方面に抜けるのだ。千石電商をひやかして、秋月へ向かうのだ。ヒロセ横の路地は人が少なく歩きやすい。もう2時をまわっていただろうか。
だが、なんだか様子が変だ。なぜ路肩に何台も消防車が停まっているのか。救急車も見える。人の流れが遅い。
やや人が少ないな、と思いながら坂を登ったところで空気が一変した。大量の人、人、人。路上でノートPCを開き、必死の形相で原稿を書いているスーツ姿の若い男女が縁石や生け垣の低いブロック塀を使っている。呆然と交差点方面を向いている人がその先に人垣を作っている。張り詰めた空気が一帯に漂っている。
何かが起きている。
当時はまだi-Mode携帯だった。でもニュース速報はわかる。
冒頭のたった1行を読んで、すべてを理解し、背筋が凍った。ここは無差別殺人現場だ。何人もの命がこの先で失われた。
動けなくなった。なにも考えられなくなり、気持ちを取り戻そうと、妻に一行、メールを送った。何の返信もなかった、と思う。思考は凍ったままだった。
人垣の向こうは非常線が張られていて、入ることはできない。ともかく手前で左に折れ、JR駅方向の路地から中央通りに出ようと思った。普段なら歩行者天国でどこでも渡れるはずだったが、非常線は中央線ガード下まで続いていたと思う。やっと出られたのは、結局ラジオセンターの前だった。
そこから北方面を覗くと、もう現場検証も終わろうかとしているところだったと思う。加藤智大氏はすでに取り押さえられ護送されたあとだったはず。交差点中央は空いていて、周辺に救急車何台かと警察車両はあったが、動き出す気配はなかった、と思う。
信号を渡ったのがどこか、その後の動きは記憶がない。もしかしたら、昌平橋方面にまわらざるを得ず、鈴商方面から入ったのかもしれない。
ただ、予定通りの動きをしたはずだ。千石で工具類をいくつか買い、秋月で大袋いっぱいに何かを買ってJR駅に戻ったのだと思う。その頃はもう夕方なので、もとの秋葉原の喧騒が、あのあたりの一帯には戻っていたはずだ。
後日、名古屋に戻って何ヶ月も経った頃、酒席で突然「(名古屋支店長だった頃は気安く接していただいていた、現在本社取締役)さんのお嬢さんのことは残念だった。就職も決まっていたけれど、ソフマップの店頭のいちばん目立つ場所でチラシを配っていたから狙われた」と、聞かされた。
それを聞き終えるまでの間に、すべてがフラッシュバックした。口がきけなくなった。
テレビも新聞も、ことあるごとに加藤智大氏の動きが詳細に繰り返され、そこにどのぐらいの人がいて、どこに何があるか、立体的に思い浮かべられるほどだったからだ。
その、鮮明な建物の並びと人混み以外は漠然とした脳内映像に、彼がダガーナイフを持って走り回るなか、大学4年生の女性に突撃し、刺しながら、次の相手に向かっていく映像が追加された。店頭の案内状の制服はわかる。背格好や容姿は似た人物が選ばれるので、顔だけが不鮮明な映像だが、多くの人混みが混乱するなか、下がることもできずにいる、一際華やかな容姿と制服に彼の目が注がれ、次の相手を探すように顔をそむけながらまっすぐ突入したのだろう。
その生々しい現場の情報は知らないし、知りたくもない。
2010年、伊坂幸太郎「ゴールデンスランバー」映画化作品を、名古屋のシネコンで観た。ビートルズはAbbey Roadのジャケットが幼い記憶にありリアルタイムはLet It Beだけなので伊坂小説作品にいまひとつ入り込めないのだが、映画は中村監督の手腕が発揮され素晴らしかったと思う。仙台旅行の記憶もあるので町並みにも見覚えがあり感情移入できた。
劇中、ゲームソフトを手に入れた小学生がクラスの仲間2人から奪われるシーンがヒロセ横の路地だった。周辺は人が多いにもかかわらず、ここはなぜか湿っぽく、暗くて人があまり通らない。路地にしては広いのに、両側が店の表でも裏口でもなく壁ばかりなので、人混みを避けるべきこのシーンにはうってつけのロケーションだ。観た瞬間にわかる。ああ、やっぱりここだよね。彼が逃げ込んだのもわかる。
秋葉原ラジオセンターの半畳の店で家業の手伝いをして育った、同じ年の知人も言う。あそこは特別だよね、と。
ソフマップAkiba本館に戻る。ここはなんだったけ。
1997年のアキバマップをarchive.orgで探ると、ヤマギワ本店とあった。なるほど、インテリア照明を中心としたショウルームだったっけ。本店は、上野方面の次ブロック手前角T-ZONE本店の中央通り反対側だ。いまはどうもじゃんぱららしい。トヨムラが元気だった頃。
ビックカメラに転換するのは合理的。立地の良さと秋葉原の客層に一般客が多いことを考えればそうすべきだろうと思う。開店10年を節目にしたのは何かを待っていたのか、それはわからない。
2017年4月19日水曜日
I-O DataのWN-AC433UAをArch Linuxで使いAPを立てる(2017年4月版)
概要:以前の投稿で、いくつかリンクをいただいておりましたが、最近のカーネルでは新しいv5のデバイスドライバのほうがよさそうでした。パッケージは「aur/rtl8812au-v5-dkms-git」です。
2017年3月末頃のLinux Kernel 4.10になって、いままでWi-Fiルータとして使っていたIntel NCU NCU5CPYH内蔵のWi-Fiチップ「Wireless-AC 3165」では起動時に
ファームウェア27が現在の最新のようですが、考えられる手を尽くすもどうにもならないので、いったんお蔵入りしていたWN-AC433UAを復活させることにしました。
ただ、いままで使っていたRealtekドライバ4.3.20ベースの「aur/rtl8812au_rtl8821au-dkms-git」が認識されず、同じチップでより新しい、バージョン5.1.5ベースのドライバが最終更新日2017年4月17日でしたので、これに入れ替えることにしました。
まず、いままでのドライバをdkms removeしておきます。
その後、yaourt -Rでアンインストールします。
それで、
ひとつの設定ファイルでBand 1(2.4GHz帯)とBand 2(5GHz帯)両方を設定するのは面倒そうなので、Band 1のほう(802.11n)を生かしています。Band 2(802.11ac)の設定をする場合は、
また、この設定で
このあと、
自宅用では
TL;DR;
2017年3月末頃のLinux Kernel 4.10になって、いままでWi-Fiルータとして使っていたIntel NCU NCU5CPYH内蔵のWi-Fiチップ「Wireless-AC 3165」では起動時に
kernel: iwlwifi 0000:02:00.0: L1 Disabled - LTR Disabledのエラーがあったり、APに接続してくるデバイスが6か7台目を超えるとマイクロコードのエラーを発生してドライバの再起動を繰り返し、最後にはカーネルパニックで死ぬ、ということになっておりました。
ファームウェア27が現在の最新のようですが、考えられる手を尽くすもどうにもならないので、いったんお蔵入りしていたWN-AC433UAを復活させることにしました。
ただ、いままで使っていたRealtekドライバ4.3.20ベースの「aur/rtl8812au_rtl8821au-dkms-git」が認識されず、同じチップでより新しい、バージョン5.1.5ベースのドライバが最終更新日2017年4月17日でしたので、これに入れ替えることにしました。
以前のドライバのアンインストール
まず、いままでのドライバをdkms removeしておきます。
sudo dkms status
すると、「rtl8812au_rtl8821au, 4.3.22_beta.r9.928e27f, ...」云々と出てくると思いますので、
sudo dkms remove rtl8812au_rtl8821au/4.3.22_beta.r9.928e27f --all
のような感じで「モジュール名/モジュールのバージョン番号」を指定してください。バージョン番号ですが、AURのページをみると、この4.3.22ではなく4.3.20が最新のようですね(ただし2016年9月11日以後更新がない)。その後、yaourt -Rでアンインストールします。
yaourt -R rtl8812au_rtl8821au-dkms-git
新ドライバのインストール
yaourt -S rtl8812au-v5-dkms-git
コンパイルしてインストールすると、dkms addまで自動でやってくれます。
$ dkms status
rtl8812au-v5, 5.1.5, 4.10.10-1-ARCH, x86_64: installed
うまくインストールできているようです。
ip linkすると、wlp0s20u1というデバイスが見つかると思います。hostapdの設定
その前に、ブリッジデバイスを作っておきます。systemd-networkdを使っているので、
/etc/systemd/network/br0.netdev
[NetDev]
Name=br0
Kind=bridge
/etc/systemd/network/br0.network
[Match]
Name=br0
[Network]
Address=192.168.0.1/24
IPForward=yes
などとしておきます。sudo systemctl restart systemd-networkdすると生えてくるんでしょうか、むかし作ったときには再起動してしまったので不明です。 あと、以前はwlp0s20u1をbr0につないでおくという話だったような気がしますが、いまhostapdの解説を読むと、それは「やってはいけない」らしいです。なので、適当にIPアドレスを振っておきます。/etc/systemd/network/usbwifi.network
[Match]
Name=wlp0s20u1
[Network]
Address=192.168.0.2
こんな感じでしょうか。それで、
iw listした結果からこのチップでサポートされている機能を探り、いま当方で動いているhostapd.confは以下の通りです。/etc/hostapd/hostapd.conf
interface=wlp0s20u1
driver=nl80211
bridge=br0
ieee80211d=1
country_code=JP
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ctrl_interface=/run/hostapd
ctrl_interface_group=0
ssid=設定するSSID
hw_mode=g
channel=7
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
# IEEE 802.11n
ieee80211n=1
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]
# IEEE 802.11ac
#ieee80211ac=1
#vht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]
vht_oper_chwidth=0
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
eap_server=0
own_ip_addr=127.0.0.1
wpa=2
#wpa_psk=暗号化されたパスフレーズ
wpa_passphrase=平文のパスフレーズ
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
ご武運を祈ります。ひとつの設定ファイルでBand 1(2.4GHz帯)とBand 2(5GHz帯)両方を設定するのは面倒そうなので、Band 1のほう(802.11n)を生かしています。Band 2(802.11ac)の設定をする場合は、
hw_mode=a
channel=36
(チャンネル番号はWikipediaの項目を参照)のように置き換えることになると思います。また、この設定で
journalctl -fのログをみているとちょっとうるさいので、logger_syslog_levelの値を3か4(大きいほど情報が減る)にしたほうがいいかもしれません。このあと、
iptablesでNATの設定したり、DHCP等の設定が必要ですね。「インターネット共有」のドキュメントを参照してください。自宅用では
dnsmasqでDHCPサーバとDNSリレーを兼用するのが簡単だとは思いますが、多数の接続がある環境では不具合があるようなので、当方ではdhcpdとunboundを設定しています。
ラベル:
Arch Linux,
hostapd,
kernel module,
Wi-Fi
2017年3月6日月曜日
秋月TB6612FNG使用デュアルモータドライバ基板について
2月27日に秋月を訪問したところ、TB6612FNG使用デュアルモータドライバ基板を発見、店頭にあったものの大半をおさえてしまった。「新製品なんで店頭在庫少なめ」という話だったけれど、いまサイトをみると、3日前に発売開始したばかりだったらしい。
しかし、この基板はブレッドボードでの実験用という位置づけのようで、ロジック側の9ピンは、秋月細ヘッダピン(φ0.5)に合わせた穴サイズ、モータ用電源やモータはターミナルブロックに合わせて5.08mm間隔のピン間隔になっている。マイコン基板を製造して、そこに載せるにはなかなかつらい。特に、ターミナルブロックを載せるために、Pololuと較べて縦横10mm以上大きくなるのもやや難点(放熱的には有利だろうけれど)。
そこで、外形のどの位置にピンがあるのか、もちろん加工誤差があるので記述しても意味がないのだけれど、クリアランスの目安がほしかったので、ノギスをあて、だいたいの寸法を入れてみたのが下の図。
穴径で、ターミナルブロック側はφ1.3と書いたけれど、秋月のピンヘッダで製造する基板に載せることを考えると、ピンヘッダは0.64SQなので、対角1.1mmと考えてφ1.2で十分かもしれないし、製造公差やめっき処理の種類によってはφ1.3がよいかもしれない。基板の実寸はφ1.2のようだった。ターミナルブロック本体の足はφ1.0とのこと(こちらの寸法図より)。
TB6612使用 Dual DCモータードライブキット (K-11219)モータドライバは発熱が怖いので、どうしても十分な放熱面積を確保したモジュール基板を使いたくなってしまう。ところがSparkFunやPololuのブレークアウト基板はかなりいい値段になってしまうので、350円というのはとてもありがたい。
しかし、この基板はブレッドボードでの実験用という位置づけのようで、ロジック側の9ピンは、秋月細ヘッダピン(φ0.5)に合わせた穴サイズ、モータ用電源やモータはターミナルブロックに合わせて5.08mm間隔のピン間隔になっている。マイコン基板を製造して、そこに載せるにはなかなかつらい。特に、ターミナルブロックを載せるために、Pololuと較べて縦横10mm以上大きくなるのもやや難点(放熱的には有利だろうけれど)。
そこで、外形のどの位置にピンがあるのか、もちろん加工誤差があるので記述しても意味がないのだけれど、クリアランスの目安がほしかったので、ノギスをあて、だいたいの寸法を入れてみたのが下の図。
![]() |
| 秋月の「取扱説明書」に、寸法を追加してみた図 |
また、説明書には「JP1をショートすることによりSTBYをプルアップ可能」とありながら、この図ではJP1の位置が、文字のどちら側なのか見えにくいので、印をつけておいた。よくある、半円が向かい合ったジャンパパターンが基板にあるのが確認できたし、回路図でもR1(10kΩ)でプルアップする形なので、隣に並んでいるのは、まあそうなのかなと思う。ただ、ICと非常に近いので、はんだづけが苦手な人には、ここにはんだを盛るのはやや難しいかもしれない。
ひとつ気になるのは、C1(0.1uF)をVMとGNDの間に入れているのはよいとして、VCC側にCがなぜないのか疑問。データシート通りに、VCCとVM両方に0,1uFと10uFを並列に入れるのが無難かと思うところ。ブレッドボードで使う人は、3番(VCC)と、ひとつ置いた5番(GND)のところに、リードの積セラ0.1uFをはんだづけしておくといいんではないだろうか。
製造予定の基板では、いつもモジュールを基板上に実装するときに使っている、秋月のロープロファイルピンヘッダ(7.7mm)の足を一本ずつ抜くか、モジュール側だけ切るかしたのをモータ側に使って高さを合わせようと思っている。ソケットは使わない予定だが、使いたい方は、対応したロープロファイルのピンソケットと、細ピンヘッダはICソケットが合うそうなので、丸ピンソケットを使われるのがよいのではないかと思う。
2016年12月14日水曜日
Mac OS Sierradでのボリューム修復
もう5年を超えるMac miniを業務のメインマシンとして使っているのですが、一昨年ドライブをいろいろと交換して、なんとか継続使用中です。
もう新しいマシンを購入できる予算がないので工夫するわけですが、昨夜自宅からつながらないなあと思ったら、起動前の白い画面で固まっておりました。っていうかいつ再起動したんだ。
いちばんつらかったのがTimeMachine用ドライブが認識しなかったことですが、これはDisk UtilityのFirst Aidでなんとかなりました。
一方、別の外付けドライブがFist Aidでどうにもならず、検索したんですが、起動ディスクが認識しないときの古い話で、「single user modeでfsck -fyを繰り返す」というのですが、Sierraにはどちらのオプションもありません。
試行錯誤したところ、
まだまだ問題が出そうですが、ひとまずこちらへメモ。
もう新しいマシンを購入できる予算がないので工夫するわけですが、昨夜自宅からつながらないなあと思ったら、起動前の白い画面で固まっておりました。っていうかいつ再起動したんだ。
いちばんつらかったのがTimeMachine用ドライブが認識しなかったことですが、これはDisk UtilityのFirst Aidでなんとかなりました。
一方、別の外付けドライブがFist Aidでどうにもならず、検索したんですが、起動ディスクが認識しないときの古い話で、「single user modeでfsck -fyを繰り返す」というのですが、Sierraにはどちらのオプションもありません。
試行錯誤したところ、
# fsck_hfs -l ファイルシステム名
で、なんとかなりました、とりあえず。「-l」は、マウント中でも強制チェックするためのもののよう。まだまだ問題が出そうですが、ひとまずこちらへメモ。
2016年9月11日日曜日
FT231XS(SSOP20タイプ)のピン配置図
まさか公式データシートにピン配置図がないとは...
あんまりびっくりしたんで、パワポで作図してみました。
ご参考まで。データシートを読めば誰でも作れる図だと思いますので、ご自由にお使いください。
あんまりびっくりしたんで、パワポで作図してみました。
![]() |
| FT231XSのピン配置(SSOP20タイプ) |
This is a pin layout of FTDI FT231XS which is missing in official FTDI's datasheet.
You may use this freely because anyone can draw this by reading the datasheet.
DISCLAIMER:
LICENSE of this picture: AS-IS.
I don't have any warranty to the correctness of this picture. Use at your own risk.
2016年9月10日土曜日
Eagleで作るドリルデータがgerbvでよく見えない件→解決
いまだにEagleの無償コースを使っています。KiCadのいま、とか、Altiumのクラウド版CircuitMakerなどに全くついていけていません。クラウド版CircuitMakerについては、日本語ではガレスタさんの詳しい解説がありますね。
このふたつのどこが違うかというと、ResXとResYが10倍違っていて、EXCELLONは100000、EXCELLON_24は10000でありました。加工機の精度に合わせてあるんだと思うのですが、他のデータを作るGERBER_RS274Xは10000なのでして、gerbvがそっちに合っているのかなと思った次第です。低い方の数値でも工場が保証する加工精度には十分見合っているようなので、camファイルをコピーして、EXCELLON_24に書き換えておきました。具体的には、4行目を
ご参考になれば。
というわけで今回のプロジェクトもEagleなのでして、しかもいまさら感のある内容ですが検索してもなかなかわからなかったので、こちらに書くことにしました。
Eagleで作ったガーバーファイルをプレビューするにはMacならgerbvが定番だと思うのですが、ここで問題になるのがドリルデータがちゃんと見えない件。基板製造会社さんはドリルデータ作成にexcellon.camを使ってくださいとだいたい書かれていますが、できたガーバーファイルをgerbvでプレビューすると、ドリル穴が見えないぐらいちっちゃくて不安になるパターンでありました。コールセンターに電話して確認する感じで。それもどうかということで、調べてみました。
ドリルの問題については、OSH社のサポートページがよくまとまっています。
Common Errors with Drill Files - OSH Park Docsんで、「EXCELLON24を使え」というんですが、それがどこにあるかは書いてありません。それで検索しつつさまよっていたところ、「Eableのbinの下にあるeagle.defを見ろ」と書かれた呪いがありまして、早速たしかめてみると、いわゆるWindowsの設定ファイルの形式でありました。つまり、角括弧の見出しのあとに、「キーワード=値」がずらっと並ぶもので、たくさん見出しがあるんですが、そのなかに、「EXCELLON」と「EXCELLON_24」があったわけです。
このふたつのどこが違うかというと、ResXとResYが10倍違っていて、EXCELLONは100000、EXCELLON_24は10000でありました。加工機の精度に合わせてあるんだと思うのですが、他のデータを作るGERBER_RS274Xは10000なのでして、gerbvがそっちに合っているのかなと思った次第です。低い方の数値でも工場が保証する加工精度には十分見合っているようなので、camファイルをコピーして、EXCELLON_24に書き換えておきました。具体的には、4行目を
Device="EXCELLON_24"のように、「_24」を追記しただけ、ということであります。
ご参考になれば。
2016年8月28日日曜日
ATmega32U2のMinimus32開発環境―Windows編
さきほどのMinimus32について、プロジェクトのサイトが見つかりましたので最初にご報告。
それで、WindowsのArduino IDE 1.6.11ではどうだろうと試してみたところ、ZIPを展開した状態ではどうもうまくいかなくて、インストーラで入れた1.6.11に、Surreallitylabsさんの1.6対応の一式を、Macと同様にぶっこんだあと少し調整したら、一応なんとかなっているようです。
projects/minimus32 - rlab.org.uk連合王国でしたのですね。さすが小さなものがお好みなお国柄。あと、同じく連合王国のリーズにあるハックスペースさんでも情報提供が。
Minimus - wiki.leadshackspace.org.ukMAXIMの1Wireプロトコルの実装by pbrookさんが紹介されています。I2Cがなくても俺たちには1Wireがあるという心意気でしょうか。
それで、WindowsのArduino IDE 1.6.11ではどうだろうと試してみたところ、ZIPを展開した状態ではどうもうまくいかなくて、インストーラで入れた1.6.11に、Surreallitylabsさんの1.6対応の一式を、Macと同様にぶっこんだあと少し調整したら、一応なんとかなっているようです。
- c:\Program Files(x86)\Arduino\hardware の下に、minimumというフォルダを作成して、上のをZIPでとってきて展開した「avr」フォルダをそのなかに放り込みます。
- 念のため、boards.txtの冒頭に、arduino側と同じ一行「menu.cpu=Processor」を書いておきます。
- コンパイルしてみるとplatform.txtの記述が古いよといいつつ終えるのですが、気持ち悪いのでarduino側にあるものをコピーして入替えます。
これで、Arduino IDEを起動すると、ちゃんとMinimus32がCPUとして選べて、コンパイルまで成功します。あ、もし3.3V版にしているのでしたら、先ほどのエントリの内容にしておいてください。
転送、って言ってませんが、avrdudeが一時的に作成されているはずのhexファイルが「見つからない」という理由以上終了し、呼び出したArduino IDE側がJavaランタイムのスタックトレースを吐いてしまいます。
様子がよくわからないので、コマンドプロンプトを開いて、そこからarduino_debug.exeを起動して同じことをやると、不思議なことに、hexファイルを見落とすことなく書き込みまできれいに完了してしまいました。よくわかりませんが。
ということで、まあこれで当面の目的は達成できるのでよしとして、困ったのが、COMポートの番号増加であります。書き込み終了と同時に、USBの抜き差しの音が出たんで嫌な予感がしたんですよね。
なんとなく、シリアルポートが開いた状態で、avrdudeが書き込みを行うときにCPUのリセットをかけてしまうと、Windowsの都合で、開いた状態のポートが消える前に新しいポートを作ろうとして、番号が上がってしまうというではないかと疑っているところです。
ATmega32U2にArduinoのbootloaderを書き込んでArduino IDEが使えるようにした(追記:2016年9月10日)
とある事情から、ATmega32U2をArduino化する必要があり、いろいろと困っておりましたが、解決したので記録を兼ねてご報告。
まずATmega32U2がArduinoになるのか、ということですが、「ATmega32U2にはADCもI2Cもない」。アナログ入力がないわけです。それらが揃っているのはU4のほう。U4はArduino Leonardoに始まり、各種のボードが販売されているものの、U2は機能不足だから商品化するメリットないよね、と納得しました。(追記 2016-09-10:データシート見ると,A0に対するコンパレータはあるようです。端子にAIN0に対してAIN1〜6がMUX経由でコンパレータにつながっている図がありました。ピン配置をみると,Port D(PD1,4-7)がアナログ入力ですね。PC2にAIN2が飛んでいますけど)
とはいえU2ちっちゃいしピン数もU4より少なくて値上がりしたとはいえまだ秋月で400円だし、もう撤退できない状況があるので、検索をGoogleに変更してみたところ、わりとあっさりとkosakailabさんのブログエントリがヒットしまして、
とはいえU2ちっちゃいしピン数もU4より少なくて値上がりしたとはいえまだ秋月で400円だし、もう撤退できない状況があるので、検索をGoogleに変更してみたところ、わりとあっさりとkosakailabさんのブログエントリがヒットしまして、
ATmega32U2でArduinoモドキを作る - kosakailabMinimus32というプロジェクトがあり、一部販売も(?)されたことがあるらしいことを知りました。
kosakailabさんがGitHubリポジトリとbootloader作成の手がかりを示してくださっているほか、こちらMinimus32解析サイトで部品や回路図などが書き起こされていることで、一通りのなかみはわかりました。
pbrook/minimus-arduino - GitHub実際のところ、5V電源で16MHzのクロックを使うなら、すでにhexが置いてあるのでコンパイルする必要はないんですが、3.3V動作にする都合でクロックを8MHzに変更する必要があり、Makefileを書き換えてコンパイルする必要があった次第。
データシートの26.3項に、「安全動作圏」を示したグラフがあり、8bitのAVRマイコンでは3.3Vでは10MHz以下のクロックにしなければなりません。Arduinoでは3.3V製品としてSparkFun製Arduino Pro Miniの3.3V版があり、それに合わせて8MHz設定が公式ライブラリに追加されているので、3.3V動作の場合、8MHzのクリスタル一択です。bootloaderコンパイルにはLUFAが必要だよ、と書かれています。Unoが搭載しているUSB-UART変換にいまはATmega8U2が使われていますが、かつてはATmega16U2が使われていたこともあり、それらには、LUFAが活用されているようです。
オフィシャルサイトは「(2013)」と但し書きがついていますが、GitHubリポジトリは今年も更新されているようです。ともかくも、LUFAは、USBつきAVR開発支援軽量ライブラリとのこと。
さてそんじゃあbootloader作るべし、となるのですが、minimusプロジェクトが3年前で止まっているので、ちと工夫が必要でした。
まず、pbrookさんのレポジトリですが、Forkとjoinのグラフをみると、2年前にSurrealityLabsさんが手を加えたのがいまの最新っぽく見えました。
SurrealityLabs/minimus-arduino - GitHubこれを開くといきなり「avr」しか見えなくて不安になりますが大丈夫、全部入ってます。
よって、ここからgit clone。あとLUFAですが、最新のリポジトリからもってきたものはいろいろ構成がかわっているようで、コンパイルが通らず、Makefileに書かれていた111009(2011年10月9日版)を公式サイトからダウンロードしてくるのが簡単でした。
配置ですが、
avr-gccなどツールチェインをArduino IDEから借りるのが手っ取り早いので、すでにインストールしてあるArduino IDE 1.6.11に組み込んでしまうのが話が早いです。あと、Windowsではmakeをどうするの、とかよくわからなかったのでコンパイルはMacでやりました。実はBash on Ubuntu on Windows 10でがんばってみたんだけど断念。いま思えばLinux用Arduino IDEから拾えばよかったのかも。コンパイルに必要な変更は、Makefileの「
F_CPU = 16000000」を8000000に変更するだけ。あと、bootloaderはCaterinaを使っていて、USBのVID/PIDは、Arduino LLCのVIDとLeonardoのPIDが書かれたままになっていますが、目をつぶってそのままに。おかげでlsusbすると「Arduino SA Leonardo ( CDC ACM, HID)」と出ますが、まあそういうことであります。pbrookさんのWikiには、Arduino IDEの
hardware/avr以下を置き換えろみたいな乱暴なことが書かれていますが、そうするとMacの場合、Arduino IDEが上がらなくなってしまいました。で、Windowsのほうではどうだろうと、SurrealityLabsさんの
platform.txtには1.6.0と書かれているので1.6.0でがっつり置き換えると、まあ起動はしましたが、bootloaderを書こうとすると、「書き込み装置の選択をしろ」的なメッセージが出て先に進みません。AVRISP mkIIを使っているので、それを選択してあるんですが、どうもだめ。そこで再び検索すると、こんなブログエントリがありまして
Arduino IDE on Windows with Minimus32 Profileなんだか、「一式固めといたよ」としてZIPファイルがリンクされていました。ですが、これを展開するとバッチファイルがありまして、Arduino IDE 1.0.5をダウンロードしてそこに置き換えのツールチェインとpbrookさんのリポジトリのZIPを配置する、というような仕立てになっておりました。
それができた状態で、Macで作ったhexファイルをもとのものと置き換えるものの、こちらではbootloaderを書き込もうとするとJavaのランタイムエラーが出てだめでした。Windows 10(1608版)なんですが。
もうこれはavrdudeのコマンドラインでいくしかないかな、と思いつつ、「もしやMacでこれと同じ構成にしたらうまくいくんではないか?」と思ったところ、うまくいきました。
Arduino IDEの設計は全くわかっていないんですが、
hardware以下にarduinoというフォルダがあるところを、上のバッチファイルで作成した1.0.5版では、minimusというフォルダを隣に作り、pbrookさんの一式はこちらにまるっと入れるという仕上がりになっていて、既存のファイル、特にboards.txtなんかは一切書き換えていないのですが、起動したArduino IDEではきちんとminimus以下のboards.txtの内容が反映されていたわけです。ということで、Macの1.6.11でも同様に、
hardware/minimusというフォルダを作り、一式をそこに放り込み、LUFA-111009も放り込んでMakefileでavr-gcc等を呼び出すパスの追記やLUFAのパスを現状に合わせます。それから、macOSの認証を通すために一度無改造のままArduino.appを起動してからなかみの変更をする必要がありますが、最初の起動時に、ボード設定その他をJSON形式で ~/Library/Arduino15 以下に置くので、それをリセットするために、このフォルダごと消しておきます。そして、とても大事なことなんですが、3.3Vにしたので、
boards.txtに記述するAVRのフューズビットの設定を変更し、ブラウンアウト(電圧低下)検出 の電圧を3Vから2.7Vにしておかないと不安です。フューズビットは書き込み時にavrdudeのコマンドラインをArduino IDEが生成するときboards.txtを参照するので、その16進の値を理解して、適切に設定した内容を書いておかなければなりません。ここで、AVR Fuse Calculatorの出番です。ところが検索してもATmega32Uシリーズが入っているものがなかなかありませんが、なんとか見つけました。
Engbedded Atmel AVR® Fuse Calculator - Electronics-Base.comで、「AVR Part Name」はATmega32U2ですからすぐ終わるわけですが、あとが困ります。わかんねえ。データシート全部読むのめんどい。
Atmelのデータシートの作りも不親切で、Fuse Bitについてまとめた項目がないんですよ。機能の説明があって、そこにFuse Bitはこう設定する、という部分的な表がばらばらにあるので、一覧できない。全部嫁ということになる。
まあいいや、ということで、既存の
boards.txtでATmega32U4が採用されているものと、Minimus32の設定を見比べつつ、上の計算機の値をポチポチしてみると、Minimus32とU4採用Arduinoのfuse bitの設定は同じだということに気づくわけです。Yún, Leonardo, Micro, Esplora, Lilypad USB、どれとも共通です。すると問題になるのはBODの電圧設定のみで、それはextendedの項目であり、5V版である既存設定では3.0V。U2の場合選べるのは最低2.7Vしかないので、そこだけを変更。すると、0xf8が0xf6になるだけだ、という結論が導かれました。ということで、既存の
minimus32の設定を複写して、minimus32v33とかクラス名を変更したところで、name=Minimus 32 (3.3V)とか書いて、bootloader.extended_fuses=0xf6と書き換えます。あと、build.f_cpu=8000000L も忘れずに変更しておきます。build.usb_productにも「3V3」を追記して、これでおしまい。参考までに、作ってみた部分を掲載しておきます。
#############################################################
minimus32v33.name=Minimus 32 (3.3V)
minimus32v33.vid.0=0x2341
minimus32v33.pid.0=0x0036
minimus32v33.vid.1=0x2341
minimus32v33.pid.1=0x8036
minimus32v33.upload.tool=avrdude
minimus32v33.upload.protocol=avr109
minimus32v33.upload.maximum_size=28672
minimus32v33.upload.speed=57600
minimus32v33.upload.disable_flushing=true
minimus32v33.upload.use_1200bps_touch=true
minimus32v33.upload.wait_for_upload_port=true
minimus32v33.bootloader.tool=avrdude
minimus32v33.bootloader.low_fuses=0xff
minimus32v33.bootloader.high_fuses=0xd8
minimus32v33.bootloader.extended_fuses=0xf6
minimus32v33.bootloader.file=caterina/Caterina-Minimus.hex
minimus32v33.bootloader.unlock_bits=0x3F
minimus32v33.bootloader.lock_bits=0x2F
minimus32v33.build.mcu=atmega32u2
minimus32v33.build.f_cpu=8000000L
minimus32v33.build.vid=0x2341
minimus32v33.build.pid=0x8036
minimus32v33.build.usb_product="Minimus32 3V3"
minimus32v33.build.usb_manufacturer="Arduino"
minimus32v33.build.board=MINIMUS32
minimus32v33.build.core=minimus
minimus32v33.build.variant=minimus32
minimus32v33.build.extra_flags={build.usb_flags}
追記するのは、minimusフォルダ以下のboards.txtだけでよいです。arduino以下には一切触りません。それでArduino IDE 1.6.11を起動して、ボードの選択をすると、ちゃんとArduinoとMinimusでカテゴリが分けられて選択できるようになりました。よくできてる。
![]() |
| ボード選択メニューの下に追加された |
ためしにスケッチを書いて、コンパイルと転送が通るかも試します。といっても、いまは何もないので、
SerialオブジェクトがUSBに割り当てられているのを使って、IDEのシリアルモニタから入力があったら"Hello"を印刷する簡単なスケッチを作り、コンパイルと転送してみました。なにやら「Minimusには対応していません」な警告が3つぐらい出ましたが、そのままコンパイルを終えて書き込みまでさくっと完了しました。感動。USBの標準速度が57600bpsになっているので、
Serial.begin(57600); などと書き、シリアルモニタの設定も57600bpsにして適当な文字を入れ、「送信」ボタンを押すと、"Hello"が出ました。動いているようです。これで、追加の回路も載せて制御できる見通しが立ちました。よかったよかった。なんですが、ひとつ回路について重大なことを書くのが遅くなりました。このブログエントリは流れ的にソフトウェアの話でいったん完結させるしかなかったので、最後ですが、自作されようとする方のために、また自分の作業記録として、書かなければなりませんので、ここに記します。
Minimus32の解析サイトに回路図がありますが、これをみると、普通のArduinoには見慣れない「HWB」というタクトスイッチがあります。pbrookさんのWikiにも図があって、リセットと隣合わせに並んでいるようです。そして、データシートを見ると、2ページのピン配置図では13番ピンに、「#HWB」なる端子があります(#は負論理)。さらに、他のU4を使ったArduinoでもフューズビット設定で、「Hardware Boot Enable」にチェックを入れています。「ハードウェアブート」はArduinoにおいて重要らしい。
Minimus32の商品(?)では、まじめにそのボタンをつけているんですが、U4を使った他のArduinoにそんなボタンはありません。なんでだろうと思ってデータシートを読むと、「HWBがLのときにRESETがUPするとハードウェアリセットがかかる」とありました。めんどくせえ。それで、手持ちのArduino Nanoの回路図をみたところ、HWBのラインは10kΩの抵抗を通してプルダウンされており(GNDに接続)、わざわざ「USB RESET EN」と書かれていました。HWBをプルダウンしておけば、リセットラインのL→Hの瞬間にリセットがかかるわけで、「これでいいのだ」ということのようです。よって、このピンはプルダウンしておきました。
それから、Minimus32はあえてICSP端子を設けていません。が、最初にbootloaderを書くにはICSPの6端子を用意しておいたほうが便利なわけでして、僕はつけておくことにしました。U2だと15ピンがSCK、16ピンがMOSI、17ピンがMISOと、SPI端子が連続しているので作りやすいと思います。
あと、要注意な点として、Minimusのピン配列は普通のArduinoとはだいぶ違います。pbrookさんのWikiの図必携。
具体的には、
HardwareSerial(Serial1)はD2がRx、D3がTxですし、D6, D7はUSBの送受信表示のLEDに使われています。D8はHWBで今回はプルダウンされたまま。さらにU2の制約として、タイマーは0(16bitカウンタ)と1(8bitカウンタ)の2つしかないのでPWMは4つですが、D1, D17がタイマー0、D19とD21がタイマー1という配置。タイマーという点では、標準ライブラリの
Servo()はタイマー1を使うのでたぶん動くと思いますが、タイマー0はmills()やdelay()など時間関係の関数のために保留されていて、analogWrite()は使えるよう考慮されているものの、Tone()のために使うことはできず鳴りません。ためしにD1を指定してみたものの、コンパイルは通っても実際には鳴りませんでした。ただ、タイマー1で音を出すライブラリはいくつかあるようなので、
Servo()に興味がなく、音を出したいという用途にはそれらを使うのだろうと思います。
最初のは正確な音程とコードのシンプルさ追求、2番目はタイマー出力2ピン両方をスピーカーにつなぐ形での音質追求、最後のはタイマー0のプリスケーラを1にして(分周しない)、超音波まで出せて音量調節まで実現するかわりに時間関数は破綻してよしとするなど、標準ライブラリに物足りない人向けのようです。
長くなりましたが、こちらからは以上です。
ATmega32U2にArduinoのbootloaderを書き込んでArduino IDEが使えるようにした
とある事情から、ATmega32U2をArduino化する必要があり、いろいろと困っておりましたが、解決したので記録を兼ねてご報告。
まずATmega32U2がArduinoになるのか、ということですが、「ATmega32U2にはADCもI2Cもない」。アナログ入力がないわけです。それらが揃っているのはU4のほう。U4はArduino Leonardoに始まり、各種のボードが販売されているものの、U2は機能不足だから商品化するメリットないよね、と納得しました。
とはいえU2ちっちゃいしピン数もU4より少なくて値上がりしたとはいえまだ秋月で400円だし、もう撤退できない状況があるので、検索をGoogleに変更してみたところ、わりとあっさりとkosakailabさんのブログエントリがヒットしまして、
とはいえU2ちっちゃいしピン数もU4より少なくて値上がりしたとはいえまだ秋月で400円だし、もう撤退できない状況があるので、検索をGoogleに変更してみたところ、わりとあっさりとkosakailabさんのブログエントリがヒットしまして、
ATmega32U2でArduinoモドキを作る - kosakailabMinimus32というプロジェクトがあり、一部販売も(?)されたことがあるらしいことを知りました。
kosakailabさんがGitHubリポジトリとbootloader作成の手がかりを示してくださっているほか、こちらMinimus32解析サイトで部品や回路図などが書き起こされていることで、一通りのなかみはわかりました。
pbrook/minimus-arduino - GitHub実際のところ、5V電源で16MHzのクロックを使うなら、すでにhexが置いてあるのでコンパイルする必要はないんですが、3.3V動作にする都合でクロックを8MHzに変更する必要があり、Makefileを書き換えてコンパイルする必要があった次第。
データシートの26.3項に、「安全動作圏」を示したグラフがあり、8bitのAVRマイコンでは3.3Vでは10MHz以下のクロックにしなければなりません。Arduinoでは3.3V製品としてSparkFun製Arduino Pro Miniの3.3V版があり、それに合わせて8MHz設定が公式ライブラリに追加されているので、3.3V動作の場合、8MHzのクリスタル一択です。bootloaderコンパイルにはLUFAが必要だよ、と書かれています。Unoが搭載しているUSB-UART変換にいまはATmega8U2が使われていますが、かつてはATmega16U2が使われていたこともあり、それらには、LUFAが活用されているようです。
オフィシャルサイトは「(2013)」と但し書きがついていますが、GitHubリポジトリは今年も更新されているようです。ともかくも、LUFAは、USBつきAVR開発支援軽量ライブラリとのこと。
さてそんじゃあbootloader作るべし、となるのですが、minimusプロジェクトが3年前で止まっているので、ちと工夫が必要でした。
まず、pbrookさんのレポジトリですが、Forkとjoinのグラフをみると、2年前にSurrealityLabsさんが手を加えたのがいまの最新っぽく見えました。
SurrealityLabs/minimus-arduino - GitHubこれを開くといきなり「avr」しか見えなくて不安になりますが大丈夫、全部入ってます。
よって、ここからgit clone。あとLUFAですが、最新のリポジトリからもってきたものはいろいろ構成がかわっているようで、コンパイルが通らず、Makefileに書かれていた111009(2011年10月9日版)を公式サイトからダウンロードしてくるのが簡単でした。
配置ですが、
avr-gccなどツールチェインをArduino IDEから借りるのが手っ取り早いので、すでにインストールしてあるArduino IDE 1.6.11に組み込んでしまうのが話が早いです。あと、Windowsではmakeをどうするの、とかよくわからなかったのでコンパイルはMacでやりました。実はBash on Ubuntu on Windows 10でがんばってみたんだけど断念。いま思えばLinux用Arduino IDEから拾えばよかったのかも。コンパイルに必要な変更は、Makefileの「
F_CPU = 16000000」を8000000に変更するだけ。あと、bootloaderはCaterinaを使っていて、USBのVID/PIDは、Arduino LLCのVIDとLeonardoのPIDが書かれたままになっていますが、目をつぶってそのままに。おかげでlsusbすると「Arduino SA Leonardo ( CDC ACM, HID)」と出ますが、まあそういうことであります。pbrookさんのWikiには、Arduino IDEの
hardware/avr以下を置き換えろみたいな乱暴なことが書かれていますが、そうするとMacの場合、Arduino IDEが上がらなくなってしまいました。で、Windowsのほうではどうだろうと、SurrealityLabsさんの
platform.txtには1.6.0と書かれているので1.6.0でがっつり置き換えると、まあ起動はしましたが、bootloaderを書こうとすると、「書き込み装置の選択をしろ」的なメッセージが出て先に進みません。AVRISP mkIIを使っているので、それを選択してあるんですが、どうもだめ。そこで再び検索すると、こんなブログエントリがありまして
Arduino IDE on Windows with Minimus32 Profileなんだか、「一式固めといたよ」としてZIPファイルがリンクされていました。ですが、これを展開するとバッチファイルがありまして、Arduino IDE 1.0.5をダウンロードしてそこに置き換えのツールチェインとpbrookさんのリポジトリのZIPを配置する、というような仕立てになっておりました。
それができた状態で、Macで作ったhexファイルをもとのものと置き換えるものの、こちらではbootloaderを書き込もうとするとJavaのランタイムエラーが出てだめでした。Windows 10(1608版)なんですが。
もうこれはavrdudeのコマンドラインでいくしかないかな、と思いつつ、「もしやMacでこれと同じ構成にしたらうまくいくんではないか?」と思ったところ、うまくいきました。
Arduino IDEの設計は全くわかっていないんですが、
hardware以下にarduinoというフォルダがあるところを、上のバッチファイルで作成した1.0.5版では、minimusというフォルダを隣に作り、pbrookさんの一式はこちらにまるっと入れるという仕上がりになっていて、既存のファイル、特にboards.txtなんかは一切書き換えていないのですが、起動したArduino IDEではきちんとminimus以下のboards.txtの内容が反映されていたわけです。ということで、Macの1.6.11でも同様に、
hardware/minimusというフォルダを作り、一式をそこに放り込み、LUFA-111009も放り込んでMakefileでavr-gcc等を呼び出すパスの追記やLUFAのパスを現状に合わせます。それから、macOSの認証を通すために一度無改造のままArduino.appを起動してからなかみの変更をする必要がありますが、最初の起動時に、ボード設定その他をJSON形式で ~/Library/Arduino15 以下に置くので、それをリセットするために、このフォルダごと消しておきます。そして、とても大事なことなんですが、3.3Vにしたので、
boards.txtに記述するAVRのフューズビットの設定を変更し、ブラウンアウト(電圧低下)検出 の電圧を3Vから2.7Vにしておかないと不安です。フューズビットは書き込み時にavrdudeのコマンドラインをArduino IDEが生成するときboards.txtを参照するので、その16進の値を理解して、適切に設定した内容を書いておかなければなりません。ここで、AVR Fuse Calculatorの出番です。ところが検索してもATmega32Uシリーズが入っているものがなかなかありませんが、なんとか見つけました。
Engbedded Atmel AVR® Fuse Calculator - Electronics-Base.comで、「AVR Part Name」はATmega32U2ですからすぐ終わるわけですが、あとが困ります。わかんねえ。データシート全部読むのめんどい。
Atmelのデータシートの作りも不親切で、Fuse Bitについてまとめた項目がないんですよ。機能の説明があって、そこにFuse Bitはこう設定する、という部分的な表がばらばらにあるので、一覧できない。全部嫁ということになる。
まあいいや、ということで、既存の
boards.txtでATmega32U4が採用されているものと、Minimus32の設定を見比べつつ、上の計算機の値をポチポチしてみると、Minimus32とU4採用Arduinoのfuse bitの設定は同じだということに気づくわけです。Yún, Leonardo, Micro, Esplora, Lilypad USB、どれとも共通です。すると問題になるのはBODの電圧設定のみで、それはextendedの項目であり、5V版である既存設定では3.0V。U2の場合選べるのは最低2.7Vしかないので、そこだけを変更。すると、0xf8が0xf6になるだけだ、という結論が導かれました。ということで、既存の
minimus32の設定を複写して、minimus32v33とかクラス名を変更したところで、name=Minimus 32 (3.3V)とか書いて、bootloader.extended_fuses=0xf6と書き換えます。あと、build.f_cpu=8000000L も忘れずに変更しておきます。build.usb_productにも「3V3」を追記して、これでおしまい。参考までに、作ってみた部分を掲載しておきます。
#############################################################
minimus32v33.name=Minimus 32 (3.3V)
minimus32v33.vid.0=0x2341
minimus32v33.pid.0=0x0036
minimus32v33.vid.1=0x2341
minimus32v33.pid.1=0x8036
minimus32v33.upload.tool=avrdude
minimus32v33.upload.protocol=avr109
minimus32v33.upload.maximum_size=28672
minimus32v33.upload.speed=57600
minimus32v33.upload.disable_flushing=true
minimus32v33.upload.use_1200bps_touch=true
minimus32v33.upload.wait_for_upload_port=true
minimus32v33.bootloader.tool=avrdude
minimus32v33.bootloader.low_fuses=0xff
minimus32v33.bootloader.high_fuses=0xd8
minimus32v33.bootloader.extended_fuses=0xf6
minimus32v33.bootloader.file=caterina/Caterina-Minimus.hex
minimus32v33.bootloader.unlock_bits=0x3F
minimus32v33.bootloader.lock_bits=0x2F
minimus32v33.build.mcu=atmega32u2
minimus32v33.build.f_cpu=8000000L
minimus32v33.build.vid=0x2341
minimus32v33.build.pid=0x8036
minimus32v33.build.usb_product="Minimus32 3V3"
minimus32v33.build.usb_manufacturer="Arduino"
minimus32v33.build.board=MINIMUS32
minimus32v33.build.core=minimus
minimus32v33.build.variant=minimus32
minimus32v33.build.extra_flags={build.usb_flags}
追記するのは、minimusフォルダ以下のboards.txtだけでよいです。arduino以下には一切触りません。それでArduino IDE 1.6.11を起動して、ボードの選択をすると、ちゃんとArduinoとMinimusでカテゴリが分けられて選択できるようになりました。よくできてる。
![]() |
| ボード選択メニューの下に追加された |
ためしにスケッチを書いて、コンパイルと転送が通るかも試します。といっても、いまは何もないので、
SerialオブジェクトがUSBに割り当てられているのを使って、IDEのシリアルモニタから入力があったら"Hello"を印刷する簡単なスケッチを作り、コンパイルと転送してみました。なにやら「Minimusには対応していません」な警告が3つぐらい出ましたが、そのままコンパイルを終えて書き込みまでさくっと完了しました。感動。USBの標準速度が57600bpsになっているので、
Serial.begin(57600); などと書き、シリアルモニタの設定も57600bpsにして適当な文字を入れ、「送信」ボタンを押すと、"Hello"が出ました。動いているようです。これで、追加の回路も載せて制御できる見通しが立ちました。よかったよかった。なんですが、ひとつ回路について重大なことを書くのが遅くなりました。このブログエントリは流れ的にソフトウェアの話でいったん完結させるしかなかったので、最後ですが、自作されようとする方のために、また自分の作業記録として、書かなければなりませんので、ここに記します。
Minimus32の解析サイトに回路図がありますが、これをみると、普通のArduinoには見慣れない「HWB」というタクトスイッチがあります。pbrookさんのWikiにも図があって、リセットと隣合わせに並んでいるようです。そして、データシートを見ると、2ページのピン配置図では13番ピンに、「#HWB」なる端子があります(#は負論理)。さらに、他のU4を使ったArduinoでもフューズビット設定で、「Hardware Boot Enable」にチェックを入れています。「ハードウェアブート」はArduinoにおいて重要らしい。
Minimus32の商品(?)では、まじめにそのボタンをつけているんですが、U4を使った他のArduinoにそんなボタンはありません。なんでだろうと思ってデータシートを読むと、「HWBがLのときにRESETがUPするとハードウェアリセットがかかる」とありました。めんどくせえ。それで、手持ちのArduino Nanoの回路図をみたところ、HWBのラインは10kΩの抵抗を通してプルダウンされており(GNDに接続)、わざわざ「USB RESET EN」と書かれていました。HWBをプルダウンしておけば、リセットラインのL→Hの瞬間にリセットがかかるわけで、「これでいいのだ」ということのようです。よって、このピンはプルダウンしておきました。
それから、Minimus32はあえてICSP端子を設けていません。が、最初にbootloaderを書くにはICSPの6端子を用意しておいたほうが便利なわけでして、僕はつけておくことにしました。U2だと15ピンがSCK、16ピンがMOSI、17ピンがMISOと、SPI端子が連続しているので作りやすいと思います。
あと、要注意な点として、Minimusのピン配列は普通のArduinoとはだいぶ違います。pbrookさんのWikiの図必携。
具体的には、
HardwareSerial(Serial1)はD2がRx、D3がTxですし、D6, D7はUSBの送受信表示のLEDに使われています。D8はHWBで今回はプルダウンされたまま。さらにU2の制約として、タイマーは0(16bitカウンタ)と1(8bitカウンタ)の2つしかないのでPWMは4つですが、D1, D17がタイマー0、D19とD21がタイマー1という配置。タイマーという点では、標準ライブラリの
Servo()はタイマー1を使うのでたぶん動くと思いますが、タイマー0はmills()やdelay()など時間関係の関数のために保留されていて、analogWrite()は使えるよう考慮されているものの、Tone()のために使うことはできず鳴りません。ためしにD1を指定してみたものの、コンパイルは通っても実際には鳴りませんでした。ただ、タイマー1で音を出すライブラリはいくつかあるようなので、
Servo()に興味がなく、音を出したいという用途にはそれらを使うのだろうと思います。
最初のは正確な音程とコードのシンプルさ追求、2番目はタイマー出力2ピン両方をスピーカーにつなぐ形での音質追求、最後のはタイマー0のプリスケーラを1にして(分周しない)、超音波まで出せて音量調節まで実現するかわりに時間関数は破綻してよしとするなど、標準ライブラリに物足りない人向けのようです。
長くなりましたが、こちらからは以上です。
ATmega32U2にArduinoのbootloaderを書き込んでArduino IDEが使えるようにした
とある事情から、ATmega32U2をArduino化する必要があり、いろいろと困っておりましたが、解決したので記録を兼ねてご報告。
まずATmega32U2がArduinoになるのか、ということですが、「ATmega32U2にはADCもI2Cもない」。アナログ入力がないわけです。それらが揃っているのはU4のほう。U4はArduino Leonardoに始まり、各種のボードが販売されているものの、U2は機能不足だから商品化するメリットないよね、と納得しました。
とはいえU2ちっちゃいしピン数もU4より少なくて値上がりしたとはいえまだ秋月で400円だし、もう撤退できない状況があるので、検索をGoogleに変更してみたところ、わりとあっさりとkosakailabさんのブログエントリがヒットしまして、
とはいえU2ちっちゃいしピン数もU4より少なくて値上がりしたとはいえまだ秋月で400円だし、もう撤退できない状況があるので、検索をGoogleに変更してみたところ、わりとあっさりとkosakailabさんのブログエントリがヒットしまして、
ATmega32U2でArduinoモドキを作る - kosakailabMinimus32という商品(?)がかつてあったらしいことを知りました。
こちらMinimus32解析サイトによりますと、www.minimususb.comというドメインがOfficialだということでリンクが貼ってあるんですが、いま見ても日本語で2015年頃にゲーミングマウスがどうとかいう数個のエントリが掲載されたブログが表示されるのみでして、経緯がよくわかりません。他のリンク先もドメインが無効だったりして、情報不足であります。
ただ、kosakailabさんがGitHubリポジトリとbootloader作成の手がかりを示してくださっているので、一通り道具は揃いました。
pbrook/minimus-arduino - GitHub実際のところ、5V電源で16MHzのクロックを使うなら、すでにhexが置いてあるのでコンパイルする必要はないんですが、3.3V動作にする都合でクロックを8MHzに変更する必要があり、Makefileを書き換えてコンパイルする必要があった次第。
データシートの26.3項に、「安全動作圏」を示したグラフがあり、8bitのAVRマイコンでは3.3Vでは10MHz以下のクロックにしなければなりません。Arduinoでは3.3V製品としてSparkFun製Arduino Pro Miniの3.3V版があり、それに合わせて8MHz設定が公式ライブラリに追加されているので、3.3V動作の場合、8MHzのクリスタル一択です。bootloaderコンパイルにはLUFAが必要だよ、と書かれています。Unoが搭載しているUSB-UART変換にいまはATmega8U2が使われていますが、かつてはATmega16U2が使われていたこともあり、それらには、LUFAが活用されているようです。
オフィシャルサイトは「(2013)」と但し書きがついていますが、GitHubリポジトリは今年も更新されているようです。ともかくも、LUFAは、USBつきAVR開発支援軽量ライブラリとのこと。
さてそんじゃあbootloader作るべし、となるのですが、minimusプロジェクトが3年前で止まっているので、ちと工夫が必要でした。
まず、pbrookさんのレポジトリですが、Forkとjoinのグラフをみると、2年前にSurrealityLabsさんが手を加えたのがいまの最新っぽく見えました。
SurrealityLabs/minimus-arduino - GitHubこれを開くといきなり「avr」しか見えなくて不安になりますが大丈夫、全部入ってます。
よって、ここからgit clone。あとLUFAですが、最新のリポジトリからもってきたものはいろいろ構成がかわっているようで、コンパイルが通らず、Makefileに書かれていた111009(2011年10月9日版)を公式サイトからダウンロードしてくるのが簡単でした。
配置ですが、
avr-gccなどツールチェインをArduino IDEから借りるのが手っ取り早いので、すでにインストールしてあるArduino IDE 1.6.11に組み込んでしまうのが話が早いです。あと、Windowsではmakeをどうするの、とかよくわからなかったのでコンパイルはMacでやりました。実はBash on Ubuntu on Windows 10でがんばってみたんだけど断念。いま思えばLinux用Arduino IDEから拾えばよかったのかも。コンパイルに必要な変更は、Makefileの「
F_CPU = 16000000」を8000000に変更するだけ。あと、bootloaderはCaterinaを使っていて、USBのVID/PIDは、Arduino LLCのVIDとLeonardoのPIDが書かれたままになっていますが、目をつぶってそのままに。おかげでlsusbすると「Arduino SA Leonardo ( CDC ACM, HID)」と出ますが、まあそういうことであります。pbrookさんのWikiには、Arduino IDEの
hardware/avr以下を置き換えろみたいな乱暴なことが書かれていますが、そうするとMacの場合、Arduino IDEが上がらなくなってしまいました。で、Windowsのほうではどうだろうと、SurrealityLabsさんの
platform.txtには1.6.0と書かれているので1.6.0でがっつり置き換えると、まあ起動はしましたが、bootloaderを書こうとすると、「書き込み装置の選択をしろ」的なメッセージが出て先に進みません。AVRISP mkIIを使っているので、それを選択してあるんですが、どうもだめ。そこで再び検索すると、こんなブログエントリがありまして
Arduino IDE on Windows with Minimus32 Profileなんだか、「一式固めといたよ」としてZIPファイルがリンクされていました。ですが、これを展開するとバッチファイルがありまして、Arduino IDE 1.0.5をダウンロードしてそこに置き換えのツールチェインとpbrookさんのリポジトリのZIPを配置する、というような仕立てになっておりました。
それができた状態で、Macで作ったhexファイルをもとのものと置き換えるものの、こちらではbootloaderを書き込もうとするとJavaのランタイムエラーが出てだめでした。Windows 10(1608版)なんですが。
もうこれはavrdudeのコマンドラインでいくしかないかな、と思いつつ、「もしやMacでこれと同じ構成にしたらうまくいくんではないか?」と思ったところ、うまくいきました。
Arduino IDEの設計は全くわかっていないんですが、
hardware以下にarduinoというフォルダがあるところを、上のバッチファイルで作成した1.0.5版では、minimusというフォルダを隣に作り、pbrookさんの一式はこちらにまるっと入れるという仕上がりになっていて、既存のファイル、特にboards.txtなんかは一切書き換えていないのですが、起動したArduino IDEではきちんとminimus以下のboards.txtの内容が反映されていたわけです。ということで、Macの1.6.11でも同様に、
hardware/minimusというフォルダを作り、一式をそこに放り込み、LUFA-111009も放り込んでMakefileでavr-gcc等を呼び出すパスの追記やLUFAのパスを現状に合わせます。それから、macOSの認証を通すために一度無改造のままArduino.appを起動してからなかみの変更をする必要がありますが、最初の起動時に、ボード設定その他をJSON形式で ~/Library/Arduino15 以下に置くので、それをリセットするために、このフォルダごと消しておきます。そして、とても大事なことなんですが、3.3Vにしたので、
boards.txtに記述するAVRのフューズビットの設定を変更し、ブラウンアウト(電圧低下)検出 の電圧を3Vから2.7Vにしておかないと不安です。フューズビットは書き込み時にavrdudeのコマンドラインをArduino IDEが生成するときboards.txtを参照するので、その16進の値を理解して、適切に設定した内容を書いておかなければなりません。ここで、AVR Fuse Calculatorの出番です。ところが検索してもATmega32Uシリーズが入っているものがなかなかありませんが、なんとか見つけました。
Engbedded Atmel AVR® Fuse Calculator - Electronics-Base.comで、「AVR Part Name」はATmega32U2ですからすぐ終わるわけですが、あとが困ります。わかんねえ。データシート全部読むのめんどい。
Atmelのデータシートの作りも不親切で、Fuse Bitについてまとめた項目がないんですよ。機能の説明があって、そこにFuse Bitはこう設定する、という部分的な表がばらばらにあるので、一覧できない。全部嫁ということになる。
まあいいや、ということで、既存の
boards.txtでATmega32U4が採用されているものと、Minimus32の設定を見比べつつ、上の計算機の値をポチポチしてみると、Minimus32とU4採用Arduinoのfuse bitの設定は同じだということに気づくわけです。Yún, Leonardo, Micro, Esplora, Lilypad USB、どれとも共通です。すると問題になるのはBODの電圧設定のみで、それはextendedの項目であり、5V版である既存設定では3.0V。U2の場合選べるのは最低2.7Vしかないので、そこだけを変更。すると、0xf8が0xf6になるだけだ、という結論が導かれました。ということで、既存の
minimus32の設定を複写して、minimus32v33とかクラス名を変更したところで、name=Minimus 32 (3.3V)とか書いて、bootloader.extended_fuses=0xf6と書き換えます。あと、build.f_cpu=8000000L も忘れずに変更しておきます。build.usb_productにも「3V3」を追記して、これでおしまい。参考までに、作ってみた部分を掲載しておきます。
#############################################################
minimus32v33.name=Minimus 32 (3.3V)
minimus32v33.vid.0=0x2341
minimus32v33.pid.0=0x0036
minimus32v33.vid.1=0x2341
minimus32v33.pid.1=0x8036
minimus32v33.upload.tool=avrdude
minimus32v33.upload.protocol=avr109
minimus32v33.upload.maximum_size=28672
minimus32v33.upload.speed=57600
minimus32v33.upload.disable_flushing=true
minimus32v33.upload.use_1200bps_touch=true
minimus32v33.upload.wait_for_upload_port=true
minimus32v33.bootloader.tool=avrdude
minimus32v33.bootloader.low_fuses=0xff
minimus32v33.bootloader.high_fuses=0xd8
minimus32v33.bootloader.extended_fuses=0xf6
minimus32v33.bootloader.file=caterina/Caterina-Minimus.hex
minimus32v33.bootloader.unlock_bits=0x3F
minimus32v33.bootloader.lock_bits=0x2F
minimus32v33.build.mcu=atmega32u2
minimus32v33.build.f_cpu=8000000L
minimus32v33.build.vid=0x2341
minimus32v33.build.pid=0x8036
minimus32v33.build.usb_product="Minimus32 3V3"
minimus32v33.build.usb_manufacturer="Arduino"
minimus32v33.build.board=MINIMUS32
minimus32v33.build.core=minimus
minimus32v33.build.variant=minimus32
minimus32v33.build.extra_flags={build.usb_flags}
追記するのは、minimusフォルダ以下のboards.txtだけでよいです。arduino以下には一切触りません。それでArduino IDE 1.6.11を起動して、ボードの選択をすると、ちゃんとArduinoとMinimusでカテゴリが分けられて選択できるようになりました。よくできてる。
![]() |
| ボード選択メニューの下に追加された |
ためしにスケッチを書いて、コンパイルと転送が通るかも試します。といっても、いまは何もないので、
SerialオブジェクトがUSBに割り当てられているのを使って、IDEのシリアルモニタから入力があったら"Hello"を印刷する簡単なスケッチを作り、コンパイルと転送してみました。なにやら「Minimusには対応していません」な警告が3つぐらい出ましたが、そのままコンパイルを終えて書き込みまでさくっと完了しました。感動。USBの標準速度が57600bpsになっているので、
Serial.begin(57600); などと書き、シリアルモニタの設定も57600bpsにして適当な文字を入れ、「送信」ボタンを押すと、"Hello"が出ました。動いているようです。これで、追加の回路も載せて制御できる見通しが立ちました。よかったよかった。なんですが、ひとつ回路について重大なことを書くのが遅くなりました。このブログエントリは流れ的にソフトウェアの話でいったん完結させるしかなかったので、最後ですが、自作されようとする方のために、また自分の作業記録として、書かなければなりませんので、ここに記します。
Minimus32の解析サイトに回路図がありますが、これをみると、普通のArduinoには見慣れない「HWB」というタクトスイッチがあります。pbrookさんのWikiにも図があって、リセットと隣合わせに並んでいるようです。そして、データシートを見ると、2ページのピン配置図では13番ピンに、「#HWB」なる端子があります(#は負論理)。さらに、他のU4を使ったArduinoでもフューズビット設定で、「Hardware Boot Enable」にチェックを入れています。「ハードウェアブート」はArduinoにおいて重要らしい。
Minimus32の商品(?)では、まじめにそのボタンをつけているんですが、U4を使った他のArduinoにそんなボタンはありません。なんでだろうと思ってデータシートを読むと、「HWBがLのときにRESETがUPするとハードウェアリセットがかかる」とありました。めんどくせえ。それで、手持ちのArduino Nanoの回路図をみたところ、HWBのラインは10kΩの抵抗を通してプルダウンされており(GNDに接続)、わざわざ「USB RESET EN」と書かれていました。HWBをプルダウンしておけば、リセットラインのL→Hの瞬間にリセットがかかるわけで、「これでいいのだ」ということのようです。よって、このピンはプルダウンしておきました。
それから、Minimus32はあえてICSP端子を設けていません。が、最初にbootloaderを書くにはICSPの6端子を用意しておいたほうが便利なわけでして、僕はつけておくことにしました。U2だと15ピンがSCK、16ピンがMOSI、17ピンがMISOと、SPI端子が連続しているので作りやすいと思います。
あと、要注意な点として、Minimusのピン配列は普通のArduinoとはだいぶ違います。pbrookさんのWikiの図必携。
具体的には、
HardwareSerial(Serial1)はD2がRx、D3がTxですし、D6, D7はUSBの送受信表示のLEDに使われています。D8はHWBで今回はプルダウンされたまま。さらにU2の制約として、タイマーは0(16bitカウンタ)と1(8bitカウンタ)の2つしかないのでPWMは4つですが、D1, D17がタイマー0、D19とD21がタイマー1という配置。タイマーという点では、標準ライブラリの
Servo()はタイマー1を使うのでたぶん動くと思いますが、タイマー0はmills()やdelay()など時間関係の関数のために保留されていて、analogWrite()は使えるよう考慮されているものの、Tone()のために使うことはできず鳴りません。ためしにD1を指定してみたものの、コンパイルは通っても実際には鳴りませんでした。ただ、タイマー1で音を出すライブラリはいくつかあるようなので、
Servo()に興味がなく、音を出したいという用途にはそれらを使うのだろうと思います。
最初のは正確な音程とコードのシンプルさ追求、2番目はタイマー出力2ピン両方をスピーカーにつなぐ形での音質追求、最後のはタイマー0のプリスケーラを1にして(分周しない)、超音波まで出せて音量調節まで実現するかわりに時間関数は破綻してよしとするなど、標準ライブラリに物足りない人向けのようです。
長くなりましたが、こちらからは以上です。
2016年8月15日月曜日
FTDI VCPドライバが正常動作しない場合(El Capitan 10.11.6)
Arduino Nanoを最近使っていて、Macでシリアルデバイスが突然消えるので困っていた。
最初は
というわけで、Google先生にお伺いを立ててみたところ、我らがParallaxのページに、「バージョン2.2.18と2.3があるが、10.9 (Mavericks)以後は2.3じゃないとだめだよ」ときちんと書いてあった。
いやまさか、最新ドライバに入れ替えたはずだと思ってFTDIのVCPドライバのページを見ると、同じことが書いてあり、El Capitanなら2.3の一択。間違えようがない。
不審に思って
カーネルモジュールなので、
やむなく
カーネルモジュールちゃんとあるよね、と
検索では「Mavericks以後はApple版のFTDIドライバがいるけれど不具合が云々」、というエントリがたくさんヒットしたのだけれど、「ドライバのバージョン間違いしてないか」を確かめることを注意したものが見当たらなかったので、書いておくことにしました。いや、そんな間抜けはいないのかもしれませんが、ここに1名おりまして。
それらの解説では、MavericksではApple版とFTDI版のkext両方がロードされてコンフリクトするようですが、El Capitanでは、FTDI版があればApple版ドライバがロードされることはないようでした。為念。
最初は
/dev/{cu,tty}.usbserial-xxxxが生えるのだが、ポートを開いたり閉じたりしているといつのまにかデバイスが消えている。kextstatすればFTDIのカーネルモジュールはロードされているし、なにが起きているのかよくわからなかった。というわけで、Google先生にお伺いを立ててみたところ、我らがParallaxのページに、「バージョン2.2.18と2.3があるが、10.9 (Mavericks)以後は2.3じゃないとだめだよ」ときちんと書いてあった。
いやまさか、最新ドライバに入れ替えたはずだと思ってFTDIのVCPドライバのページを見ると、同じことが書いてあり、El Capitanなら2.3の一択。間違えようがない。
不審に思って
kextstatすると、「com.FTDI.driver.FTDIUSBSerialDriver (2.2.18)」。ああすみません(泣)。カーネルモジュールなので、
kextunloadできるはずだと実行するも、「1 instanceがあるからunloadできないよ」と言われる。さっきまでつないでいたFTDIチップ搭載基板(Modern Device社のUSB BUB初代品)のせいで作られたインスタンスがなにかをつかんでいて消えないんだろう。やむなく
# rm -rf /System/Library/Extensions/FTDIUSBSerialDriver.kext
を実行して再起動。そして、バージョン2.3を確認してダウンロードし、インストール。基板を接続すると、ちゃんと /dev/{cu,tty}.usbserial-xxxx が生えてきたのでkextstat。無事「com.FTDI.driver.FTDIUSBSerialDriver (2.3)」がおりました。よしよし。カーネルモジュールちゃんとあるよね、と
/System以下を見るも見当たらず、mdfindしたら、/Library/Extensions/FTDIUSBSerialDriver.kextに移動していた。あとからインストールしたものだから、たしかにこちらにあるべきで、いままでは何かの理由で/System以下に置いていたのだろうか、謎。検索では「Mavericks以後はApple版のFTDIドライバがいるけれど不具合が云々」、というエントリがたくさんヒットしたのだけれど、「ドライバのバージョン間違いしてないか」を確かめることを注意したものが見当たらなかったので、書いておくことにしました。いや、そんな間抜けはいないのかもしれませんが、ここに1名おりまして。
それらの解説では、MavericksではApple版とFTDI版のkext両方がロードされてコンフリクトするようですが、El Capitanでは、FTDI版があればApple版ドライバがロードされることはないようでした。為念。
2016年8月10日水曜日
Raspbian JessieがWindows用USBタッチスクリーンディスプレイに対応していた件
モンゴル方面からテクニカルな相談が相次ぐ昨今、Raspberry Piのタッチディスプレイをプロジェクタに映せないかという、検索するとよくある「それできません」な要件がありました。
いろいろ調べてみたところ、usbtouchdisplayというドライバがLinux kernel 3のどこかで入った模様をつかみ、だめもとで、Windows 10で使っている「Dell S2340T」23インチ10点マルチタッチディスプレイをUSBとHDMI接続して、Raspbianをそのまま起動してみました。
lsusbしてみた結果がこれ。
"MicroTouch Systems, Inc"というのが見えますね。さらにDisplayLinkも見えました。いや素晴らしい。HDMIなくてもDisplayLinkに対応していればUSBだけでいけるということなんではないでしょうか(そっちも試せという声が... いやすみません)。
いろいろ調べてみたところ、usbtouchdisplayというドライバがLinux kernel 3のどこかで入った模様をつかみ、だめもとで、Windows 10で使っている「Dell S2340T」23インチ10点マルチタッチディスプレイをUSBとHDMI接続して、Raspbianをそのまま起動してみました。
lsusbしてみた結果がこれ。
![]() |
| Raspbian JessieにDell S2340Tを接続してlsusb |
試しにタッチしてみました。
どうもキャリブレーションは必要なようですが、とにかく指に反応する様子は確認できました。
検索では皆さんいろいろご苦労されている様子があったので、ゆうべはずいぶん悩んで調べていたのですが、たぶん、たいていのWindows用外部ディスプレイのUSBマルチタッチは対応しているんではないかと思います。
モンゴル方面には、なにか適当なマルチタッチディスプレイとHDMIスプリッタを用意せよと連絡して完了。よかった。
ひとまず速報的にお知らせいたします。
2016年6月11日土曜日
Nekoboard2をArduino化するw
Scaratchセンサーボードとして大人気らしい「Nekoboard2」について調べてほしいという依頼があり、週末にお借りしていろいろいじってみました。
第一印象は、この一言に尽きます。「え〜、こんなにちっちゃいの!?」
比較のために、なのぼ〜どAG 1.4と、秋月から購入したスライドボリュームを並べてみましたが、わかりにくいので言葉で補足すると、いちばん長い横幅で、5.3cmしかありません。大人の手のひらで握ってしまえるぐらいの大きさ。搭載されているスライドボリュームの長さが4.5cm。秋月のは6cmです。なのぼ〜どAGが5cm角。
念のため追記しておきますが、Nekoboard2にはモータドライバもArduinoとしてのI/O端子もありません。オリジナルのMIT PicoBoardと同じ機能。いまはSparkFun版が公式のようですね。よって、自作スケッチもセンサの値をシリアルで送る以外にこれといって実用的な用途はなさそうです。
SparkFun版もそうですが、ATmega328Pを使いながら、使うI/Oはたったの8個という豪華仕様。未使用ピンがたっぷりありますが32TQFPパッケージで周囲も他の部品が密集して取り囲んでいるのでリードを引っ張りだすのはほぼ無理。クロックも16MHzで、速度的にも余裕たっぷりです。
Nekoboard2は、MITがワニ口クリップのついたケーブルをイヤフォンジャック4個でつなぐ形にこだわるのを捨てて、とにかく小さく、安くする方針というのが特徴になると思います。日本では両ワニ口ケーブルが簡単に入手できるので、イヤフォンジャックつき専用ケーブルはちょっと過剰な仕様ではないかと僕も思います。
というわけで、Scratchセンサボード本来の使い方として、MITのScratch 2.0サイトにアクセスして、ブラウザに機能拡張を入れて動くことを確認したのち、Arduinoスケッチを書き込んだらどうなるのか、試してみました。
目的は、ドリトルのArduino対応用スケッチで、ドリトルのセンサボードとして使う、という方向です。結論からいうと、とても簡単でした。実際、普通に使えてしまいます。
以下、作業手順を記録しておきます。
まず、出荷状態のファームウェアのバックアップをとります。Nekoboad2は特にコードがロックされていないので、avrdudeで簡単にFlashの読み書きができます。ただ、Scratch 2.0対応とするためにFT231XS USB-シリアル変換チップのDTRがATmega328Pのリセットにつながっていないので、optibootをbootloaderにしていると、単にUSBでPCと接続しただけではavrdudeからリセットがかけられません。
よって、タクトスイッチの手前、FTDIチップの右にあるISP端子を使います。つまり、ISP装置必須です。といっても、arduinoISPが使えるので、Arduinoで生のAVRにArduinoのbootloaderを書き込むのと同じ準備でいいと思います。適当に検索していただく感じで。手元にはAVR ISPmkIIがあるので、それを使いました。
Nekoboard2に給電するために、Nekoboard2をPCのUSB端子に、同じPCにISP装置をUSB接続します。
何度も書き換えを行う場合はISP端子にピンヘッダを立てておくのがよいと思いますが、今回は借り物なので、はんだづけしないで「指の力で押さえる」方式をとりました。
コツは、斜めに力を加えることでしょうか。垂直では隙間ができてしまうので、傾けて穴のハンダメッキされた壁に全部の端子がきっちり当たる状態を保つ感じです。差し込む向きが合っていれば、ISP装置のランプが緑色になります。逆向きだとオレンジで点滅するのでわかります。接続がない状態では赤なので、色が変わる場所を探しましょう。
それで、avrdudeを使いますが、Arduino IDEがインストールされていればそのharware/avr/tools/以下にツールチェインが揃っているので、それを使うのが簡単。bin以下にバイナリがあり、etcの下にavrdude.confがあります。よって、
ボードの設定を「Arduino Pro or Pro Mini」に、プロセッサを「ATmega328 (5V; 16MHz)」に選択します。
コンパイル後の書き込みはシリアルポートからできないので、いつもの編集画面のボタンではなく、メニューから「書込装置を使って書き込む」を選択します。
これで、ISPの緑ランプの点滅が終われば書き込み完了しているので、押さえた手を離してISPケーブルを外します。この時点でリセットされているはずですが、念のため、Nekoboard2のUSBケーブルを抜き差しして再起動してみます。
これで、書き込んだスケッチが動作しているはず。といってもNekoboard2上の赤い明るいLEDは単なる電源ランプなので、Lチカできません。残念でした。
今回はドリトル同梱のスケッチを使いましたが、センサの値をシリアルで送信するようなスケッチとして、[ファイル]→[スケッチの例]→[3. Analog]→[AnalogInoutSerial]あたりはどうでしょうか。といっても、A0はセンサでなく外付けセンサA端子なので、コメント直下の最初の行にある「
というわけで、簡単にArduinoとして使えることがわかってしまいました。USB-シリアル変換チップもFTDIを使っているのでとても安定していて、いい感じです。
さて、返却前にファームウェアをもとに戻しておかなくてはいけませんので、再びavrdudeを使います。ISPをつなぎましょう。
これで元通り、Scratchセンサボードとして使えます。
第一印象は、この一言に尽きます。「え〜、こんなにちっちゃいの!?」
![]() |
| とってもちっちゃいNekoboard2 |
念のため追記しておきますが、Nekoboard2にはモータドライバもArduinoとしてのI/O端子もありません。オリジナルのMIT PicoBoardと同じ機能。いまはSparkFun版が公式のようですね。よって、自作スケッチもセンサの値をシリアルで送る以外にこれといって実用的な用途はなさそうです。
SparkFun版もそうですが、ATmega328Pを使いながら、使うI/Oはたったの8個という豪華仕様。未使用ピンがたっぷりありますが32TQFPパッケージで周囲も他の部品が密集して取り囲んでいるのでリードを引っ張りだすのはほぼ無理。クロックも16MHzで、速度的にも余裕たっぷりです。
Nekoboard2は、MITがワニ口クリップのついたケーブルをイヤフォンジャック4個でつなぐ形にこだわるのを捨てて、とにかく小さく、安くする方針というのが特徴になると思います。日本では両ワニ口ケーブルが簡単に入手できるので、イヤフォンジャックつき専用ケーブルはちょっと過剰な仕様ではないかと僕も思います。
というわけで、Scratchセンサボード本来の使い方として、MITのScratch 2.0サイトにアクセスして、ブラウザに機能拡張を入れて動くことを確認したのち、Arduinoスケッチを書き込んだらどうなるのか、試してみました。
目的は、ドリトルのArduino対応用スケッチで、ドリトルのセンサボードとして使う、という方向です。結論からいうと、とても簡単でした。実際、普通に使えてしまいます。
以下、作業手順を記録しておきます。
まず、出荷状態のファームウェアのバックアップをとります。Nekoboad2は特にコードがロックされていないので、avrdudeで簡単にFlashの読み書きができます。ただ、Scratch 2.0対応とするためにFT231XS USB-シリアル変換チップのDTRがATmega328Pのリセットにつながっていないので、optibootをbootloaderにしていると、単にUSBでPCと接続しただけではavrdudeからリセットがかけられません。
よって、タクトスイッチの手前、FTDIチップの右にあるISP端子を使います。つまり、ISP装置必須です。といっても、arduinoISPが使えるので、Arduinoで生のAVRにArduinoのbootloaderを書き込むのと同じ準備でいいと思います。適当に検索していただく感じで。手元にはAVR ISPmkIIがあるので、それを使いました。
![]() |
| ISPの位置 |
何度も書き換えを行う場合はISP端子にピンヘッダを立てておくのがよいと思いますが、今回は借り物なので、はんだづけしないで「指の力で押さえる」方式をとりました。
![]() |
| ピンヘッダを取り付けたISPコネクタを基板に押し付ける |
それで、avrdudeを使いますが、Arduino IDEがインストールされていればそのharware/avr/tools/以下にツールチェインが揃っているので、それを使うのが簡単。bin以下にバイナリがあり、etcの下にavrdude.confがあります。よって、
$ cd /Applications/Arduino.app/Contents/Java/hardware/avr/bin
$ ./avrdude -C../etc/avrdude.conf -p m328p -cavrisp2 -v -v -U flash:r:/tmp/flash.bin:r
これで、/tmp/flash.binにバックアップがとれます。Windowsな方は適当にアレンジしてください。
こんなログがとれました。
今度は適当なArduinoのスケッチを書き込むわけですが、これはArduino IDEでできます。
avrdude: Version 6.0.1, compiled on Apr 14 2015 at 16:30:25
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "../etc/avrdude.conf"
User configuration file is "/Users/abcde/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : usb
Using Programmer : avrisp2
avrdude: usbdev_open(): Found AVRISP mkII, serno: 000200006105
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 : STK500V2
Description : Atmel AVR ISP mkII
Programmer Model: AVRISP mkII
Hardware Version: 1
Firmware Version Master : 1.10
Vtarget : 5.1 V
SCK period : 8.00 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: reading flash memory:
Reading | ################################################## | 100% 9.61s
avrdude: writing output file "/tmp/flash.bin"
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: safemode: Fuses OK (H:05, E:D6, L:FF)
avrdude done. Thank you.
ボードの設定を「Arduino Pro or Pro Mini」に、プロセッサを「ATmega328 (5V; 16MHz)」に選択します。
![]() |
| ボードとプロセッサの選択を間違えないように |
![]() |
| メニューから書き込みを実行 |
これで、書き込んだスケッチが動作しているはず。といってもNekoboard2上の赤い明るいLEDは単なる電源ランプなので、Lチカできません。残念でした。
今回はドリトル同梱のスケッチを使いましたが、センサの値をシリアルで送信するようなスケッチとして、[ファイル]→[スケッチの例]→[3. Analog]→[AnalogInoutSerial]あたりはどうでしょうか。といっても、A0はセンサでなく外付けセンサA端子なので、コメント直下の最初の行にある「
const int analogInPin = A0;」を、A4(明るさ)、A5(音量)、A7(スライドボリューム)のどれかに変えてからコンパイルするのがよいと思います。それで、シリアルモニタを開くと、値が数値で表示されるはずです。それから、Nekoboard2はタクトスイッチがD2につながっているので、デジタル入力のサンプルで値が変化するのをみてもよいと思います(Scratch向けには1のとき1023を返すようにしているようです)。というわけで、簡単にArduinoとして使えることがわかってしまいました。USB-シリアル変換チップもFTDIを使っているのでとても安定していて、いい感じです。
さて、返却前にファームウェアをもとに戻しておかなくてはいけませんので、再びavrdudeを使います。ISPをつなぎましょう。
こんなログがとれました。$ ./avrdude -C../etc/avrdude.conf -p m328p -cavrisp2 -v -v -U flash:w:/tmp/flash.bin
avrdude: Version 6.0.1, compiled on Apr 14 2015 at 16:30:25
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "../etc/avrdude.conf"
User configuration file is "/Users/abcde/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : usb
Using Programmer : avrisp2
avrdude: usbdev_open(): Found AVRISP mkII, serno: 000200006105
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 : STK500V2
Description : Atmel AVR ISP mkII
Programmer Model: AVRISP mkII
Hardware Version: 1
Firmware Version Master : 1.10
Vtarget : 5.1 V
SCK period : 8.00 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e950f
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
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 "/tmp/flash.bin"
avrdude: input file /tmp/flash.bin auto detected as raw binary
avrdude: writing flash (32768 bytes):
Writing | ################################################## | 100% 9.52s
avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against /tmp/flash.bin:
avrdude: load data flash data from input file /tmp/flash.bin:
avrdude: input file /tmp/flash.bin auto detected as raw binary
avrdude: input file /tmp/flash.bin contains 32768 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 9.63s
avrdude: verifying ...
avrdude: 32768 bytes of flash verified
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: safemode: Fuses OK (H:05, E:D6, L:FF)
avrdude done. Thank you.
2016年4月20日水曜日
別のMacに接続したHDDへTimeMachineバックアップした場合の復元方法
TimeMachineバックアップで簡単なのは、Apple製品に囲われること、つまりTimeCapsuleをWiFi APとして使い、それに内蔵されたHDDをTimeMachineバックアップの対象とすることなんでしょうが、それにはお金がかかるので、別のMacがTimeMachineバックアップにしているHDDにファイル共有で相乗りしたいと思う人も多いのではないかと思います。
このときですが、普通にFinderからリモートドライブをマウントすると、SMB(Windowsファイル共有)でマウントされてしまうので、TimeMachineバックアップするときは、AFPでマウントしないと、権限が違うという理由で、そもそもTImeMachineバックアップが作成できません。マウスクリックでやる方法はわかりませんが、明示的にafpを指定してあげれば大丈夫。FinderからCmd-Kで「afp://マシンのドメイン名/保存先」のように。
このあと、TImeMachieをONにすれば、バックアップが始まります。
すると不思議なのは、ローカルHDDへのTimeMachineバックアップは、そのまま普通にファイルシステムとして見えて、バックアップ先のファイルを普通にコピーできるのに(ACLの属性はあれですが)、ネットワークでマウントした場合には、バックアップそのものは、マシンごとにひとつのsparsebundleつまりフォルダになっていて、おなじみInfo.plistなどもそこにはあります。そこにあるデータはなんだかフラグメントされたデータファイルの塊であって、ファイルとして見えません。
それで、リストアできるのか心配なので、念のためtarballを自分で作ってGoogle Driveにあげておいたりしたのですが、杞憂でした。
1回目の修理のときにGeniusに尋ねたら、「ファイルシステムとしてマウントすると普通のファイルに見えるんですよ」とのこと。実はこの説明はひとつだけはしょっているところがあるんですが、後述します。
さて、いったん初期化されたマシンからリモートドライブ上のTimeMachineバックアップで復元する方法ですが、以下の手順となるようです。(参考)
さて、参考サイトをみながらやった手順を以下に記しておきます。ご参考まで。
このときですが、普通にFinderからリモートドライブをマウントすると、SMB(Windowsファイル共有)でマウントされてしまうので、TimeMachineバックアップするときは、AFPでマウントしないと、権限が違うという理由で、そもそもTImeMachineバックアップが作成できません。マウスクリックでやる方法はわかりませんが、明示的にafpを指定してあげれば大丈夫。FinderからCmd-Kで「afp://マシンのドメイン名/保存先」のように。
このあと、TImeMachieをONにすれば、バックアップが始まります。
すると不思議なのは、ローカルHDDへのTimeMachineバックアップは、そのまま普通にファイルシステムとして見えて、バックアップ先のファイルを普通にコピーできるのに(ACLの属性はあれですが)、ネットワークでマウントした場合には、バックアップそのものは、マシンごとにひとつのsparsebundleつまりフォルダになっていて、おなじみInfo.plistなどもそこにはあります。そこにあるデータはなんだかフラグメントされたデータファイルの塊であって、ファイルとして見えません。
それで、リストアできるのか心配なので、念のためtarballを自分で作ってGoogle Driveにあげておいたりしたのですが、杞憂でした。
1回目の修理のときにGeniusに尋ねたら、「ファイルシステムとしてマウントすると普通のファイルに見えるんですよ」とのこと。実はこの説明はひとつだけはしょっているところがあるんですが、後述します。
さて、いったん初期化されたマシンからリモートドライブ上のTimeMachineバックアップで復元する方法ですが、以下の手順となるようです。(参考)
- Cmd-Rで起動して、リカバリモードに入る
- ターミナルを起動して、リモートドライブをマウントし、おまじないをする。
- すると「TimeMachineバックアップ」という名前で見えるようになる
- ターミナルを終了して、通常のリカバリ手順に入る
さて、参考サイトをみながらやった手順を以下に記しておきます。ご参考まで。
- リカバリモードから[ユーティリティ]→[ターミナル]で、ターミナルを起動する
- rootのコマンドプロンプトが出るので、管理者(シングルユーザモード?)ということがわかる
- ネットワークを接続しておく(やはり有線が早くて良いけれど、WiFiの設定はこの時点でもできる)
- 以下のコマンドで、まずリモートドライブをマウントする
- mkdir /Volumes/TimeMachine
- mount_afs afp://ユーザ名:パスワード@マシン名/保存先 /Volumes/TimeMachine
- すると、/Volumes/TimeMachine以下に、バックアップしたマシン名のsparsebundleフォルダが見えるので、以下のコマンドで普通のファイルに見えるようにします
- hdid /Volumes/TimeMachine/バックアップしたマシン名.sparsebundle
- ターミナルをexitして、Cmd-Qで終了すると、起動時のメニューになるので、「TimeMachieバックアップからリストア」に入る
- 「TimeMachineバックアップ」の名前があるので、それをクリックして選択し、先に進む
MBP Retine 13"ディスプレイ破損と交換、さらに再修理の顛末
前回の回復後、急いでTimeMachineバックアップをとったものの、次の打合せに持参したところで落としてしまい、ついにディスプレイがブラックアウトしたままどうにもならなくなりました。
やむを得ず、Apple電話サポートと話をして、Genius Barの予約をとってもらいました。とはいえGenious BarはiPhone修理の人でいつも混雑していて、なかなかとれないこと。でも、電話サポートの人は、こちらが動ける4月3日(土)と6(水)の予約を2つ入れてくれました。
なんとか土曜の予約時間に間に合ったので、そこでみていただくと、iPadでステータスを確認しながら、見えない画面でいろいろキーボード操作して診断していた模様。ThunderboltにEthernetのドングルをつけた状態です。
それで、「外部ディスプレイに出力が出るかもしれません」ということで接続すると、普通に起動した状態の表示が出て、「たぶん本体とディスプレイの間のケーブルやコネクタの部分の問題でしょう」ということで、基本料金33,000円(税込み35,640円)の見積もりとなりました。うれしい金額です。キーボードのバックライトが点灯しない理由については、「環境光センサーで明るさが決まるので、その配線の問題では」ということで、いよいよ配線のみだろう、という気持ちが高まりました。
そして、修理センター送りにしたのですが、翌日すぐにApple Storeから電話が。業務があり気が付かなかったのですが、メールで連絡があり、リンクをクリックすると、詳しい診断結果が表示されました。
さて困りました。そんな金額はどこにもありません。というか、これからかかる様々な費用に備えて積み立てていた3万円しかないわけです。前の金額なら、食費を削って捻出を考えていたんですが、もうだめ。やむなく、財務大臣に土下座して、華麗に無視されたわけですが、2日後にはなんだか5万円が無造作にテーブルに置かれておりました。「これ以上は出ないからあとはなんとかしろ」と理解して、積立全部崩すこと決定。仕事になりませんから。
で、そのままサイトで修理承諾のボタンを押したところ、4月11日(月)にはAppleStoreに届いたとの連絡がありました。動けるのが水曜だけなので、13日に受け取りに行きました.
受け取りは特にGeniusではなく普通の店員が対応するので、単に倉庫からもってきて、受け取りサインをしたら引っ込もうとするわけですが、「念のため起動の確認させてください」と言って、立ち会いのもと電源を入れてみます。
すると、いきなりこの画面ですよ。
初めて見るので戸惑っていると、「工場のテストのあとこういうことはあるので、続ければいいです」というので、何かキーボードを押すとbootが進みます。で、まあ、それらしい画面になりました。というか、修理に出す前のままの画面でして、Chromeのタブも全部そのまま復元。SSDの消去などは一切しなかったようです。ありがたや。
それで、少し見ていると、まあ大丈夫そうだったので、そのままディスプレイを閉じてスリープしたんですが、なんだか嫌な予感が残りました。マウスカーソルが固まっている気配。
帰宅するとやっぱり固まっているので、電源長押しで電源断、再起動。まあ使えているようです。それで、その日は疲れていたのでそのまま寝落ちして、朝起きたらやっぱり固まっていました。
この際、セルフテストすべきだろうと思って、キーボードの「d」を押しながら起動すると、2つぐらい進んだところで固まります。え。
強制電源断、 再起動して、仕事を始めようとするんですが、ログイン画面の背景の上に、画面左上からだーっと小さな文字でkernel panicのメッセージが流れます。をを! これでこそUNIX。
感動と戸惑いを抱えつつ再起動すると、今度はログイン画面に入る前に、同じく上からkernel panicメッセージ。さすがに心配になったので、もう一度セルフテストにかけると、こんどは「異常なし」できれいに終わります。なんなんだ。
変なkernel moduleでもいるのかな、と、追加で入れたデバイスドライバなどを消してみるも、特に改善しません。というか、だんだんkernel panicの間隔が短くなってきたので、これはOSのクリーンインストールをして、それでもだめならハードウェアの問題、セルフテストは通るけど。と考えて帰宅。自宅でCmd-Rで再起動し、ディスクユーティリティでパーティションを再作成して、ファイルシステムの消去(フォーマット)をしてから、リカバリに入ります。リカバリ領域に入っていたのは購入時のMaveriks。インストールを進めるのですが、しばらくするとkernel panic! 素敵すぎる。単に再起動してみるとどうなるんだろうと思ったら、続きのインストールをはじめます。再びkernel panic! 再起動して、ようやくMavericksが入りました。しばらく触っていて、なんとなく普通に動いているようにみえます。ハードウェアはおかしそうだけれど、まあいいやと思って、El Capitanにアップグレードするも、こちらはkernel panicのメッセージは出ないもののプログレスバー(iOSと同じ感じのやつ)が動かなくなるので、そこで電源断、再起動を2回やったらインストールが終わりました。でも、しばらく触るとすぐにkernel panic(上の図の画面)するので、Safariでメールの用事を少し片付けたところで諦め、翌朝からApple電話サポートに電話。
といっても、セルフテスト通るので、「これは詳細調査させてください」ということで、再びGenius Barを2つ予約。今度は13日(水)の夕方と閉店前の2つ。もう宅配ピックアップでいいと思ったんですが、「いったんお店でみてもらってからのほうが」ということで、こうなったんですが、正解でした。
水曜日の前の日に最終バスを逃してしまい帰れなくなったので翌日そのまま仕事して、早めに上がりたかったけれど業務が終わらないので、自宅にいったんMBPをとりに戻り、そのままAppleStoreに直行。8時過ぎについたので、45分の予約よりはずいぶん早いのですが、iPhone修理の人がいっぱいいるなか、10分ほどで呼び出してくれました。
で、マシンを出すのですが、これといって異常を見せないわけです。こういうときって。
そこで登場したのが、Genius Barにある、ネットワークブートでの診断ツール。例によってEthernetドングルをつないで、[Option]キーで起動すると、ずらりとネットワークブートの地球が並びます。それぞれ名前がついていて、目的に応じた専用ツールがあるようです。「nを押して起動する方法もあるんですよ」とのこと。なんだか、NetBootとよばれる機能があるようですね。詳しい説明がここにありました。NFS使うんですかへえ。
それでハードウェア診断のツールでboot。今度はグラフィカルな表示で、プログレスバーやチェック項目のアイコンが現れては診断結果をアイコンにつけつつ進みます。結局すべてのハードウェアに緑色のチェックマークがついて、OK。
別のツールで見るも、これといった異常がなくて、「少しお待ち下さい」ということで現れたのは、エンジニアリングに最も詳しいと思われるスタッフのお兄さん。同じように診断結果がオールグリーンなのを確認して、普通にSSDから起動しようとするときの、ちょっとしたもたつきを彼は見落としませんでした。
「ログを見てみましょう」といって、コンソールを開くと「SSDのアクセス失敗が大量に出ていますね」という。僕も見ればすぐにそれとわかります。
そう思ってみると、起動時にも、メニューバーがなかなか出なかったりします。
すぐに、最初に対応したスタッフのおねえさんに指示を出します。「ロジックボード交換と、念のためSSDの交換」、診断状況の報告についてもいくつか文言の指示を出します。
それで出てきた見積書が、ロジックボード47,100円を無償、128GB SSD 33,500円を無償、ハードウェア修理の技術費3,300円を無償、合計83,900円を90日保障で無償というもの。前回の修理でロジックボード交換されているのは明らかですが、これだけ割り引いてくれたんだという感慨がありました。最後の修理費とはなにかと思ったら、AppleStore店内でパーツを取り寄せて交換するときの料金とのこと。「修理センター送りでいいんですけど」と言ってみたら、「やることは同じですけど、確かめておきたいので」と。修理センター送りにするとどこが悪いのか確認できないから自分の目でしっかり見たいという、エンジニアの性なんでしょう。「仲間だ」と思ったので、「お願いします」ということで、店舗へのパーツ到着を待って交換したのち、一定の負荷テストをすることに。
しばらく日数がかかると思っていたのですが、昨日、4月19日に修理完了のメールが届いたので、本日(水)に受け取ってきた次第。今度も、店内の一般店員はあまり技術に明るくなさそうでしたが、「前回受け取った時にちゃんと起動しなかったので」と言って、きちんと起動し、しばらく問題がないことを自分で確認しました。そのときに、「こちらでも、一定時間電源を入れて、いくつかアプリを使って正しく動作することを確認していますので」という説明がありました。
というわけで、いま、このエントリを書いている間にTimeMachineバックアップを戻し終わったところ。 ネットワーク共有先のドライブの場合どうするかについて、次のエントリに続きます。
ちなみに、なんだかSSDがめちゃくちゃ早いです。これが単に、リカバリ直後だからなのか、それとも、もしかして、もしかするとMBP Early 2015以後のPCIe 3.0x4のSSDだったりしたら、細かな心遣いに感謝したいわけですが、そればっかりは分解してみないとわからないわけで、ひとまず気にしないことにします。システム情報見たら、STAT/STAT Expressのところで「リンク幅: x2」とあったので気のせいでしたはい。
一回目の修理
やむを得ず、Apple電話サポートと話をして、Genius Barの予約をとってもらいました。とはいえGenious BarはiPhone修理の人でいつも混雑していて、なかなかとれないこと。でも、電話サポートの人は、こちらが動ける4月3日(土)と6(水)の予約を2つ入れてくれました。
なんとか土曜の予約時間に間に合ったので、そこでみていただくと、iPadでステータスを確認しながら、見えない画面でいろいろキーボード操作して診断していた模様。ThunderboltにEthernetのドングルをつけた状態です。
それで、「外部ディスプレイに出力が出るかもしれません」ということで接続すると、普通に起動した状態の表示が出て、「たぶん本体とディスプレイの間のケーブルやコネクタの部分の問題でしょう」ということで、基本料金33,000円(税込み35,640円)の見積もりとなりました。うれしい金額です。キーボードのバックライトが点灯しない理由については、「環境光センサーで明るさが決まるので、その配線の問題では」ということで、いよいよ配線のみだろう、という気持ちが高まりました。
そして、修理センター送りにしたのですが、翌日すぐにApple Storeから電話が。業務があり気が付かなかったのですが、メールで連絡があり、リンクをクリックすると、詳しい診断結果が表示されました。
- ディスプレイパネル折損。圧力によるものと考えられる
- ロジックボードに分解痕、コネクタの一部はがれ
さて困りました。そんな金額はどこにもありません。というか、これからかかる様々な費用に備えて積み立てていた3万円しかないわけです。前の金額なら、食費を削って捻出を考えていたんですが、もうだめ。やむなく、財務大臣に土下座して、華麗に無視されたわけですが、2日後にはなんだか5万円が無造作にテーブルに置かれておりました。「これ以上は出ないからあとはなんとかしろ」と理解して、積立全部崩すこと決定。仕事になりませんから。
で、そのままサイトで修理承諾のボタンを押したところ、4月11日(月)にはAppleStoreに届いたとの連絡がありました。動けるのが水曜だけなので、13日に受け取りに行きました.
2度目の修理
受け取りは特にGeniusではなく普通の店員が対応するので、単に倉庫からもってきて、受け取りサインをしたら引っ込もうとするわけですが、「念のため起動の確認させてください」と言って、立ち会いのもと電源を入れてみます。
すると、いきなりこの画面ですよ。
| おなじみ(笑)kernel panicの画面 |
それで、少し見ていると、まあ大丈夫そうだったので、そのままディスプレイを閉じてスリープしたんですが、なんだか嫌な予感が残りました。マウスカーソルが固まっている気配。
帰宅するとやっぱり固まっているので、電源長押しで電源断、再起動。まあ使えているようです。それで、その日は疲れていたのでそのまま寝落ちして、朝起きたらやっぱり固まっていました。
この際、セルフテストすべきだろうと思って、キーボードの「d」を押しながら起動すると、2つぐらい進んだところで固まります。え。
強制電源断、 再起動して、仕事を始めようとするんですが、ログイン画面の背景の上に、画面左上からだーっと小さな文字でkernel panicのメッセージが流れます。をを! これでこそUNIX。
感動と戸惑いを抱えつつ再起動すると、今度はログイン画面に入る前に、同じく上からkernel panicメッセージ。さすがに心配になったので、もう一度セルフテストにかけると、こんどは「異常なし」できれいに終わります。なんなんだ。
変なkernel moduleでもいるのかな、と、追加で入れたデバイスドライバなどを消してみるも、特に改善しません。というか、だんだんkernel panicの間隔が短くなってきたので、これはOSのクリーンインストールをして、それでもだめならハードウェアの問題、セルフテストは通るけど。と考えて帰宅。自宅でCmd-Rで再起動し、ディスクユーティリティでパーティションを再作成して、ファイルシステムの消去(フォーマット)をしてから、リカバリに入ります。リカバリ領域に入っていたのは購入時のMaveriks。インストールを進めるのですが、しばらくするとkernel panic! 素敵すぎる。単に再起動してみるとどうなるんだろうと思ったら、続きのインストールをはじめます。再びkernel panic! 再起動して、ようやくMavericksが入りました。しばらく触っていて、なんとなく普通に動いているようにみえます。ハードウェアはおかしそうだけれど、まあいいやと思って、El Capitanにアップグレードするも、こちらはkernel panicのメッセージは出ないもののプログレスバー(iOSと同じ感じのやつ)が動かなくなるので、そこで電源断、再起動を2回やったらインストールが終わりました。でも、しばらく触るとすぐにkernel panic(上の図の画面)するので、Safariでメールの用事を少し片付けたところで諦め、翌朝からApple電話サポートに電話。
といっても、セルフテスト通るので、「これは詳細調査させてください」ということで、再びGenius Barを2つ予約。今度は13日(水)の夕方と閉店前の2つ。もう宅配ピックアップでいいと思ったんですが、「いったんお店でみてもらってからのほうが」ということで、こうなったんですが、正解でした。
Genius Barの本領発揮
水曜日の前の日に最終バスを逃してしまい帰れなくなったので翌日そのまま仕事して、早めに上がりたかったけれど業務が終わらないので、自宅にいったんMBPをとりに戻り、そのままAppleStoreに直行。8時過ぎについたので、45分の予約よりはずいぶん早いのですが、iPhone修理の人がいっぱいいるなか、10分ほどで呼び出してくれました。
で、マシンを出すのですが、これといって異常を見せないわけです。こういうときって。
そこで登場したのが、Genius Barにある、ネットワークブートでの診断ツール。例によってEthernetドングルをつないで、[Option]キーで起動すると、ずらりとネットワークブートの地球が並びます。それぞれ名前がついていて、目的に応じた専用ツールがあるようです。「nを押して起動する方法もあるんですよ」とのこと。なんだか、NetBootとよばれる機能があるようですね。詳しい説明がここにありました。NFS使うんですかへえ。
それでハードウェア診断のツールでboot。今度はグラフィカルな表示で、プログレスバーやチェック項目のアイコンが現れては診断結果をアイコンにつけつつ進みます。結局すべてのハードウェアに緑色のチェックマークがついて、OK。
別のツールで見るも、これといった異常がなくて、「少しお待ち下さい」ということで現れたのは、エンジニアリングに最も詳しいと思われるスタッフのお兄さん。同じように診断結果がオールグリーンなのを確認して、普通にSSDから起動しようとするときの、ちょっとしたもたつきを彼は見落としませんでした。
「ログを見てみましょう」といって、コンソールを開くと「SSDのアクセス失敗が大量に出ていますね」という。僕も見ればすぐにそれとわかります。
そう思ってみると、起動時にも、メニューバーがなかなか出なかったりします。
すぐに、最初に対応したスタッフのおねえさんに指示を出します。「ロジックボード交換と、念のためSSDの交換」、診断状況の報告についてもいくつか文言の指示を出します。
それで出てきた見積書が、ロジックボード47,100円を無償、128GB SSD 33,500円を無償、ハードウェア修理の技術費3,300円を無償、合計83,900円を90日保障で無償というもの。前回の修理でロジックボード交換されているのは明らかですが、これだけ割り引いてくれたんだという感慨がありました。最後の修理費とはなにかと思ったら、AppleStore店内でパーツを取り寄せて交換するときの料金とのこと。「修理センター送りでいいんですけど」と言ってみたら、「やることは同じですけど、確かめておきたいので」と。修理センター送りにするとどこが悪いのか確認できないから自分の目でしっかり見たいという、エンジニアの性なんでしょう。「仲間だ」と思ったので、「お願いします」ということで、店舗へのパーツ到着を待って交換したのち、一定の負荷テストをすることに。
しばらく日数がかかると思っていたのですが、昨日、4月19日に修理完了のメールが届いたので、本日(水)に受け取ってきた次第。今度も、店内の一般店員はあまり技術に明るくなさそうでしたが、「前回受け取った時にちゃんと起動しなかったので」と言って、きちんと起動し、しばらく問題がないことを自分で確認しました。そのときに、「こちらでも、一定時間電源を入れて、いくつかアプリを使って正しく動作することを確認していますので」という説明がありました。
というわけで、いま、このエントリを書いている間にTimeMachineバックアップを戻し終わったところ。 ネットワーク共有先のドライブの場合どうするかについて、次のエントリに続きます。
ちなみに、なんだかSSDがめちゃくちゃ早いです。これが単に、リカバリ直後だからなのか、
登録:
投稿 (Atom)












