できた。
超遠回りですが、一応「RでLチカ」、略して「Rチカ」が出来ましたので、ご連絡。
一応ご注意を。
今回のコードを実行しても特に危険はないと思いますが、ハードウェアを操作する場合は色々と気を付ける必要があります(電圧レベルとか電流値とか、いろいろ)
なので、色々調べて理解してトライしてください。
調べたことはほぼ書いたりリンク貼ったりしているので、大体解決できるはず…(抜けているものもあると思いますが…)
まぁ、ネットにある情報を使って何かするのは基本的に自己責任なんだけど。
構成など
環境:
Raspberry Pi 3 Model B
OS : 2017-07-05-raspbian-jessie
R : sessioninfo
> sessionInfo() R version 3.4.1 (2017-06-30) Platform: armv7l-unknown-linux-gnueabihf (32-bit) Running under: Raspbian GNU/Linux 8 (jessie) Matrix products: default BLAS: /usr/local/lib/R/lib/libRblas.so LAPACK: /usr/local/lib/R/lib/libRlapack.so locale: [1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8 [5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 [7] LC_PAPER=en_GB.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] PythonInR_0.1-3 loaded via a namespace (and not attached): [1] compiler_3.4.1 R6_2.2.2 tools_3.4.1 pack_0.1-1
RainbowHAT
実行
先にpython側でLチカを確認します。Rが悪いのかpyが悪いのかわからなくなるので。
今回は手元にRainbowHATがあって、ラズパイに刺さったままだったのでそれを使っていますが、ブレッドボードにLEDをつなげて~でももちろん出来ると思います(いずれやりますか…)
コードはこんな感じ。7つのLEDが0.1秒ごとに赤く光ります。結構綺麗。
import rainbowhat as rh import time ct = 0 while ct < 100: for pixel in range(7): rh.rainbow.clear() rh.rainbow.set_pixel(pixel, 255, 0, 0) rh.rainbow.show() time.sleep(0.1) ct = ct + 1 rh.rainbow.clear() rh.rainbow.show()
最後にclearしないとLEDが消えないのでループ後に入れています。
Python単体だと、while True: でループしてEscで抜けても良いのですが(そのときLEDは消えた)、Rだとどうなるかわからないので適当な時間ループさせて抜けさせています。(whileじゃなくてfor使えよ)
RainbowHATについては以前の記事を参照してください。これを試すためにわざわざ買う必要はないですが、色々試すには便利といえば便利で面白い
さて、R側ですがpythonを呼ぶだけです。下記の通り。
# install.packages("PythonInR") # 入っていなければ library(PythonInR) PythonInR::pyExecfile("r_py_rainbow.py")
これだけ。pythonの方で完結しているので、Rからは呼び出すだけです。
結果はpythonと同じくLEDが綺麗に光るのでした。やったぜ
pyExecfileは指定したpythonのスクリプトを実行するので、ファイル名やパスは適当に設定してください。
ラズパイ上でライブラリをインストールする(w/o RStudio)がちょっとなれなかったけどとくに難しさはなかったです。
参考リンク集
RからPythonを呼ぶ
探していて一番最初に見つけました。 RからPythonを使う諸々(のリンク集)kitayamalab.wordpress.com
PythonInRの実際のつかいかたはこちらを参考にしました。
ただ、上にあるようにpythonのスクリプト自体を呼べるし、内部でimportしていればそれらの設定も不要、pythonで実行を確認してからRで動かすと思うので、実際に使うときはファイルをそのまま読む方法になるのかな、と。
こちらはR内で完結させている紹介記事だからですね。
このライブラリ、関数が結構多いので使いこなすには時間がかかるかも
RainbowHATの紹介
雑多なこと
これと関係なく、SSHで接続できないことに気づいたのですが、デフォルトでSSHはinactiveになっているようです。
確かに、リンク先のこちらにも書かれていてその後特に変更なさそうです。というか、時期によって結構色々違うかも?ネットで情報探す場合はご注意。結局オリジナルを見る以外にないという話か。
http://downloads.raspberrypi.org/raspbian/release_notes.txt
今回、この記事の対応方法ではなく、単純にsshdを起動させました。
のとおり、
/etc/init.d/sshd status
で寝てることを確認したのち、
/etc/init.d/sshd start
したらSSH接続できました。
課題
RainbowHATのライブラリを入れるときにミスったようでpython2系でしか動いていない(本当は3でも動くはず)ので、それは改善したい。 RのビルドはPC側でやってから転送したい、などなど。もうちょっと賢い方法が全体的にあるはずです。マサカリ待ってます。
結論
Rでもラズパイを使ってLチカできる!(実質python頼み)
でした。
次は
さて、次はpython向けに書かれたAPIのRへの移植か、Pythonで処理している部分もR側で書いてよりR感を出すか、GPIOを直接Rで叩く(Cpp必要)か、だな。面倒くさくなってきた…(おい
— niszetr (@niszet0) 2017年8月12日
このあたりですね。
一方で、からあげさんの
の記事のとおり、GPIOライブラリではなくWiringPiライブラリを使っていく必要があるのかも。
まぁ、それも追々です。
というわけで、RからPythonで書かれたLチカコードを呼び出してラズパイ上でRainbow HATのLEDをチカチカさせる試み、一応の成功です。
Enjoy!!