ちぎっては投げるブログ

Programming, Android, RaspberryPi, Digital Devices, Kinkuma Hamster...

Raspberry PiでLEDを光らせる

denpa-shinbun.com

で買ったLEDを光らせる。

3色フルカラーSMD LEDモジュールで、RGBの各PINに0-255のアナログ値を書き込むことで色を表現する。

ところが、Raspberry Piにはアナログ出力がない。デジタル出力をPWM制御し疑似アナログ化するらしいが、今回はひとまず光らせることだけを目標とする。

RaspberryPiの設定

接続は単純に、

  • B:17
  • R:27
  • G:22
  • GND:GNDPIN

とした。

f:id:mczh:20160718181457j:plain

まず、/sys/class/gpio/exportに、書き込み用のファイルを生成する。 ここでは、17,27,22のGPIOを利用するものとして、

echo 17 > /sys/class/gpio/export
echo 27 > /sys/class/gpio/export
echo 22 > /sys/class/gpio/export

とした。

続いて、Raspberry PiのGPIOを入力に使うのか出力に使うのかを設定する。 ここでは出力なので、outに設定する。

echo out > /sys/class/gpio/gpio17/direction
echo out > /sys/class/gpio/gpio27/direction
echo out > /sys/class/gpio/gpio22/direction

最後に、出力(0or1)を設定する。

echo 1 > /sys/class/gpio/gpio17/value

これで、青色に光る。

スクリプト化

こんなファイル名を覚えておけるわけがないので、スクリプト化しておく。

#!/bin/sh

func_led_on ()
{
    echo 1 > /sys/class/gpio/gpio${1}/value
}

func_led_off ()
{
    echo 0 > /sys/class/gpio/gpio${1}/value
}

BLUE=17
RED=27
GREEN=22

echo "Conncet GPIO ${BLUE}:B."
echo "Connect GPIO ${RED}:R."
echo "Connect GPIO ${GREEN}:G."
echo "Connect GND."

sudo echo $BLUE > /sys/class/gpio/export
sudo echo $RED > /sys/class/gpio/export
sudo echo $GREEN > /sys/class/gpio/export

sudo echo out > /sys/class/gpio/gpio${BLUE}/direction
sudo echo out > /sys/class/gpio/gpio${RED}/direction
sudo echo out > /sys/class/gpio/gpio${GREEN}/direction

echo "done."

echo "Test Start."

func_led_on $BLUE
sleep 1
func_led_off $BLUE
func_led_on $RED
sleep 1
func_led_off $RED
func_led_on $GREEN
sleep 1
func_led_off $GREEN

echo "Test End."

再起動後も有効にする

これらのファイルは再起動すると削除されるようなので、/etc/rc.localに追記して起動に自動で実行されるようにする。

sudo emacs /etc/rc.local
/home/pi/tweetTenki/setupGpioForLed.sh

ドメイン参加しているWindowsで、PCのローカルアカウントにログインする簡単な方法

通常はログインユーザ名を入れる画面で、

コンピューター名¥ユーザー名

と入力する必要がある。 たとえばMyComputerという名前のPCで、ユーザアカウント名がUserAだった場合には、

MyComputer\UserA

とする。

ちなみに、コンピュータ名はシステム画面から確認できる。簡単なのは、マイコンピュータ(Windows10だとPC)画面で右クリックしてプロパティ選択で表示できる。

f:id:mczh:20160608215625p:plain

このローカルコンピュータ名を覚えて打ち込むのは結構面倒である。

これを省略形で書く方法がある。

.¥ユーザー名

と書く。ドット+\マークである。

同じ例で書くなら、

.\UserA

こうすると、普段のドメインユーザではなく、ローカルユーザとしてログイン出来る。

会社で使うときがあるかもしれない。

より良いプログラミングの仕方をどう学べば良いのか

プログラムを書くときの、いわゆる文法やお作法は本やブログから十分に入手できるのでお腹いっぱいなのだが(身についているかは別として)、 じゃあみんな何をどこからどうやって作業していって成果物までたどり着いてるの?というのは意外と学ぶ機会がない。

ペアプロでもしないとチャンスはないんじゃないだろうか。

その結果、オレオレ手法になり、成果物は同じであっても、実はとても効率の悪いツールの使い方をしていたり、デバッグ方法をしていたり、コードの書き方をしていたり、というのは大いにあり得る。

なまじ、最近のツールはある目的を達成するのに複数の手段がある場合が多く、出来るからいいや、でぶん投げているように思う。

ペアプロをするのは良い解法だと思うが、職場ではなかなか出来ないだろうし、自宅では言わずもがなである。

ライブコーディング

そこでひとつ良さそうに思うのが、ライブコーディングしている放送を見ることだ。

www.livecoding.tv

ところが、当たり前だが英語なのでツラい。

日本語だとこのあたりなのだろうか、まだ放送は見たことがない。

com.nicovideo.jp

チャットなどで意見交えながらプログラムを書いている場があると嬉しい。それも日本語で。

言語以外の問題で言えば、視聴に時間がかかる点にある。他人のコードや作業方法を見るのは勉強になるが、自分のコードも書けてない現状、そんな時間(やる気)はあるだろうか?

じゃあ自分でコード書いて放送を始めろよ、という話もあるだろうが、コミュ力がないので放送出来る気がしない。

実際、みんなどうやってより良いプログラミングの「過程」を身につけていくのだろう?