7,166
edits
(247 intermediate revisions by the same user not shown) | |||
Line 6: | Line 6: | ||
ダガシカシ、簡単に Yun に移行できるかと思っていたら、なかなか結構大変(現在も学習中)なのでいろいろメモ。 | ダガシカシ、簡単に Yun に移行できるかと思っていたら、なかなか結構大変(現在も学習中)なのでいろいろメモ。 | ||
== | == SRL と LLC == | ||
SRL: | SRL: | ||
[http://www.arduino.org/ http://www.arduino.org/] | [http://www.arduino.org/ http://www.arduino.org/] | ||
Line 19: | Line 19: | ||
[https://www.arduino.cc/en/uploads/Main/arduino-Yun-schematic.pdf Schematics] | [https://www.arduino.cc/en/uploads/Main/arduino-Yun-schematic.pdf Schematics] | ||
私がスイッチサイエンス社から購入した Yun は製造は | 私がスイッチサイエンス社から購入した Yun は製造は SRL。Atheros AR9331 に組み込まれていたのが Linino ではなく OpenWrt-Yun なので LLC 。 | ||
実際 github 上の動きをみても LLC のほうが好ましい。 | 実際 github 上の動きをみても LLC のほうが好ましい。 | ||
:IDE も LLC 版は Java8 に上がっている。 | :IDE も LLC 版は Java8 に上がっている。 | ||
::ウェブサイトも LLC は https だし。 | ::ウェブサイトも LLC は https だし。 | ||
ソフトウェアは LLC を信頼したほうが良いと思われる。 | ソフトウェアは LLC を信頼したほうが良いと思われる。(最近 SRL の github が活発になってきた。stay, tuned) | ||
回路図も微妙に違うような... | 回路図も微妙に違うような... | ||
'''朗報! Two Arduinos Become One [http://www.arduino.org/blog/two-arduinos-become-one http://www.arduino.org/blog/two-arduinos-become-one]''' | |||
'''おや! LLC 版の Yún が変わった [https://www.arduino.cc/en/Main/ArduinoBoardYun Arduino Yún LininoOS]''' | |||
:2016年12月2日にウェブサイトが更新された模様。SRL と LLC 和解の成果か。 | |||
::2014年10月以降に出荷された Yún は LininoOS だったと。(歴史改ざんしてる気がするwww) | |||
::おそらく(大人の事情で) LLC で Yún の出荷がとまった(Web から消えた)のが 2014年10月ごろか... | |||
::その後 LLC では Yún Shield なる製品が出荷されて LininoOS ではなく OpenWrt-Yun が載ってたはず。 | |||
::この Yún Shield も(大人の事情で)出荷がとまった(Web から消えた)が、現在は出荷されている。技適とれてないので日本では触れない。 | |||
:::なので'''本サイトの以下↓の情報は古い'''です。(LEDE + Arduino-OS + Ciao のファーム作るか...) | |||
::::[[#Arduino_Y.C3.BAn_LininoOS_.E5.B7.AE.E5.88.86|差分を追っかけてみる]] | |||
== 諸注意 == | == 諸注意 == | ||
Arduino Yun は Atmel ATmega32U4 と Atheros AR9331 の二つのマイコンがあり、それぞれソフトウェアが稼働する。さらに開発環境のコンピュータもあるので、以下の記事中のコード等がどの環境の話かを区別できるように ('''"Leonardo"''') ('''"OpenWrt"''') ('''"開発環境"''') を入れるようにした。明らかに区別できるものは注記はいれていない。 | Arduino Yun は Atmel ATmega32U4 と Atheros AR9331 の二つのマイコンがあり、それぞれソフトウェアが稼働する。さらに開発環境のコンピュータもあるので、以下の記事中のコード等がどの環境の話かを区別できるように ('''"Leonardo"''') ('''"OpenWrt"''') ('''"開発環境"''') を入れるようにした。明らかに区別できるものは注記はいれていない。 | ||
:ATmega32U4 マイコン部をどう言うのがわかりやすいかを考えて、結局 '''Leonardo''' | :ATmega32U4 マイコン部をどう言うのがわかりやすいかを考えて、結局 '''Leonardo''' と呼ぶことにした。 | ||
検証機 ハードウェアは SRL | 検証機 ハードウェアは SRL 製。 | ||
ソフトウェアの情報は LLC | ソフトウェアの情報は LLC に合わせている。 | ||
Yun の面白さ(逆に難しさ) | Arduino Yun の面白さ(逆に難しさ)はマイコン屋の知識と、UNIX屋・ネットワーク屋の知識と、Web屋の知識がすべて必要なところ。それぞれの専門家からみたら他方はブラックボックスに見えて理解の妨げになっているようだ。Arduino Yun の使い方・付き合い方は多方面から見てあげることが大切だ。 | ||
= 導入 = | = 導入 = | ||
== 電源 == | == 電源 == | ||
Uno では(ACアダプターからの)DC入力ジャック(5.5mm/2.1mm Center Plus | 7~12V) があったが Yun には無い。 | Uno では(ACアダプターからの)DC入力ジャック(5.5mm/2.1mm Center Plus | 7~12V) があったが Yun には無い。 | ||
#micro-USB から 5V 供給するのが推奨。 | |||
#(びみょうに斜めに付く) PoE モジュールをつければ Ethernet RJ45ジャックから給電も可。 | |||
#VIN pin に定電圧レギュレータの5Vをいれるのも可。 | |||
== USB Serial == | == USB Serial == | ||
Yun は Arduino Leonardo(ATmega32U4)ベースに作られている。Uno のように USB 通信用のペリフェラル(ATmega16U2がUSBを受け持つ)をもっていない。そのかわりに ATmega32U4 は USB 制御器を内蔵している(Uno の ATmega328P にはその回路はない)。そこで大きな使い勝手の差がある。 | Yun は Arduino Leonardo(ATmega32U4)ベースに作られている。Uno のように USB 通信用のペリフェラル(ATmega16U2がUSBを受け持つ)をもっていない。そのかわりに ATmega32U4 は USB 制御器を内蔵している(Uno の ATmega328P にはその回路はない)。そこで大きな使い勝手の差がある。 | ||
micro-USB | micro-USB ケーブルには充電専用というのが紛れ込んでいるので要注意。 | ||
紐ほどくために Arduino Leonardo ガイドの日本語訳 | |||
[http://trac.switch-science.com/wiki/Guide/ArduinoLeonardo Guide/ArduinoLeonardo – スイッチサイエンス] | [http://trac.switch-science.com/wiki/Guide/ArduinoLeonardo Guide/ArduinoLeonardo – スイッチサイエンス] | ||
ハードウェア構成が違うので Leonardo とも微妙な差異があるが、ほぼ同様とはいえる。 | |||
== OpenWrt WiFi 設定 == | == OpenWrt WiFi 設定 == | ||
Line 71: | Line 85: | ||
[http://www.eleki-jack.com/FC/2015/11/arduino-yun5.html Arduino YUNを使ってみる(5) - フィジカル・コンピューティング] | [http://www.eleki-jack.com/FC/2015/11/arduino-yun5.html Arduino YUNを使ってみる(5) - フィジカル・コンピューティング] | ||
''' | '''メモ''': 初期パスワードは '''arduino''' (ちなみに Linino の場合は '''doghunter''') | ||
'''注意''' | '''注意''': 開発環境が Windows の場合は [https://support.apple.com/kb/DL999?viewlocale=ja_JP&locale=ja_JP Apple から Bonjour のドライバー]をとってきてインストールしておく。 | ||
'''注意''': WiFi ルーターが「アイソレーション」「ネットワーク分離機能」「プライバシーセパレータ」等の名前の端末間通信を拒否する設定になっていると同一ネットワークに有る機器は Yun (OpenWrt) に接続できない。WiFi ルーターの該当を機能を解除する事。 | |||
'''重要''': '''TIMEZONE は正しく設定する事(Asia/Tokyo)。'''でないと技適的にまずいはず... | |||
=== ネットワーク設定に失敗したら === | === ネットワーク設定に失敗したら === | ||
AR9331 OpenWrt のシリアルコンソールを使って設定を修正する。 | AR9331 OpenWrt のシリアルコンソールを使って設定を修正する。 | ||
Line 87: | Line 104: | ||
<syntaxhighlight lang="bash" enclose="div"> | <syntaxhighlight lang="bash" enclose="div"> | ||
picocom -b 115200 /dev/ttyS4 | picocom -b 115200 /dev/ttyS4 | ||
# for Emacsian | |||
picocom -b 115200 -e t /dev/ttyS4 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
:(それぞれの開発環境でのお好きなシリアルターミナルソフトでそれぞれのシリアルポート名で。ボーレートは 115200 bps) | :(それぞれの開発環境でのお好きなシリアルターミナルソフトでそれぞれのシリアルポート名で。ボーレートは 115200 bps) | ||
Line 103: | Line 123: | ||
[http://xx-prime.hatenablog.com/entry/2015/04/06/222321 Arduino Yún(OpenWRTYun)の設定情報書き出しには注意 - XX-Prime's blog] | [http://xx-prime.hatenablog.com/entry/2015/04/06/222321 Arduino Yún(OpenWRTYun)の設定情報書き出しには注意 - XX-Prime's blog] | ||
== OpenWrt- | === 細かな設定は LuCI で === | ||
WiFi の設定を解除して有線に変えるとか、PPPoE とかの詳細設定は LuCI とよばれる GUI で行う。 | |||
Arduino Webpanel にログインして、上部にある "CONFIGURE" ボタンを押して次のページに遷移し、そのページの上部にある、 | |||
advanced configuration panel (luci) | |||
のリンクをクリックする。OpenWrt の LuCI で設定する。 | |||
Yun は WiFi ルータでよくつかわれている AR9331 を使用しており、かつ OpenWrt なので、WiFi ルータとしても十分つかえる。 | |||
== OpenWrt-Yun のアップデート == | |||
Arduino LLC 純正システムイメージ: [https://www.arduino.cc/en/Main/Software Other Software, ARDUINO YÚN LINUX OS OPENWRT-YÚN] | |||
<syntaxhighlight lang="text" enclose="div"> | |||
Remember that updating the OpenWrt-Yun image will cause the loss of all files and configurations you previously saved on the flash memory of the Yún. | |||
</syntaxhighlight> | |||
'''注意''' : '''すべての設定やデータが消えます。'''(luci の backup / restore を使う方法もあり) | |||
'''注意''' : '''アップデート後、もういちどWiFiの設定を最初からやり直す事。''' | |||
'''注意''' : '''μSD カードや USB 装置は抜いておく事。''' | |||
'''注意''' : '''/tmp (tmpfs) に大きなファイルを置くので、空きメモリーが少ない場合は不要なプロセスを落とす事。''' | |||
導入後最初にやったほうがよさそう。(私が購入した Yun はそのままでは opkg の整合性が合わなかった) | 導入後最初にやったほうがよさそう。(私が購入した Yun はそのままでは opkg の整合性が合わなかった) | ||
Line 126: | Line 170: | ||
sysupgrade -v -n openwrt-ar71xx-generic-yun-16M-squashfs-sysupgrade.bin | sysupgrade -v -n openwrt-ar71xx-generic-yun-16M-squashfs-sysupgrade.bin | ||
</syntaxhighlight> | </syntaxhighlight> | ||
いろいろ echo | いろいろ echo されるが無視して(キーを叩かず)待ち続けること。ひたすら待つと自動的にリブートする。 | ||
:boot 時のコンソール出力(さまざまなログ)が落ち着いたところ(WiFi のログ wlan0: associated がでたところぐらい)でリターンキーを押すとプロンプトが出る。 | |||
''' | '''心配''' : OpenWrt-yun も opkg のパッケージもアップデートが遅い。[http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#Security すでにいろいろヤバい] | ||
== ディスクの容量を増やす == | == ディスクの容量を増やす == | ||
Line 137: | Line 181: | ||
:を参考に | :を参考に | ||
::Overlayfs がポイント | ::Overlayfs がポイント | ||
:::[https://wiki.openwrt.org/doc/howto/extroot Rootfs on External Storage (extroot)] | |||
Yun は 32GB までは対応している。できたら class 10 の micro SD カードを準備して挿入する。 | Yun は 32GB までは対応している。できたら class 10 の micro SD カードを準備して挿入する。 | ||
:Alcor Micro AU6350-MGL USB2.0 Hub-Reader Controller が AR9331 につながっており、これがμSDのインタフェースになっている。 | |||
('''OpenWrt側で''') | ('''OpenWrt側で''') | ||
Line 151: | Line 197: | ||
(echo o; echo n; echo p; echo 1; echo; echo +15G; echo n; echo p; echo 2; echo; echo; echo t; echo 1; echo c; echo w) | fdisk /dev/sda | (echo o; echo n; echo p; echo 1; echo; echo +15G; echo n; echo p; echo 2; echo; echo; echo t; echo 1; echo c; echo w) | fdisk /dev/sda | ||
mkfs.vfat /dev/sda1 | mkfs.vfat /dev/sda1 | ||
# mkfs.fat /dev/sda1 | |||
mkfs.ext4 /dev/sda2 | mkfs.ext4 /dev/sda2 | ||
mkdir -p /mnt/sda2 | mkdir -p /mnt/sda2 | ||
Line 191: | Line 238: | ||
'''ディスク容量は必ず増やしてから OpenWrt の作業をすること。'''32GB が高価であれば 8GB class 10 でもよい。'''かならず増やすこと。''' | '''ディスク容量は必ず増やしてから OpenWrt の作業をすること。'''32GB が高価であれば 8GB class 10 でもよい。'''かならず増やすこと。''' | ||
上記の micro-SD を取り出すには、 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
poweroff | |||
</syntaxhighlight> | |||
shutdown したら micro-SD を取り出す。 | |||
"YUN RST" ボタンをおして再起動する。起動したら、 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
uci delete fstab.@mount[0] | |||
uci commit | |||
</syntaxhighlight> | |||
/etc/fstab の記述を消す必要あり。 | |||
== RESET == | == RESET == | ||
Line 201: | Line 261: | ||
#WiFi ボードをリセットするには、USB-A ポートの横にある "WLAN RST" を押す。 | #WiFi ボードをリセットするには、USB-A ポートの横にある "WLAN RST" を押す。 | ||
#WiFi 設定を初期化するには、"WLAN RST" を 5 秒以上かつ 30 秒以下押し続ける。AR9331 がリスタートして 初期のWiFi設定モードになる。 | #WiFi 設定を初期化するには、"WLAN RST" を 5 秒以上かつ 30 秒以下押し続ける。AR9331 がリスタートして 初期のWiFi設定モードになる。 | ||
#OpenWrt-Yun | #OpenWrt-Yun を工場出荷の状態(正確には最後に導入した OpenWrt-Yun)に戻すには、"WLAN RST"を 30 秒以上押し続ける。この場合すべての設定が初期化される。 | ||
#:micro SD を使って Overlayfs で拡張している場合は micro SD を安全に抜いておく。 | |||
#::/etc/config/fstab の 該当の config 'mount' セクションを削除して micro-SD のファイルシステムを umount し micro-SD カードを抜く。 | |||
#OpenWrt-Yun の root ログインパスワードを忘れた場合は、YunSerialTerminal をロードしてシリアルコンソールから変更する。 | #OpenWrt-Yun の root ログインパスワードを忘れた場合は、YunSerialTerminal をロードしてシリアルコンソールから変更する。 | ||
Line 238: | Line 300: | ||
例の 1200bps でリセットするところでこける。 | 例の 1200bps でリセットするところでこける。 | ||
: | :私の開発環境が Windows の Cygwin なので、新しく接続された USB デバイスを Cygwin 側からは認識しないという事情によるものだった。 | ||
:あとは 上記と同様な理由で、割り込み禁止にしているか、SLEEP_MODE_PWR_DOWN 等では USB シリアルは使えない。TCP/IP | :あとは 上記と同様な理由で、割り込み禁止にしているか、SLEEP_MODE_PWR_DOWN 等では USB シリアルは使えない。TCP/IP ネットワーク経由(AR9331 OpenWrt を AVR ライタとして使う)で使う方法/パッチ探すことにする... | ||
memo: | memo: | ||
Line 254: | Line 315: | ||
== 割り込み禁止 もしくは SLEEP_MODE_PWR_DOWN という状況で micro USB 経由で avrdude == | == 割り込み禁止 もしくは SLEEP_MODE_PWR_DOWN という状況で micro USB 経由で avrdude == | ||
IDE でコンパイルが終了するところで "32U4 RST" をダブルクリック(bootloader | IDE でコンパイルが終了するところで "32U4 RST" をダブルクリック(bootloader mode に)すると、タイミングが合えばプログラムを転送できる。 | ||
:([http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#YUN_.E3.81.A8_SPI_.E3.81.A8_ICSP_.E3.81.A8_avrdude SPI デバイスを接続している場合]は、これのほうが便利かも) | |||
== | == 2つのマイコン・3つの状態 == | ||
[http://playground.arduino.cc/Hardware/Yun#rebootStability How to improve reboot/reset stability] | [http://playground.arduino.cc/Hardware/Yun#rebootStability How to improve reboot/reset stability] | ||
Line 341: | Line 403: | ||
=== OpenWrt の init script 完了を待つ処理 === | === OpenWrt の init script 完了を待つ処理 === | ||
USB LED (明るい白色)が点灯する時点で OpenWrt が起動済み(rc. | USB LED (明るい白色)が点灯する時点で OpenWrt が起動済み(rc.local 実行時)ということを利用して、 | ||
:/etc/rc.local の boot-complete-notify 実行直前は brightness は 0 である。boot-complete-notify 実行後に 255 である。 | :/etc/rc.local の boot-complete-notify 実行直前は brightness は 0 である。boot-complete-notify 実行後に 255 である。 | ||
:白色 LED を消灯するために trigger に none を入力後も brightness は 255 である。 | :白色 LED を消灯するために trigger に none を入力後も brightness は 255 である。 | ||
::'''どうもバグと認識されたようで最新の OpenWrt では none を設定すると brightness は 0 になる。''' | |||
('''Leonardo側で''') | ('''Leonardo側で''') | ||
Line 374: | Line 437: | ||
=== NTP 時刻同期完了確認 === | === NTP 時刻同期完了確認 === | ||
OpenWrt 起動直後は、ネットワークの設定処理が終わっていないことや、NTP で時刻同期がまだできていない状態で、Leonardo 側の処理が動く場合がある。 | OpenWrt 起動直後は、ネットワークの設定処理が終わっていないことや、NTP で時刻同期がまだできていない状態で、Leonardo 側の処理が動く場合がある。 | ||
:ちなみに OpenWrt 側のマイコンには RTC | :ちなみに OpenWrt 側のマイコンには RTC がなく、ブート直後は、時刻が大幅に違っている。(/etc ディレクトリにあるファイルの最新日付を boot 時に設定している) | ||
上記の関数で OpenWrt のブートシーケンス完了確認後、NTP (BusyBox sysntpd) の同期を待つ(25秒ほどで同期する)処理を配置しておく。もちろん、OpenWrt 稼働済みの状態で Leonardo が起動する場合は待つ必要は無い。 | 上記の関数で OpenWrt のブートシーケンス完了確認後、NTP (BusyBox sysntpd) の同期を待つ(25秒ほどで同期する)処理を配置しておく。もちろん、OpenWrt 稼働済みの状態で Leonardo が起動する場合は待つ必要は無い。 | ||
= Leonardo | = Leonardo = | ||
== I/O == | == I/O == | ||
D0/INT2, D1/INT3 は AR9331 との Serial1 用に接続されている。Yun で外部割り込みで使えるのは D2/INT1 と D3/INI0 とのこと。D7/INT4 は AR9331 の ハンドシェイク用(予定)なので使わない。 | D0/INT2, D1/INT3 は AR9331 との Serial1 用に接続されている。Yun で外部割り込みで使えるのは D2/INT1 と D3/INI0 とのこと。D7/INT4 は AR9331 の ハンドシェイク用(予定)なので使わない。 | ||
I2C(TWI)の SDA/SCL が Uno は A4/A5。Yun は D2/D3 。 | I2C(TWI)の SDA/SCL が Uno は A4/A5。Yun は D2/D3 。 | ||
: | :Uno で使っていた INT1/INT0 の外部割り込みが使えない... | ||
::I2C使わないように、SPI に回路変えるか... | ::I2C使わないように、SPI に回路変えるか... | ||
:::SPI で気象データセンサーなら | :::SPI で気象データセンサーなら | ||
Line 393: | Line 456: | ||
:::ハードウェアSPI も UNO と異なる。UNO はICSP 端子と PIN 10, 11, 12 だが YUN は ICSP 端子のみだ。 | :::ハードウェアSPI も UNO と異なる。UNO はICSP 端子と PIN 10, 11, 12 だが YUN は ICSP 端子のみだ。 | ||
::::Yun で ハードウェア SPI のために ICSP 端子に接続する場合は問題がある。network 経由の avrdude で[http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#SPI_.E3.81.A8_ICSP_.E3.81.A8_avrdude エラー]がでる。 | ::::Yun で ハードウェア SPI のために ICSP 端子に接続する場合は問題がある。network 経由の avrdude で[http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#SPI_.E3.81.A8_ICSP_.E3.81.A8_avrdude エラー]がでる。 | ||
:Pin | :Pin による割り込みを他の Pin で可能にする方法がある。 | ||
[http://forum.arduino.cc/index.php?topic=182173.0 Leonardo - using I2C and external interrupts] | [http://forum.arduino.cc/index.php?topic=182173.0 Leonardo - using I2C and external interrupts] | ||
[https://github.com/GreyGnome/PinChangeInt Pin Change Interrupt library for the Arduino] | [https://github.com/GreyGnome/PinChangeInt Pin Change Interrupt library for the Arduino] | ||
Line 457: | Line 520: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
:OpenWrt 側から ポート 6571 に接続するまで待つための Leonardo 側プログラム処理。 | :OpenWrt 側から ポート 6571 に接続するまで待つための Leonardo 側プログラム処理。 | ||
'''注意: loop で待っているので OpenWrt 側の bridge.py が OpenWrt 側の CPU を食う。早い目に OpenWrt 側で yun console に繋げて、この loop を抜けるようにしてあげる事。''' | |||
== Process == | == Process == | ||
Line 464: | Line 528: | ||
[http://xx-prime.hatenablog.com/entry/2015/04/26/224618 Arduino yunで放射線センサのデータをxivelyとM2Xにアップロードする - XX-Prime's blog] | [http://xx-prime.hatenablog.com/entry/2015/04/26/224618 Arduino yunで放射線センサのデータをxivelyとM2Xにアップロードする - XX-Prime's blog] | ||
[http://qiita.com/kassy_kz/items/ebeda9bcda444cf401a0 IFTTTを用いてArduinoからツイートする | [http://qiita.com/kassy_kz/items/ebeda9bcda444cf401a0 IFTTTを用いてArduinoからツイートする] | ||
[https://github.com/itman83/ArduinoYun https://github.com/itman83/ArduinoYun] | [https://github.com/itman83/ArduinoYun https://github.com/itman83/ArduinoYun] | ||
Line 511: | Line 575: | ||
{ | { | ||
uint8_t sreg = SREG; | uint8_t sreg = SREG; | ||
noInterrupts(); // Protect from a scheduler and prevent transactionBegin | noInterrupts(); // Protect from a scheduler and prevent transactionBegin | ||
if (!initialized) { | if (!initialized) { | ||
// Set SS to high so a connected chip will be "deselected" by default | // Set SS to high so a connected chip will be "deselected" by default | ||
uint8_t port = digitalPinToPort(SS); | uint8_t port = digitalPinToPort(SS); | ||
uint8_t bit = digitalPinToBitMask(SS); | uint8_t bit = digitalPinToBitMask(SS); | ||
volatile uint8_t *reg = portModeRegister(port); | volatile uint8_t *reg = portModeRegister(port); | ||
// if the SS pin is not already configured as an output | // if the SS pin is not already configured as an output | ||
// then set it high (to enable the internal pull-up resistor) | // then set it high (to enable the internal pull-up resistor) | ||
if(!(*reg & bit)){ | if(!(*reg & bit)){ | ||
digitalWrite(SS, HIGH); | digitalWrite(SS, HIGH); | ||
} | } | ||
// When the SS pin is set as OUTPUT, it can be used as | // When the SS pin is set as OUTPUT, it can be used as | ||
// a general purpose output port (it doesn't influence | // a general purpose output port (it doesn't influence | ||
// SPI operations). | // SPI operations). | ||
pinMode(SS, OUTPUT); | pinMode(SS, OUTPUT); | ||
// Warning: if the SS pin ever becomes a LOW INPUT then SPI | // Warning: if the SS pin ever becomes a LOW INPUT then SPI | ||
// automatically switches to Slave, so the data direction of | // automatically switches to Slave, so the data direction of | ||
// the SS pin MUST be kept as OUTPUT. | // the SS pin MUST be kept as OUTPUT. | ||
SPCR |= _BV(MSTR); | SPCR |= _BV(MSTR); | ||
SPCR |= _BV(SPE); | SPCR |= _BV(SPE); | ||
Line 543: | Line 607: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
で RX LED が付きっぱなしの条件でも RX LED は消灯することができる。 | で RX LED が付きっぱなしの条件でも RX LED は消灯することができる。 | ||
ちなみに、複数の SPI デバイスを使う場合は、SPI Library で初期化する前に、すべての SPI デバイスの CS を必ず HIGH にしておくこと。 | |||
<syntaxhighlight lang="cpp" enclose="div"> | |||
/* Prepare for using multiple SPI devices */ | |||
pinMode(SPI1_CS, OUTPUT); | |||
digitalWrite(SPI1_CS, HIGH); | |||
pinMode(SPI2_CS, OUTPUT); | |||
digitalWrite(SPI2_CS, HIGH); | |||
/* Init SPI lib */ | |||
SPI.begin(); | |||
</syntaxhighlight> | |||
== DS3234 の SQW と Alarm == | == DS3234 の SQW と Alarm == | ||
Line 675: | Line 751: | ||
[https://www.kernel.org/doc/Documentation/leds/leds-class.txt LED handling under Linux] | [https://www.kernel.org/doc/Documentation/leds/leds-class.txt LED handling under Linux] | ||
== 起動後の LED の点減 == | === 起動後の LED の点減 === | ||
USB LED (まぶしい白色) は /etc/rc.local の boot-complete-notify で常時点灯に設定される。 | USB LED (まぶしい白色) は /etc/rc.local の boot-complete-notify で常時点灯に設定される。 | ||
[https://github.com/arduino/openwrt-packages-yun/blob/0fb82cf85e489ffad89a78a58beac9d256c1bbbf/arduino/yun-scripts/files/usr/bin/boot-complete-notify boot-complete-notify] | [https://github.com/arduino/openwrt-packages-yun/blob/0fb82cf85e489ffad89a78a58beac9d256c1bbbf/arduino/yun-scripts/files/usr/bin/boot-complete-notify boot-complete-notify] | ||
WLAN LED (暗い青色) は | WLAN LED (暗い青色) は WiFi モジュールの動作確認・初期化・リセット等の操作時にブリンクするようになっている。処理が終わったら消灯される。 | ||
[https://github.com/arduino/openwrt-packages-yun/blob/master/arduino/yun-scripts/files/usr/bin/wifi-live-or-reset wifi-live-or-reset] | [https://github.com/arduino/openwrt-packages-yun/blob/master/arduino/yun-scripts/files/usr/bin/wifi-live-or-reset wifi-live-or-reset] | ||
[https://github.com/arduino/openwrt-packages-yun/blob/0fb82cf85e489ffad89a78a58beac9d256c1bbbf/arduino/yun-scripts/files/usr/bin/wifi-reset-button-released wifi-reset-button-released] | [https://github.com/arduino/openwrt-packages-yun/blob/0fb82cf85e489ffad89a78a58beac9d256c1bbbf/arduino/yun-scripts/files/usr/bin/wifi-reset-button-released wifi-reset-button-released] | ||
Line 744: | Line 820: | ||
### なになあればそれを upgrade | ### なになあればそれを upgrade | ||
### opkg upgrade temboo | ### opkg upgrade temboo | ||
opkg install ca-certificates | |||
opkg install unzip | opkg install unzip | ||
opkg install screen | opkg install screen | ||
opkg install logrotate | opkg install logrotate | ||
opkg install diffutils | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
opkg install dosfsck | |||
# opkg install dosfstools | |||
umount /dev/sdb1 | |||
dosfsck -t -a -w /dev/sdb1 | |||
# fsck.fat -t -a -w /dev/sda1 | |||
/sbin/block mount | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<syntaxhighlight lang="bash" enclose="div"> | <syntaxhighlight lang="bash" enclose="div"> | ||
mkdir -p -m 0755 / | mkdir -p -m 0755 /usr/local/var/lib/logrotate | ||
crontab -e | crontab -e | ||
### logrotal の記述かく | ### logrotal の記述かく | ||
### 25 6 * * * /usr/sbin/logrotate -s / | ### 25 6 * * * /usr/sbin/logrotate -s /usr/local/var/lib/logrotate/status /etc/logrotate.conf > /dev/null 2>&1 | ||
### もしくは crontab ファイル | ### もしくは crontab ファイル | ||
/etc/init.d/cron restart | /etc/init.d/cron restart | ||
Line 825: | Line 912: | ||
== python beaver == | == python beaver == | ||
ELK stack / Elastic Stack (Logstash + Elasticsearch + Kibana) に計測データを送るために、軽量 shipper beaver を導入。もちろん経路の安全性や接続先の厳密化のために '''SSH Tunneling''' を使用する。 | |||
:本当は filebeat が良いのだが、Golang が MIPS に対応してない。 | :本当は filebeat が良いのだが、Golang が MIPS に対応してない。 | ||
導入する前に micro-SD でディスク容量を増やしておく事。 | 導入する前に micro-SD でディスク容量を増やしておく事。 | ||
Line 835: | Line 922: | ||
easy_install pip | easy_install pip | ||
opkg install python-sqlite3 | opkg install python-sqlite3 | ||
pip install beaver== | pip install beaver==36.2.0 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
SSH Tunneling | SSH Tunneling の設定するため OpenWrt-Yun の 軽量 ssh である Dropbear SSH のための key 変換ツール。これで Dropbear 用に変換する。 | ||
<syntaxhighlight lang="bash" enclose="div"> | <syntaxhighlight lang="bash" enclose="div"> | ||
opkg install dropbearconvert | opkg install dropbearconvert | ||
Line 859: | Line 946: | ||
いろいろ設定して意外とさっくり supervisord 配下で beaver が動いた。 | いろいろ設定して意外とさっくり supervisord 配下で beaver が動いた。 | ||
: | :ついでに、外部からの接続用 ssh tunnel も稼働中... | ||
init script で ssh を起動する場合、 HOME が設定されていないので、ssh 関連のファイルの操作ができない。 | init script で ssh を起動する場合、 HOME が設定されていないので、ssh 関連のファイルの操作ができない。 | ||
Line 874: | Line 961: | ||
python supervisor と beaver を稼働させるともちろんメモリーは圧迫されるので無駄をなくす事が重要。 | python supervisor と beaver を稼働させるともちろんメモリーは圧迫されるので無駄をなくす事が重要。 | ||
本当は OpenSSH client インストールして ssh tunnel のいろんなオプションつけたいのだけど我慢。ntpd も同様。 | 本当は OpenSSH client インストールして ssh tunnel のいろんなオプションつけたいのだけど我慢。ntpd も同様。 | ||
: | :(最終的には、ExitOnForwardFailure=yes が必要だったので OpenSSH-client は入れた。) | ||
<syntaxhighlight lang="bash" enclose="div"> | <syntaxhighlight lang="bash" enclose="div"> | ||
Line 884: | Line 971: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
python supervisor と beaver を稼働させた状態。 | python supervisor と beaver を稼働させた状態。 | ||
ちなみに、AR9331 は MIPS 24Kc で FPU は無し。 | |||
== メンテ用トンネル == | == メンテ用トンネル == | ||
Line 894: | Line 983: | ||
ssh tunnel サービス は python supervisord 配下で稼働させた。 | ssh tunnel サービス は python supervisord 配下で稼働させた。 | ||
:shell script を supervisord で管理する場合、最終的なプログラム(この場合は ssh)は exec 付きで起動すること。でないと supervisord が ssh のプロセス追えない。 | |||
dropbear の client dbclient のオプションを調査したが、 -o は無視するようだ。 | dropbear の client dbclient のオプションを調査したが、 -o は無視するようだ。 | ||
Line 912: | Line 1,002: | ||
要調査... | 要調査... | ||
== ssh-agent | == ssh-agent == | ||
OpenWrt側に入ってテストすることがおおいので('''開発環境側で''') | OpenWrt側に入ってテストすることがおおいので('''開発環境側で''') | ||
Line 934: | Line 1,024: | ||
自分の公開キーを書いておく。 | 自分の公開キーを書いておく。 | ||
= Yun を 無線(Wi-Fi) 有線(Ethernet) コンバータとして使う = | |||
[https://lede-project.org/docs/user-guide/relay_configuration Wifi Extender or Repeater or Bridge Configuration] | |||
[https://wiki.openwrt.org/doc/recipes/relayclient Routed Client with relayd (Pseudobridge)] | |||
[http://ultimania.org/trac/yuna/wiki/linux/OpenWrt2 http://ultimania.org/trac/yuna/wiki/linux/OpenWrt2] | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
opkg update | |||
opkg install relayd | |||
opkg install luci-proto-relay | |||
/etc/init.d/relayd enable | |||
/etc/init.d/relayd start | |||
</syntaxhighlight> | |||
Luci 使えば簡単だった。 | |||
↓は LEDE 公式資料なので IF 名が Yun と違うので注意。(Yun は wan が eth1、lan が wifi) | |||
[https://lede-project.org/_media/docs/guide-user/wifirepeater_interfaces_lan.png https://lede-project.org/_media/docs/user-guide/wifirepeater_interfaces_lan.png] | |||
[https://lede-project.org/_media/docs/guide-user/wifirepeater_newinterface.png https://lede-project.org/_media/docs/user-guide/wifirepeater_newinterface.png] | |||
[https://lede-project.org/_media/docs/guide-user/wifirepeater_relaybridge1.png https://lede-project.org/_media/docs/user-guide/wifirepeater_relaybridge1.png] | |||
[https://lede-project.org/_media/docs/guide-user/wifirepeater_relaybridge2.png https://lede-project.org/_media/docs/user-guide/wifirepeater_relaybridge2.png] | |||
[https://lede-project.org/_media/docs/guide-user/wifirepeater_firewall.png https://lede-project.org/_media/docs/user-guide/wifirepeater_firewall.png] | |||
↓を再度確認のこと。(Yun は wan が eth1) | |||
eth1 に ダミーの IP を振る。 | |||
<syntaxhighlight lang="text" enclose="div"> | |||
config interface 'wan' | |||
option ifname 'eth1' | |||
option proto 'static' | |||
option ipaddr '192.168.2.1' | |||
option netmask '255.255.255.0' | |||
config interface 'repeater_bridge' | |||
option proto 'relay' | |||
list network 'lan' | |||
list network 'wan' | |||
</syntaxhighlight> | |||
最後に relayd を restart | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
/etc/init.d/relayd restart | |||
</syntaxhighlight> | |||
relayd の '-I' オプションは ARP cache を頻繁に行うようで気持ち悪い '-i' に変えてみた。が、動かなかった。'-I' に戻した。 | |||
最終的に ARP storm 問題が気になったので、いろいろ試したが解決せず、relayd を使わずに、静的な bridge 構成にした。 | |||
bridge しているインターフェースには proxy_arp を有効にすること。 | |||
= Security = | |||
[http://hackaday.com/2016/11/11/arduworm-a-malware-for-your-arduino-yun/ ArduWorm: A Malware for Your Arduino Yun] | |||
:あーーー出てしまった... | |||
::ATmega32u4に侵入して、bridge でお好きに的... | |||
Arduino Yun の OpenWrt と AVR の脆弱性(要 Flash Plugin): | |||
[https://prezi.com/ufthiwidvb_0/tfm-arduino-yun-security-iot/ TFM - Arduino Yun - Security IoT] | |||
<syntaxhighlight lang="text" enclose="div"> | |||
Linux environment | |||
・ROOT as default user: | |||
No local access control. | |||
・Vulnerable components (Kali -> Nmap,Nessus): | |||
Dropbeard ssh 2011.54 -> DoS, remote execution... | |||
BusyBox v1.19.4 -> execute arbitrary commands... | |||
Kernel v3.3.8 -> DoS, gain privileges... | |||
・Critical paths: | |||
/var/hosts -> pharming attack | |||
/etc/opkg -> fake repository (SSLsniff) | |||
/usr/bin/kill-bridge -> DoS, own malicious bridge | |||
/rom/ -> persistence | |||
・No integrity file checks on boot. | |||
・No redirection to 443 (https). | |||
・Remote insecure configuration: | |||
Deauthentication attack to create new free | |||
hotspot, capturing WPA/WPA2 handshakes... | |||
Arduino environment: | |||
・Device sensors no authenticated. | |||
・No memory controls (Heap Overflow & Stack Overflow) | |||
</syntaxhighlight> | |||
Arduino の性質上しかたのないものもあるが、ネットワークからの侵入や使用不能攻撃はさけたい。 | |||
Compromised firmware: | |||
[http://fabytes.com/fab/?p=486 Are your devices secure? Firmware hacking | Fabytes.com] | |||
Update ヲタクとして作業中: [http://www.egrep.jp/wiki/index.php/OpenWrt_for_Arduino_Yun_cheat_sheet OpenWrt for Arduino Yun Security Upgrade] | |||
= Arduino Yún LininoOS 差分 = | |||
*Arduino LLC 版 Arduino IDE で「ライブラリを管理...」から MCU 側の Ciao Library がインストールできるようになっていた。 | |||
*Bridge Library か Ciao Library かは選択可能のように記述されている。(どちらか推奨があるわけではないみたい) | |||
*luci-app-arduino-webpanel (Linino 版) と Arduino-OS (arduinoos) かはこれも様子見っぽい。Arduino-OS は野心的なので安定するまでは様子見したほうがよさげ。 | |||
*LininoIO はまだ水面下っぽい。(MCUIO driver 系) コンセプトは素晴らしいが、vanilla kernel に取り込まれる勢いで OpenWrt / LEDE に入らないと将来はあやしい。 | |||
**こんなのあるんだ。これを拡張するのかな [https://www.kernel.org/doc/html/latest/driver-api/iio/index.html Industrial I/O (IIO)] | |||
*公式版 LininoOS (LininoIO 版) は Barrier Breaker(14.07) ベース。 (/etc/linino_version には attitude_adjustment とあるが)(あかん..) | |||
*Chaos Calmer(15.05) ベースの LininoOS もあることはある。 | |||
= link = | = link = | ||
Filebeat | Documenting the Yún: | ||
[http://codesnippets.altervista.org/documentation/yun/index.html http://codesnippets.altervista.org/documentation/yun/index.html] | |||
ibuyopenwrt: | |||
[http://www.ibuyopenwrt.com/index.php http://www.ibuyopenwrt.com/index.php] | |||
Filebeat を動かすための mips Golang 情報: | |||
[http://akagi201.org/blog/golang-on-openwrt/ Golang on OpenWrt · Akagi201] | [http://akagi201.org/blog/golang-on-openwrt/ Golang on OpenWrt · Akagi201] | ||
Yun 濃い議論: | Yun 濃い議論: | ||
[http://hackaday.com/2015/02/24/is-the-arduino-yun-open-hardware/ Is The Arduino Yun Open Hardware? | Hackaday] | [http://hackaday.com/2015/02/24/is-the-arduino-yun-open-hardware/ Is The Arduino Yun Open Hardware? | Hackaday] | ||
linux USB RTC: | |||
[https://code.google.com/p/mist-board/wiki/UsbRtc USB Real Time Clock (USBRTC)] | |||
= ToDo メモ = | |||
[http://akizukidenshi.com/catalog/g/gK-09833/ 秋月 006P安定化電源モジュールキット] | |||
:電流足りないね。 |