1.ACT LED の点滅動作を別のポートに割り当てる方法
(下記リンク先 Raspberrypi.orgのForumにある「Act Led GPIO」のスレッドから抜粋)
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=100219
config.txt に 次の行を追加する。
dtparam=act_led_gpio=xx
xxはACT LEDとして使用したいBCMポート番号を指定する。(カーネルバージョンによっては変更できないことがある模様)
ボードをケースに入れた状態でも外付けLEDでACT状態が確認できるようになる。
ポートの切り替えは電源オンの数秒後から行われ、シャットダウン時は電源オフの数秒前まで維持される。
切り替えたポートはPythonなどの制御プログラムでも点滅制御が可能なので、
起動/終了時はACT状態表示、その後、別スクリプト内で ACT LED の
trigger (sys/class/leds/led0/trigger) を none (sudo echo none) に変更し、
任意のプロセスの起動/停止表示に使用するなどの変則的な使い方が可能。
①XBeeを取り付ける前にArduinoに空のスケッチを書き込んでおく。
②ArduinoをPCから取り外し、XBeeをシールドに取り付け、シールド上のSERIAL SELECTスイッチをUSB側にしてからPCと再接続する。
③XCTU(6.0.0以上)を起動する。
④Add a radio module をクリックし、Arduinoを接続したCOMポートの選択と通信設定を行う。
⑤Arduinoのリセットスイッチを押したままAdd a radio moduleのFinishをクリックする。
⑥XBeeが認識され、Radio Module欄に該当のXBeeが表示されたらArduinoのリセットスイッチを放す。
以上。
なお、Programmable XBeeは上記手順では接続できないため、他の接続用デバイスを使用すること。
上記の手順でも認識されない場合は、シールド上のSERIAL SELECTスイッチの接触不良の可能性も考慮に入れて原因を調査すること。
(私の所有しているシールドでは何度か接触不良が発生している)
Raspberry Pi2 を Blynk でコントロールする場合のメモ(全バージョン共通かは不明)
1.Raspberry Pi2 側のソースファイルは /blynk-library/linux のmain.cppであり、
独自のDIOピン設定などを加える場合には、main.cppを編集し、makeすればよい。
main.cppにはwiringPiの関数(pinMode(), digitalRead() など)をそのまま使用できる。
DIOを設定する際のDIOピン番号はBroadcom GPIO ピン番号で指定すればよい。
(I2C通信、PWMなどのDIO以外の機能については未確認)
※2015/11/24 追記 I2Cライブラリ関数が使用できることを確認。
2.Raspberry Pi2用のLEDウィジェットを点灯表示させるには、main.cppのmain関数内で
Blynk.virtualWrite( 0, 255);
のように、第1引数にスマホ側のプロジェクトでLEDウィジェットのINPUTに設定したV番号(上の記述例ではV0)を、
第2引数に255をセットすればよい。(実際は0~255の数値で明るさの階調を指定できる)
3.Blynk.virtualWrite()関数を加えてmakeした実行ファイルを実行すると
Trouble detected: http://tiny.cc/blynk-bug#flood
というエラーが発生することがある。この場合はmainのwhileループにdelay()関数で
待機時間を設定すればよい。ただしdelayが長すぎると応答性が悪化するため注意が必要。
(公式サイトに記載あり)
4. 3のエラーを回避する方法として、応答性を悪化させないために
wiringPiのmillis()関数で実行時間の経過によるタイマ処理を行う方法を提案する。
大雑把 に 記述例を示す。
int main(){
// 省略
unsigned int current_time, prev_time;
current_time = prev_time = millis();
// 省略
while(true){
current_time = millis();
if( (current_time - prev_time) >= 1000){ // タイマ周期として1000msec指定
prev_time = current_time;
// 周期的な処理。
// 入力チェックとチェック結果のBlynk.virtualWrite()による表示処理など
}
Blynk.run();
}
return 0;
}
タイマ周期を小さく設定しても、実際の実行周期は1000msec程度が限界のようなので
高速な処理には適さないが、delay()を使うよりもスマホで設定したBUTTONの応答性が悪化しない利点がある。
millis()関数についてはwiringPi公式サイトを参照すること。
ArduinoのSDライブラリ関数でFlashAir W-02(STAモード)にアクセスする場合、
FlashAir内の内容変更を伴わない動作(読み出し、ファイル有無確認など)を行うとWi-Fi接続できなくなる。
内容の変更(空白以外の書き込み、ファイル作成など)を行うと接続できるようになる。
STA以外のモードやW-03では未確認。
XModemによるプログラム転送が途中でタイムアウトする場合の対処方法。
ブートメニューで"t"を押すたびにタイムアウト設定時間が0→1→2→・・・→9→0とループで切り換えられるので、
設定時間を長めに変更してから転送すること。