アイティプランターで水耕栽培

Intel Edison

2014年11月13日 - 未分類

IntelからEdisonという小型でWiFiやBluetoothの付いているボードコンピュータと呼ぶようなものが発売されたので、入手して使ってみました。似たようなものに、Raspberry Piがありますが、Edisonの方が、WiFi、Bluetooth内蔵、1GのRAMがある。Linuxがプレインストールされていてすぐに使える、と言った利点があります。価格も、Raspberry PiにWiFiドングルやBluetoothドングル、SDメモリー等を付け足したら、あまり変わらない値段になります。 Edisonは、既に、ネットで色々な情報が出ていますが、今回、やったことをまとめておきます。 edisonIcon

Macを使っているので、先ずは、このページに書かれてあることを実行します。通常では、2本のUSBメーブルを使うのですが、このページにかかれている方法では、1本のUSBケーブルでできます。書かれてあるとおりに実行します。FWも最新にできます。 次に、opkg(パッケージマネージャ)を使えるようにします。このページに書かれてあるとおりにしました。

opkg updateとopkg upgradeを実行して、ソフトウエアを最新にしておきます。
次に、色々とソフトウエアを入れたいのですが、Edisonの / 以下はあまり容量が割り振られていないため,2.2GBとeMMCの半分以上の容量が割り振られている /home/ 以下にツールやライブラリをインストールします。ここが参考になります。
シンボリックリンクで、/usr/localを作りました。

root@itpEdison:~# ln -s ~/.local /usr/local 次に、ここを参考にして、時計合わせをします。opkgには、あまりパッケージが登録されていないようですね。一々、コンパイルするのが面倒です。Raspberry Piよりもコンパイル速度は早そうですが、結構、時間がかかります。 opkgでもntpはありました。ntpdとntpdateをインストールすると使えます。 Edisonの電源を抜くと、時計が狂うようです。内臓のRTCがあるので、これも使うようにするのがいいと思います。 Javaも入れたいですね。java.comから、Linux用の32ビットJavaをインストールします。これは、ファイルを解凍して、/usr/local/java に入れて、PATHを通せば使えるようです。意外と簡単にJavaが入りました。

EdisonのJ13コネクタでMacに接続すると、外部記憶装置として認識されます。また、ファイルを書き込んだりもできます。しかし、Edisonから、この領域(Flash Memoryの一部)にアクセスするにはどうすればいいのでしょうかね?

この後は、OTGのコネクタをUBSポートに挿して、USBホストとしての動作を確認したいですね。USBカメラも付けてみたいし。

opkgのパッケージの少なさに嫌気が差したので、ここを参考に、Ubuntu系のlinuxに変えてみました。ところが、ubilinuxだけで結構、容量を使ってしまっています。apt-getでトラブル続出です。また、Edisonの記憶容量が少ないので、ちょっとパッケージを増やすと、すぐにルートがいっぱいになってしまいます。なので、仕方なく、ここを参考に、元のYoctoに戻しました。時間のロスですが、とりあえず、OSの入れ替え方は分かりました。WindowsとLinuxでできるそうですが、何故か、Windows8では、認識されませんでした。OSのインストールには時間がかかります。5分とか書いてありますが、もっとかかります。じっと待つしかないですね。途中で、もういいだろって、Ctl+Cで止めると、書きかけのファイルになってしまうので注意です。

OTGのUSBケーブルが届いたので、USBカメラを付けてみようと思います。

11月15日
OTGのUSBケーブルは、電源供給ありのタイプにすべきでした。Edisonに電源が供給されない。しかたがないので、電源コネクターを作成して、Edisonのボードに12V を供給しました。fswebcamをopkgしてUSBカメラで画像を撮影して、apache2でhttpで見られるようにまでしてみました。
image

ハンダが生々しいですよね。sendcomも動作したので、Edisonでアイティプランターもコントロールできるはずです。
今日は、ここまでかな。まだ、よくわからないところが多い状態です。

11月16日
sendcomも動作してEdisonでアイティプランターをコントロールできるようになりました。sendcomの古いソースコードを使ってハマりましたが、なんとか回復。しかし、Edisonの一番のネックは、記憶容量の少なさです。okpgでアプリをインストールしていると/が100%になってしまって、何もできなくなります。そうなったら、また、OSの入れなおしになります。結構、何度もやってしまいました。Web経由で、アイティプランターをコントロールできるところまでは確認できました。写真も撮影できます。記憶容量が少なくなるapace2は、入れないようにしてnode.jsを使うようにしました。opkg upgradeでも記憶容量が減ります。むやみにupgradeしない方が無難です。

ころで、昨日、撮影できていたUSBカメラで撮影ができなくなりました。原因が分からずに、試行錯誤しました。

$fswebcam test.jpg
<b>--- Opening /dev/video0...</b>
stat: No such file or directory

と表示されて、動作しない。散々、いろんなことをした挙句、USBカメラを取り替えたら動作するようになりました。もちろん、もとのカメラにしても動作しています。これは、訳がわからないですね。時間の浪費をしました。    教訓:動作実績のあるSWを疑ってはいけない。原因の多くはHW側にある。    撮影した画像は、自動的にDropBoxに転送されます。Pancake.ioでURLも取得できます。DropBoxは新しいアカウントにしました。 次は、Bluetoothでコントロールすることや、スマートホンでコントロールするところです。Intelが素晴らしい開発環境を出していました。

XDK ItoT Edition これを使えば、iPhoneを始めとする、各種のスマホやタブレットPCで動作するコントロールアプリが作れるようです。まだまだ、すべきことは多いな。 11月17日 今日も、Edisonと遊んでいます。ずいぶん、理解が進んできました。 USBメモリーが使えるようになりました。いちいち、mountしなければならないのは面倒なので、ここを見て自動マウントを設定。/mediaの下でUSBメモリーが使えます。  注意:何かがおかしい。/mediaが大変なことになっています。設定しないようにしてください。    USBメモリーからブートできれば、開発が楽そうですね。Linuxだからできるはずだと思うのですが。 Bluetoothも調べてみました。bluezでつながるようですが、つなげる儀式があります。ここここを参考に、ペアリングはできました。

rfkill unblock bluetooth

としないとデバイスが見つかりません。 クラウドベースで使えるIoTも試しました。ここのガイドを見ながらがいいみたい。 IoTでは、Edisonにセンサーが付いていないので、まず先に、クラウドベースの IoT Developer Kit Cloud-base Analyticsを調べました。最初は、使い方が分からないので、ここのユーザーガイドを見ながら試すのがいいでしょう。   11月20日 ほぼ、毎日の割合で、EdisonのOSを初期化しています。もう、ずいぶん、手馴れてきました。OS初期化のたびに、ホームの設定が大変なので、/home以下をUSBメモリーにして、マウントするようにしました。これで、OS初期化しても、大した手間なく、復旧できます。 Edisonのような組み込み系を使う場合、yocto projectは無視できないでしょう。yocto projectの解説はここにあります。クロスコンパイル環境であって、PCエミュレータもあるので、これは使いたい!!って思ったのですが、なかなかうまくできませんでした。yocto projectのHPはここです。 Linuxで動作するとありましたが、Ubuntuでは、iostream.hがないっていうエラーが取れずに断念しました。チュートリアル通りに進めるも、コンパイルで止まってしまうことがしばしばでした。現在、CentOS7で動かしています。hobを使ってGUIベースでコンパイルできるところまではできました。すごく時間がかかります。コンパイルが終わっても、エミュレターではなかなか動作しません。isoイメージができていたので、VMwareで確認したら、動作しました。ちょっと、面倒ですが、動作確認できるルートは確保できた状態です。使いこなすには、まだまだ調べるべき項目が山積みです。しかし、これでOSパッケージが作成できそうに思えてきました。 理想的には、PCエミュレータでアプリを完成させてからEdisonに移植したいところです。また、提供されるOSではなく、自前のOS構成を作りたいところです。具体的には、パーティションを適切にしたバージョンを作りたいと思います。

$ opkg upgradeはしてはいけません。ディスクスペースがなくなってしまいますよ。upgradeするなら、このページにある、edison imageに入れ替えてから行ってください。

11月21日 また、何故か、/dev/video0ができなくなってしまいました。Edisonでは、videoデバイスが不安定な気がします。今回は、yocto projectでEdisonのOSを構築してみます。yoctoは、コンパイルに時間がかかるので、試行錯誤にも時間がかかっています。いろいろ、いじっている内に、ようやく、少し分かってきました。 Intelのダウンロードセンターで、Intel Edison OS Image and source filesから、edison-src-rel1-maint-rel1-ww42-14.tgz をダウンロードします。 展開して、edison-src というホルダーができます。 edison-srcの位置で、device-software/setup.shを実行します。edison-srcの位置で実行しなければなりません。 すると、同じ位置にpokyのホルダーができます。

$ source poky/oe-init-build-env
$ bitbake edison-image

を実行すると、長い時間かかって、edison-src/build/tmp/devely の下に、isoができているはずです。 できていなければ、hobでisoを指定しなければなりません。2度めの構築は、最初よりも早くできます。 コンパイル中に、

WARNING: Failed to fetch URL ftp://ftp.debian.org/debian/pool/main/b/base-passwd/base-passwd_3.5.29.tar.gz, attempting MIRRORS if available
WARNING: Failed to fetch URL http://downloads.sourceforge.net/project/libpng/libpng16/1.6.8/libpng-1.6.8.tar.xz, attempting MIRRORS if available
WARNING: Failed to fetch URL ftp://ftp.debian.org/debian/pool/main/n/netbase/netbase_5.2.tar.gz, attempting MIRRORS if available
WARNING: Failed to fetch URL ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/dosfstools/dosfstools-2.11.src.tar.gz, attempting MIRRORS if available
WARNING: Failed to fetch URL ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_4.87.tar.bz2, attempting MIRRORS if available
WARNING: Failed to fetch URL ftp://ftp.debian.org/debian/pool/main/n/net-tools/net-tools_1.60-25.diff.gz;apply=no;name=patch, attempting MIRRORS if available
WARNING: Failed to fetch URL ftp://ftp.debian.org/debian/pool/main/d/dpkg/dpkg_1.17.4.tar.xz, attempting MIRRORS if available
WARNING: Failed to fetch URL http://ftp.de.debian.org/debian/pool/main/m/mklibs/mklibs_0.1.38.tar.gz, attempting MIRRORS if available
WARNING: Failed to fetch URL ftp://ftp.berlios.de/pub/cdrecord/alpha/cdrtools-3.01a20.tar.bz2, attempting MIRRORS if available

がでます。何故か、ダウンロードできないようです。他から、同じパッケージをダウンロードしてきて、build/downloadsの下にいれます。そして、

$ touch cdrtools-3.01a20.tar.bz2.done

として再度、bitbake をします。   エミュレータで動作確認ができるはずなのですが、runqemu qemux86 とすると、root fs faikeがないと言われてしまいます。何のことでしょうね? まだ、わからないことが多い。 コンパイル結果をEdisonに入れるには、

$ edison-src/device-software/utils/flash/postBuild.sh

を実行して、後は、flashall.shでいつもどおりにOSを入れます。 後は、VMwareで、isoを実行します。現在、コンパイル中なので、この続きは、また後で書きます。 これがうまくいくことを確認したら、こんどは、edison-imageの内容を修正していきます。   11月25日 edison-imageをコンパイルして、edisonに焼き付けることに、やっと成功しました。Intel から提供されているイメージでは、videoが使えないのですね。

$bitbake edison-image
$bitbake linux-yocto -c menuconfig
$bitbake edison-image

 ここが参考になりました。Ubuntuでは、mkimageをインストールしないと、うまくいかないのですね。ずいぶん、回り道をしたような気がします。後は、パーティションを変更したいですね。もう、ひと頑張りです。 11月25日 ルートパティションを増やしました。そうしたい人もいたようで、ここが参考になりました。要は、2つのファイルを書き換えることです。

edison-src/device-software/meta-edison-distro/recipes-bsp/u-boot/files/edison.env
# Partition definition
partitions=uuid_disk=${uuid_disk};name=u-boot0,start=1MiB,size=2MiB,uuid=${uuid_uboot0};name=u-boot-env0,size=1MiB,uuid=${uuid_uboot_env0};name=u-boot1,size=2MiB,uuid=${uuid_uboot1};name=u-boot-env1,size=1MiB,uuid=${uuid_uboot_env1};name=factory,size=1MiB,uuid=${uuid_factory};name=panic,size=24MiB,uuid=${uuid_panic};name=boot,size=32MiB,uuid=${uuid_boot};name=rootfs,size=980MiB,uuid=${uuid_rootfs};name=update,size=768MiB,uuid=${uuid_update};name=home,size=-,uuid=${uuid_home};
device-software/meta-edison-distro/recipes-core/images/edison-image.bb

inherit bootimg
do_bootimg[depends] += "${PN}:do_rootfs"

#IMAGE_ROOTFS_SIZE = "524288"
IMAGE_ROOTFS_SIZE = "980000"
IMAGE_FEATURES += "package-management ssh-server-openssh"

2つのファイルの値を同じにしないとエラーになって起動しません。 後は、bitbake edison-image -c cleanを実行してから、bitbake edison-image を実行。preBuiledを行ってから、toFlashで、flashall.sh とします。

ORIGINAL
filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root               475080    413648     24736  94% /
/dev/mmcblk0p10        3851656    659892   2996108  18% /home

NEW
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root               902232    323352    513496  39% /
/dev/mmcblk0p10        1898368      2892   1879092   0% /home
/dev/root               902232    323352    513496  39% /

となり、/homeが減って、/が増えました。ここのサイトが参考になります。 USB memoryを自動マウントするように設定したのですが、rebootやshutdown -r nowでは、正常起動しない。電源を入れなおすと正常起動する。何度やってもそうなります。rebbotやshutdown -r nowの場合には、USBデバイスが認識される前にマウントしようとしているのでしょうか? 12月8日 ちょっと間が空きましたが、mjpeg-streamerをインストールしました。動画が配信されます。ここを参考にします。 opkgでは、subversionsがなかったので、直接、ソースを取ります。 wget http://sourceforge.net/projects/mjpg-streamer/files/latest/download

Makefile から
PLUGINS += input_testpicture.so
をなくします。Makefileに直接書いてあるところもあるので、 input_testpicture.soは消します。

include fileでエラーがでるので、

sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h

とします。 後は、

# export LD_LIBRARY_PATH="$(pwd)"
# ./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -r 640x480 -f 15" -o "./output_http.so -w ./www"

とすると、8080ポートで画像がでます。Raspberyy Piよりも、かなり早く感じられます。さすが、edisonです。

jpegstreamer

2014年12月13日

いろいろインストールしている内に具合が悪くなってきたので、再インストールしました。USBメモリーに保存しているので、復旧は楽です。

rootfs               /                    auto       nodev,noatime,discard,barrier=1,data=ordered,noauto_da_alloc    1  1
proc                 /proc                proc       defaults              0  0
devpts               /dev/pts             devpts     mode=0620,gid=5       0  0
usbdevfs             /proc/bus/usb        usbdevfs   auto                0  0
tmpfs                /run                 tmpfs      mode=0755,nodev,nosuid,strictatime 0  0
tmpfs                /var/volatile        tmpfs      defaults              0  0

/dev/disk/by-partlabel/boot     /boot       auto    noauto,x-systemd.automount,nosuid,nodev,noatime,discard     1   1
/dev/disk/by-partlabel/home     /home       auto    noauto,x-systemd.automount,nosuid,nodev,noatime,discard,barrier=1,data=ordered,noauto_da_alloc 1   1

/dev/sda1       /mnt/home

USBメモリーの自動マウントは、/etc/fstabに最後の1行を入れるだけOKでした。autoとかのオプションを入れると自動マウントしてくれない。USBはポート番号が変化するので、UUIDで指定するほうがいいようです。

 mjpeg-streamerなどの自動起動設定方法

opkg install systemd

でsystemctrlが使えるようにしておきます。  ここを参考にして、cronieをインストールします。/lib/systemd/system/crond.service  ファイルの最後の_EOF_は不要です。あると、動作しません。 /lib/systemd/system/crond.service

/lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=syslog.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS

[Install]
WantedBy=multi-user.target

後は、/lib/systemd/system/crond.serviceをコピーして、mjpeg-streamerの起動スクリプトの変更します。

cp /lib/systemd/system/crond.service /lib/systemd/system/mjpegstreamer.service

# /lib/systemd/system/mjpegstreamer.service [Unit] Description=Mjpeg Streamer After=syslog.target[Service] EnvironmentFile=/etc/sysconfig/mjpegstreamer ExecStart=/home/user/mjpg-streamer-r63/start.sh [Install] WantedBy=multi-user.target [/shell] 但し、start.sh の最初に、cd /home/user//mjpg-streamer-r63 と1行入れて、実行ファイルのあるホルダーで起動するようにします。これで、起動時から、edison.local:8080でMJPG Streamerを見ることができます。 同様の方法で、電源を入れた時点で自動起動してほしいプログラムを登録していきます。 ここを参考に、XDKも使えるようにしておきましょう。設定にはroot権限が必要です。

$xdk-whitelist --add 192.168.1.8  #macのIPアドレス
$systemctl enable xdk-daemon
$systemctl restart xdk-daemon

2014年12月18日 AUDIOが使えるようにしてみようとしています。 edison-src/device-software/meta-edison/recipes-kernel/linux/files/defconfig で、CONFIG_SND_USB_AUDIO=y とします。もう1ヶ所、#CONFIG_USB_AUDIO というのがありますが、これを =y とかにすると bitbake edison-imageでエラーになりますので、注意です。bitbake yocto-linux -c menuconfig で Device Drivers -> Sound card support (SOUND [=y]) -> Advanced Linux Sound Architecture (SND [=y]) -> USB sound devices (SND_USB [=y]) 実際の表示は、[*]になります。flashall.shをする前に、../device-software/utils/flash/postBuild.sh をすることをお忘れなく。これを忘れて、失敗してしまいましたので。 後は、

configure_edison --setup
opkg update
opkg install sudo bash less ntpdate fswebcam systemd apache2 alsa-utils
adduser XXXXX

として、/dev/sda1のUSB memoryにあるホームディレクトリをマウントします。現在、焼き込み中です。時間がかかるのが難点です。RaspberryPiでもSDカードにddするのは時間がかかりました。仕方がないのでしょうか?


edison:~$ lsmod
Module                  Size  Used by
usb_f_acm              14335  1
u_serial               18582  6 usb_f_acm
g_multi                70540  0
libcomposite           39245  2 usb_f_acm,g_multi
bcm_bt_lpm             13676  0
bcm4334x              574851  0

あれ、USB AUDIOがないな。

edison:~$ sudo aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 0: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 2: Pro [Sound Blaster X-Fi Go! Pro], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0

お、Sound Blasterが見つかった。

sudo aplay ./music.wav -D hw:0

鳴らんな。card 2とあるので、hw:2かな?

sudo aplay ./music.wav -D hw:2

お、鳴りました! Open-jtalk 何を話しているのかわからない。エンコーディングが違うのかな?

DOWNLOAD
/パティーションを拡張して、AUDIOが使えるようにしたedisonのイメージは、ここからダウンロードできます。edison-src-rel1-maint-rel1-ww42-14がベースになっています。

 

Translate »