レビューメディア「ジグソー」

無線キーボード完成

----------------------------------------------------------------------------------------------------
■はじめに
----------------------------------------------------------------------------------------------------
スペックを見たときは400MHzのPentium相当ということで、かなりのパフォーマンスを期待していました。その期待はどうだったでしょうか。

Arduino用シールドを接続して感じたところはArduinoユーザをLinuxの世界へ導く、Linuxユーザの機器制御の世界への扉になるという両面を持ったボードというところです。Arduinoのつもりで対するとタイミングが取り辛かったり割り込みが使えなかったり、シールド(拡張ボード)用のソフトがそのままでは使えかったりと癖もあるようです。
私のようなArduino互換を期待してしまってレビューに取り組んだ人の顛末はどうなったのでしょうか。逆の視点からのアプローチとしてLinuxを取り込んだArduinoとしてはどうでしょうか?レビューを計画から作業を始めてこの観点がなかったなぁと感じています。再計画できるなら盛り込みたいところであります。

裏のテーマとして、
このレビューを読んでやる気が出てしまった人が無駄な時間を費やさないように新しいことに挑戦してもらえるようにしたいので、失敗したことを記録に残そうと思います。読み物としても笑いのネタになれば幸いです。

設定した期限になりましたので、まとめを書きました。
一部まだできていない部分がありますので引き続き開発は進めていきます。
質問がありましたら遠慮なくどうぞ。

----------------------------------------------------------------------------------------------------
□レビュー計画
----------------------------------------------------------------------------------------------------
 ■1.環境構築
 ■2.動作確認
 ■3.レビュー課題
 ■4.プロクラム作成
 ■5.複数制御には表示も必要
 ■6.有線で制御
 ■7.無線化
 □8.フィールドテスト
 ■9.まとめ

----------------------------------------------------------------------------------------------------
■1.環境構築
----------------------------------------------------------------------------------------------------
最初にやることとして、環境構築をタイトルにしていますが、「環境構築」ってなに?という方もいらっしゃるでしょう。
開発環境にはプログラムの大本になるプログラムソースを入力するテキストエディタ、プログラムソースから実行ファイルを作成するコンパイラ、プログラムをGallileoに書き込むライター(ローダといった方がいいかも)があります。Galileoの場合それらがセットになった統合環境(以後IDE)が用意されています。そのIDEがArduino1.5.3というソフトになります。

・ダウンロード
まずはIDEを入手します。インテルのGalileo概要サイトのダウンロード・センターから自分のPCのOSに合ったソフトウェアを入手します。私の場合、Windows8の入ったPCとLinuxMint16を入れたPCがありますので、それぞれのOSにダウンロードしました。

・Windowsの場合
Windows 8 Pro のVAIO Pro 11 red editonに入れてみます。

適当なフォルダにダウンロードした後、展開します。CドライブのルートにGalileoフォルダを作って入れました。arduinoのアイコンをクリックして起動します。

一番簡単なサンプルのスケッチ「01.Basics」「Blink」を開きます。スケッチとはArduinoのプログラムのことです。

「検証」します。ここでコンパイルします。

「マイコンボードに書き込み」を行います。このタイミングでもコンパイルするようです。上には「マイコンボード画の書き込みが完了しました。」と出ていますが、/dev/ttyS0 がないとうエラーメッセージが出ています。これはUnix系のデバイスファイルのようで書き込めないようです。
書き込みにはUSB経由でGalileoと通信を行いますので、通信関連のドライバだと思われます。

「デバイスマネージャー」を見てみると、「ほかのデバイス」に「?」マークがついてて何かが要るようですので、「ドライバーソフトウェアの更新」をしてみます。
検索時間を縮めるためC:\Galileo 以下を指定します。

COMポートのデバイスソフトウェアが見つかるのでインストールします。

今度はうまく書き込めたようです。

これでWindowsの環境はできたようです。

【失敗その1】
このことは、Galileo_GettingStarted_329685_005.pdfの5ページに書いてありました。ちょっと回り道をしてしまいました。英語だけど説明書は一通り読みましょう。(^^;
Windows8@VAIO Pro 11 rededition
Windows8@VAIO Pro 11 rededition


・Linuxの場合
LinuxMint16のVAIO X11(Atom 2GHz)に入れてみます。

適当なフォルダに展開します。

「端末」ソフトを起動してArduino -1.5.3フォルダをカレントにして、sudo ./arduinoで起動します。なぜ、sudo を付けるかと言いますと、これなしでは、起動したArduinoでシリアルポートが選択できませんでした。
起動したら、メニューから
 ツール > マイコンボード > Intel®Galileo
 ツール > シリアルポート > /dev/ttyACM0
と、ボードとポートを指定します。
私のPCでは ttyACM0 は時々 ttyACM1 や ttyACM2 になることもあります。

これでLinuxMint16の開発環境ができました。

/dev/ttyACM0が見えないときは、Galileo_GettingStarted_329685_005.pdfの6ページを参考に/etc/udev/rules/50-arduino.rulesを設定しましょう。
説明書を先に読んでいたので、ここでは躓きませんでした。(^^)v
LinuxMint16@VAIO X11
LinuxMint16@VAIO X11

・ファームウェアアップデート
Galileo_GettingStarted_329685_005.pdfを読んでいくと、ファームウェアは最新にしておくようにありましたので、やってみます。

メニューから、ヘルプ > Firmware Update を選びます。確認には「はい」「はい」と応えます。

5分近く待てとの出ますので辛抱強く待ちます。

ファームウェアをアップデートしていないとmicroSDカードに書き込んだLinuxを起動させることができないそうです。

----------------------------------------------------------------------------------------------------
■2.動作確認
----------------------------------------------------------------------------------------------------
・サンプルで確認
前述のサンプルのスケッチ「01.Basics」「Blink」を実行して動作確認をします。GPIOの13は基板上のLEDにも接続してありますので、工作はしなくても大丈夫です。下の動画では、GRANDとGPIO13にLEDを直接グサッと挿しているでしょ。LEDを直結で点灯できるので工作が非常に楽になることもわかりました。


・プログラム
IDEを起動すると、setupとloopという関数が記述済みのソーステンプレートになっています。イベント処理を記述するWindowsのプログラムでは馴染がないかもしれませんが、これが組み込みプログラムでは基本形となります。
setupでピンの機能選択や出力の初期値を設定します。loopは入力→判断→出力→タイミング取りを1セットでプログラムを回します。

ピンの設定はpinMode関数で行います。ピン番号と入出力方向を引数で渡します。setup関数内に記述します。出力は、digitalWrite関数で行います。ピン番号とHIGH/LOWの状態を引数で渡します。こちらはsetup関数とloop関数内に記述します。

・配線
サンプルプログラムを実行するときの配線はSketchTutorials.zip に説明と画がありますので確認が簡単にできます。

・GPIO6~13で7セグメントLEDで確認
接続数を増やして7セグメントLEDを点けてみます。Arduinoでは設定や出力が1ピンずつになってしまうので記述に手間がかかります。1つずつ設定しても時間差が出るほどではありませんでした。


・A0のアナログ入力確認
もう少し遊んでみましょう。入力を追加して、部屋の明るさをCdSで電圧に変換して表示を変えてみます。表示は上記の7セグメントLEDを流用しました。
【失敗その2】
部品配置は上段と下段は入れ替えた方が見やすかったです。ブレッドボードなので配線としては小さな失敗ですが、動画をアップロードした後気づきました。これは痛かった。


・microSDカードから起動
本体内蔵のLinuxは起動が速いのですが、機能が少ないのと、電源を切るとスケッチが消えるという弱点があります。これはスタンドアローンで運用するには問題です。SDカード向けのLinuxを使うとスケッチがSDカードに保存されて、起動時に実行されるようになるそうです。
インテル® Galileo ソフトウェア・パッケージ のダウンロードセンターから LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5.7z を入手します。圧縮されているのを展開してSDカードに書き込みます。特別な書き込み方は不要です。ファイルをコピーするだけです。これはUEFIの恩恵だということを後で知りました。
下の動画で、P-ONしてSDカードのアクセスランプが点滅して読み込まれた後、LED点滅のスケッチが実行されているのがお分かりでしょう。


 ○ Gigastone 8GB class 4
 ○ Lexar HIGH-SPEED 32GB class 10
 ○ PQI 4GB class 4
 ○ SiliconPower 4GB class 10
 ○ SiliconPower 4GB class 4
 ○ SONY 2GB 不明(スマホに入っていた)
 ○ TOSHIBA 32GB class 10
 ○ Transcend 4GB class 10
で起動できることを確認しました。
作業のどこかで壊れた?起動できなかったmicroSDカードです。
 × Kingstone 8GB class 4
 × Lexar 8GB class 6

【失敗その3】
上のmicroSDカードをご覧になって「何故、こんなにたくさん調べたの?」と思った方もいらっしゃるでしょう。当初は、起動できなかったのです。microSDカードとの相性が噂になりましたので、いろいろ試した結果この数になりました。
結局、起動が確認できたのはGalileoを交換してもらったからなのです。電源がが入ったまま部品交換をして何度かGalileo上に落としたので壊したと思われます。猛反省しています。

【失敗その4】
どこに書こうかと迷いましたが、3.に行く前に書いておきます。
ArduinoのIDEでメニューの ライブラリを使用 > ライブラリをインストール を選択してごにょごにょしていたら、\libraries\libraries\...\libraries\... とフォルダが無限にできてしまいました。(実際は無限かどうかわかりません)IDEも起動できなくなってしまって、プログラムを書いてる場合じゃないぞっと、蒼ざめました。
Cygwinをインストールして rm -r コマンドで消すことができました。-r オプションは怖いので普段は使わないようにしていましたがこういう時ばかりはしょうがないです。

arduino-1.5.3\hardware\tools\x86 を覗いてみると i586-poky-linux-uclibc と i686-pokysdk-mingw32 というフォルダがあります。名前からするとi686-pokysdk-mingw32が開発環境でi586-poky-linux-uclibcがGalileoのOSではないかと思われます。mingw32とは何かと調べてみますと、先日お世話になったCygwinの派生のようです。
Galileo用のソフトウェア開発はクロスのようで、実はセルフなのかもしれませんね。

----------------------------------------------------------------------------------------------------
■3.レビュー課題
----------------------------------------------------------------------------------------------------
操作確認は終わりました。自分が提案した課題に取り組みましょう!
で、何作るの?出来てからのお楽しみと言いたいところなのですが、

私は天体写真を趣味にしています。中でも難しいのは出現がわからない流星です。常時撮影していたいのですが、カメラ一台では撮影後フラッシュメモリへの書き込み中は撮影できません。このタイミングで流星が出現したときは記録できません。そこで、2台以上でブランクを相互に穴埋めする作戦を考えました。人が操作するとなると空を見れなかったり眠かったりでかなり辛いので、Galileoに複数のカメラを独立して制御してもらおうと考えました。今回の課題は、「マルチカメラコントローラ」です。2台でもよいところを、異機種も試してみたかったので3台の制御を目指してみました。果たして、もれなく流星を捉えることはできるのでしょうか。

制御対象のカメラはこれにしました。


----------------------------------------------------------------------------------------------------
■4.プログラム作成
----------------------------------------------------------------------------------------------------
組み込みソフトは、ものを扱うので結構オブジェクト指向の言語向きだと思います。ArduinoはC言語ライクと紹介されることが多いように見えますが、C++言語が使えます。

ここでは、秒数を設定してカメラのシャッターをコントロールする高機能なニコンMC-36リモートコードに倣って開始ディレイ、時間、インターバル、繰り返しを設定できるようにします。
赤外線、有線リモコンの両方に対応するため、シャッターの開始と終了の動作の違いに対応します。赤外線リモコンはシャッターを開けるときと占めるときに発光します。有線リモコンはシャッターを開けてから閉めるまで通電します。
Galileoの出力としてはこんな感じの期待します。
・t1:赤外線リモコン
  _____|~|_____|~|_____|~|_____|~|_____|~|_____|~|_
・t2:赤外線リモコン
  _____________|~|_____|~|_____|~|_____|~|_____|~|_
・t3:有線リモコン
  _____|~~~~~~~|______|~~~~~~~|_____|~~~~~~~|_

あまり意味がないかもしれませんがプログラムソースの一部を紹介します。
--------------------------------------------------
//----------
//GPIO制御用(LEDで確認用)
//----------
class outPin
{
private:
int p_Number;
public:
int assign(int port); //ポートに割り当て
char Write(int value); //ポート出力
};
//----------
//リモコン
//----------
class Remocon : public outPin
{
private:
int r_type; //リモコンのタイプ
int shutter; //シャッター状態
int timer; //発光時間制御用タイマー
public:
Remocon();
void set_type(int type); //リモコンタイプを選択
void release_on(); //レリーズON(シャッター開)
void release_off(); //レリーズOFF(シャッター閉)
void countdown(); //出力時間制御用
};
//----------
//タイマー
//----------
class Timer : public Remocon
{
private:
int m_Exec; //実行モード
int m_Count; //カウンタのモード
int repeat; //繰り返し回数
int timer; // カウント用タイマー
int r_init; //繰り返し初期値
int t_init[C_INTERVAL+1]; //タイマー初期値
public:
Timer();
void initialize(); //初期化
void stop(); //停止
void pause(); //一時停止
void start(); //開始
void countdown(); //カウントアップ
};
--------------------------------------------------
各オブジェクトは、入れ子にしていますが、outPinは分離した方がいいかもれません。
完成したら載せるかもしれませんが、長くなってしまうので、定数定義とメンバ関数の実装は省略しています。
--------------------------------------------------
//制御オブジェクトを定義
Timer t0;
Timer t1;
Timer t2;
Timer t3;

// the setup routine runs once when you press reset:
void setup() {
//ピンを割り当て
t0.assign(13); //動作確認のための1秒周期の点滅
t1.assign(12);
t2.assign(11);
t3.assign(10);
t1.set_type(RT_WLESS);
t2.set_type(RT_WLESS);
t3.set_type(RT_WIRED);
Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
t0.Write(HIGH);
delay(500); // wait for 500 mse
t0.Write(LOW);
delay(500); // wait for 500 msec
t1.countdown();
t2.countdown();
t3.countdown();
}
--------------------------------------------------
各タイマの動き確認用なのでloopの部分が雑すぎるのは許してください。タイマ割り込みがまだ使えなくて、正確に1秒間隔になる方法は只今検討中です。
Serial.begin(9600) はシリアル出力の設定です。メニューのツール > シリアルモニタ で見ることができます。デバグのために設定していますがまだ使っていません。

----------------------------------------------------------------------------------------------------
■5.複数制御には表示も必要
----------------------------------------------------------------------------------------------------
3つのカメラを制御するのを目標にしましたので、4行以上表示できるLCDを選びました。

このLCD向けのサンプルプログラムは、タイマ割り込みを使って4msec周期でアナログポートを読んでいます。タイマがArduinoに依存しているのでそのままではGalileoでは動きません。タイマ割り込みの部分の書き換えて使うころなですが、勉強中です。とりあえずキーを読んで上記4.のタイマプログラムの設定でがきるようにしたいので自作に走っています。

LCDへの表示は一次締め切りに間に合いませんでした。すみません。m(_._)m

【失敗その5】
このプログラムにoreadとかnreadとか安直な名前の関数があるではないですか。Readだけ"R"が大文字です。"r"だったころの名残なのです。
KeyEvent::read を作ってしまっているのに joykey.Read() で呼び出していたのです。変な値が取れると思って確認用に作ったのがoreadとnreadなのです。実はaKey::Readが呼ばれていたんです。なのにハードやタイミングを疑っていました。oreadとnreadはreadをコピーして作ったので「そこで気づけよ!」と情けなくなりました。

このLCDは2,3,4,5,6,7ピンを使って制御します。そのうち2,3ピンでシリアル通信でグラフィックデータを送ります。
ん?シリアル通信でグラフィックデータ?ポート操作に時間のかかるGalileo向きではない仕様でした。またしても失敗か?


ちょっとずれがありますが、今回の用途では問題なさそうです。
2,3ピンはOUTPUT_FASTが使えるのとサンプルプログラムはウェイトが入っていてそれがGalileoでは不要だったことでこの程度までチューニングできました。

----------------------------------------------------------------------------------------------------
■6.有線で制御
----------------------------------------------------------------------------------------------------
少し急いで有線制御の確認を行います。
タイマー設定部分は未完成ですが、デバグ用の初期値を設定した状態で使って動作確認を行います。

・NEX-5T

を使ってカメラのシャッターを切れるようにします。
Galileoから3本の線を接続します。GNDとVssをそれぞれ接続してGPIO10をボタンの+側に接続します。ボタンがGNDに繋がった時に赤外線がLEDが発光しますので、GPIO10の出力を逆にします。
この章以前は、赤LEDが光っているときがリモコン出力と仮定していましたが、ここでは、GPIO10は初期値HIGH、リモコン出力時LOWになるようにプログラムを変更します。

ここでわかったことですが、1秒単位の制御を行っていましたが、リモコンを1秒発光すると2回ボタン押しと認識することがわかりました。0.5秒だと1回と認識するようですので、タイマーの粒度を0.5秒にする必要があります。


・NIKON D700

を使ってカメラのシャッターを切れるようにします。
天体撮影が目的ですので、オートフォーカスや自動露出は不要です。シャッターボタン半押しと全押しの線は1本のGPIOで制御します。GalileoにはGND(白線)とGPIO12(赤線、黄線)を接続します。信号線がGNDレベルになった時にシャッターボタン押しになるので、こちらも同じくGPIO10の出力を逆にします。


GPIOの出力パターンは4.プログラム作成とは逆でこんな感じになります。
・t1:赤外線リモコン
  ~~~~~|_|~~~~~|_|~~~~~|_|~~~~~|_|~~~~~|_|~~~~~|_|~
・t2:赤外線リモコン
  ~~~~~~~~~~~~~|_|~~~~~|_|~~~~~|_|~~~~~|_|~~~~~|_|~
・t3:有線リモコン
  ~~~~~|_______|~~~~~~~|_______|~~~~~~~|_______|~~~

----------------------------------------------------------------------------------------------------
■7.無線化
----------------------------------------------------------------------------------------------------
・XBee
ArduinoにはXBeeシールドがありますので、XBeeを使って上記の「6.有線で制御」の有線部分を置き換えてみようと思います。この部分には、

を使います。
Galileoはボード内でI2CでIO拡張していますが、XBeeは途中が無線のUARTでのIO拡張ということになります。すべてがつながるとこんな感じになる予定です。赤がCoodinatorです。XBeeの1つのパーソナルネットワークに1つ必要です。青がEndDeviceです。EndDeviceは省電力のためスロープしてしまうそうです。緑がRooterで、今回の子機になります。データを中継します。時には一時保存するそうです。


・XBee Rooter(子機)
NEX-5T制御のユニットのプロトタイプはこのようになります。

XBeeピッチ変換基板でブレッドボードの上に一旦3ユニットを載せてます。
XBeeの詳細設定については、長くなりますので

を参照してください。
Galileoからすると、「有線で制御」のGPIO出力をシリアルポートに置き換えます。出力するデータは、
7E 00 10 17 00 [64ビットアドレス] FF EE 02 44 30 [H/L] [sum]
の形式になります。

カメラ制御用の蜂が3つ出来ました。

X-CTUから制御してみました。これで子機は動作確認が取れました。


・XBee Coodinator(親機)
コーディネータに設定したXBeeProはGalileoに搭載します。

ここまで来て、Galileo→Xbee通信がうまくいきません。
今度は、どんな落とし穴が待っていたのか!

2つ失敗をしていることがわかりました。
一つは、ジャンパピンです。
Arduino ではプログラム転送時はUSB側、プログラム実行時はXBee側に切り替えるらしいのですが、Galileoで使う場合はジャンパーはXBee側固定でいいです。

二つ目はプログラムです。
Serial1.print()を使っていましたが、Serial1.write()が良いです。writeの引数はint型なのでbyte型のwriteでオーバーライドするよう型を明示する(キャスト)する必要がありました。
子機のD0ポートに'L'を出力する関数は以下になりました。
-----
void XBeeL(){
Serial1.write((byte)0x7E); // スタートビット
Serial1.write((byte)0x00); // 長さ上位
Serial1.write((byte)0x10); // 長さ下位
Serial1.write((byte)0x17); // リモートATコマンド
Serial1.write((byte)0x00); // フレームID
// 64bitアドレス
Serial1.write((byte)0x00);
Serial1.write((byte)0x13);
Serial1.write((byte)0xA2);
Serial1.write((byte)0x00);
Serial1.write((byte)0x__); // アドレスを入れてください
Serial1.write((byte)0x__); // アドレスを入れてください
Serial1.write((byte)0x__); // アドレスを入れてください
Serial1.write((byte)0x__); // アドレスを入れてください
// 16bitアドレス
Serial1.write((byte)0xFF); // 64bitで指定しているので不明(0xFFFE)でOK
Serial1.write((byte)0xFE);

Serial1.write((byte)0x02); // 即反映
Serial1.write((byte)0x44); // 'D'
Serial1.write((byte)0x30); // '0'
Serial1.write((byte)0x04); // L出力
Serial1.write((byte)0x9F); // チェックサム
}
-----
’H’出力も作成して、500msec’L’ 4500msec'H' を繰り返すと、5秒露出5秒インターバルでカメラを制御できました。



・ネーミング
ちょっと息抜きに名前を考えました。
XBeeはちょうど5つあります。1つが親機で4つが子機です。
ここで気づいた方はすばらしいです。

ガリレオで4と来たら、ガリレオ衛星です!
ということで、めでたく
1号機:木星  :Jupiter
2号機:イオ  :Io
3号機:エウロパ:Europa
4号機:ガニメデ:Ganymede
5号機:かリスト:Callisto
と名前が付きました。

【失敗その6】
部品を調達してもらったとき、部品間の接続の考慮が不足していました。
左がXbee シールドで右がグラフィック液晶です。
コネクタの間隔が違うのと、ピンの数が、6+6と16+12と大きく違います。crz

せっかく支給いただいて申し訳ありませんが、Xbee シールドはここまでとさせていただきます。これからは、Arudino UNO用に買っていた

を使います。アンテナが曲がってしまうのはしょうがないです。

使用するピンはうまく分かれていて、液晶もXBeeも共に動作させることができました。

・タイマにXBeeのプログラムの取り込み
「6.有線で制御」で作成したプログラムにXBee制御プログラムを取り込みました。GPIOを制御している関数を修正するか置き換えることで制御できるようになります。IoとEuropaを通してNEX-5Tを、Ganymedeを通してD700を制御している様子を載せます。



・無線キーボード
Callistoと名前を付けましたが、ほとんど書いてこなかったキーボード子機を作成します。
使用するのは、

です。アンテナなしを選択したのは、寒い中ポケットから手を出してGalileo上のキーボードを操作しなくて済むようポケットに入れやすいただそれだけの理由です。
ボタンはブレッドボードの構造の都合上、左右は1列ずらすことになります。配線と指の干渉を考えて写真の配置に決めました。

送信方式は、定期的とポート変化での送信の2種類あるのですが、アナログキーとの親和性は定期的な方かと考えています。ただ、操作自体は日定期的なので可能なら消費電力の少なそうなポート変化を選択したいです。
XBeeからのデータを変数に保持して、シリアル読み出しでデータをバッファリングするようにしました。
--------------------------------------------------
int rKey::Read()
{
old_code = new_code;
if(SerialReceive::Read()){
XBee::set_data(SerialReceive::get_data(XBEE_DM_H) * 0x100 + SerialReceive::get_data(XBEE_DM_L));
}
switch(XBee::get_data()){
case 0x1E: // 11110b 上
new_code = K_UP;
break;
case 0x1D: // 11101b 下
new_code = K_DOWN;
break;
case 0x1B: // 11011b 左
new_code = K_LEFT;
break;
case 0x17: // 10111b 右
new_code = K_RIGH;
break;
case 0x0F: // 01111b 中
new_code = K_CENT;
break;
default:
new_code = K_OPEN;
}
new_code = new_code > K_OPEN ? K_OPEN : new_code;

if(new_code == old_code)
{
count--;
if(count <= 0)
{
code = new_code;
}
}else{
count = K_CHATTARING;
}
return(code);
}
--------------------------------------------------
2つのキー系統はアナログキー(ak)優先にします。
--------------------------------------------------
int KeyEvent::Read()
{
int ak, rk;
old_code = new_code;
ak = aKey::Read();
rk = rKey::Read();
new_code = (ak == K_OPEN) ? rk : ak;
--------------------------------------------------
こうして、アナログキーからも無線キーからも同じイベントを発生できるようになりました。

----------------------------------------------------------------------------------------------------
□8.フィールドテスト
----------------------------------------------------------------------------------------------------
Galileoの外部電源は、

を用意してもらいました。
ケーブルは別途用意した

を使います。
----------------------------------------------------------------------------------------------------
■9.まとめ
----------------------------------------------------------------------------------------------------
一通り作業をしてみて感じたことを3つの観点からまとめます。

・やりたいことができるか?
コントローラとしてやりたいことができるかという問いの短い答えとしては、「できる」になります。
しかし、今の開発環境ではをすぐさま実現するためのツールではないと感じました。
私の作ろうとしていたマルチタイマーのようなものはArudinoUNOを使った方が早く実現できそうです。

・面白いか?
「面白い!」です。
探求心や好奇心のある人なら、横道にそれてでも楽しんめでしまいます。
メインのやりたいこと以外の部分にまで時間が取れるなら、チューニングしたり代替方法を考えたりと、マイコン開発らしいところが味わえます。
DOS時代にPCの性能をいかに絞り出すかいろいろやっていた人にはとても面白く感じるのではないでしょうか。
ただし、Galileoにも限界があることを忘れてはいけません。

・この先望むこと
目指すものもできつつあるので、個人的には十分という思いですが、このままではマイコンプログラム経験者のおもちゃで、ユーザのすそ野は広がりにくいと思います。

ユーザを増やそうとするならArduinoとの互換性を高めてチューニングすることなくシールドを使える必要があると感じました。
このままのGalileoでいくなら、各シールド向けのドライバやサンプルプログラムが出揃うのを待った方がいいと思います。
私のような年寄りの活躍の場としていただけるなら多少貢献はできそうです。

資料がまとまってあることも大事だと思います。
探せばネット上にはいろんな情報がでてきます。Galileoの情報、シールドの情報それぞれ個別ではあるのですが、組み合わせたときのものが少ないです。
このままでは無難な選択をすることになってしまい、我慢する部分ができてしまって多様性の少ないものになってしまうのではないかと心配です。

こんな面白いものをレビューさせていただきありがとうございました。
このレビューが後進の人たちの道標になれば幸いです。

コメント (0)

ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。

YouTube の動画を挿入

YouTube の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ニコニコ動画の動画を挿入

ニコニコ動画の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ZIGSOWリンク挿入

検索対象とキーワードを入力してください

    外部リンクを挿入

    リンク先の URL とタイトルを入力してください

    URL を正しく入力してください。

    画像を挿入(最大サイズ20MB)

    画像を選択してください

    ファイルサイズが20MBを超えています

    別の画像を追加

    ほかのユーザーのレビュー

    ZIGSOW にログイン

    ZIGSOW会員登録(無料)はこちらから