United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

ラズパイとPythonでPmodを簡単に利用しよう

PPP_Featured_5339015e4612be9dba8d0396eb89ebb3ca92a7d2.jpg

Pmodを利用してモジュールの追加を簡単に

Pmodはperipheral moduleの略であり、Digilent社によって規定されたFPGAやマイコンと周辺モジュールを接続するための規格である。6ピン、12ピンバージョンが存在し、プロトタイピングの製作に対して、シンプルかつコンパクトなモジュールを提供する。

Pmod製品の多様性により、豊富な機能を搭載したハードウェアを簡単に作成することができる。さらに、Pythonによるプログラミングが容易であり、充実したソフトウェアによってアプリケーションのプロトタイプを簡単に作成することができる。

Raspberry Piを利用すれば、性能の良いプロトタイプを作成することができるだろう。しかし、製品の開発にはハードウェアとソフトウェアの両方の開発が必要であり、高速なプロトタイピングにはその両方において充実したツールが必要となる。Pmod HATはハードとソフトの両方についてシンプルで強力なツールを提供する。

 

DesignSpark Pmod HAT

PmodHAT_48594c4bdf4933b34dbcb1b10dbeff4255178dac.jpg

 

Pmod HAT  (144-8419)  は3つの2x6ピンPmodポートを搭載している。これらのポートはI2C, SPI, UART 及び GPIOインターフェースに対応している。Pmod HATは40ピンGPIOコネクタの付いているラズパイに対応しており、電源はGPIOピンを利用するか、バレルジャックを使って外部電源を利用することで供給可能である。

ポートには以下のような名前が付いている:

  • JA: SPI及びGPIO Pmods に対応
  • JB: SPI 及びGPIOに加え、6ピンI2C Pmods を下段に搭載
  • JC: UART 及び GPIO Pmods に対応

また、ジャンパーピンを2つ搭載しており、それぞれは以下の機能を持つ

  • JP1 & JP2: 短絡するとJB2のI2C通信用ピンのプルアップ抵抗をONに
  • JP3: ボードに搭載されているEEPROMの書き込み機能をONに

EEPROMはデバイスツリーの要素を記憶するために用いる。これはボードとOSとドライバを適宜に承認するために用いられる。デバイスツリーはARMシステムを記述するまとまったデータベースであり、Intel/AMDコンピュータのBOISと似たような機能を提供する。これは高度な利用をする場合にのみ用いる。

このPmod HATを使うことで、ハードウェア同士を煩わしいジャンパワイヤで配線する必要がなくなることが分かるだろう。次に、ソフトウェア面を見てみよう。

DesignSpark.Pmod

DesignSpark_Pmod_Library_dc6a737211ce0a7c54df11baec550eaff97b67a2.jpg

 

DesignSpark.Pmod はpythonのライブラリであり、以下の機能を提供する。

  • サポートされているPmodに対してシンプルなインターフェースを提供
  • Pmodとポートの特徴が合致しているか検出
  • ポートの機能の衝突を検出
  • 簡単に使用できるよう用意された様々な使用例

ピンの多重機能化は最近のほとんどのSoCで規格化されており、柔軟な使用に対応したが、I/Oピンのセットアップをしなければならない。一方、Pmodは異なった方法で接続されているため、例えばマイコン側のピンがSPIやGPIOのセットアップで矛盾する、といった現象が起こらない。このライブラリはPmodがHATのポートに対応しているかどうかチェックする機能を搭載しているため、ポートの衝突が生じないよう配慮されている。このライブラリの最初のリリースでは、6つのPmodに対する便利なインターフェースを提供している。

インストール

PPP_pip-install_29e9d84dd7beb941ba2aac80c14e823ba9539c25.jpg

まず、SPI通信が有効であることを確認しよう。rspi-configから確認できる。

$ sudo raspi-config

次に、以下のように項目を選択する。

  • Option 5 - Interfacing
  • P4 - SPI
  • Enable → YES

次のコマンドを入力して、パッケージの操作を行う。

 

$ sudo apt-get update

$ sudo apt-get install python-pip python-dev libfreetype6-dev libjpeg-dev build-essential

最後に、pipコマンドを使用してDesignSpark Pmodをインストールする。

$ sudo -H pip install designspark.pmod

公式の資料は次のリンクから参照できる。

このウェブサイトでは常に最新の情報が得られるので、ぜひ活用してほしい。

また、関連するPyPiプロジェクトとGitHubは以下のリンクから参照できる。

Pmod とのインターフェース

先ほど紹介したライブラリによって、6種類のPmodに対してプログラムを書くことができる。次に、その6つのPmodのインターフェースを簡単に紹介する。

PmodAD1

PmodAD1-oblique_d6fec91453981860a2c38fa802d01913d7ecd883.jpg
from DesignSpark.Pmod.HAT import createPmod

adc = createPmod('AD1','JBA')

volts = adc.readA1Volts()
print(volts)

この例では、“JBA”ポートを使用している。JBAポートは、JBコネクタの2×6ピンのうち上段のピンを指す。

ラズパイでこのPmodAD1を使用する際は、現在ADコンバータのA1チャンネルのみサポートされていることに注意してほしい。

PmodHB3

PmodHB3-oblique_5087382f1a57ac745e1018eed9c4156fc16224d2.jpg

The PmodHB3 (Digilent part no.410-069) はHブリッジ回路を使ったDCモータードライバである。2A, 12Vまで扱うことができ、6ピンGPIOインターフェースを搭載している。

次のプログラムでは、先ほどと同様にライブラリをインポートし、モーターを正転させている。

motor = createPmod('HB3','JAA')
motor.forward(20)

forward関数に渡されている引数はデューティー比である。 また、モーターを逆回転、ストップさせる関数や、PWMの周波数を変更、初期化する関数も提供している。

PmodISNS20

PmodISNS20-oblique_390f5a7c02d694d4e33983cefdd69b1c6f27bfe9.jpg

AD1と同様に、Pmod ISNS20  (136-8069) は6ピンのSPI Pmodである。ISNS20は、入力として与えられた±20A の直流または交流電流を測定することができる。ライブラリをインポートしたら、以下のようなシンプルなプログラムで電流を計測することができる。

isens = createPmod('ISNS20','JBA')
mA = isens.readMilliAmps()
print(mA)

 

MIC3

PmodMIC3-oblique_5e9140d1b3eea171f7e4b73ffdf9991e23aa1815.jpg

 

PmodMIC3 (メーカー品番 410-312)(134-6475)はマイクロホンの信号をSPIで返すモジュールである。以下のコードで簡単にPmodMIC3が返す整数値を読み取ることができる。

mic = createPmod('MIC3','JBA')
int = mic.readIntegerValue()
print(int)

 

OLEDrgb

PmodOLEDrgb-oblique_f78f8fa64b94653a6a0b33276294b34ac7e2f73c.jpg

PmodOLEDrgb  (134-6481) は解像度16ビットの96×16ピクセルRGB有機LEDモジュールである。これは今までとは異なり、12ピンによって通信するPmodである。また、今までのライブラリに加え、別のライブラリをインポートする必要がある。

“Hello World!”の描画をするには、次のコードで実現できる。

from DesignSpark.Pmod.HAT import createPmod
from luma.core.render import canvas
from luma.oled.device import ssd1331
oled = createPmod('OLEDrgb','JA')
device = oled.getDevice()
        
with canvas(device) as draw:
   draw.rectangle(device.bounding_box, outline="white", fill="black")
   draw.text((16,20), "Hello, World!", fill="white")
    
   while True:
      pass

luma.core と luma.oled ライブラリは、Pmodを使用するうえで非常に便利な関数を提供しているため、ぜひ公式資料を参照してほしい。

TC1

PmodTC1-oblique_7408c3491872fae9f9c23f40a13eda5fcf703a63.jpg

最後に紹介するPmodTC1  (134-6476) は6ピンSPI Pmodである。PmodTC1はK型熱電対を使用しており、取得した温度をデジタル値に変換する。この熱電対は-73℃~482℃と広い範囲の温度を測定することができる。

 

therm = createPmod('TC1','JBA')
cel = therm.readCelcius()
print(cel)

それぞれのPmodに対する基本的な使用例は以上である。OLEDrgbを使ったアナログ時計など、もう少し発展的な内容は、このRead the Docsから参照できる。

まとめ

以上のように、DesignSpark Pmod HATとサポートされているライブラリを使用することで、ラズパイとPythonによってPmodを簡単に使用することができ、アプリケーションのプロトタイピングを容易に作成することができる。Pmodライブラリは現在対応するPmodや機能の追加を募集しているので、もしご協力いただける場合は、ぜひ連絡して頂きたい。

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin