2015年7月3日金曜日

突発シリーズ・ラズパイに手を出す(2)C++でプログラミングしたい!


はいはい、ラズパイをいじるシリーズ。

とりあえず、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 件のコメント:

コメントを投稿