7,166
edits
(95 intermediate revisions by the same user not shown) | |||
Line 27: | Line 27: | ||
回路図も微妙に違うような... | 回路図も微妙に違うような... | ||
'''朗報! 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|差分を追っかけてみる]] | |||
== 諸注意 == | == 諸注意 == | ||
Line 36: | Line 47: | ||
ソフトウェアの情報は LLC に合わせている。 | ソフトウェアの情報は LLC に合わせている。 | ||
Arduino Yun の面白さ(逆に難しさ) | Arduino Yun の面白さ(逆に難しさ)はマイコン屋の知識と、UNIX屋・ネットワーク屋の知識と、Web屋の知識がすべて必要なところ。それぞれの専門家からみたら他方はブラックボックスに見えて理解の妨げになっているようだ。Arduino Yun の使い方・付き合い方は多方面から見てあげることが大切だ。 | ||
= 導入 = | = 導入 = | ||
Line 51: | Line 62: | ||
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 80: | Line 91: | ||
'''注意''': WiFi ルーターが「アイソレーション」「ネットワーク分離機能」「プライバシーセパレータ」等の名前の端末間通信を拒否する設定になっていると同一ネットワークに有る機器は Yun (OpenWrt) に接続できない。WiFi ルーターの該当を機能を解除する事。 | '''注意''': WiFi ルーターが「アイソレーション」「ネットワーク分離機能」「プライバシーセパレータ」等の名前の端末間通信を拒否する設定になっていると同一ネットワークに有る機器は Yun (OpenWrt) に接続できない。WiFi ルーターの該当を機能を解除する事。 | ||
'''重要''': '''TIMEZONE | '''重要''': '''TIMEZONE は正しく設定する事(Asia/Tokyo)。'''でないと技適的にまずいはず... | ||
=== ネットワーク設定に失敗したら === | === ネットワーク設定に失敗したら === | ||
AR9331 OpenWrt のシリアルコンソールを使って設定を修正する。 | AR9331 OpenWrt のシリアルコンソールを使って設定を修正する。 | ||
Line 119: | Line 130: | ||
のリンクをクリックする。OpenWrt の LuCI で設定する。 | のリンクをクリックする。OpenWrt の LuCI で設定する。 | ||
== OpenWrt- | |||
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] | Arduino LLC 純正システムイメージ: [https://www.arduino.cc/en/Main/Software Other Software, ARDUINO YÚN LINUX OS OPENWRT-YÚN] | ||
Line 126: | Line 140: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
'''注意''' : '''すべての設定やデータが消えます。''' | '''注意''' : '''すべての設定やデータが消えます。'''(luci の backup / restore を使う方法もあり) | ||
'''注意''' : '''アップデート後、もういちどWiFiの設定を最初からやり直す事。''' | '''注意''' : '''アップデート後、もういちどWiFiの設定を最初からやり直す事。''' | ||
Line 183: | 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 246: | 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 を安全に抜いておく。 | #:micro SD を使って Overlayfs で拡張している場合は micro SD を安全に抜いておく。 | ||
#::/etc/config/fstab の 該当の config 'mount' セクションを削除して micro-SD のファイルシステムを umount し micro-SD カードを抜く。 | #::/etc/config/fstab の 該当の config 'mount' セクションを削除して micro-SD のファイルシステムを umount し micro-SD カードを抜く。 | ||
Line 285: | Line 300: | ||
例の 1200bps でリセットするところでこける。 | 例の 1200bps でリセットするところでこける。 | ||
: | :私の開発環境が Windows の Cygwin なので、新しく接続された USB デバイスを Cygwin 側からは認識しないという事情によるものだった。 | ||
:あとは 上記と同様な理由で、割り込み禁止にしているか、SLEEP_MODE_PWR_DOWN 等では USB シリアルは使えない。TCP/IP ネットワーク経由(AR9331 OpenWrt を AVR ライタとして使う)で使う方法/パッチ探すことにする... | :あとは 上記と同様な理由で、割り込み禁止にしているか、SLEEP_MODE_PWR_DOWN 等では USB シリアルは使えない。TCP/IP ネットワーク経由(AR9331 OpenWrt を AVR ライタとして使う)で使う方法/パッチ探すことにする... | ||
Line 513: | 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 560: | 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 592: | 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 802: | Line 829: | ||
<syntaxhighlight lang="bash" enclose="div"> | <syntaxhighlight lang="bash" enclose="div"> | ||
opkg install dosfsck | opkg install dosfsck | ||
# opkg install dosfstools | |||
umount /dev/sdb1 | umount /dev/sdb1 | ||
dosfsck -t -a -w /dev/sdb1 | dosfsck -t -a -w /dev/sdb1 | ||
# fsck.fat -t -a -w /dev/sda1 | |||
/sbin/block mount | /sbin/block mount | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 883: | 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 896: | Line 925: | ||
</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 917: | Line 946: | ||
いろいろ設定して意外とさっくり supervisord 配下で beaver が動いた。 | いろいろ設定して意外とさっくり supervisord 配下で beaver が動いた。 | ||
: | :ついでに、外部からの接続用 ssh tunnel も稼働中... | ||
init script で ssh を起動する場合、 HOME が設定されていないので、ssh 関連のファイルの操作ができない。 | init script で ssh を起動する場合、 HOME が設定されていないので、ssh 関連のファイルの操作ができない。 | ||
Line 932: | 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 995: | 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 = | = 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): | Arduino Yun の OpenWrt と AVR の脆弱性(要 Flash Plugin): | ||
[https://prezi.com/ufthiwidvb_0/tfm-arduino-yun-security-iot/ TFM - Arduino Yun - Security IoT] | [https://prezi.com/ufthiwidvb_0/tfm-arduino-yun-security-iot/ TFM - Arduino Yun - Security IoT] | ||
Line 1,029: | Line 1,111: | ||
Update ヲタクとして作業中: [http://www.egrep.jp/wiki/index.php/OpenWrt_for_Arduino_Yun_cheat_sheet OpenWrt for Arduino Yun Security Upgrade] | 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 = | ||
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 情報: | 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] |