福箱に入っていた「Linino わんわんハントセット」はLinino OneというArduino Yun MINI互換のマイコンボードと、これをArduino YunにするためのUSBホストとイーサネットのパーツのセットでした。
Linino Oneの情報はArduino Yunを含めればネットに数多くあるので詳細はすぐに分かります。このボードの面白いところはATmega32U4ベースのArduino Leonardo相当のマイコンシステムとAR9331ベースのLinino(OpenWRT) Linuxのマイコンシステムが共存している点です。
双方のシステムをシリアル接続してあり、bridgeと呼ばれるライブラリでデータのやり取りを行うことが出来ます。Linux側にはネットワークやUSBホストなどのデバイスが接続されていてArduino単体では行えない処理を担当しています。Linuxを使えば様々なネットワークサービスが実現できるのでArduinoをIOT対応にする面白い試みですね。
Linino Oneの初期設定についてはネットで調べれば出てくるので問題はないでしょう。
しかし残念なのは、このバージョンのLinino Oneでは肝心の連係が機能しない点です。色々試してみましたがbridgeがうまく働きません。理由はたぶんこれだと思うのですが、Linuxのアップデータがもう入手できなくなっているので確認しようがありません。
Linuxとのシリアル接続はArduinoのスケッチで確認できたので、Linux側でプログラムを自作すれば何とか連携できるのかもしれません。ただ使える言語がpython2だけというのはいまいちですね。割り切ってArduinoとLinux別々に利用するという手もありますが…。
どちらにしろLinuxを活用する方法がないかと思い調べてみたところ、OpenWRTプロジェクトでArduino Yun対応のファームウェアを見つけました。OpenWRTは主にルーターなどのネットワーク機器を作るときに利用されるLinuxディストリビューションですが、ネットワーク機器に特化しているわけではなく数多くのパッケージを簡単にインストールできるので様々な用途に活用できます。
Linino OneはYun互換なのでYun向けのファームウェアでも、きっと動くはずです。
導入についてはこのページで説明されています。ただ実際に行ってみると結構手間がかかります。ファームウェアも最新のものを使ったので、ちょっとだけこのページと設定が違う部分もあります。そこで補足も兼ねて以下に導入手順を簡単にまとめてみました。
まず用意しておかないといけないのが、シリアルターミナルソフトとtftpサーバーです。tftpサーバーはLinuxだと簡単に導入できるのでUbuntuで作業します。今回はUbuntu 23.10を使いました。また、Wi-Fiではなく有線のネットワーク環境も必要になります。
それでは手順です。
まず、オプションパーツを装着しておきます。USBホスト機能は今は使いませんがつけてみました。イーサーネットケーブルもつないでおきます。
続いてLinino OneをUSBでPCにつないでArduino IDEを起動します。ライブラリマネージャーから"bridge"を検索してインストールします。
ボードの設定で"Arduino Yun Mini"を選びます。"ファイル"→"スケッチ例"から"bridge"→"YunSerialTerminal"を選択して読み込みます。
コンパイルしてLinino Oneに書き込みます。
これ以降の作業はUbuntuで行います。まずは下記のコマンドでtftpdをインストールします。
sudo apt install tftpd-hpa
ここからyun-go-updater-linux64.tar.gzをダウンロードして解凍します。その中のtftpフォルダにあるu-boot-arduino-lede.binをUbuntuの/srv/tftpにコピーします。
続いてこのサイトからファームウェアをダウンロードします。
右上のドロップダウンリストでバージョン選択が行えます。今回はバージョン23.05.2を選択してみました。"SYSUPGRADE"ボタンを押して23.05.2のファームウェアをダウンロードします。
ダウンロードしたopenwrt-23.05.2-ath79-generic-arduino_yun-squashfs-sysupgrade.binを/srv/tftpにコピーします。
次にシリアルターミナルを起動します。GTKTermが使いやすいと思います。Linino OneとPCをUSBでつなぐと/dev/ttyACM0のシリアルポートが現れるのでシリアルターミナルで接続します。このときttyACM0へのアクセス権が必要なので、/etc/groupのrootとdialoutに自分のグループを追加しておきます。通信速度は115200です。
Linino Oneの3つあるボタンのうち、真ん中のボタンを押します。
指では押せないので細い棒のようなものを使うしかないでしょう。シリアルターミナルに4秒後にautobootするというメッセージが表示されたらすぐに"lin"と入力します。
コマンドプロンプト"linino>"が表示されたらネットワーク設定のために以下のコマンドを入力していきます。「tftpサーバのIPアドレス」はUbuntuのIPアドレスで、「LininoOneのIPアドレス」は有線のIPアドレスで任意の値を設定します。Wi-Fiは使いません。
setenv serverip tftpサーバのIPアドレス;
setenv ipaddr LininoOneのIPアドレス;
tftpサーバーからブートローダーを読み込みます。
tftp 0x80060000 u-boot-arduino-lede.bin
古いブートローダーを消して新しいものに書き換えます。
erase 0x9f000000 +0x40000;
cp.b $fileaddr 0x9f000000 $filesize;
erase 0x9f040000 +0x10000
tftpサーバーからファームウェアを読み込んでLinino Oneに書き込みます。
tftp 0x80060000 openwrt-22.03.3-ath79-generic-arduino_yun-squashfs-sysupgrade.bin;
erase 0x9f050000 +0xE50000;
cp.b $fileaddr 0x9f050000 $filesize;
書き込みが終了したら、真ん中のボタンを押してリセットします。起動メッセージがある程度表示された後にリターンキーを押すとLininoOneのコンソールにログインできます。ネットワークの設定まで少し時間がかかるので、ログイン後のコンソールにメッセージが出続けるかもしれません。
ここで、
ifconfig -a
と入力してネットワークインターフェイスにbr-lanが表示されているのを確認してください。
br-lanはデフォルトで192.168.1.1となっています。このアドレスが自宅のルータのアドレスと重なっているときは下記のコマンドてbr-lanのアドレスを変更します。
ifconfig br-lan IPアドレス
PCのブラウザから上記のbr-lanのアドレスへアクセスします。
パスワードはありません。このままログインできます。
OpenWRTの搭載されたLinino Oneのステータスが画面に収まりきらないほど細かく表示されています。上部のメニューには設定項目が数多くあり、OpenWRTの設定が全て行えるようになっています。
まずはLinino Oneのアドレスを設定しましょう。メニュー"Network"→"Interfaces"を選び、
表示されたネットワークインターフェースの右にある"Edit"ボタンで設定画面に入れます。
Wi-Fiの設定も行えますがデフォルトで有線のイーサネットからしか設定ページにアクセスできないですし、Linino Oneをルーターとして使うつもりはないので無線LANはオフのままにしておきました。有線LANの方が高速ですし、こちらだけ使うことにします。
ネットワークの設定が済んでインターネットにアクセスできるようになったら、ソフトウェアのアップデートを行います。メニューの"System"→"Software"を選びます。
さらに"Updates"タブを選び、表示されているパッケージ右側の"Upgrade..."ボタンを押してインストール済みソフトウェアのアップデートを行います。
Linino Oneにシリアルコンソールではなくリモートからアクセスしたいので、sshサーバーをインストールします。"Available"タブを押してパッケージの選択画面にします。
ここで"update lists..."ボタンを押してインストール可能なパッケージの一覧を表示します。続けて"Filter"の項目にopenssh-serverと入力します。
openssh-serverパッケージが表示されたら"Install..."ボタンを押してインストールします。
シリアルコンソールやsshで接続したターミナルからopkgコマンドでパッケージの管理を行うことも出来ます。詳細はここで確認してください。
これでLinino Onを最新のOpenWRTとして使えるようになりました。インストールできるパッケージがたくさんあるので色々なサーバーとして使えそうです。sambaやnfsとUSBストレージも対応しているようなのでUSBハードディスクをつないでNASに出来るのかもしれません。後で試してみます。
Arduino Yun側はこれ以上なにもせず、このままOpenWRTのシリアルコンソールにしておいてもいいかもしれません。LANにつなげるマイコンにはESP32などがあるのでYunは必要はないですから。
※コメント投稿者のブログIDはブログ作成者のみに通知されます