公開日:2020/02/01
title.png

9th Season


#9-3 Raspberry Piと有線LAN

 ここのところ、すっかり「Mathematica実行マシン」と化していて、電子工作(DIY)に活かせていないPi ZeroWですが、ENC28J60モジュールをSPI接続すると、有線LANが使えるようになるという情報を目にしました。
 Pi ZeroWは、無線LANが使えるので、あんまり魅力は無いのですが、万一、将来、無線LAN機能を持たないPi Zeroなどの機体を追加購入することがあれば、「ENC28J60モジュールを有効活用できるのでは?」と思い、トライしてみました。

ENC28J60モジュール

 昔、Arduinoで有線IP接続を試そうと購入したモジュール(下図)です。

ar47_enc28j60.jpg

 ENC28J60というLSIが搭載されていて、ArduinoとはSPIで通信します。UIPEthernetライブラリなどがリリースされていて、Arduinoで10BASE-T(10Mbps)の有線LAN機能を実現することができます。UNOで立ち上げた時の記事は、「#4-7 ENC28J60を使う」を参照してください。

 UNOで立ち上げた時には、いくつか問題点も明らかになりました。

 今回は、Pi ZeroWで使うので、ライブラリ(物量)の件は無関係ですが、「MACアドレスがない」のは、大問題です。RaspbianでENC28J60を使うとき、この問題(MACアドレス)をどの様に解決しているのでしようか?

Raspbian(Linux)というOS

 Raspbian(Linux)では、通常、新しいハードウェアを繋ぐ時、デバイスドライバのインストールが必要となります。「ドライバのインストール」と聞くと、まず、インターネットなどでドライバを探して、ソースを入手、make,install、OSの設定等、中々ハードウェアで面倒な印象があります。……多分、そんな状況だったら、「試してみよう」なんて、夢にも思わなかったと思います(1^−^;)。

 色々調べてみたところ、どうやら、デバイスドライバはインストール済みの様です。デュポンワイヤを使って、ハードウェア(ENC28J60モジュール)を接続し、OSの設定ファイルに数行追記するだけで使えるみたいです。うん、この程度なら、「やってみよう」と言う気になりました💡

Pi ZeroWのセットアップ

 筆者が試したのは、「#7-2 デザートにラズベリーパイはいかが?」の記事でセットアップしたPi ZeroWを前提としています。

 インストールパッケージNOOBSでインストールして、SPIなどの設定も実施済み(下図等)と言う前提です。

ar77_rpiset.png

 いつもは、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

 以下、実験中の様子です。

ar93_expr.jpg

 shellウインドウを開き、以下の様に実行してOSの設定ファイルを編集します。

  実験サンプル:【 】内はshellウインドウでのコマンド入力
  【sudo vi /boot/config.txt】 …… 以下一行を追加
  dtoverlay=enc28j60
    【ZZ】 …… セーブして終了

  【sudo reboot】 …… 再起動

 再起動後、Raspbianの右上に並んだアイコン(下図)を左クリックして、WiFiをOFF(Turn Off Wi-Fiを選択)してから実験を続けます。

ar93_wifioff.png

  【ifconfig】
  ar93_ifcfg1.png

 "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】
  ar93_ifcfg2.png

 まず、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。


btn_arduino.png

btn_prev.png btn_next.png

home