はじめに
- Lチカからカメラ、各種センサの使い方を学習したので備忘録
RaspberryPi3 B+への入出力制御
RasPi3 B+ Pin配列
$ pinout
出力例
,--------------------------------.
| oooooooooooooooooooo J8 +====
| 1ooooooooooooooooooo P | USB
| Wi ooo +====
| Fi Pi Model 3B+ V1.3 ooE |
| ,----. +====
| |D| |SoC | | USB
| |S| | | +====
| |I| `----' |
| |C| +======
| |S| | Net
| pwr |HDMI| |I||A| +======
`-| |--------| |----|V|-------'
Revision : a020d3
SoC : BCM2837
RAM : 1024Mb
Storage : MicroSD
USB ports : 4 (excluding power)
Ethernet ports : 1
Wi-fi : True
Bluetooth : True
Camera ports (CSI) : 1
Display ports (DSI): 1
J8:
3V3 (1) (2) 5V
GPIO2 (3) (4) 5V
GPIO3 (5) (6) GND
GPIO4 (7) (8) GPIO14
GND (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND
GPIO22 (15) (16) GPIO23
3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND
GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8
GND (25) (26) GPIO7
GPIO0 (27) (28) GPIO1
GPIO5 (29) (30) GND
GPIO6 (31) (32) GPIO12
GPIO13 (33) (34) GND
GPIO19 (35) (36) GPIO16
GPIO26 (37) (38) GPIO20
GND (39) (40) GPIO21
For further information, please refer to https://pinout.xyz/
$ gpio readall
出力例
+-----+-----+---------+------+---+---Pi 3B+-+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | ALT0 | 1 | 3 || 4 | | | 5v | | |
| 3 | 9 | SCL.1 | ALT0 | 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 | ALT0 | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | ALT0 | 0 | 21 || 22 | 1 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | IN | 1 | 23 || 24 | 1 | OUT | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | OUT | 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 | 1 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | IN | 1 | 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 3B+-+---+------+---------+-----+-----+
サンプルコード (RPi.GPIO)
- Lチカやスイッチ(ON/OFF)など
import RPi.GPIO as GPIO
GPIO.getmode() # BOARD, BCM, None
GPIO.setmode(BCM)
GPIO.setup(25, GPIO.OUT)
GPIO.setup(24, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.output([11, 12], GPIO.LOW) # all ch: LOW
GPIO.output([11, 12], (GPIO.LOW, GPIO.HIGH)) # ch11: LOW, ch12: HIGH
GPIO.add_event_detect(26, GPIO.FALLING, call_back=my_func, bouncetime=200)
GPIO.output(24, not GPIO.input(24))
GPIO.cleanup()
RPLCD
- 1602A LCD
- http://www.circuitbasics.com/raspberry-pi-lcd-set-up-and-programming-in-python/
- HD44780 DataSheet
$ pip3 install RPLCD
from time import sleep
from RPLCD.gpio import CharLCD
import RPi.GPIO as GPIO
lcd = CharLCD(numbering_mode=GPIO.BOARD, cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
lcd.write_string('Hello World.')
sleep(5)
lcd.close(clear=True)
SPI (Serial Peripheral Interface:シリアル・ペリフェラル・インタフェース)
- AD変換によりアナログ値を利用する
制御信号 | 用途 |
---|---|
SCK (Serial Clock) | 同期クロック |
MISO (Master In Slave Out) | 入力 |
MOSI (Master Out Slave In) | 出力 |
SS/CS/CE (Slave Select) | スレーブ識別 |
I2C (Inter-Integrated Circuit:アイ・スクエアド・シー)
- デジタル値を直接利用する
- デバイスにはアドレスがある
制御信号 | 用途 |
---|---|
SDA (Serial Data) | 入出力 |
SCL (Serial Clock) | 同期クロック |
PWM (Pulse Width Modulation:パルス幅変調)
- 高精度のPWM (2つ): サーボモータの角度制御
- 低精度のPWM (複数): 疑似的なアナログ制御(LEDの明るさ制御,DCモータの速度制御など)
Picamera
$ cd /home/pi/MyProjects/raspi/Camera/
$ mkdir ./pictures/
$ mkdir ./videos/
$ sudo chmod 0755 ./pictures/
$ sudo chmod 0755 ./videos/
静止画撮影
from picamera import PiCamera
from time import strftime
from time import sleep
PAUSE_TIME = 3
PHOTO_SAVE_DIR = '/home/pi/MyProjects/raspi/Camera/pictures/'
FILE_NAME_FMT = '%Y-%m-%d_%H-%M-%S'
camera = PiCamera()
camera.rotation = 180
camera.resolution = (800, 600)
camera.start_preview(alpha=200)
sleep(PAUSE_TIME)
camera.capture(PHOTO_SAVE_DIR + strftime(FILE_NAME_FMT) + '.jpeg')
camera.stop_preview()
動画撮影
from picamera import PiCamera
from time import strftime
from time import sleep
PAUSE_TIME = 10
VIDEO_SAVE_DIR = '/home/pi/MyProjects/raspi/Camera/videos/'
FILE_NAME_FMT = '%Y-%m-%d_%H-%M-%S'
camera = PiCamera()
camera.resolution = (800, 600)
camera.start_preview(alpha=200)
camera.start_recording(VIDEO_SAVE_DIR + strftime(FILE_NAME_FMT) + '.h264')
sleep(PAUSE_TIME)
camera.stop_recording()
camera.stop_preview()
$ omxplayer yyyy-mm-dd_HH-MM-SS.h264
DIY電子工作
-
電子工作については以下のサイトが大変役に立ちました。
ありがとうございます。
おわりに
- 基本的な入出力制御は理解出来た。
- この基本を組み合わせていけば、色々なシステム、装置が自作出来そう。
- 3Dプリンタが欲しくなる。