はいはい、ラズパイをいじるシリーズ。
とりあえず、C++でプログラミングしたほうが、何かと楽そうです。
で、ここでネットワーク機能、LANケーブルが役に立つ。
まずラズパイにTightVNCServerというソフトを入れて、
PCにTightVncViewerを入れて、
なんと、ラズパイの画面をPCから操作できるようにしてしまいます。
これだけでPCからラズパイを制御できるのに、
Tera Termというのを入れて、
ラズパイをそのままコマンドで制御できるようにします。
さらに、
NetBeansという開発ソフトをPCに入れて、
そこからラズパイにC++でプログラミングできるようにします。
詳しい方法とかはググればいろいろ出てくるので割愛。
ラズパイのIPを固定IPにして、
家のルーターもラズパイのMACアドレス入れてIPを固定割り当てにするのがキモ。
設定とかは怖い人に何されるかわからんのでこれも割愛。
で、プログラミング。
C++なんて、C#がようやく少し使える私に大丈夫かと思ったけど、
ググったサンプルをいじって、なんとか使ってみる。
こんなプログラム。
ちなみに、GPIOという出力ポート、
WiringPIというのを入れないと使うのすごくめんどくさいけど、
実はポート番号、WiringPIと、物理ポート番号と、普通のポート名の3つが混在してる。
わけわからんくなりそうだけど、
そういうときは、
gpio readall
と入力してあげるとそのすべての名前の一覧が出るので、それを確認のこと。
ちなみにWiringPiとかのソフトは、LANがつながってるので、
apt-getとかgitとかで
ざっくりすぐインターネット上からダウンロードしてインストールできるので楽。
で、LEDを点滅させてみます。
光り方がおかしい原因とかも調べます。(赤が点灯してない)
この場合はピン番号早速間違えてた……。
ちなみになんでLEDをラズパイで制御するのがメジャーかというと、
これができると、いろんな回路のオンオフとかができるので、
まさに基礎中の基礎なのね。
これができないと始まらない。
で、結構苦闘した。
まずC++の基礎ができてないから、
キーボードからの入力を受け付けて、光りかた変えるとか出来んかったのね。
gccコマンドでビルドするとC++のコマンドがはじかれるので、
g++コマンドでやると使える。
あと、wiringPiをどうやってC++とラズパイで使うか。
WiringPIを入れれば、
コマンドラインからいきなり
gpio * mode out
で*ピンを出力にして、
gpio write * 1
gpio write * 0
で1で点灯、0で消灯できるけど、
NetBeansのC++のデバッガと、ラズパイでビルドするときにエラーが出る。
そこで必要なのは、
-lwiringPi
のオプションを指定してあげること。
つまり、この子(ラズパイとか)たちがエラー起こすのは、
WiringPiのコマンドなんか知らないよ、ライブラリも見つかんないよ、といってるので、
-l(マイナス エル(小文字))で、
wiringPI
をオプション指定してあげる。
エル(小文字)はライブラリという意味なのね。
このエルがアイだか縦棒だかわけわかんなくて時間がかかった。
Netbeansの場合は、プロジェクトのプロパティで
C++コンパイラのコンパイル行の追加のオプションに
-lwiringPi を入れてあげるのです。
ちなみに画面では -lpthreadも入れてある。
PWM使うのに必要だったような。
とりあえず、光らせてみました。
点灯パターンをいくつも作れたので、
これをキーボードから選べるようにしようとして、
C++の基礎知識がないことが露呈。
えらく時間がかかった。
でも、そこさえ解決すれば、あとは楽。
点灯しかさせられなかったLEDの灯りを強弱つける、PWM制御をしてみます。
電気をただ送るんじゃなくて、
パルスにして弱めたり強めたり。
ラズパイには基本で使えるハードウェアPWMってのがあって、
それ使えばサーボも制御できるらしい。
つまり、踏切が作れる? かも。
でも、それが使えるピンが少ない。
そこで、PWMの段階数は1024段階から100段階に落ちちゃうけど、
ソフトウェアPWMってのを使います。
これも、コマンドが専用にあるので、楽。
赤と緑がソフトウェアPWM、黄色がハードウェアPWM。
黄色が暗いのは、多分PWMの段階数の違いだと思う。
というわけで、なんとかここまで使えました。
これで建物制御に道が開けたかな。
ただ、ほかの方法でもC++とかでLEDやパルスの制御はできるらしいので、
コスパでどれを本番のジオラマに使うかを決めようと思います。
というわけで、一旦ここでお部屋のお片付けをして休憩ー。
0 件のコメント:
コメントを投稿