CommonLispでGPIO実験 ~BCM2835ライブラリ編~


CommonLispでGPIO実験 ~BCM2835ライブラリ編~

本章では、開発環境の準備を行います。
主に、GNU CLISPとbcm2835ライブラリの準備、そして最後にGPIOを使用するためにSPIの有効化を行います。

【目次】
1.GNU CLISPのインストール
2.GNU CLISPのFFI有効化
3.bcm2835ライブラリのダウンロード
4.bcm2835ライブラリの共有オブジェクト作成
5.SPIの有効化
6.Vimの設定
7.bcm2835ライブラリのAPIラッパーの準備

1.GNU CLISPのインストール

今回はCommonLispのGNU CLISPを使用します。

以下のコマンドを実行して、GNU CLISPをインストールします。
sudo apt-get install clisp
続行しますか?[y/n]と聞かれるので、「y」と入力します。


インストール後、以下のコマンドを実行します。
clisp
以下のようになれば、インストールは成功です。


(quit)
と入力して、GNU CLISPを終了してください。
▲上へ

2.GNU CLISPのFFI有効化

上でインストールしたRASPBIANのパッケージに入っているGNU CLISPのバイナリは、
FFI(Foreign Function Interface)が有効になっていません。

FFIとは、他の言語で作成されたモジュールを呼び出すためのインターフェースです。

これを有効化するためには、GNU CLISPをFFIを有効化してコンパイルしなければなりません。
しかし、このコンパイルにはかなりの時間がかかります。

よって、今回は参考にした以下のサイトの方が作ってくださったものを使用します。

 ・ Raspberry PiのLチカをCommon LISPでやってみた

以下のコマンドを実行して、Downloadsフォルダへ「clisp_2.49-8.1+rpi1_armhf.deb」を、ダウンロードします。
wget -P ~/Downloads/ http://www.k.nakao.name/~chome/debian/clisp_2.49-8.1+rpi1_armhf.deb



インストールしたGNU CLISPパッケージをダウンロードしたパッケージで置き換える作業を行います。
Downloadsフォルダに移動して、
cd Downloads/
以下のコマンドを実行します。
sudo dpkg --purge clisp
sudo dpkg --install clisp_2.49-8.1+rpi1_armhf.deb


(※) パッケージの依存関係を解決するためにこのような作業を行います。
▲上へ

3.bcm2835ライブラリのダウンロード

以下のコマンドでbcm2835ライブラリをDownloadフォルダへダウンロードします。
自分がダウンロードした時の最新バージョンは「1.50」でした。
(※) 「bcm2835-x.xx.tar.gz」、x.xxがバージョン
wget -P ~/Downloads/ http://www.airspayce.com/mikem/bcm2835/bcm2835-1.50.tar.gz
Downloadsフォルダに移動して、
cd Downloads/
ファイルやディレクトリ情報を表示すると、
ls
「bcm2835-1.50.tar.gz」というファイルができているはずです。

次に、以下のコマンドで圧縮ファイルを解凍します。
tar zxvf bcm2835-1.50.tar.gz

全て実行すると以下のようになります。


▲上へ

4.bcm2835ライブラリの共有オブジェクト作成

解凍したフォルダ内へ移動し、
cd bcm2835-1.50
以下のコマンドを実行してライブラリをビルドします。
./configure


make


次に、以下のコマンドでインストールを行います。
sudo make check


sudo make install



以上で、ビルド、インストールは完了ですが、
このソースコードに含まれているMakefileは、
共有オブジェクトを作ってれないので、作っておきます。

以下のコマンドを実行することで、共有オブジェクトを作成します。
gcc -shared -o libbcm2835.so ./src/bcm2835.o


次に、作成した「libbcm2835.so」を「/usr/local/lib」へ格納します。
sudo cp libbcm2835.so /usr/local/lib


最後に、以下のコマンドで共有ライブラリの依存関係情報を更新します。
sudo ldconfig

これで、bcm2835ライブラリの準備は完了しました。
▲上へ

5.SPIの有効化

SPI(Serial Peripheral Interface)は、以下の3本で双方向通信を行う機能です。
 ・クロック(SCK)
 ・ 出力信号(MOSI : Master Out Slave In)
 ・ 入力信号(MISO : Master In Slave Out)
UART/RS-232C (調歩同期式シリアル通信)と並んで、シンプルな通信方式で、マイコン間の通信でよく用いられます。

以下のコマンドを実行します。
sudo raspi-config
すると、以下のような画面が開きます。
この画面での操作は、キーボードの上下でカーソル移動。
左右で「Select」「Finish」「Back」を選択。 「Enter」で決定です。

「9 Advenced Options」を選択します。


次に、「A5 SPI」を選択します。


有効化するかどうか聞かれるので、「<はい>」を選択します。


有効化が完了しました。
そのまま、「Enter」してください。


「Finish」を選択します。


最後に、再起動して設定が完了します。
sudo reboot
開発環境の準備はこれで全て完了です。
次の章では、LEDを点滅させる「Lチカ」をやってみたいと思います。
▲上へ

6.Vimの設定


RaspberryPiには、いくつかのテキストエディタが存在します。
デフォルトで入っているGUIのテキストエディタ「Leafpad」や、
Unix/Linuxでおなじみの「Vi」も入っています。

自分は「Vim」が好きなので、まず最初に「Vim」をインストールします。
sudo apt-get install vim
RaspberryPiでインストールしたVimはデフォルトでは、
プログラムコードを書いても色が付きません。
よって、色を付けるために設定をいじります。
Vimの設定ファイル「vimrc」を以下のコマンドで開いて、
sudo vi /etc/vim/vimrc
「syntax on」のコメントアウトを解除します。
syntax on
また、自動インデント機能を以下の箇所のコメントアウトを解除することで設定します。
if has("autocmd")
  filetype plugin indent on
endif

これで、色付けと自動インデント機能が有効になりました。
▲上へ

7.bcm2835ライブラリのAPIラッパーの準備

bcm2835ライブラリをlispで使用するためのAPIラッパーがGitHubにあるので、
それをDownloadsフォルダへダウンロードします。

Downloadsフォルダへ移動して、
cd Downloads/
以下のコマンドを実行します。
git clone https://gist.github.com/TeMPOraL/6e2e11f27c18c71c32ef
以下のコマンドで、「6e2e11f27c18c71c32ef」フォルダが作成されていることを確認してください。
ls
「6e2e11f27c18c71c32ef」フォルダへ入ると、中に「bcm2835.lisp」があります。
cd 6e2e11f27c18c71c32ef/


これが、bcm2835ライブラリのAPIラッパーとなります。
▲上へ