sea side she side

写真と山、資格が好きなアラフォーエンジニアのブログ

Arduino + fon + OpenWRT

      2011/11/12

できたセンサーから順次設置するにあたり、場所とケーブルの取り回しに頭を悩ませていました。

無線化を検討してみた物の、ZigBeeでは2台対で必要であること、Wi-Fi Shieldはまだ技適が通っておらず、技適の取れたWi-Fiモジュールは少し高すぎます。

結局有線となると設置位置とケーブル劣化が気になるなぁと思っていたところ、昔のfonルータのファーム入れ替えでシリアルを取れるようにできることを発見。またコンソールルータ等で使われているser2netを使えばネットワーク越しにArduinoへアクセスできそうということまでわかりました。

Arduino + FON2200 + ser2net Wi-Fi接続

そんなことを考えていると、同僚から新品のfonルータをくれるとのこと。がしかしSoftbankの嫌がらせかファーム入れ替えできないようにされていました。困ったなぁと思っていると別の同僚が古いfonルータ(FON2200)を持っているとのこと。このもらった新型と交換してもらうことに!

同僚がACアダプタを忘れるといったトラブルはあったものの早速ファーム入れ替えを実施。

FON2200ファームを入れ替えるためには2つの方法があるようです。まず一つ目はtelnetを使う方法。もう一つは本体を開けてシリアルを取る方法。

まず端末にpoortftpなどtftpサーバを準備。そして改造ファームであるOpenWRTのkamikaze版openwrt-atheros-root.squashfsとopenwrt-atheros-vmlinux.lzmaをダウンロードしてきてtftpの対象フォルダに入れます。

そして端末のアドレスを192.168.1.2/24で設定し192.168.1.1へpingを打ち続けます。その傍らputty(¬teraterm)を使ってtelnet 192.168.1.1 9000の情報だけ入力して置いておきます。

ここまで準備ができたらfonの電源をいれます。するとpingに応答するタイミングが2秒ぐらいあるはずなのでその瞬間にputtyのtelnetを実行、Enter押してCtrl+Cを押すとRedBootのプロンプトが出てくるはずです。タイミングは結構シビア。

telnetではなくシリアルを利用する場合、本体を開けて内部にあるピンヘッダからTX、RX、GNDの信号を取り出し、秋月のシリアルモジュールFT232RLのRX、TX、GNDへ(TX/RXは逆になるように)接続します。
# たぶん3.3Vへのレベルシフトが必要な気がするけどそのままいっちゃいました。

FON2200

電源入れた後Ctrl+Cを押せというメッセージがでますのでCtrl+Cを押下。RedBootのプロンプトが出てきます。

以下共通。

RedBoot > fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

RedBoot> ip_address
IP: 192.168.3.1/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.10

RedBoot> ip_address -l 172.16.0.254/24 -h 172.16.0.200
IP: 172.16.0.99/255.255.255.0, Gateway: 0.0.0.0
Default server: 172.16.0.200

RedBoot> load -r -b 0x80041000 openwrt-atheros-root.squashfs
Using default protocol (TFTP)
Raw file loaded 0x80041000-0x801e0fff, assumed entry at 0x80041000

RedBoot> fis create -l 0x06f0000 rootfs
... Erase from 0xa8030000-0xa8720000: ...............................................................................................................
... Program from 0x80041000-0x801e1000 at 0xa8030000: ..........................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

RedBoot> load -r -b 0x80041000 openwrt-atheros-vmlinux.lzma
Using default protocol (TFTP)
Raw file loaded 0x80041000-0x80100fff, assumed entry at 0x80041000

RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
... Erase from 0xa8720000-0xa87e0000: ............
... Program from 0x80041000-0x80101000 at 0xa8720000: ............
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

RedBoot> fconfig
Run script at boot: true
Boot script:
[Enter]

RedBoot > fis load -l vmlinux.bin.l7
RedBoot > exec
[Enter]
Boot script timeout (1000ms resolution): 5
Use BOOTP for network configuration: false
[Enter]
Gateway IP address: 172.16.0.1
Local IP address: 172.16.0.254
Local IP address mask: 255.255.255.0
Default server IP address: 172.16.0.200
Console baud rate: 9600
[Enter]
GDB connection port: 9000
[Enter]
Force console for special debug messages: false
[Enter]
Network debug at boot time: false
[Enter]
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> reset
... Resetting.

再起動がかかるのでtelnetの場合はアドレスを振り直したもので再度接続、シリアルの人はそのままでいけるはずです。

起動してきたら有線を使用しないクライアントモードで設定を仕込んでいきます。

# passwd

# uci set system.@sysem[0].hostname=fon
# uci set system.@system[0].timezone=JST-9
# uci commit system
# reboot

# vi /etc/config/wireless
config 'wifi-device' 'wifi0'
        option 'type' 'atheros'
        option 'channel' 'auto'
        option 'disabled' '0'
        option 'txpower' '10'
        option 'diversity' '0'

config 'wifi-iface'
        option 'device' 'wifi0'
        option 'network' 'wan'
        option 'mode' 'sta'
        option 'ssid' ''
        option 'encryption' 'psk'
        option 'key' ''

# vi /etc/config/network
config 'interface' 'loopback'
        option 'ifname' 'lo'
        option 'proto' 'static'
        option 'ipaddr' '127.0.0.1'
        option 'netmask' '255.0.0.0'

config 'interface' 'lan'
        option 'ifname' 'eth0'
        option 'type' 'bridge'
        option 'proto' 'static'

config 'interface' 'wan'
        option 'ifname' 'ath0'
        option 'proto' 'static'
        option 'ipaddr' '172.16.0.254'
        option 'netmask' '255.255.255.0'
        option 'gateway' '172.16.0.1'
        option 'dns' '172.16.0.1'

# vi /etc/config/firewall
config zone
        option name             wan
#       option input    REJECT
        option input    ACCEPT
        option output   ACCEPT
        option forward  REJECT
#       option masq             1
#       option mtu_fix  1

この3つのファイルを更新して再起動します。本当はuciコマンドで設定するのが正しいのだと思うのですが、やり方が間違っているのかうまくできませんでした。

これでwifi経由でfonに入ることができるかと思います。

 

 - Make , , , , , ,