ここのところ、すっかり「Mathematica実行マシン」と化していて、電子工作(DIY)に活かせていないPi ZeroWですが、ENC28J60モジュールをSPI接続すると、有線LANが使えるようになるという情報を目にしました。
Pi ZeroWは、無線LANが使えるので、あんまり魅力は無いのですが、万一、将来、無線LAN機能を持たないPi Zeroなどの機体を追加購入することがあれば、「ENC28J60モジュールを有効活用できるのでは?」と思い、トライしてみました。
昔、Arduinoで有線IP接続を試そうと購入したモジュール(下図)です。
ENC28J60というLSIが搭載されていて、ArduinoとはSPIで通信します。UIPEthernetライブラリなどがリリースされていて、Arduinoで10BASE-T(10Mbps)の有線LAN機能を実現することができます。UNOで立ち上げた時の記事は、「#4-7 ENC28J60を使う」を参照してください。
UNOで立ち上げた時には、いくつか問題点も明らかになりました。
今回は、Pi ZeroWで使うので、ライブラリ(物量)の件は無関係ですが、「MACアドレスがない」のは、大問題です。RaspbianでENC28J60を使うとき、この問題(MACアドレス)をどの様に解決しているのでしようか?
Raspbian(Linux)では、通常、新しいハードウェアを繋ぐ時、デバイスドライバのインストールが必要となります。「ドライバのインストール」と聞くと、まず、インターネットなどでドライバを探して、ソースを入手、make,install、OSの設定等、中々ハードウェアで面倒な印象があります。……多分、そんな状況だったら、「試してみよう」なんて、夢にも思わなかったと思います(1^−^;)。
色々調べてみたところ、どうやら、デバイスドライバはインストール済みの様です。デュポンワイヤを使って、ハードウェア(ENC28J60モジュール)を接続し、OSの設定ファイルに数行追記するだけで使えるみたいです。うん、この程度なら、「やってみよう」と言う気になりました💡。
筆者が試したのは、「#7-2 デザートにラズベリーパイはいかが?」の記事でセットアップしたPi ZeroWを前提としています。
インストールパッケージNOOBSでインストールして、SPIなどの設定も実施済み(下図等)と言う前提です。
いつもは、Pi ZeroWを起動すると、自動的に無線LANで固定IP接続が確立されるので、そのアドレスに対して、VNC接続して操作するのですが、今回は、ネットワーク機能の試行なので、一旦、無線LAN接続を無効にして、「ちゃんと有線LAN接続できてますね」を、確認したいと思います。
すると、無線LAN+VNCが使用不能となるので、最初にNOOBSでセットアップした時の様に、Pi ZeroWにディスプレイ(HDMI)とキーボード&マウス(USB)を接続して実験を進めます。ちょっと面倒(1x_x;)。
まずは、ハードウェアを接続します。以下の通り、Pi ZeroWとENC28J60モジュールを接続してください。
Pi ZeroW | 接続 | ENC28J60モジュール |
3.3V(phys#17等) | → | VCC |
GND(phys#25等) | ⇔ | GND |
phys#24 | → | CS |
phys#23 | → | SCLK |
phys#21 | ← | SO |
phys#19 | → | SI |
phys#22 | ← | INT |
× | RESET | |
× | CLKOUT | |
× | WOL |
以下、実験中の様子です。
shellウインドウを開き、以下の様に実行してOSの設定ファイルを編集します。
実験サンプル:【 】内はshellウインドウでのコマンド入力
【sudo vi /boot/config.txt】 …… 以下一行を追加
dtoverlay=enc28j60
【ZZ】 …… セーブして終了
【sudo reboot】 …… 再起動
再起動後、Raspbianの右上に並んだアイコン(下図)を左クリックして、WiFiをOFF(Turn Off Wi-Fiを選択)してから実験を続けます。
【ifconfig】
"eth0"がENC28J60による有線LANのデバイス名です。赤枠内がENC28J60のMACアドレスの様です。どこにも、何にも、設定していないのですが、それらしきMACアドレスが記載されています。MACアドレスの検索サイトで打ち込んだところ、「結果が取得できませんでした」と、表示されました。少なくとも、執筆時点では登録されていないアドレスみたいです。
MACアドレスの検索サイトを検索する(別ウインドウが開きます)
IPアドレス(上図より、192.168.0.102)は、筆者宅のルータから、DHCPで割り当ててもらったみたいです。
固定IPにしておいた方が、何かと便利なので、「#7-2 デザートにラズベリーパイはいかが?」で設定したのと同様に、固定IPを設定します。
【sudo vi /etc/dhcpcd.conf】
:
: 「#7-2 デザートにラズベリーパイはいかが?」を参照
: ただし、"interface"は、"wlan0" → "eth0"に変更です。
:
【ZZ】 …… セーブして終了
【sudo reboot】 …… 再起動
再起動後、実験を続けます。
【ifconfig】
まず、IPアドレスが、先程「/etc/dhcpcd.conf」に設定した固定IPになったことを確認してください。上例では、固定IPを"192.168.0.12"としました。そして注目は、再び赤枠内のMACアドレスですが、さっきとは異なるMACアドレスが表示されています。MACアドレス検索の結果は、今回も「結果が取得できませんでした」、でした……。
どうやら、リブートの度にランダムなMACアドレスを割り当てているみたいです。今回試した2回のMACアドレスに関しては、「結果が取得できませんでした」と、他のメーカ等に割り振られたのとは異なるアドレスでしたが、毎回そうなるのかどうかは知りません。
万一、世界のどこかで稼働する機体と同じMACアドレスになってしまったら、どうなるのでしょうか……??
いずれにせよ、筆者の環境では、以下の通り、いくつか不都合な点もありました。
やっぱり、まともなMACアドレスを持たない機器は、使う気にはなりません……。
有線LANでネットワーク接続した後、ネットワーク内の機器に【ping 192.168.0.1】してみたり、VNCで接続してみたりしましたが、特に問題なく、使用可能でした。
ただ、動作がちょっと不安定で、それには気分を冷やされてしまいました。
Pi ZeroWとの接続に使ったデュポンワイヤを、ちょっと触っただけでリンクが切れてしまったり、そのあと何度か再起動しても、中々再認識されなかったり、とても不安定でした。配線を繋ぎ直してみたりとか、色々やっている間に回復したのですが、原因は特定できませんでした。
使っているうちに同様な症状になることが何度かあって、すっかり萎えてしまいました。
結論としては、接続できて動作も確認できたけど、不安定なのは大きなマイナス評価、と言ったところです。はっきり言って、Raspberry Piの有線LAN接続として、常用したいとは全く思いませんでした。Pi ZeroWには、無線LANがあって、なおかつこれが安定しているので、なおさらです。
将来、LAN機能を持たないPi Zero等の機体を買い足した時に、「LAN機能の実現に使えるかも」と、思って実験してみたのですが、別なアプローチを考えた方が良さそうです。その前に、Raspberry Pi(Raspbian)では、マイクロ秒(μs)オーダの細かな電子制御は無理なので、筆者がこれ以上Raspberry Piを買い足すことは無いでしょうけど……。
Pi ZeroWに関しては、1,500円そこそこで、Mathematicaが使えるマシンを入手できたことは予想外の贈り物だったので、それだけで良しとしておきます。電子工作の方は、Arduinoで頑張りますo(1^−^)o。