Raspberry Piで音をHDMI出力する

/boot/config.txtを編集して
hdmi_drive=2と
dtparam=audio=onを有効にする。

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
hdmi_drive=2

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

再起動して以下のコマンドを実行して再起動。

$ sudo amixer cset numid=3 2

上記実行してもどうしても音出ないよ!思ってたら
ディスプレイにスピーカーついてなくて草。

Wi-Fi経由でadb接続してデバッグする

端末をUSB接続した状態で以下のコマンドを実行する。

adb tcpip 5555
adb connect xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxxはAndroid端末のIPアドレス
コマンド実行したらUSBケーブル抜いても
Android Studioからアプリをインストールしたり
logcatでログを見たりできる。

切断は以下のコマンドを実行。

adb disconnect

LEDに接続する抵抗の値の求め方

LEDに接続する抵抗の値の求め方を調べた。


公式

抵抗 = (かける電圧 ー 順電圧)/ 順電流

順電圧(Vf)と順電流(If)ってなんやねんって思うと思うけど
LEDのスペックシートに書いてある。

f:id:a2hsogw:20180609094951p:plain

なんで抵抗が必要なのかというと
LEDに流れる電流を制御するため。
LEDに過剰に電流が流れるとLEDが壊れてしまう。

例えば、電源電圧が3.3V
LEDの順電圧が2V、順電流が20mAのとき
LEDに20mAの電流が流れるようにするには
(3.3 - 2) ÷ 0.02 = 65Ω
の抵抗が必要。
ただ、65Ωの抵抗なんて売ってないので
そういう時は100Ωとか、求めた抵抗より大きい値の抵抗を使うようにする。
I(A) = E(V) / R(Ω)なので、Rが大きくなればIは小さくなるので
大きい抵抗を使えば流れる電流は少なくなる。


GPIOの制限

Raspberry PiのGPIOの場合は流せる電流が16mAまでと決まっている。
なので、順電流が20mAみたいに16mAを超える場合は
15mA程度に収まるように抵抗の値を求める。

LEDの極性

LEDには極性(プラスとマイナス)がある。
電極の+(プラス)側を「アノード」と呼ぶ。
電極の-(マイナス)側を「カソード」と呼ぶ。

LEDの端子の長い方がアノード(+)
LEDの端子の短い方がカソード(ー)

f:id:a2hsogw:20180609094638j:plain

砲弾型のLEDの場合カソード(ー)側が平べったくなっている。

Raspberry PiでLED点滅

Raspberry PiでLEDを点滅させてみた。


回路はこんな感じ。
め、めちゃくちゃ簡単〜!
f:id:a2hsogw:20180609093129j:plain

Text Editorでサクッとpythonのプログラムを書いて実行!

import wiringpi as pi
import time

LED_PIN = 23

pi.wiringPiSetupGpio()
pi.pinMode(LED_PIN, pi.OUTPUT)

while True:
    pi.digitalWrite(LED_PIN, pi.LOW)
    time.sleep(1)

    pi.digitalWrite(LED_PIN, pi.HIGH)
    time.sleep(1)

実行結果

Raspberry Pi用語集

Raspberry Pi関連でよく使われている用語集。


Raspberry Pi

小型のコンピュータ。省電力省スペースのパソコン。
RaspbianというLinuxベースのOSが動く。
GPIOと呼ばれるインタフェースがあるのが特徴。


Raspbian

Raspberry Pi上で動くOS。
Debianが元になっている。


GPIO(General Purpose Input/Output)

デジタル入出力ができる端子。


WiringPi

Raspberry PiのGPIOを制御するライブラリ。
C言語のライブラリだけど、PythonとかPHPのラッパがある。


I2C(Inter Integrated Circuit:アイスクエアドシー)

IC間で通信することを目的に、フィリップス社が開発したシリアル通信方式。
データの送受信をする「SDA(シリアルデータ)」と
IC間でタイミングを同期する「SCL(シリアルクロック)」の
2本の線を使って通信する。


SPI(Serial Peripheral Interface)

ICなどの電子部品との通信を目的に、旧モトローラ社が提唱した通信規格。
I2Cと比較すると高速に通信できることが特徴。
マスターからスレーブ方向にデータを転送する「MOSI(Master Out Slave In)」
スレーブからマスター方向にデータを転送する「MISO(Master In Slave Out)」
バイス同士の同期をする「SCLK(Serial Clock)」
制御対象のデバイスを選択する「CE(Chip Enable)」
の4本の線を使って通信する。


UART(Universal Asynchronous Receiver/Transmitter)

I2CやSPIと同様に電子部品とのデータ通信を行う方式。
RS-232C」がUARTの一種として有名。
データ送信用の「TxD」と
データ受信用の「RxD」の
2本の線を使って通信する。
同期用の線はないため、あらかじめ通信速度を合わせておく必要がある。


PWM(Pulse Width Modulation)

パルス幅変調。擬似的なアナログ出力。
LOW(0V)とHIGH(3.3V)を高速で切り替えることで
擬似的にLOW(0V)とHIGH(3.3V)の間の電圧を作り出す方式。
例えば、2.2Vの電圧を得たい場合は
3.3Vの時間を2、0Vの時間を1の割合で出力するようにする。