🔥

Raspberry PiでGPIB通信を実現する

に公開

最初に

Zennに書くのは初めてなので、不備がありましたら申し訳ございません。

計測器との通信では、USBとの接続情報は多く見つかりますが、GPIBについてはかなり難航したので、同じ課題に直面する方の役に立てれば幸いです。

参考にした記事

以下の投稿を参考にさせていただきました:

ただし、使用しているLinux-GPIBドライバがかなり改訂されており、従来のやり方を大きく変更する必要がありました。

使用した機材

古いOSのインストールが必要な理由

使用予定のドライバのソースコードを確認すると、SourceForgeで4.3.7のファイルは存在しますが中身が空で、実質的に最新版は4.3.6となっています。

このバージョンはカーネルの互換性の関係で最新のRaspberry Pi OSでは動作しないため、古いOSのインストールが必要です。

Raspberry Pi Imagerで古いOSをインストール

  1. 他のPCで、Raspberry Piの公式インデックスから2024/10/22のバージョンをダウンロードします:
    https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2024-10-28/

  2. Raspberry Pi Imagerをインストールします:
    https://www.raspberrypi.com/software/

  3. Imagerの下部にある「カスタムイメージを使用」から、ダウンロードしたファームウェアをMicroSDに書き込みます。

  4. MicroSDをRaspberry Piに挿入し、電源を接続して起動します。

重要な注意事項

以下からRaspberry Piでの操作になりますが、古いOSを使用する際は、絶対にsudo apt updateを実行しないでください。OSもアップグレードされてしまい、最初からやり直しになります。システムからアップデートを求められた場合も同様に無視してください。

必要なパッケージのインストール

sudo apt install -y build-essential linux-headers-$(uname -r) libtool autoconf automake libusb-dev libgpib-dev dkms

Linux-GPIBドライバのビルドとインストール

  1. SourceForgeからtarファイルをダウンロードします:
wget https://sourceforge.net/projects/linux-gpib/files/latest/download

もしくは直接ダウンロード:

https://sourceforge.net/projects/linux-gpib/files/linux-gpib for 3.x.x and 2.6.x kernels/4.3.6/

  1. ダウンロードしたファイルを展開してビルドします:
cd Downloads
tar -xvzf linux-gpib-4.3.6.tar.gz
cd linux-gpib-4.3.6
tar -xvzf *.tar.gz
  1. カーネルモジュールをビルドします:
cd linux-gpib-kernel-4.3.6
make
sudo make install
  1. ユーザーライブラリをビルドします:
cd ..
cd linux-gpib-user-4.3.6
./bootstrap
./configure --sysconfdir=/etc
make
sudo make install

GPIB設定ファイルの編集

sudo cp util/templates/gpib.conf /etc/gpib.conf
sudo nano /etc/gpib.conf

設定ファイルの内容を書き換えます(GPIB-USB-HS+の場合):

interface {
    minor = 0
    board_type = "ni_usb_b"
    pad = 0
    sad = 0
    master = yes
}

注意: 他の製品を使用する場合は、対応ハードウェア一覧を参考に設定を変更してください。メーカーや製品により設定が異なるため、注意事項もよく読んでください。

ドライバの読み込みと確認

sudo depmod -a
sudo modprobe gpib_common
sudo ldconfig
sudo gpib_config

インストールが正常に完了したか確認します:

lsmod | grep gpib

GPIBモジュールが表示されれば、インストール成功です。

動作確認

ibtestコマンドで動作確認を行います:

ibtest

以下の手順で機器との通信をテストします:

  1. d を入力
  2. 1(機器のアドレス。今回は1でした)を入力
  3. w を入力
  4. *IDN? を入力
  5. r を入力
  6. 100 を入力

機器の情報が表示されれば、正常に動作しています。

再起動時に自動ロードする

このままでは再起動するたびにmodprobeしなければならないので、自動起動するようにします。

echo "gpib_common" | sudo tee -a /etc/modules

Python環境の設定

Python開発環境をセットアップします:

sudo apt-get install python3-dev python3-distutils python3-pip python3-setuptools

Python用GPIBライブラリをインストールします:

cd linux-gpib-user-4.3.6
cd language/python/
sudo python3 setup.py install

PyVISAのインストール

システム全体にインストールする場合:

sudo apt-get install python3-pyvisa

venvを使ってインストールするとなぜか認識されずでした。

サンプルプログラムの実行

以下のPythonプログラムで動作確認を行います。任意の場所にtest.pyを作成します:

import pyvisa

rm = pyvisa.ResourceManager()
devs = rm.list_resources()
print("機器一覧:", devs)

num = int(input("接続したい機器の番号を入力してください:"))
inst = rm.open_resource(devs[num])
print("IDN:", inst.query("*IDN?"))
inst.close()

プログラムを実行します:

sudo python3 test.py

当環境ではsudoが必要でした。
IDNコマンドの応答が正常に表示されれば、設定完了です!

補足:NIVISAについて

「NIVISAはLinux対応なので、それを使えばもっと簡単にVISAが使えるのでは?」と考える方もいらっしゃるかもしれません。(私がそうでした)

実際に試してみましたが、NIVISAはArm64アーキテクチャに対応していません。UbuntuをインストールしてもArmプロセッサでは動作しないため、Raspberry Piで使用するには今回紹介した方法が必要になります。

まとめ

Raspberry PiでGPIB通信を実現するには、古いOSと対応するドライバを使用する必要があります。手順は複雑ですが、一度設定が完了すればPyVISAを使って計測器との通信が可能になります。

参考になれば幸いです!

Discussion