2014年9月20日土曜日

Beaglebone Black Rev.CをMacOS Xでリカバリ


■うっかり■

SDカード上にubuntuを入れていじってみよう、と思ったら間違えてeMMC Flasherを選んでしまったために、今までBeaglebone上で作っていたものが全部消えてしまいました。

まぁ大したものは入っていなかったのですが、初めてnode.jsで書いた「7セグメントLED時計(ちらつきまくり)」のソースなども消えてしまったので、ちょっと悲しい。

ということでリカバリーまでの約2日間のドタバタを記録しておきます。

■その前にうまく行った方法を■

ウダウダと試行錯誤を書いて、最後に「これでうまく行きました」というのは不便なので、最初に出荷当時の状態に戻す方法を書いて起きます。

-Latest Firmware Imagesを落とす。
ここから。http://beagleboard.org/latest-images
BeagleBone Black (eMMC flasher)
Debian (BeagleBone Black - 2GB eMMC) 2014-05-14
※日付などは変わっている可能性もありますが、eMMC flasherの下のDebian BBB用をダウンロードします。時間帯によってはダウンロードに2時間かかったりするので、お出かけ前などにどうぞ。ダウンロードしたら解凍しますが、xzコマンドは標準では入っていないし、面倒なのでThe Unarchiverを使います。

-SDカードに焼く
イメージをSDカードに焼くにはPi Fillerがよく使われるのですが、上のimageはPi Fillerではダメでした(焼くことはできても、BBBに入れてUser Boot起動できない)。

なのでコマンドラインで焼きます。ターミナル.appを起動しSDをセットして
diskutil list
▶これでSDのドライブ名が出てきます。つながってるドライブ全部出てきますが、容量などを参考に判断してください。うちは /dev/disk4 でした。もしマウントされている場合には以下のコマンドでunmoutします。
sudo diskutil unmountDisk /dev/disk4
▶Unmount of all volumes on disk4 was successfulと表示が出ればOKです。では、焼きます。
sudo dd if=BBB-eMMC-flasher-debian-7.5-2014-05-14-2gb.img of=/dev/disk4
▶時計見ていなかったのですが30-60分くらいで終わります。ActiviyMonitorでディスク読み書きを表示させておくと、終わればI/Oが急に落ちるのでわかりやすいですw

-eMMCへのインストール
では、micro SDを取り出してshutdownして通電していないBBBにセットし、user bootスイッチを押したままUSBや電源アダプタを接続します。しばらく押したままにして、Ether近くのLEDが「ナイトライダー状態」(光の点滅が左右に走る)になったらスイッチを離します。

あとはそのまま放置で、朝起きたら電源が落ちて終わっていました。micro SDを抜いてから電源を入れなおすとちゃんと立ち上がりました。

ログインは ssh root@192.168.7.2 です。

■追記:2015-05-09■

内蔵eMMCではなくSDカードにインストールした場合(Flasherでないimageを使います)、以下のコマンドで空きパーティションの容量を使うことができるようになります。
cd /opt/scripts/tools
git pull
./grow_partition.sh
sudo reboot

■設定など■

出荷時と少し変わっているのか、dateで見ると日付設定されていました。買った時には電源入れるたびに設定しなおしが必要だったのですがw もし設定されてない場合は
ntpdate -b -s -u pool.ntp.org
以下のページを参考にしました。なお、ここはBBBに関する宝の山なので、ブックマークしておきましょう:-)
http://derekmolloy.ie/automatically-setting-the-beaglebone-black-time-using-ntp/

あとはいろいろ細かい設定ですが、私はとりあえずheartbeatがウザいので消します。
echo none > /sys/class/leds/beaglebone:green:usr0/trigger
アップデートとアップグレード
apt-get update
apt-get upgrade
ロケール設定、以下のコマンドからAsia/Tokyoを選んでください。
dpkg-reconfigure tzdata
などなど。

Cloud9も http://192.168.7.2:3000/ でちゃんと見えます。良かった良かった。

■ubuntu+cloud9失敗の記■

注意:以下の操作をすると eMMC(内蔵flash)の中身がきれいサッパリ消えます。その点、理解した上で、試してみてください。

-imageのダウンロード
これを使いました。

https://rcn-ee.net/deb/flasher/trusty/BBB-eMMC-flasher-ubuntu-14.04-console-armhf-2014-07-06-2gb.img.xz
例によってThe Unarchiverでxz形式を解凍し、img形式とします。

-SDカードへ
前記と同様の手順でSDカードに焼きます。

-BBBにインストール
前記と同じ手順です。BBBの電源を落としてからSDカードをセットし、user bootスイッチを押しながら電源を入れ、光が左右に流れたらスイッチを離ししばらく放置します。点滅が終わったら、インストール完了です。SD抜いて電源を入れ直します。id=ubuntu, pw=temppwdでログインできます。macのターミナルからだと
ssh ubuntu@192.168.7.2

-うざいHeartbeatが消えない
ubuntuでは
echo none > /sys/class/leds/beaglebone:green:usr0/trigger
とやっても消えません。以下のコマンドでどぞ。
echo none | sudo tee /sys/class/leds/beaglebone\:green\:usr0/trigger 
あとはlocaleの設定やupdate/upgradeなどのお約束。

ここまでは問題ありません。

-Cloud9が起動しない
この辺を参考にして、Python, Node.js, Cloud9をインストールしたのですが、IDEは起動できても実行できなかったりCloud9が落ちたりでダメでした。

・PythonとNode.jsのインストール
apt-get install python
apt-get install build-essential

・Cloud9のインストールと起動
git clone https://github.com/ajaxorg/cloud9.git
cd cloud9
npm install
bin/cloud9.sh -l 0.0.0.0
とりあえずCloud9を動かすのが目的というわけではないので、今回はこれ異常の追求はできません…いつかまた…。

2014年9月18日木曜日

iCloudからGoogle Docsへスプレッドシートを移す(ローテク編)

部品在庫リストw

iCloud上にあるスプレッドシートを開こうとしたら、「iCloudDrive.comへアップグレードしろ。アップグレードするとYosemiteかiOS8じゃないと使えなくなるけどなww」ってお知らせが来ていました。Webは使えますが。

私は自他ともに認める林檎依存症ですが、アップルのこういうところは大嫌い。

というわけで、まだそれほど数も多くないので、さっさとGoogle Docsへ戻ることにしましたが…Web版のNumbersからだとNumbers形式でしかダウンロードできないようで、Google Docsでは読み込めません。

慌てず騒がず

  1. Numbers上の表をコピーする
  2. Google DocsのSpread Sheet上にペーストする
で、移し替えました。数式も書式もコピーされないですが、私はデータ入力用としてしか使っていなかったので問題ありません。

2014年9月17日水曜日

HRM1017でANCS


HRM1017、買った後でGPIOの電流容量が0.5mAしかないと知り、さてどう使ったものか…と考えたままと止まってましたが、使わないのはもっと勿体無いので、とりあえずサンプル動かしたみました。

参考にしたというか丸っきり書いてあることをなぞったのは以下のページ。


ここのページのサンプル「ANCS」を試します。

MacとHRM1017をmini USBで接続し、「BLE_ANCS_SDAPI_IRC」のところにある「import program」をクリックし、mbedのオンラインIDEにインポートします。その際にdeviceとしてNordic nRF51822を選びます。HRM1017も使用可能になっているのですが、このサンプルではdevice.hが見つからない、と言われます。

あとは、サンプルに書いてある通り。iPhoneに着信するとターミナルにメッセージがバラバラ…っと出てきます。めでたしめでたし。

なお、MacでUSBシリアルと通信するには、ターミナル.appを起動し
screen /dev/tty.usbmodem***** 9600
とタイプします。*****のところには5桁ぐらいの数字が入ります。その数字を見つけるには、まずHRM1017を接続していない状態で ls /dev/tty.usb* で一覧表示し、次に接続してからもう一度同じコマンドを繰り返します(カーソルキー上向き↑、returnで繰り返せます)。そこで、接続前と違うポートが出てきたら、それがアナタのHRM1017。

…通常は1つしか出ないですよね。うちはArduinoデジタル時計その他をつないだままなので、バラバラ出てくるのですw

ではでは。

2014年9月16日火曜日

ホームリフロー:放射温度計を使って2回目の挑戦

というわけで、ホームリフローに再挑戦。

前回は、安ホットプレートの温度目盛を信用したら予熱で基板が溶けるという恐ろしい事態に至りました。

6月1日。焦げというか焼死体

で、放射温度計を注文したのですが、いろいろあって入手できたのが8月。でも糞暑い中ベランダで作業するのはイヤなので、ようやく今日になって2回目と相成った次第です。

試すのは、基板もチップもわりと在庫が潤沢で価格も安いNJM11100基板。今度は1608のチップコンデンサも付けます。

作業を始める前に、冷蔵庫からクリームハンダを取り出して常温に戻します。待っている間にホットプレートに何もおかないでスイッチを入れ、どんな感じで温度が上がるか放射温度計を使って様子を見ます。すると160度でも場所によっては軽く250度を越えていく始末。そりゃ焦げるわ。しばらくスイッチを入れたり切ったりして上昇具合を確かめますが、かなり遅れがあり場所による温度差も大きいので、人間インバータとなってこまめにon/offを繰り返さないと温度プロファイルを守るのは難しそうです。ふと「電子立国日本の自叙伝」でゲルマニウム結晶を作るエピソードを思い出しました。

で、基板にハンダを塗ろうとするのですが…何だか前回よりも乾いて固くなっていて、前回よりも更に塗りにくくなっています。もう寿命なんだろうか…。でも、とりあえずICの足に絡めるように塗って、チップコンデンサについてはピンセットで挟むようにして何とか塗りました。明らかに多すぎですが、まぁ試してみるさ。

で、冷めたホットプレートの上に基板を乗せます。


スイッチを入れ、まず130度までそのまま放置、あとはこまめにon/offしながら基板周辺が150度になるよう調整します。

…150度になるとフラックスが溶け始める、とのことですが全然その気配がありませんorz

ので、またスイッチをon/offしながらゆっくり温度をあげていくと、200度を越えたあたりでハンダが光り始めました。220度を越えたところでスイッチを切ると22秒で245度まであがり、そこからブロワで風を送って冷やしたのですが、なかなか温度は下がらず結局1分以上220度を越えてしまいました。大丈夫だろうか。

で、出来上がりがこちら。



はい、コンデンサは見事にイモハンダ、ICは見事に不均衡で見事にブリッジしてますorz

というわけで、リフローに塗り過ぎはいかんという当然の教訓を得て二回目を終えました。後はハンダゴテで直します。直すのに結構苦労しました…そんなら最初からハンダ付けすりゃいいんじゃね?は禁句ですorz



…拡大してみるとコンデンサのイモハンダが直ってないorz

…とりあえず当面のテーマである「あまりお金をかけずにホームリフローを試してみる」という目的は達成できた、ということにします。ホットプレート+クリームハンダ+放射温度計で5-6千円でした。

ということで、次はサンハヤトのキット(接着剤とクリーム半田、それぞれが注射器に入っているヤツ)を試します。どこか店頭で買えれば良いんだけど通販のみ、しかも消費期限が1ヶ月しかないので、なかなかタイミングが難しいです。

2014年9月15日月曜日

自作補聴器への道

■口上■

とりあえず、技術者のハシクレとして、補聴器を作ってみたい。もちろん、親指の頭ぐらいのサイズに15chの適応型デジタルフィルタによるコンプレッサを搭載して米粒みたいな電池で140時間駆動、なんてのは絶対無理す。

なので、サイズと消費電力はとりあえず度外視し、また人の声を強調したり複数のマイクを使って話者以外の方向から来るノイズや風の音をカットする、なんて機能は原理知ってても実装するのに100年ぐらいかかりそうなので保留。

とりあえず「クラシックと落語を快適かつできるだけいい音で聞ける電池駆動補聴器」という路線を目指します。

■とりあえず■

デジタル信号処理についての原理ぐらいは知らないといけない、ってんで、雑誌の特集を読みあさったり、「やる夫で学ぶディジタル信号処理」を少しずつ読んだりしてみたのですが…数学以前のところで止まっている私の脳みそには難しすぎました…。

昔から、とりあえず動かしてみて、動かない時だけ何故動かないか考える、という生き方をしてきたので、先に理論を学ぼうとしてもダメでした。

というわけで、目次など吟味して選んだのがこの一冊


実はPICは苦手というか昔CPUのバグで物凄い回り道をさせられた経験などからあまり好きではなく、最近までMacOSXで開発環境使えなかったので、この本のことは大分前から知りつつも買っていませんでした。

でも、いきなりBlackfinなどに手を出してコケるよりも基板付きで3240円ならキズも少ないし、知らないジャンルに手をだす場合には動くサンプルからスタートして少しずつ改良していく方が理解しやすいので、ともかく買ってみました。

まだ基板は綴じ込んだまま読んでいるだけですが、あまり数式が出てこないので大変わかりやすいです(ああ自分で書いてて情けない)。フーリエ変換が何で動くのか、ようやく心の底から理解できたような気がするw

そんなこんなで、まだフィルタ1つ作っていないのですが…始めました。

2014年9月13日土曜日

MetaWare : iBeacon

当初動いていたMetaWareのiBeacon機能を先日試したらまた動かなくなってしまいまして。アップデータ入れたせいかな…そのうち何か知らせが来るだろう、と放置してました。

が、今、何気なくiBeacon検出アプリを立ち上げてみたら、いきなりRange:Nearと表示されました。あれ、アプリックスのやつ電池入れっぱなしだったかな?と思いつつ、MetaWareにiPhoneを近づけてみたらRange:immediateに。

原因わかりました。MetaWare制御アプリとconnectしている最中はiBeacon止まってるんですね…。そういうもんなのでしょうか。


…「写真もう少し大きい方が見栄え良いんじゃない?」と言われたのですが、拡大してみたら埃が物凄いのでやめてましたorz

2014年9月12日金曜日

Chilkat Softwareさんのftp2ライブラリ for iOS objective-c

まぁ、いろいろあって、iPad用に急遽日本語エンコーディングを明示的に指定できるライブラリが必要になった次第です。

以前から目をつけていたのはChilkat Softwareさんのライブラリ。まぁ通信系のライブラリを探していてこのバナーを見たことのあるヒトは少なくないのでは。


当該プロジェクトでも当初コレを使おうと提案していたのですが、当時はsftpを使う予定でSecureな部分が輸出規制にひっかかるためボツになったという経緯がありました。

で、今回背に腹は変えられず、ともかく動作確認のためのプロジェクトを作ってみました。

■評価版ライセンス■

static libraryの形で配布されており、30日間、シミュレータ上でだけ動作させることができます。

このページからダウンロードリファレンスなどへ飛べます。とりあえずはリファレンスObjective-C FTP Examplesのページを見るのが一番手っ取り早いと思います。

■リファレンスをざっと見る■

よくある通信系ライブラリと同様、まず処理のためのインスタンスを作り、そこにメッセージを送っていくというタイプです。Propertiesを眺めていくと、ftpってこんなに色々あるんかいwってぐらい機能が沢山あります。

今回問題になったencodingに関しても、CommandCharsetとDirListCharset propertyがあります。ディレクトリ作成などに作用するCommandCharsetにansi, SJIS, UTF8などを代入すれば、FEATでサーバと相談した上で適切なエンコーディングを実施してくれます。lsでディレクトリを取ってくる場合のencodingはDirListCharsetを使います。

ftp.CommandCharset = @"SJIS";
ftp.DirListCharset = @"SJIS";
NSString *xml = [ftp GetXmlDirListing:@"*.jpg"];
if  (xml == nil) {
    // エラー処理
}

って感じです。ディレクト作成やget/putなどに関しては、予めカレントディレクトリを設定してから操作することも、フルパスで指定することもできます。今回は同期しか試しませんでしたが、非同期も用意されています(何でもかんでも非同期にしてしまうのではなく、getfile/putfileが対象…かな? AcyncGetFileStart/AsyncPutFileStart)。

■動かして見る■

例によってロクにドキュメントも読ますに、「ダウンロードしてきたライブラリをプロジェクトにドラッグ&ドロップすりゃ動くだろw」とやっていたら案の定ハマりました。

上のライセンス条項に「シミュレータ上でだけ」とあります。つまり評価版として使えるのはi386 static libraryだけなのでプロジェクトにドラッグ&ドロップするのは「cpp_include」「include」「lib/i386」だけにします。TARGETS > Build Settings > Architectures > Valid Architecturesには「i386」だけ設定します。

なお、プロジェクトへのライブラリのドラッグ&ドロップで試行錯誤してたら、Linkerへのpathにゴミが溜まってwarningの嵐になったりしますのでご注意を。ライブラリを一旦削除してもpathの設定がそのまま残っちゃうんですよね。

今回評価目的だったので使いませんでしたが、ダウンロードしたファイルには各バイナリ向けを1つに束ねたunivarsal static libraryにするためのshスクリプトも付属しています(リンク先の5)。コマンドライン一発でエラーもでません。

【追記】その他、c++を通すための設定が必要なのですが、サポートページにも書いてあるようにダミーのcppクラスを追加するのが一番手っ取り早いです。File▶New...▶File...▶iOS/C and C++▶C++ Classあとは「DummyClassForChilkat」など適当な名前を付けて保存します。

あとはコードを書いて動かすだけ。API名やエラー戻り値もすっきりしていて、サクサク書けます。余談ですが、API名に美しい規則性と論理性があると書いてて指が止まらないよね。好きなライブラリです。

今のところ私が個人でこのライブラリを使う予定はないのですが、何か通信系の案件が立ち上がったら真っ先にこれ使います。

ちゃんとしたftpサーバが相手なら、AppleのSimpleFTPSampleでも使われているCFFTPStream系でも用が足りるんですけどね…。あー疲れた。MetaWareとかで遊んで疲れを癒やしたい。

MetaWareをJack-inする電脳たれぱんだ

■余談ですが■

今週の水曜日が最終出社日だったんですが、本番サーバでのエンコーディング問題が発覚したのが先週木曜日。それから怒涛の日々だった。水曜日の午後から退職前の有給休暇消化期間だったけど、「それなに?美味しいの?」状態。PMのYさんがいい人なので、とりあえず今週は無報酬でお手伝いするって伝えたんですが…しんどかった。

ちなみに会社都合で有給休暇を取り消して作業させた場合には、休日出勤とみなされて6割増し以上の賃金を支払う義務があるんですよね(苦笑)。