ここからは、Raspberry Pi3B+(Buster Lite)上でPuredataを走らせて、外部センサーなどを拡張していきたいと思います。
今考えているのは、wiringPiを使う方法です。Cで書かれたPuredataオブジェクトをwiringPiを駆使して作っていく方法です。
もう一つは、デバイスドライバーを作り実装する方法があるのですが、(これはNorns/Fatesもやっている方法です)どちらがよいか?の答えがまだでていませんが、一つ言えるのは、wiringPiを使ってpuredataのオブジェクトを作る方法のほうが簡単なのと、カーネルのクロスコンパイル等の時間がかかる作業がいらないということです。動作確認して違ったらまたビルドしてとか繰り返す場合があってもそれほど時間がかかりませんので、それでまずは実装していきたいと思います。
まずは、wiringPiをインストールします。
$ sudo apt-get install wiringpi Reading package lists... Done Building dependency tree Reading state information... Done The following package was automatically installed and is no longer required: rpi-eeprom-images Use 'sudo apt autoremove' to remove it. The following NEW packages will be installed: wiringpi 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 52.9 kB of archives. After this operation, 0 B of additional disk space will be used. Get:1 http://archive.raspberrypi.org/debian buster/main armhf wiringpi armhf 2.50 [52.9 kB] Fetched 52.9 kB in 1s (45.1 kB/s) Selecting previously unselected package wiringpi. (Reading database ... 45775 files and directories currently installed.) Preparing to unpack .../wiringpi_2.50_armhf.deb ... Unpacking wiringpi (2.50) ... Setting up wiringpi (2.50) ... Processing triggers for man-db (2.8.5-2) ...
wiringPiのインストール完了。versionは、2.5 *raspbeery pi 4では2.52でないと動かないので注意
(詳しくは、http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b/
で、さっそくpdのオブジェクトを作っていきます。
以前rpi2Bで作成したpdオブジェクトソース(mcp3008を動かすソース)があるので、それをコピーして作ります。
mcp3208ですが、こちらのソースが参考になるので、リンク貼っておきます。https://github.com/HerrSteiner/wiringPD
m_pd.hは以前のは0.43で作ってあったので、今回インストールした0.49のm_pd.hに差し替えてmakeします。m_pd.hは /usr/include/pd/にあります。
makeした結果、問題なくobjectをロードできました。
以下はraspberry pi上でpdを入らせている画面のキャプチャーです。
以前のソースそのままでmakeは通りましたが、なぜかうまくいかず、悩んだ結果 pdがroot権限で動いているはずなので、wiringPiSetupSys メソッドで動かしたらだめなんだと気が付き、修正しました。以下の部分
void wiringPi_mcp3008_setup_wiringPi(t_wiringPi_mcp3008 *x) { //if (geteuid () != 0){ //wiringPiSetupSys(); //post("Warning : in Sys mode May not use SPI"); //} //else{ //wiringPiSetup(); wiringPiSetupGpio(); post("Initializing in GPIO mode!"); //} wiringPiSPISetup(ADC_SPI_CHANNEL,ADC_SPI_SPEED); post("mcp_3004/8 is ready to read!"); }
mcp3008を繋いで無事にAD値が取得ができました。
これで、いろいろセンサーICをpuredataに拡張できそうです。