SyntaxHighlighter

2016年6月30日木曜日

LUA_RUN_SCRIPTが動かない時の切り分け方

※本情報は、参考のために残しており、古い情報を含みます。
 現在主に更新しているのはwikiですので、最新の情報はwikiを参照してください。

---

FlashAirのLuaスクリプト実行機能に、
起動時に実行する"LUA_RUN_SCRIPT"という設定がありますが、これが結構クセモノです。

なにがクセモノかというと、スクリプトでエラーが起きたことを知る手段がありません。
それだけなのですが、それが本当に致命的。文法エラーひとつわからない。

ので、そんな時の切り分け方を以下に記します。

0. ファームウェアバージョンを確認する
 CONFIGファイルのVERSIONを確認してください。
末端がW3.00.00の場合は古いバージョンですので、ファームウェアアップデートをしてください。
Luaスクリプトの実行に関していくつものバグが有ります。

1. ブラウザから実行できるか確認する
 起動時に動くスクリプトなら、ブラウザからも実行できるはずです。
公式チュートリアルだとなぜか、一番最初にやることが起動時に実行になってますが、
正直ハマります。まずはブラウザからLuaスクリプトを叩いて実行できるか確認しましょう。
それで実行できないものはそもそも起動時にも実行できません。
FlashAirでは、実行エラーは出力なしのだんまりになります。

ちなみに、手前味噌ですが、FlashTools Lua EditorのDebug機能を使うと、
具体的に何のエラーが起きているのか知ることができます。

2. CONFIGの記述ミスをしていないか確認する。
 スペルミスをしていませんか?
最終行を空行にしていますか?

3. ファイル書き込みの場合: 差し込んで、10秒待って抜いて、また差し込んでみる
 ファイルはブラウザ上ではリアルタイムに更新されますが、
PCなどからは確認できないことが多いです。
というのも、差込時に読み出し、その後の変化は知らんぷりなためです。
なので、実行が終わった辺りで差し込み直すといいでしょう。
ちなみに、LUA_RUN_SCRIPTは暴走防止等で、起動から実行まで最低5秒くらい待たされます。

4. 通信系の場合: スクリプトの頭に30秒~60秒くらいの待ち時間を入れてみる
 割と見落としがちなのですが、LUA_RUN_SCRIPTはWi-Fi接続が確立する前から
実行が始まります。ので、スクリプト起動後すぐにfa.requestなどの通信をしようとしても、
どうやってもうまく行きません。
ブラウザでは動くのに起動時に動かないの大抵はこれです。

おまけ. fa.pioを叩きまくるとホスト機器と通信不能になります。
 スクリプト内でfa.pioをループで叩き続ける場合は、必ず成功可否をチェックし、
(少なくともスクリプトの頭でチェックし)失敗している場合は無理に叩き続けないようにしましょう。
起動猶予時間を使えば脱出は可能ですが、半分文鎮みたいになります。


参考になれば幸いです。

ほかいろいろ
https://sites.google.com/site/gpsnmeajp/electricmemo/flashair

あわせてこちらもどうぞ。
FlashAirからfa.requestを投げる時の注意
FlashAirでLuaスクリプトを組む時のコツ
fa.spiの挙動(秋月 FlashAir DIP IOボードキットでfa.spiが動かない問題)
#FlashAir をいじっている記録
FlashAir上でLuaスクリプトのエラーを表示する

おすすめ
FlashTools Lua Editor (FTLE)

2016年6月25日土曜日

FlashAirのレジスタから時刻を得る


libFlashTimeでは、現在時刻の取得にファイル書き込みをして、
その更新日時を取り出すということをしていた。

当然、フラッシュに書き込みが発生するので、寿命が縮む。

しかし、最近更新されたFlashAir開発者サイトのレジスタマップを確認すると、
ReadStatusRegで取り出せる情報の中にDate,Timeがあることに気づいた。

ので実装。

DL = string.sub(fa.ReadStatusReg(),225,226)
DH = string.sub(fa.ReadStatusReg(),227,228)
TL = string.sub(fa.ReadStatusReg(),229,230)
TH = string.sub(fa.ReadStatusReg(),231,232)
z = tonumber(DH..DL..TH..TL,16)
Year,Month,Day,Hour,min,sec = t.GetLocalTimeFromFATtime(z);
print("RegTime "..Year.."/"..Month.."/"..Day.." "..Hour..":"..min..":"..sec.."");

これで、フラッシュに書き込むこと無く、時刻を取得できる。

おわり。
後々、libFlashTimeに関数として実装する予定。

2016年6月24日金曜日

PebbleのアプリをC言語とPebble.jsで開発する時の違い

スマートウォッチのPebbleを便利にしているのは、通知機能とアプリである。
アプリはストアで配布されているが、自分好みのものがないということはよくあることだ。

開発環境はCLOUDPEBBLEを使えば何の問題もない。

オフラインで開発しようとすると、Linux仮想マシンにSDKを導入する必要があるが、
CLOUDPEBBLEを使えばオンラインで、Webブラウザ上で全てが完結する。
コンパイルも、エミュレータも、Pebbleへの転送もだ。

スマートフォンのPebbleアプリに、Developer機能が付いているので、
同じPebbleアカウントでログインしていれば、
クリックひとつでコンパイルされたアプリが手元のPebbleに自動でインストールされる。

ところで、問題がひとつ。
Pebbleのアプリを書く手段というのは、3種類ある。

・C言語で開発する
・Simply.jsで開発する
・Pebble.jsで開発する

の3種類だ。
この3種類の違いが個人的にわかりにくくて困ったので、メモをしておく。


・C言語で開発する
Pebbleにおける標準的な開発方法だ。
すべての機能を活かすのなら、これを使うしか無い。
文字盤(ウォッチフェイス)を作成できるのもこれしかない。

ウォッチフェイスのサンプルデータはここにある。

プログラムの実行速度は高速で、
使える機能は多く、
そして、省電力でもある。

また、一度インストールが済まされていれば、
スマートフォンと切断されていても(機内モードでも)アプリは動作する。

問題があるとするなら、C言語なので面倒が多いことだ。
配慮はされていて作りやすいが、割りと手間がかかる。

特に、スマートフォンアプリとの通信PebbleKitや
Pebbleアプリに読み込ませたJavaScriptのPebbleKitJSと通信するあたりが、
ちょっと面倒なように思う。

外部(サーバーなど)との通信もPebbleKitか、PebbleKitJSを経由する必要がある。


・Simply.jsで開発する
C言語での開発が面倒なので作成された「アプリ」である。
アプリの設定画面からURLを指定すると、
そのURLの先のJavaScriptを読み込んで実行する。

画像表示などの機能が使えないが、
UI機能は概ね使えるし、通信もajaxで簡単。

しかし、あくまで他人のアプリの上で動く。


・Pebble.jsで開発する
Simply.jsを単体のアプリ化したものである。
公式機能のため、画像表示機能が使え、その他多くの機能が使えるが、
一部使えない機能があるようだ。

Simply.jsもそうなのだが、実体はPebble上にはなく、スマートフォン上のPebbleアプリで動く。
Pebble上にインストールされるアプリは、実質クライアントである。

どういうUIを表示するか、どういうアクションをするかは、
PebbleがBluetooth経由でスマートフォンに問い合わせ、
スマートフォン上のJavaScriptが返答、それをPebbleが表示、という仕組みになる。

ので、
 ・省電力ではない
 ・スマートフォンと切断されている状態では使えない
 ・ウォッチフェイスが作れない
 ・レスポンスが悪い
 ・まだベータ版
 ・たぶんストアでまだ配布できない?
という、一見利点がないように思えるが、

Pebble上のアプリとしては完成品で、それをJSから操作する形になるため、
 ・Cのように機種別に作り分ける必要が(あんまり)ない
 ・かなり手軽にアプリが組める
 ・ajaxを用いてかなり容易に外部と通信できる
 ・C言語の面倒臭さがない
という大きな利点がある。

こんなのが作れる。


・結論
省電力で作りたい、ウォッチフェイス作りたい、
単体で動いて欲しい、レスポンスがいいのがいい、
ばりばりアニメーション/ゲーム作りたい、
という場合には、ネイティブC言語開発。

スマートウォッチらしく、スマホとつながっている時だけ動けばいい、
ネットから情報を取り出したい、送りたい、
とりあえず動けばいい、
という場合には、Pebble.jsがおすすめ。
もちろんのこと、Cでできないことはないです。







2016年6月19日日曜日

コスプレーヤーの衣装用電飾基板を作成した

とある知人のコスプレーヤーに「色が変えられて、RGBのLEDが30個くらい駆動できる
(全部同じ色でいい)イルミネーション基板がほしい」と言われたので、
ささっと作った記録を上げておく。

わりと検索しても出てこないので。



要件
・RGB-LED x30 = (20mA x3=) 60mA x 30 = 1.8A(各ch 600mA)の制御に耐えられるようにする。
・電源を別に背負うのも、電池というのもあれなので、モバイルバッテリー供給とする。
・簡単にプログラムがいじれるようにArduino Nano(依頼者のもの)を使用する。
・ボタン2つで色が変えられるようにする。
・デバッグが容易なように、基板上にスイッチとモニタ用LEDを付けておく。
・保護回路は省略。モバイルバッテリーの保護頼みである。

工夫
・MOS-FETでLEDを駆動するため、電源が許す限りかなりの量をつけられる。
 (正直オーバースペックだったと思う)
・電源分離用のジャンパを付けてあるため、マイコンの電源がLEDに振られてリセットされるようなら
 Arduino Nanoに付いているUSBコネクタから別途電源供給することで動かせるようにしている。
・LEDのパターンは色相を回すことにした。一番実装が楽だったので。
・Arduinoの浮動小数点演算は割と酷く遅くはないことがわかった。
・PWM出力複数付いているのは本当にいいことだと思う。


回路図

部品表

品名 単価 数量 小計 URL
角型フルカラーLED OSTA71A1D-A アノードコモン (10個入) 450 4 1800 http://akizukidenshi.com/catalog/g/gI-01444/
NchパワーMOSFET 2SK2232(60V25A) 100 5 500 http://akizukidenshi.com/catalog/g/gI-02414/
基板取付用USBコネクタ(Bタイプ メス) 50 2 100 http://akizukidenshi.com/catalog/g/gC-00161/
ピンヘッダ (オスL型) 1×40 (40P) 50 1 50 http://akizukidenshi.com/catalog/g/gC-01627/
分割ロングピンソケット 1x42 (42P) 80 1 80 http://akizukidenshi.com/catalog/g/gC-05779/
タクトスイッチ(黒色) 10 8 80 http://akizukidenshi.com/catalog/g/gP-03647/
絶縁ラジアルリード型積層セラミックコンデンサー0.1μF50V2.54mm(10個入) 100 1 100 http://akizukidenshi.com/catalog/g/gP-00090/
電解コンデンサー10μF50V85℃ (ルビコンPK) 10 3 30 http://akizukidenshi.com/catalog/g/gP-03116/
カーボン抵抗(炭素皮膜抵抗) 1/4W 1kΩ (100本入) 100 1 100 http://akizukidenshi.com/catalog/g/gR-25102/
カーボン抵抗(炭素皮膜抵抗) 1/4W 100Ω (100本入) 100 1 100 http://akizukidenshi.com/catalog/g/gR-25101/
カーボン抵抗(炭素皮膜抵抗) 1/4W 180Ω (100本入) 100 1 100 http://akizukidenshi.com/catalog/g/gR-25181/
カーボン抵抗(炭素皮膜抵抗) 1/4W 220Ω (100本入) 100 1 100 http://akizukidenshi.com/catalog/g/gR-25221/
Arduino Nano 0 在庫品を利用
送料 500
合計 3640


操作方法
スイッチA短押し カラーパターン インクリメント
スイッチB短押し カラーパターン デクリメント
スイッチA長押し 常時点灯・点滅切り替え
スイッチB長押し 消灯切り替え
スイッチAB長押し 設定リセット

カラーパターンはEEPROMに記録され、次回起動時も再現される。


プログラム
※表示されない場合は少し待ってください。それでもダメな場合はリロード



・後記
作ってから気づいたが、

エーモン RGBカラー LEDコントローラー 1854 エーモン工業 (amonkogyo) https://www.amazon.co.jp/dp/B00EXGS9FK/ref=cm_sw_r_tw_dp_q.HzxbDBYD8C6
に機能が似ている。
もっとも、こちらは点滅もしなければ、点滅パターンの調整やカスタマイズも効かない。

12Vの電源が用意でき、各chのLED駆動電流が500mAまでに収まり、
かつ点滅が不要ならば、こちらを買うと完成品が1200円程度で済むので、
そちらがおすすめである。

2016年6月3日金曜日

Windows10にしたらやたら音飛びするときに軽減する方法

Windows8.1までは問題なかったのに、Windows10にしたらやたら音飛びするときに軽減する方法。

ほとんどこのページの引き写しですが。
https://wp.bmemo.pw/128

LatencyMonおよび、DPC Latency Checkerを入れてチェックしてみる。
たいてい、音が飛ぶ瞬間に赤色になるはず。

解決方法としては、デバイスマネージャから、デバイスを片っ端からオンライン更新を書けた。
Realtekのオーディオ、LAN関係や、Intelの色々が更新された。

追加で、無駄に色々入っていたイーサネット関係を、1つを残して無効化。
これで少しましになったきはするが、平均値は高いままだ。

どこかに問題があるのであろう雰囲気はする。
Win8.1では問題なかったのだがなぁ...