2019年2月2日土曜日

Rapsberry Pi GPIO


GPIOのピン番号や状態を取得する









GPIOの状態は$gpio readallで見れる
pi@raspberrypi:~ $ gpio readall
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 0 | IN   | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | IN   | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
それぞれの欄は下記のような意味
- BCM : GPIO番号
- wPi : Wiring Piというライブラリを使う場合の番号
- Name : 一般的な端子名称
- Mode : 入力か出力か
- V : 現在の端子にかかってる電圧
- Physical : 40Pin端子の物理的な端子番号
shellスクリプトで書く場合は、wPiの番号になります。
Pythonで使う場合は、BCMとPhysicalのどちらの番号でも指定できます。

GPIOのライブラリ

GPIOを操作するライブラリは3種類ある
  • pigpio
  • RPi.GPIO
  • WiringPi
今回使ったのは、RPi.GPIO

スイッチ入力を検出するPythonプログラム

スイッチの状態を検出するには、プログラムでずっと監視するか、スイッチの状態が変わったイベントを取得するか、の2つの方法があります。
以下でそれぞれの方法について説明します。

無限ループ使ったスイッチ検出

スイッチの状態を監視して、LEDを点灯させるプログラムは下記になります。
LED_Loop.py
import RPi.GPIO as GPIO  #GPIOにアクセスするライブラリをimportします。                                          
import time


GPIO.setmode(GPIO.BCM)  #GPIOへアクセスする番号をBCMの番号で指定することを宣言します。                        
GPIO.setup(15,GPIO.OUT) #BCMの15番ピン、物理的には10番ピンを出力に設定します。                                
GPIO.setup(2,GPIO.IN)   #BCM 2番ピンを入力に設定します。                                                      

try:
        while True:
                if GPIO.input(2) == GPIO.LOW:
                        GPIO.output(15,GPIO.HIGH)
                else:
                        GPIO.output(15,GPIO.LOW)
                time.sleep(0.1)
except KeyboardInterrupt:
        GPIO.cleanup()
下記のコマンドで実行します。
pi@raspberrypi:~/pythonSandBox $ python3 ledLoop2.py 
python コマンド実行すると、ディフォルトでUTF-8に対応しないので、のコメントアウトがうまく処理されず、下記のようなエラーになります。
pi@raspberrypi:~/pythonSandBox $ python ledLoop2.py 
  File "ledLoop2.py", line 1
SyntaxError: Non-ASCII character '\xe3' in file ledLoop2.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

イベント駆動型

無限ループかっこ悪いので、
イベント駆動型だと以下のような感じ
押した瞬間だけ光る
import RPi.GPIO as GPIO
import time


#callback関数の定義                                                                                           
def switch_callback(gpio_pin):
    print(gpio_pin)
    GPIO.output(15,GPIO.HIGH)


GPIO.setmode(GPIO.BCM)  #GPIOへアクセスする番号をBCMの番号で指定することを宣言します。                        
GPIO.setup(15,GPIO.OUT) #BCMの15番ピン、物理的には10番ピンを出力に設定します。                                
GPIO.setup(2,GPIO.IN)   #BCM 2番ピンを入力に設定します。                                                      

GPIO.add_event_detect(2, GPIO.FALLING,bouncetime=100)
GPIO.add_event_callback(2, switch_callback) #スイッチ入力端子の状態ををcallbackのトリガとして指定します。     

try:
    while True:
        GPIO.output(15,GPIO.LOW)
        time.sleep(0.1)
except KeyboardInterrupt:
    GPIO.cleanup()
参考





Raspberry PiのGPIO操作(1)Lチカ、OLED表示


せっかく久しぶりにRaspbianをインストールしたので、これまでやっていなかった、Raspbianからのデバイス制御を試してみました。
RaspbianはStretch-Liteをインストールし、raspi-configでシリアルポートを有効化しました。
これでシリアルポートからログインできるようになり、キーボードやディスプレイを接続する必要が無くなります。
Pi Zero Wなら、ネットワークとsshを有効にしておけばネットワーク経由でログインできますので、シリアルケーブルも不要になります。
これでRPi周辺がすっきりしましたので、GPIOでのデバイス接続を試してみました。
まず、Raspberry Pi Zero/Zero WのGPIOですが、BCM2835のマニュアルP102によると、ピンに対して機能が以下の図のように割り当てられています。
このうち、ピンヘッダで信号を取り出せるのはGPIO2~27となっています。
rpi-gpio.png
ざっと見ると、いわゆるGPIOとしての入出力以外に(ピンヘッダから)使える主な機能は
・I2C ×1 (SDA1/SCL1)
・SPI ×2 (SPI0、SPI1)
・UART ×1 (TXD0/RXD0/CTS0/RTS0、またはTXD1/RXD1/CTS1/RTS1)
・PWM ×2 (PWM0、PWM1)
・PCM ×1 (PCM_CLK/PCM_FS/PCM_DIN/PCM_DOUT)
・JTAG ×1 (ARM_TDI/ARM_TDO/ARM_RTCK/ARM_TMS/ARM_TCK)
であることが解ります。
このほかにGPIO Clock(オーディオデバイスにクロックを供給するために使われるらしい)、BSC Slave(I2C互換のBroadcom独自インタフェースらしいです)、メモリインタフェース(SDx、SAxがそれぞれデータバス/アドレスバス)があるようです。
他のRaspberry Piも含めた、より詳しい一覧表が以下のページにあります。
一つのピンに複数の機能は割り振れないので、例えばSPI1とRTS0/CTS0/RTS1/CTS1を同時に使用することはできません。
ピン配置は以前も掲載しましたが下図の通りです。
●Lチカ
GPIOを制御するには、Pythonのライブラリが公開されています。
しかしRaspbianはLinuxなので、GPIOのオン・オフくらいファイルシステム経由でできるだろう、と考えて調べてみたら、やはりそういったインタフェースが用意されていました。
GPIOをオンオフするには、/sys/class/gpio以下のファイルに設定を書き込みます。
先日試したオンボードのLEDがつながっているGPIO47は、BUSYで制御できませんでしたので、普通にピンヘッダのほうのGPIOを試してみました。
1)echo ピン番号 > /sys/class/gpio/export で該当のGPIOを有効化
2)echo out > /sys/class/gpio/ピン番号/direction で出力ピンに設定
3)echo 0か1 > /sys/class/gpio/ピン番号/value でHまたはLを出力
という形で制御できます。
入力の場合は、echo in > /sys/class/gpio/ピン番号/directionで設定し、cat /sys/class/gpio/ピン番号/value で値を取得します。
以下の例ではGPIO4(ピンヘッダの7番ピン)に出力しています。
LEDのアノードを7番ピン、カソードを9番ピン(GND)に接続すれば、LEDをオン・オフできます。
pi@pi-zero-w:~ $ echo 4 > /sys/class/gpio/export
pi@pi-zero-w:~ $ ls /sys/class/gpio/
export gpio4 gpiochip0 unexport
pi@pi-zero-w:~ $ echo out > /sys/class/gpio/gpio4/direction
pi@pi-zero-w:~ $ echo 1 > /sys/class/gpio/gpio4/value
pi@pi-zero-w:~ $ echo 0 > /sys/class/gpio/gpio4/value
pi@pi-zero-w:~ $ echo 4 > /sys/class/gpio/unexport
pi@pi-zero-w:~ $ ls /sys/class/gpio/
export gpiochip0 unexport
pi@pi-zero-w:~ $
view rawtest-rpi-gpio.sh hosted with ❤ by GitHub
raspbianにはraspi-gpioというパッケージがあり、
sudo apt-get install raspi-gpio
でインストールできます。
このパッケージを使うと、上記と同等のことをより簡単に行うことができます。
例えばGPIOの状態を取得するには、以下のようになります。
pi@pi-zero-w:~$ raspi-gpio get
BANK0 (GPIO 0 to 27):
GPIO 0: level=1 fsel=0 func=INPUT
GPIO 1: level=1 fsel=0 func=INPUT
GPIO 2: level=1 fsel=4 alt=0 func=SDA1
GPIO 3: level=1 fsel=4 alt=0 func=SCL1
GPIO 4: level=1 fsel=0 func=INPUT
GPIO 5: level=1 fsel=0 func=INPUT
GPIO 6: level=1 fsel=0 func=INPUT
GPIO 7: level=1 fsel=1 func=OUTPUT
GPIO 8: level=1 fsel=1 func=OUTPUT
GPIO 9: level=0 fsel=4 alt=0 func=SPI0_MISO
GPIO 10: level=0 fsel=4 alt=0 func=SPI0_MOSI
GPIO 11: level=0 fsel=4 alt=0 func=SPI0_SCLK
GPIO 12: level=0 fsel=0 func=INPUT
GPIO 13: level=0 fsel=0 func=INPUT
GPIO 14: level=0 fsel=2 alt=5 func=TXD1
GPIO 15: level=1 fsel=2 alt=5 func=RXD1
GPIO 16: level=0 fsel=0 func=INPUT
GPIO 17: level=0 fsel=0 func=INPUT
GPIO 18: level=0 fsel=0 func=INPUT
GPIO 19: level=0 fsel=0 func=INPUT
GPIO 20: level=0 fsel=0 func=INPUT
GPIO 21: level=0 fsel=0 func=INPUT
GPIO 22: level=0 fsel=0 func=INPUT
GPIO 23: level=0 fsel=0 func=INPUT
GPIO 24: level=0 fsel=0 func=INPUT
GPIO 25: level=0 fsel=0 func=INPUT
GPIO 26: level=0 fsel=0 func=INPUT
GPIO 27: level=0 fsel=0 func=INPUT
BANK1 (GPIO 28 to 45):
GPIO 28: level=1 fsel=0 func=INPUT
GPIO 29: level=1 fsel=0 func=INPUT
GPIO 30: level=0 fsel=7 alt=3 func=CTS0
GPIO 31: level=0 fsel=7 alt=3 func=RTS0
GPIO 32: level=1 fsel=7 alt=3 func=TXD0
GPIO 33: level=1 fsel=7 alt=3 func=RXD0
GPIO 34: level=1 fsel=7 alt=3 func=SD1_CLK
GPIO 35: level=1 fsel=7 alt=3 func=SD1_CMD
GPIO36: level=1 fsel=7 alt=3 func=SD1_DAT0
GPIO 37: level=1 fsel=7 alt=3 func=SD1_DAT1
GPIO 38: level=1 fsel=7 alt=3 func=SD1_DAT2
GPIO 39: level=1 fsel=7 alt=3 func=SD1_DAT3
GPIO 40: level=0 fsel=1 func=OUTPUT
GPIO 41: level=1 fsel=1 func=OUTPUT
GPIO 42: level=0 fsel=0 func=INPUT
GPIO 43: level=1 fsel=4 alt=0 func=GPCLK2
GPIO 44: level=0 fsel=1 func=OUTPUT
GPIO 45: level=1 fsel=1 func=OUTPUT
BANK2 (GPIO 46 to 53):
GPIO 46: level=1 fsel=0 func=INPUT
GPIO 47: level=0 fsel=1 func=OUTPUT
GPIO 48: level=0 fsel=4 alt=0 func=SD0_CLK
GPIO 49: level=1 fsel=4 alt=0 func=SD0_CMD
GPIO 50: level=1 fsel=4 alt=0 func=SD0_DAT0
GPIO 51: level=1 fsel=4 alt=0 func=SD0_DAT1
GPIO 52: level=1 fsel=4 alt=0 func=SD0_DAT2
GPIO 53: level=1 fsel=4 alt=0 func=SD0_DAT3
pi@pi-zero-w:~$
view rawraspi-gpio.sh hosted with ❤ by GitHub
●I2C
まず、sudo raspi-configで「5 Interfacing Options」を選択し、I2CとSPIをenabledにしておきます。
これでデバイスドライバが自動で読み込まれるようになります。
I2Cは/dev/i2c-1、SPIは/dev/spidev0.0と/dev/spidev0.1がデバイスファイルとして作成されます。
I2Cは標準コマンドのみで操作することは難しいようですが、Linuxではプログラムを書かずに操作するための専用のi2c-toolsというパッケージがあります。
これはデフォルトのraspbianではインストールされていないので、
sudo apt-get install i2c-tools
でインストールします。
すると、以下のコマンドがインストールされます。
/usr/sbin/i2cdetect
/usr/sbin/i2cget
/usr/sbin/i2c-stub-from-dump
/usr/sbin/i2cdump
/usr/sbin/i2cset
これらのコマンドで、i2cデバイスを制御することができます。
とはいえ、i2cデバイスごとのドライバが必要にはなりますが。
おなじみのOLED、SSD1306のI2C版を接続してみました。結線は下図の通りです。
rpi-ssd1306.png
デバイスの検索は
i2cdetect -a 1
で行えます。1はI2Cバス番号です。
Raspberry Piでは、ピンヘッダ(ピン3、ピン5)で利用できるのはI2C1ですので、1を指定しています。
SSD1306 OLEDを接続した状態で実行すると、以下のようにアドレス「3C」にデバイスがあることが表示されます。
このアドレスは、製品によって異なる場合があるようです。
pi@pi-zero-w:~$ i2cdetect -a 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x00-0x7f.
Continue? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
pi@pi-zero-w:~$
view rawrpi-i2c-1.sh hosted with ❤ by GitHub
このOLEDへコマンドを送るには、i2csetを使います。
ちょっと長いですが、こちらのサンプルを借用して、I2Cバス番号とデバイスアドレスだけ書き換えたシェルスクリプトを作ってみました。
#!/bin/sh
i2cset -y 1 0x3c 0x00 0xae # display off
i2cset -y 1 0x3c 0x00 0xd5 # clockdiv
i2cset -y 1 0x3c 0x00 0x80
i2cset -y 1 0x3c 0x00 0xa8 # multiplex
i2cset -y 1 0x3c 0x00 0x3f
i2cset -y 1 0x3c 0x00 0xd3 # offset
i2cset -y 1 0x3c 0x00 0x00
i2cset -y 1 0x3c 0x00 0x40 # startline
i2cset -y 1 0x3c 0x00 0x8d # charge pump
i2cset -y 1 0x3c 0x00 0x14
i2cset -y 1 0x3c 0x00 0x20 # memory mode
i2cset -y 1 0x3c 0x00 0x00
i2cset -y 1 0x3c 0x00 0xa1 # segregmap
i2cset -y 1 0x3c 0x00 0xc8 # comscandec
i2cset -y 1 0x3c 0x00 0xda # set com pins
i2cset -y 1 0x3c 0x00 0x12
i2cset -y 1 0x3c 0x00 0x81 # contrast
i2cset -y 1 0x3c 0x00 0xcf
i2cset -y 1 0x3c 0x00 0xd9 # precharge
i2cset -y 1 0x3c 0x00 0xf1
i2cset -y 1 0x3c 0x00 0xdb # vcom detect
i2cset -y 1 0x3c 0x00 0x40
i2cset -y 1 0x3c 0x00 0xa4 # resume
i2cset -y 1 0x3c 0x00 0xa6 # normal (not inverted)
i2cset -y 1 0x3c 0x00 0xaf # display on
# transfer frame buffer data
# y=0..7
i2cset -y 1 0x3c 0x40 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
# y=8..15
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
# y=16..23
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
# y=24..31
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
# y=32..39
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
# y=40..47
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
# y=48..55
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
# y=56..63
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i
i2cset -y 1 0x3c 0x40 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff i
view rawrpi-i2c-2.sh hosted with ❤ by GitHub
実行すると、こんな感じでOLEDに表示されます。
raspbian-ssd1306.jpg





0 件のコメント:

コメントを投稿