Translate

2016年5月23日月曜日

Arduino Yunの"Guide for Windows user to upgrade the u-boot"を翻訳してみた

Arduino YunのLininoOSを最新版にするとシリアル経由によるネットワーク通信ができなくなってしまう問題が発生した。

ひょっとしてOSはあげたけどu-bootを更新していないのが問題かも..とおもい

Guide for Windows user to upgrade the u-boot
http://labs.arduino.org/Guide+for+Windows+user+to+upgrade+the+u-boot

を翻訳してみた。
以下参考にする場合は at your own risk でお願いします。

-----

Windowsユーザのためのu-bbotアップデートガイド


WindowsユーザのU-bootアップグレード


Windowsユーザであるならば、このガイドに従ってください:

- 最初に以下の手順を実施してください:
1) (micro)USBケーブルを使ってボード(microUSBポート)とPCを接続してください。
2) ボードをEthernetに接続してください

図1 → http://labs.arduino.org/dl1483?display&scale=0.1

3) Arduino IDE 1.7.8以降(もしそうでなければここからダウンロード)を起動し、メニュー File>Examples>Bridge へ進み、Sketch YunSerialTerminal をひらいてボードへアップロードしてください

図 2 → http://labs.arduino.org/dl1484?display


- 次のいずれかのリンクから最新u-bootをダウンロードしてください:
1) Arduino Yunの場合、ここをクリックしてください
2) Arduino Yun miniの場合、ここをクリックしてください

- TFTPサーバをインストールしてください:
1) Windows TFTP ユーティリティを使う場合は、ここからダウンロードできます
2) 管理者ユーザでツールをインストールしてください

図 3 → http://labs.arduino.org/dl1485?display&scale=0.7
図 4 → http://labs.arduino.org/dl1486?display&scale=0.7
図 5 → http://labs.arduino.org/dl1487?display&scale=0.7
図 6 → http://labs.arduino.org/dl1488?display&scale=0.7
 
3) TFTPユーティリティを起動し、次の図のようにセットしてください。

図7 → http://labs.arduino.org/dl1489?display&scale=0.7
図8 → http://labs.arduino.org/dl1490?display&scale=0.7

u-bootファイルのパスを選択してください:
図9 → http://labs.arduino.org/dl1495?display&scale=0.7
図10 → http://labs.arduino.org/dl1496?display&scale=0.7
 
IPアドレスをセットしてください
図11 → http://labs.arduino.org/dl1497?display&scale=0.7
 
設定完了したら、OKボタンをクリックしてください。
図12 → http://labs.arduino.org/dl1498?display&scale=0.7

4) Serverをクリックして動作を確認してください

- u-bootコンソールに入ってください
1) シリアルモニタを開いてください
2) (ボード上の)YUN RSTボタンを押し、(シリアルモニタの入力欄に)linコマンドを入力、(シリアルモニタの)送信ボタンを押してください
図13 → http://labs.arduino.org/dl1502?display&scale=0.6

3) しばらくすると以下の様なu-bootプロンプトが表示されます
ar7240>

- 入力ミスに注意しながら次のステップを実行してください:
Linino U-Bootプロンプトから、次のコマンドを実行してください:(Ethernetケーブルに接続されていることを確認してください)
setenv serverip ‹TFTPサーバのIPアドレス›; setenv ipaddr ‹Lininoボード側IPアドレス›;

以下の2行は入力例です:
ar7240>setenv serverip 192.168.60.124;
ar7240> setenv ipaddr 192.168.60.182;

図 14 → http://labs.arduino.org/dl1506?display&scale=0.6

次の例にならってTFTPサーバへpingを打って、テストしてください:
ar7240> ping 192.168.60.124

図 15 → http://labs.arduino.org/dl1505?display&scale=0.6

pingが成功したら、このガイドを継続してください。そうではない場合はネットワークやTFTPサーバ調べるかもしくはここをクリックして直接ピアツーピア接続するためのガイドに従ってください。

- Arduino Yunの場合:
tftp 0x80060000 u-boot-linino-yun.bin;

Arduino Yun Miniの場合:
tftp 0x80060000 u-boot-linino-yun-mini.bin;

以下の例は、Arduino Yunの場合です:
ar7240> tftp 0x80060000 u-boot-linino-yun.bin;

図 16 → http://labs.arduino.org/dl1507?display&scale=0.6

図16 のように正しくダウンロードできた場合のみ、フラッシュや新規u-bootコピーを削除することができます。
失敗した場合、Ethernet接続が存在するかどうか、TFTPサーバが適切な位置に存在するかどうかを確認してください。
TFTPが失敗した場合、絶対に次のコマンドをタイプしないでください!
旧u-bootの削除:
ar7240> erase 0x9f000000 +0x40000;

図17 → http://labs.arduino.org/dl1509?display&scale=0.6

次のコマンドを実行することで、新規u-bootがコピーされます:
ar7240> cp.b $fileaddr 0x9f000000 $filesize;

図18 → http://labs.arduino.org/dl1510?display&scale=0.6

おめでとうございます!新しいu-bootが準備出来ました!再起動したu-bootコマンドラインから新規カーネルイメージインストールを実行してください。

ar7240> reset

デフォルトでは、新規ブートは250kボーレート使用しています。キーコンビネーション~1 (ASCIIコード: ALT 126, 1)と ~2 (ASCIIコード: ALT 126, 2)を使って、ボーレートを115200もしくは250000baudsへ変更してください。

注意:時々最初のキャラクタが正しく認識されないことがあるので、このような場合は ~~1 もしくは ~~2 とタイプしてください。

リセットコマンドのあと、新たにu-bootプロンプトが表示されるので、u-bootコンソール内でlinコマンドをタイプしてください:

U-Boot 1.1.5-linino-g17593166-dirty (Oct  4 2015 - 02:12:32)
Linino Board (ar9331) U-boot
DRAM:  64 MB
Top of RAM usable for U-Boot at: 84000000
Reserving 218k for U-Boot at: 83fc8000
Reserving 192k for malloc() at: 83f98000
Reserving 44 Bytes for Board Info at: 83f97fd4
Reserving 36 Bytes for Global Data at: 83f97fb0
Reserving 128k for boot params() at: 83f77fb0
Stack Pointer at: 83f77f98
Now running in RAM - U-Boot at: 83fc8000
Flash Manuf Id 0xef, DeviceId0 0x40, DeviceId1 0x18
flash size 16777216, sector count = 256
Flash: 16 MB
In:    serial
Out:   serial
Err:   serial
Net:   eth0: b4:21:8a:00:00:00
eth1: b4:21:8a:00:00:01
eth0, eth1
autoboot in 4 seconds (stop with 'lin')...
linino>

次のコマンドをタイプすることで設定を確認することができます:
linino> printenv

次のように表示されなければなりません:
linino> printenv
bootargs=
bootcmd=run addboard; run addtty;run addparts; run addrootfs; bootm 0x9fEa0000
bootdelay=4
baudrate=250000
ethaddr=0xb4:0x21:0x8a:0x00:0x00:0x10
ipaddr=192.168.1.2
serverip=192.168.1.1
board=linino-yun
addboard=setenv bootargs board=${board}
console=spicons
addtty=setenv bootargs ${bootargs} console=${console}
mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env),14656k(rootfs),1280k(kernel),64k(nvram),64k(art),15936k@0x50000(firmware)
addparts=setenv bootargs ${bootargs} mtdparts=${mtdparts}
addrootfs=setenv bootargs ${bootargs} rootfstype=squashfs,jffs2 noinitrd
erase_env=erase 0x9f040000 +0x10000
dir=
lu=tftp 0x80060000 ${dir}u-boot-${board}.bin&&erase 0x9f000000 +$filesize&&cp.b $fileaddr 0x9f000000 $filesize
lf=tftp 0x80060000 ${dir}lininoIO-generic-${board}-rootfs-squashfs.bin&&erase 0x9f050000 +$filesize&&cp.b $fileaddr 0x9f050000 $filesize
lk=tftp 0x80060000 ${dir}lininoIO-generic-${board}-kernel.bin&&erase 0x9fEa0000 +$filesize&&cp.b $fileaddr 0x9fEa0000 $filesize
stdin=serial
stdout=serial
stderr=serial
ethact=eth0
Environment size: 1044/65532 bytes
linino>

もしUBoot環境設定が上のリストどおりであれば、"コンソールをttyATH0へ変更して正しくbootargsを設定する(Set properly the bootargs changing the console to ttyATH0)"と呼ばれるステップへ直接すすめることができます、さもなければ次に続くステップに従い新規デフォルト環境を適してください:
linino> erase 0x9f040000 +0x10000;
Below the output on monitor:
linino> erase 0x9f040000 +0x10000;
Erase Flash from 0x9f040000 to 0x9f04ffff in Bank # 1
First 0x4 last 0x4 sector size 0x10000
   4
Erased 1 sectors

ここで、リセットします。
linino>reset;

ボードの再起動後にデフォルト環境がしようされているコンソール上に"*** Warning - bad CRC, using default environment"といったメッセージが出ます。
U-Boot 1.1.5-linino-g17593166-dirty (Oct  4 2015 - 02:12:32)
Linino Board (ar9331) U-boot
DRAM:  64 MB
Top of RAM usable for U-Boot at: 84000000
Reserving 218k for U-Boot at: 83fc8000
Reserving 192k for malloc() at: 83f98000
Reserving 44 Bytes for Board Info at: 83f97fd4
Reserving 36 Bytes for Global Data at: 83f97fb0
Reserving 128k for boot params() at: 83f77fb0
Stack Pointer at: 83f77f98
Now running in RAM - U-Boot at: 83fc8000
Flash Manuf Id 0xef, DeviceId0 0x40, DeviceId1 0x18
flash size 16777216, sector count = 256
Flash: 16 MB
*** Warning - bad CRC, using default environment
In:    serial
Out:   serial
Err:   serial
Net:   eth0: b4:21:8a:00:00:00
eth1: b4:21:8a:00:00:01
eth0, eth1
autoboot in 4 seconds (stop with 'lin')...
linino>

linコマンドをタイプして送信ボタンを押してください。

警告メッセージを避けるためには次に続くコマンドをUBootコンソール上に与えてください。
linino> saveenv

以下のように表示されます:
linino> saveenv
Saving Environment to Flash...
Protect off 9F040000 ... 9F04FFFF
Un-Protecting sectors 4..4 in bank 1
Un-Protected 1 sectors
Erasing Flash...Erase Flash from 0x9f040000 to 0x9f04ffff in Bank # 1
First 0x4 last 0x4 sector size 0x10000
   4
Erased 1 sectors
Writing to Flash... write addr: 9f040000
done
Protecting sectors 4..4 in bank 1
Protected 1 sectors
linino>

コンソールをttyATH0に変更する適切なbootargsをセットしてください:
linino> setenv console ttyATH0,250000
linino> saveenv

以下のように表示されます:
linino> setenv console ttyATH0,250000
linino> saveenv
Saving Environment to Flash...
Protect off 9F040000 ... 9F04FFFF
Un-Protecting sectors 4..4 in bank 1
Un-Protected 1 sectors
Erasing Flash...Erase Flash from 0x9f040000 to 0x9f04ffff in Bank # 1
First 0x4 last 0x4 sector size 0x10000                                                                                                                                 4
Erased 1 sectors
Writing to Flash... write addr: 9f040000
done
Protecting sectors 4..4 in bank 1
Protected 1 sectors

最期にコマンドライン上にresetとタイプしてください:
linino> reset

これでu-bootがアップグレード完了です。

-------

2016年5月20日金曜日

Ciaoサンプルコード"CiaoRestClient-ThingSpeak"を翻訳してみた

Ciaoに関する主なドキュメントを読んだので、
そろそろサンプルを動かしたくなってきました。

で、Arduino Yunサイトにリンクがあった

CiaoRestClient-ThingSpeak
http://labs.arduino.org/CiaoRestClient-ThingSpeak

を勝手翻訳してみました。
At your own riskで参照ください。

-----

CiaoRestClient-ThingSpeak


"CiaoRestClient"は、CiaoライブラリとThingSpeak Cloudとの間のインタラクションのSketchコード例です。特に、温度や湿度をモニタするためにThingsSpeakへのチャネルの作成方法をコードで確認することができます。

Ciao


このSketchは、Ciaoライブラリが必要となります。

Ciaoを実行するためには:

  • Ciao Core:パッケージマネジャもしくはソースからインストール可能、詳細は後述  
  • Ciaoライブラリ:Arduino IDE 1.7.7以降もしくはArduino Studio 0.0.4以降で使用可能、ライブラリを手作業でも追加可能、詳細は後述
  • コンパチブルボード:このリンクをチェックしてCiaoが動作するボードのリストを確認のこと

CIAO SETUPのCiao Coreのインストール手順を確認のこと。


注意:
Arduino UNO WiFiには、すでに導入済みです。


ThingSpeak

ThingSpeakは、オープンなデータプラットフォームであり、センサや(Arduinoのような)起動装置(アキュームレータ)からのデータ集約、格納、分析、参照を可能にするInternet of ThingsのためのAPIです。例えば、ThingsSpeakでセンサロギングアプリケーション、位置追跡アプリケーション、そしてステータス更新でのSocial Network of Thingsを構築することができます。それらが実現できれば、あなたの現在の場所から家庭のサーモスタット操作を実行することが可能です。ThingSpeakの主要な要素はチャネルです。そしてそれはデータフィールド、位置フィールド、ステータスフィールドを含んでいます。ThingsSpeakチャネル構築後、MATLAB(R)コードを使ってチャネルへデータを書きこみ、処理し、そしてデータを参照することができます、そしてツイートやその他のアラートによるデータへ反応することができます。典型的なThingSpeakワークフローは次の通りです:
  • チャネル作成、データ集約
  • データの分析と視覚化
  • 他のアプリを使ったデータ作用(加工?)

ThingSpeak APIは、GitHub上から取得可能です。HTTPリクエスト実行、強力な数値アルファベットデータ、数値データ処理、位置追跡、そしてステータス更新のための完全なThingSpeak APIが含まれています。


ThingSpeakチャネルの作成


Sketchを実行するには、thingspeak.com 上のアカウント登録および新規チャネルの作成が必要です。つぎの手順で実行してください:

・Webサイトから登録してください:http://thingspeak.com

図1 → http://labs.arduino.org/dl1420?display&scale=0.6

・図2のようにChannels > My Channels > New Channelメニューをクリックしてチャネルを作成してください:

図2 → http://labs.arduino.org/dl1592?display&scale=0.6

・新規チャネルにリネームし、2つのフィールドを追加してください。最初のフィールドは湿度データ、2番めのフィールドは温度です。

図3 → http://labs.arduino.org/dl1593?display&scale=0.6
図4 → http://labs.arduino.org/dl1594?display&scale=0.6

・図5のように、マクロAPIKEY_THINGSPEAKの値"XXXXXXXXX"をチャネルのAPI Keysセクションにある"Write API key"の値に書き換えてください。

図5 → http://labs.arduino.org/dl1595?display&scale=0.6

次にSketchコードをボードへアップロードします。

コード


Arduino.org IDEを使ってアップロードしてください。まだ入手していない場合は、ここからダウンロード可能です。

すでに説明したマクロAPIKEY_THINGSPEAKの値"XXXXXXXXX"を"Write API key"の値に書き換えることを忘れないで下さい。


/*
このサンプルコードはCiaoライブラリとThingSpeak Cloudとの
インタラクションを確認することができます。
実行するためには、tingspkeak.com サイト上でアカウントを登録し、
サイトの"Channels"セクションからチャネルを作成してください
(Channels -> My Channels -> New Channel)。

新しいチャネルには2つのフィールドが必要です。
最初のフィールドは湿度、2番めのフィールドは温度です。

その後、マクロAPIKEY_THINGSPEAKの値"XXXXXXXXX"を
チャネルセクションの"Write API key"の値に書き換えます。
*/

#include
#include

#define CONNECTOR     "rest"
#define SERVER_ADDR   "api.thingspeak.com"

#define APIKEY_THINGSPEAK  "XXXXXXXXX" //Insert your API Key

short hum = 60;
short temp = 22;

void setup() {
  Ciao.begin(); // CIAO 初期化
}

void loop() {
    String uri = "/update?api_key=";
    uri += APIKEY_THINGSPEAK;
    uri += "&field1=";
    uri += String(hum);
    uri += "&field2=";
    uri += String(temp);

    Ciao.println("Send data on ThingSpeak Channel");

    CiaoData data = Ciao.write(CONNECTOR, SERVER_ADDR, uri);

    if (!data.isEmpty()){
      Ciao.println( "State: " + String (data.get(1)) );
      Ciao.println( "Response: " + String (data.get(2)) );
    }
    else{
      Ciao.println("Write Error");
    }
  delay(30000); // Thinkspeak ポリシー
}


アウトプット


ThingSpeak チャネルを開き、湿度と温度を確認してください:

図6 → http://labs.arduino.org/dl1596?display&scale=0.6

もしArduino UNO WiFiを使用しているのであれば、WebパネルのWIFI CONSOLEへアクセスしてこの画面を参照してください:

図7 → http://labs.arduino.org/dl1596?display&scale=0.6

注意:
このSketchでは、デフォルトの湿度値(60)と温度値(22)を使っています。
ボードにセンサを接続しSketchを修正して湿度や温度の実測値に変更してみてください。


例


Ciaoライブラリを使用した他の例はGitHubの次のリンクを参考にしてください:https://github.com/arduino-org/arduino-ciao-library
 



------

そうか、Arduino社はArduino YunではなくArduino UNO WiFiをInternet of Thingsのフラッグシップモデルにしようとしているのか..

そうなると、Arduino UNO WiFiがスイッチサイエンスとかで販売されるのも時間の問題かもなあ..

今、技適マーク取ってるところなんだろうなあ..おそらく..

"Arduino Yun上のLininoディストリビューションを更新する方法"を翻訳してみた

Ciaoを使用する場合は、LininoOSを更新しなくてもよいのだけど、一応やっておこうと思い、以下のガイドを勝手翻訳してみた。

How to upgrade the Linino distribution for Arduino Yun
http://labs.arduino.org/How+to+upgrade+the+Linino+distribution+for+Arduino+Yun

以下が翻訳文だが、参考にする場合は at your own risk でおねがいします。

------

Arduino YunのLininoディストリビューションのアップグレード方法


新しいイメージはLinino.orgが提供しています。
"latest image here"から最新版を入手可能です。



LininoIOをアップグレードする方法は、
更新日付が2015/10/04日付以降の場合は、2つあります: 
  • sysupgradeを使う
  • linup コマンドを使う

警告:
2015/10/04以降のバージョンの場合のみ、この文章に従ってください。
2015/10/04より古いバージョンはこのリンク先のガイドに従ってください。


sysupgradeを使ったArduino YUNの更新


rootでSSHログインし、以下のコマンドをタイプしてください:
$ cd /tmp
$ wget http://download.linino.org/linino_distro/lininoIO/latest/lininoIO-generic-linino-yun-squashfs-sysupgrade.bin
$ sysupgrade -v lininoIO-generic-linino-yun-squashfs-sysupgrade.bin

約1分後ボードはリブートされ、ボード上の新しいイメージがロードされます。
注意:
以前のイメージ上でのセッティングを上書きしたい場合、sysupgradeコマンドに-nオプションを追加する必要があります。

$ sysupgrade -v -n lininoIO-generic-linino-yun-squashfs-sysupgrade.bin

警告:
Arduino Yun Miniを使用している場合、更新ステップ内で使用するイメージを以下の指定に変更しなくてはなりません:
$ wget http://download.linino.org/linino_distro/lininoIO/latest/lininoIO-generic-linino-yun-mini-squashfs-sysupgrade.bin
$ sysupgrade -v lininoIO-generic-linino-yun-mini-squashfs-sysupgrade.bin

注意:
全体アップグレードの場合(-nオプションをつけた場合)、rootパスワードはデフォルトの"doghunter"になります。

linupコマンドを使ったLininoOSの更新



(Arduino Yunの)最新リリース上では、最新バージョンもしくは特定のリリースのLininoOSに自動更新するlinupコマンドを使用することができます。コマンドシンタックスは次のとおりです:
root@linino:/# linup
USAGE : linup ( latest or YYYYMMDD.x where x=0,1,2...n ) \
            ( optional : lininoIO or master )


もしLinino OSを最新イメージへ更新したい場合、次のコマンドを実行してください:
root@linino:/# linup latest

順番にLinino OSを更新するためのガイド


1) SSH経由でボードへ接続する
Linuxの場合は、シェルコマンドで"ssh root@linino.local"を実行する
Windowsの場合は、例えばPuttyを使用してSSH接続する

図1 → http://labs.arduino.org/dl1272?display

2) rootでログイン

図2 → http://labs.arduino.org/dl1273?display&scale=1

3) パスワードを入力する

図3 → http://labs.arduino.org/dl1274?display&scale=1

4) コマンド linup latest もしくは linup specif release を入力する

図4 → http://labs.arduino.org/dl1278?display&scale=1

5) "y"と入力する

図5 → http://labs.arduino.org/dl1284?display&scale=1

6) ロードされるまで待機

図6 → http://labs.arduino.org/dl1285?display&scale=1

7) 必要に応じて選択する。

図7 → http://labs.arduino.org/dl1277?display&scale=1

8) 更新終了まで待機する。
注意:
オプション2(-nをつけた既存設定上書きインストール)を選択した場合、rootの新パスワードは初期状態"doghunter"にもどっている。


-------

上記の通り実際にやってみると..おどろいた。

ブラウザでひらくとLuciパネルが表示されていたのがos.js ベースのGUIにかわっとる..



複数のターミナルが1画面でうごかしたかったのかな..

うわー、ここまでせんでもいいのに..

Arduino "Ciao Setup"ページを翻訳してみた

Ciaoのセットアップページ

Ciao Setup
http://labs.arduino.org/Ciao+setup

もついでに勝手翻訳しました。
参照する場合はat your own riskでお願いします。

-----

Ciao セットアップ


前提条件


Ciaoを実行するには以下のことが必要です:
  • Ciao Core: パッケージマネジャ(opkgコマンド)経由もしくはソースからインストール可能。詳細情報は以下の文章を参照のこと。
  • Ciao ライブラリ: Arduino IDE 1.7.7以降/Arduino Studio0.0.4以降で使用可能。手動でインポートする方法は以下の文章を参考のこと。
  • コンパチブルボード: Ciaoが動作するボードについては、このリンクをチェックしてください。

Ciao Core のインストール


パッケージマネジャ経由かLuciパネル利用可するか2つの方法Ciaoをインストールすることができます。
注意:Ciao Coreをインストールした後、動作させたいコネクタを有効化し・設定しなくてはなりません。

パッケージマネジャ経由


CiaoはLininoOSのすべてのバージョンで動作しますが、手動でインストールする必要があります。

LininoOSのコマンドラインで以下のコマンドを実行します:
LininoOS コマンドライン
# lininoio stop
# opkg update
# opkg install ciao

上記コマンドを実行すると、Ciao CoreとデフォルトCiao コネクタの最新バージョンをインストールすることができます。
注意:もし最新バージョンの Linino OS を更新したのであればこの手順を実行するか、LininoOSを使ってLininoOS自体のバージョンアップをしたい場合このガイドに従ってください。
警告:ボードをEthernetケーブルもしくはWiFiネットワークに接続してから実行してください。ボードの設定方法のガイドはここをクリックしてください。

Luciパネル経由


ボードの(ネットワーク)設定を完了させておいてください。
まだ完了していない場合は、このガイドに従ってください。
(ネットワーク)設定済みボードと同じネットワークにPCを接続してください。
ブラウザを起動し、ボードアドレスもしくはnameboard.local/を開いてください。ボードのIPアドレスを知らない場合は、ブラウザ経由でアクセスすることができません。簡単にIPアドレスを確認する方法については、このガイドを参照してください。


図1→ http://labs.arduino.org/dl1445?display&scale=0.5

Configuration Panelにパスワードを入力して、Configureボタンをクリックしてください。

図2→ http://labs.arduino.org/dl1446?display&scale=0.5

Luciパネル内のリンク"advanced configuration panel(luci)"を選択して、以下の画面(図3)を表示させてください

図3→ http://labs.arduino.org/dl1447?display&scale=0.5

Systemメニューを選択し、Softwareサブメニューを選択してください。

図4→ http://labs.arduino.org/dl1448?display&scale=0.5

Update list上でクリックしてください。
Available packagesメニューを選択後、"C"サブメニューをクリックして"Ciao"行を見つけてください。
その行の"Install"リンクをクリックして確認ダイアログのOKボタンをクリックしてください。

図5→ http://labs.arduino.org/dl1451?display&scale=0.5

インストールが完了するまで待機してください、しばらくすると次のような画面(図6)になります。

図6→ http://labs.arduino.org/dl1452?display&scale=0.5

これでCiaoのインストールは完了です。

ソースからのインストール


ソースからCiao Coreをインストールする手順はちょっとトリッキーすぎるのでArduino.org開発チームは忙しくて単純化することができませんでした。更新を乞うご期待!

Ciaoライブラリのインストール


Arduino IDE


Ciaoライブラリをインポートするために、最初にGitHub上の最新バージョンをダウンロードしてunzipしてください。

Arduino IDE内で"Sketch">"Import Library">"Add Library"を選択し、展開後のフォルダを指定してください。最期に"Sketch">"Import Library"を選択してライブラリを有効化してください。

注意:もしArduino IDEが前提条件より古いバージョンであるならCiaoライブラリを手動インストールしないで最新バージョンを入手してください。最新版は、arduino.org/downloadsより入手してください。

Arduino Studio


この文章を執筆した次点では Arduino Studioのバージョンは 0.0.4で、"Import Library"機能はまだ開発中です。

使用可能になるまで、しばらくお待ちください。

一般的な問題


Ciao Core もしくはコネクタが開始されない

Ciao CoreはSketchからMCU経由で操作(開始・停止)を実行します。以下のことを確認してください:
  • MCU:Sketchのsetupブロック内で呼び出されているCiao.begin()メソッドが動作しているか
  • LininoOS:少なくとも/usr/lib/python2.7/ciao/conf/内の1つの/usr/lib/python2.7/ciao/conf/内のコントローラがenabledとなっていること

MCU/MPU間通信中システムログから要求されていないテキストを受け取る

Ciaoパッケージインストール中何か誤りがあった場合に、いくつかのLininoOSパッケージが正しくアップグレードされていないとシリアル通信内にsyslogメッセージが発生することが有ります。

このような問題を解決するには、コマンドラインを開いて以下の作業を行ってください:

1. /etc/sysctl.conf をひらく
LininoOSコマンドライン
# vi /etc/sysctl.conf

2. kernel.printk 行を次のように更新する
kernel.printk = 3 4 1 7

3. sysctl 設定を再読み込みする(か、ボード自体を再起動する):
# sysctl -p

2016年5月19日木曜日

Arduino "Ciao MCU" を翻訳してみた

今度はCiaoライブラリ、Sketch側でどうCiaoライブラリを呼び出すか
が書かれている

Ciao MCU
http://labs.arduino.org/Ciao%20MCU

を翻訳してみました。

以下、at your own risk で参考のこと。

-----

Ciao MCU


イントロダクション


Ciaoライブラリは、シリアル通信経由で、シンプルで直感的な方法により、マイクロコントローラ外部へのデータ送受信を許可します。CiaoライブラリはSketch上で使用することのできる3つの主な関数を提供します:

 
  • read(connector)
  • write(connector, param1, param2, param3) 
  • writeResponse(connector, id, param1, param2, param3)

これらの関数に加えて、便利なCiaoData、管理のためのユーティリティ機能、データの取得および操作を提供します。
 
  • get(index)
  • isError()
  • isEmpty()


Ciaoライブラリを使うためには以下の作業が必要です:
 
  1. Ciaoライブラリのインポート
  2. 関数begin()による初期化

注意:Ciaoライブラリを使う前に、Sketchで使うコネクタをenableにする必要があります、そしてそれは時々設定を行う必要があります。コネクタの有効にする方法とコネクタリストを読んでコネクタのセットアップ方法を学習してください。

read


関数readはコネクタからのデータ受け取りを可能にします(例:xmpp、websocket、twitter)。コネクタにより提供されたIDやデータで構成されるCiaoDataオブジェクトで返却されます。
関数getによりCiaoDataオブジェクトから様々なフィールド値の取得が可能です(関数getを参照のこと)。


例

xmppコネクタからデータ取得する場合、このようなシンプルなステップが必要になります:

#include

setup{
    Ciao.begin()
}

loop{
    CiaoData data;
    data = Ciao.read("xmpp"); // xmpp connectorへ問い合わせ
}

write


関数writeはボードからコネクタへデータ送信を可能にします。4つのパラメータまで認められており、最初のパラメータは常に相互通信したいコネクタのタイプです。その他のパラメータは異なる利用ケースにより自由に使用されることがあります。

例:

xmppコネクタへ送信データを送る場合、関数writeのパラメータは次のようになります:
 
  • 最初のパラメータは、コネクタタイプ
  • 2番めのパラメータは、 送信先名
  • 3番めのパラメータは、送信メッセージ

#include

setup{
    Ciao.begin();
}

loop{
    Ciao.write("xmpp","user@xmpp","hello from MCU");
}

writeResponse


関数writeResponseはコネクタにより送信したリクエストのリプライを直接受け取ることができます。最大5つのパラメータまで指定でき、最初のパラメータは常に相互通信したいコネクタタイプ、2番めのパラメータはレスポンスを送りたいID値を常に指定します。その他のパラメータは異なる利用ケースにより自由に使用されることがあります。

例:

直前のxmppリクエストのレスポンスを受け取る場合、関数writeResponseのパラメータは次のように指定します:
 
  • 最初のパラメータは、コネクタタイプ
  • 2番めのパラメータは、xmppリクエストのID
  • 3番めのパラメータは、送信メッセージ

#include

setup{
    Ciao.begin();
}

loop{
    CiaoData data;
    data = Ciao.read("xmpp"); // xmpp connectorへの問い合わせ
    String id = data.get(0);
    String sender = data.get(1);
    String message = data.get(2);

    Ciao.writeResponse("xmpp",id,"response from MCU");
}

get


関数getはCiaoData内部から情報を取り出すことを許可します。この情報は使用されるコネクタタイプにより様々です。

関数はたった1つだけのパラメータ、コネクタ内でセットされたデータフォーマットの位置(インデックス)のみ受け取ります

例

XMPPコネクタのCiaoDataは普通、ID(インデックス"0")、送信者(インデックス"1")、そしてメッセージ(インデックス"2")となります。

情報を取り出すには、以下の様なステップでおこないます:

#include

setup{
    Ciao.begin()
}

loop{
    CiaoData data;
    data = Ciao.read("xmpp"); // xmpp connector への問い合わせ
    String id = data.get(0);  // CiaoData から情報取得
    String sender = data.get(1);
    String message = data.get(2);
}

splitString


関数splitStringは、コネクタへ送信するMCUコマンドを管理するために使用します。

関数は最大4つまでパラメータを受け取ります、最初のパラメータはMCUのシリアルコマンド、2番めのパラメータはシリアルコマンドを分割するために使用されるキャラクタ、3番めと4番めのパラメータはそれぞれ受信シリアルコマンドを分割した配列と(配列の)サイズです。


例

もしxmppコネクタにより、"digital/13/1"のように、3つのパラメータが送信された場合、コマンドを分割するためにまず3つの要素文字列を作成する必要があります、その後関数splitStringを呼び出します:

#include

void setup() {
     Ciao.begin();
     Serial.begin(57600);
}

void loop() {
     CiaoData data = Ciao.read("xmpp");
     String id = data.get(0);
     String sender = data.get(1);
     String message = data.get(2);
     String command[3];
     splitString(message,"/",command,3);
     Serial.println("command type: "+command[0]); //アウトプットはdigital
     Serial.println("pin: "+command[1]); //アウトプットは13
     Serial.println("pin value: "+command[2])); //アウトプットは 1
}

isError


関数isErrorはCiaoDataオブジェクトにエラーコードが含まれているかチェックすることができます。
CiaoData無いにエラーコードが存在する場合、関数は真値を返却します。


例

xmppコネクタからの受信データ内にエラーコードが存在するかどうかチェックします。
#include

void setup() {
    Ciao.begin();
    Serial.begin(57600);
}

void loop() {
    CiaoData data = Ciao.read("xmpp");  
    if(data.isError()){
      String message = data.get(2);
      Serial.println(" error:"+ message);
    }
}

isEmpty


関数isEmptyはCiaoDataオブジェクトが空かどうかをチェックすることができます。

関数はCiaoDataが空かどうか真偽値を返却します。

例

オブジェクトが空でなければ、CiaoDataオブジェクト内の情報を取り出す。
#include

void setup() {
    Ciao.begin();
    Serial.begin(57600);
}

void loop() {
  CiaoData data = Ciao.read("xmpp");
  if(!data.isEmpty()){
      String id = data.get(0);
      String sender = data.get(1);
      String message = data.get(2);
      Serial.println("id: "+id);
      Serial.println("sender: "+sender);
      Serial.println("message: "+message);
    }
}

----
小難しい部分は全部Ciao Coreへ分離しただけあってライブラリ側の簡単なこと..

Arduino "Ciao: development of a new connector"を翻訳してみた

既存のCiaoコネクタをつかうにしても設定ファイルのパラメータについて理解する必要があるため、

Ciao: development of a new connector
http://labs.arduino.org/Ciao+connector+development

を勝手翻訳しましたのでブログ記事に載せておきます。
参考にされる方はat your own riskでお願いします。

------

Ciao:新規コネクタの開発


Getting started


コネクタはスタンドアロンソフトウェアで、すきな言語で開発可能です。Ciaoはイメージ可能な多くのコネクタをサポートします。
各コネクタは、Ciao Coreと相互接続するために必要な2つのシンプルな要件を満たす必要があります:
 
  • TCPソケットの使用 - Ciaoと接続するために必要
  • JSONの使用 - Ciaoとの通信に必要

以下のサンプル設定ファイルは、一般的なコネクタ"samplecon"のものです:
samplecon.json.conf
{
        "name" : "samplecon",
        "enabled": true,

        //type accepted values: managed/standalone
        "type" : "managed",

        "commands": {
              // 開始コマンドのパラメータ配列
              "start": ["/usr/lib/python2.7/Ciao/connectors/samplecon/samplecon.py"],

              // 停止コマンドの全パラメータ
              "stop": ["/usr/bin/killall","-s", "HUP","samplecon.py"]
        },

        "implements" : {
            "read" : { "direction": "in", "has_params": false },
            "write" : { "direction": "out", "has_params": true },
            "writeresponse" : { "direction": "out", "has_params": true }
        }
}

設定パラメータ


name:
コンテナの名称(小文字)。Ciao Coreへの登録に使用される。name値はMCUサイド(Sketch)上でも使用する。(samplecon.json.confのように)name値をを使った設定ファイル名をつけることはベストプラクティスの一つです。

enabled:
Ciao Coreがコネクタを開始/停止しCiaoとのコミュニケーションを受け入れるかどうか、trueもしくはfalseを指定する。

type:
"managed"もしくは"standalone"のどちらかを指定する。
managedを指定すると、Ciao Coreがコネクタの開始・停止を管理する。"standalone"を指定すると、コネクタは(Ciaoと接続するシステムサービスもしくはデーモンが有効なときだけ)"自己管理"となる。


commands: (type値が"managed"である場合のみ)
    start (コネクタの開始コマンド、絶対パスで指定する)
    stop  (コネクタの終了コマンド、絶対パスで指定する)

implements:
(MCUの観点からの)コネクタによるり実装された機能の配列表現
    read: MCUサイド上で利用可能なインストイラクション"Ciao.read(…)"が指定された場合
    write: MCUサイド上で利用可能なインストイラクション"Ciao.write(…)"が指定された場合
    writeresponse: MCUサイド上で利用可能なインストイラクション"Ciao.writeResponse(…)"が指定された場合


配列には2つのキーのエントリがそれぞれ格納されている:
    direction: MCUの観点からの振る舞いの方向性を"in"、"out"、"result"のいずれかの値で表現する
        "in": チャットメッセージやHTTPリクエストからの受け取りのような、"外界"からのインタラクションのために待機するコマンド
        "out": 外部への送信のみのチャットメッセージのような、メッセージ/データを送信しなくてはならないコマンド
        "result": リクエスト構築し(一旦実行後)レスポンス提供しなくてはならないコマンド
    has_params: この値は"true"もしく"false"のどちらかをセットすることが可能。パラメータがMCU Sketchによりread/write/writeResponseメソッドでコネクタへ渡されるかどうかを指定する

コネクタの開発方法


独自のコネクタを実装する場合、(OpenWRT上でインタプリタが提供される、もしくはコンパイル可能なものであれば)あなたが快適に使えるプログラミング言語を使うことができます。

新規コネクタを設計する場合、2つのインタラクションサイドに気をつけてください:

  • TCP経由でCiao Coreをつかってのインタラクト(通常localhost上のポート番号10900番にてlisten)
  • インタラクトを希望するアプリケーションもしくはプロトコルのハンドル

コネクタの登録


それぞれの使用可能なコネクタは - 一旦Ciao Coreに接続し - 登録文字列を送信しなくてはなりません。
(コネクタにより送信される)登録文字列
{
"action" : "register",
"name" : "samplecon"
}

Ciao Coreは - もし設定ファイルが適当に指定されているならば - "samplecon"コネクタのためにMCUから、そして"samplecon"コネクタからMCUへの受け取りを開始します。


Ciao Coreは登録メッセージへのどんな確認文字列も提供されません。もし何か間違っていた場合はコネクタへアドバイスするだけです。

コネクタ通信


コネクタと Ciao Core の間の通信はJSON文字列を使って合意しなくてはなりません。

Ciao ライブラリはトンネルのように行動し、順序やフォーマットを維持してコネクタから送信されるものはなんでもMCUへフォワードされます。

MCUへ何かを送信したい場合、TCPで送るための位置配列で構成される"data"キーを含んだシンプルなJSON文字列を記述します:
(MCUを狙った)Ciao Coreへのメッセージ
{
"data": ["param1", "param2"]
}


もし Ciao Core がそのようなメッセージを受け入れるならば、"status"文字列を返信します:
Ciao Coreからのレスポンス
{
  "status": 1,
  "checksum": "alphanumeric-25char-ID"
}


Ciao Coreの各インタラクションは、オペレーションを明確にするための一意なアルファベット25文字のID(alphanumeric-25char-ID)を持っています。そしてコレはCiao Core(やコネクタ)が各メッセージのトラックやリファレンスの保持を許可します。

サードパーティアプリ/プロトコルのハンドリング


(例えばTwitterなどの)サードパーティアプリケーションや(例えばHTTP、XMPP、MQTTなどの)プロトコルとの相互接続はあなた好みのデザインパターンで開発することができます。


以下の項目を推奨します:

  • 可能な限り軽量/高パフォーマンスなコードを維持すること
  • 知識共有のために簡単なコメントを記載すること
  • (維持を簡単にするために)パラメータをハードコードする代わりに外部設定ファイルを使用すること

既に使用可能なライブラリ群


ciaoTools - Python

ciaoToolsライブラリは、Pythonを使って新規コネクタ開発を簡単にするためのものです。このライブラリはCiaoCoreとの通信をハンドルするスレッドを実装します。開発者はこのライブラリをインポートし、幾つかのメソッドをオーバライドした新規クラスをビルドする必要があります。


------

nameだけでなくenabledもきちんとセットしないと自分でPythonコネクタを操作しないといけなかったりするのか..

それにOpenWRT、実際はLininoOS最新版になるけど、上で10900が既に使われている状態ってことも、こころにとめておかないとなあ..


結構重要なこと書かれているなあ..


Arduino "Ciao CPU"を翻訳してみた

前回の記事の続き

Ciao CPU
http://labs.arduino.org/Ciao+CPU


だけ 翻訳してみました。
at your own risk で参考にしてください。



-----

Ciao CPU


Arduino Ciaoは、MCUのためにSketch記述がしやすいシンプルで軽量なライブラリと、ボードのCPU/MCUサイドを越えて動作するpythonで実装されたコア、の2つのパーツで構成されています。

Arduino Ciaoのこちら側のパーツはCiao Coreにより定義されます:ネットワーク・プロトコルを使った通信のために、いくつかのMPUからのコミュニケーション経由でコマンドを受け取り、ネットワーク・プロトコルやサードパーティのサービスやプラットフォームを使った通信のために、いくつかの(コネクタと呼ばれる)モジュールと相互接続する強力なソフトウェアです。

CiaoのMCU側はこの文章に説明があります。

Getting Started



Ciao コアは、全体としてモジュール化されており設定可能な状態になっています。ローカルリソース(ファイルシステム、コンソール、メモリ)と相互接続して、多くの標準的なプロトコル(XMPP、HTTP、WebSocket、COAP等)やアプリケーション(Jabber、WebChat、Twitter、Facebookなど)による通信のためいくつかの"コネクタ"が提供されています。

図→ http://labs.arduino.org/dl1271?display

CPU/MPU


Ciaoの CPU/MPU 側は Ciao コアといくつかのコネクタで構成されています。今日まで我々はあなたがイメージしている者と同等のコネクタをサポートするために開発してきました。

Ciao Core


Ciao はMCUと相互接続し、すべての組み込みコネクタを使ったルータとして振る舞うために開発されたマルチスレッドコンポーネントコアです。Ciao Coreは、コンソール(ttyATH0)のようなコンソールを使ってCPUのシリアル共有経由でMCUと通信をおこないます。

シンプルですが効果的な文字列エンコーディングは、MCUに登録済み/有効なコネクタを無制限にCPUと通信させるために開発されてきました。

Ciao Core は、MCUによって開始されハンドルされます。

Ciao コネクタ


コネクタは、JSONを使ってTCP経由でCiao Coreと通信するためのスタンドアロンモジュールです。
コネクタはあなたの好きなどんなプログラム言語でも開発することが可能です。

コネクタは2つのタイプに分類可能です:
  • managed:開始停止がCiao Coreにより管理される
  • independent:有効な場合CiaoCoreへ接続するソフトウェアを手動(もしくは自動で)開始停止する

それぞれのコネクタは、Ciao Coreが必要とする情報を提供するための設定ファイルを少なくとも1つ持っています:
 
  • コネクタ名は?
  • コネクタはenabledか?それともdisabledか?
  • どのような機能をコネクタが提供するか(読み取り、書き込み、返信の書き込み)?

そのような設定ファイルはCiao ライブラリの設定ディレクトリに格納されている:/usr/lib/python2.7/ciao/conf/

List of Connectors


既に有効なコネクタの発見やセットアップ方法の学習などは、Ciaoコネクタページをチェックしてください。

新しいコネクタの開発


上記のとおり Ciao Coreはモジュールとなるように設計されています。このように必要があれば誰でも1つ以上のコネクタを開発することができます。

コネクタは、LininoOS上でTCPプロトコルやJSON文字列をあつかえればどんなプログラミング言語を使って開発してもかまいません。これ以上の新規コネクタの開発方法やTCP経由でCiao Coreと相互接続する方法は次のページを参照してください。

------

コネクタの定義ファイル上に通信固有の情報を書き込みSketchからはciaoライブラリ経由でname値を指定して呼び出す仕組みになっている。

私が購入したArduino YunのLininoOSはバージョンが古く、Ciaoを動かすには更新しなければならない。

Google Colab相当の環境をローカルPC上のDocker Composeで実現する

 Docker Composeの有料版に、お金を払いたくない ^H^Hが使えない ため古いゲーミングPC(GeForce3080)にDocker Composeを入れてその上のコンテナでGoogle Colab相当のノート操作ができないかためしてみた: コンテナイメージとして a...