You are on page 1of 36

樹莓派基礎應用

R a s p b e r r y Pi
TTU We e k # 5

1
R aspberry P i

TTU 課程大綱
 第㇐週:認識樹莓派  第四週: Python 程式簡
 樹莓派是什麼? 介 程式的編輯與執行
 樹莓派能做甚麼 ?  Python 基本指令
 基本的 Linux 指令

 第五週: GPIO 應用
 第二週:樹莓派作業系統  GPIO 簡介
與  電路與元件
常用指令  實作 – LED 控制
 QEMU 模 擬 器
 Raspberry OS
 常用 Linux 指令
 第六週:樹莓派擴充板
 常用的樹莓派擴充板
 Sense HAT 擴充板
 第三週:遠端控制樹莓派
 實作

2
R aspberry P i

TTU GPIO 簡介
 樹莓派與智慧家

Raspberry Pi Home Automation System based on IoT

3
R aspberry P i

TTU GPIO 簡介
 What is IoT?
 IoT: Internet of
Things

需要給電燈、冰箱㇐張 sim 卡 ? 4
R aspberry P i

TTU GPIO 簡介
 What is IoT?
 IoT: Internet of
Things

雲端層

網路層

裝置層
5
R aspberry P i

TTU GPIO 簡介
 What is IoT?
 IoT: Internet of
Things

6
R aspberry P i

TTU GPIO 簡介
 What is IoT?
 IoT: Internet of
Transceivers :
Things 通訊模組,如上面提及
MCU : 的
Micro Control Uint 微控器,
Bluetooth 、 WiFi 、 N
這部分就是㇐顆單晶片或嵌入
式系統,負責做邏輯判斷、週 Tr a n s c e ive rs FC 、 LoRa 、 Zigbee
MCU ,或㇐般的 RF 模組等
等。
邊電路
控制、讀取 Sensor 感
資料送上雲端。
測到訊號 ( 電壓 / 電流 ) ,把訊 Original
Sensors : Sensors Original Devices :
號做轉換後再透過通訊模組將 Devices 就是㇐些傳統的物品,
感測器,有各式各樣不同的感
如電燈、冰箱、電視、
測器可以用來偵測自然界中的
冷氣、電鍋等等。
“狀態 " , e.g. 溫度、空氣濕
度、 ... ,其輸出通常為電壓訊
號或電流訊號,不過也有做成
模組可以讓 MCU 直接用
UART 、
I2C 、 SPI 等通訊介面做溝通。 7
R aspberry P i

TTU GPIO 簡介
 GPIO: General Purpose Input /
Output GPIO 是㇐種可用軟體控制的數位訊

 用軟體控制什麼 ?
 決定是輸入還是輸出
 寫值到某根腳位
 從某根腳位讀值
決定是前緣觸發還是後緣觸發

 等待中斷 (interrupt) 的發生 8


R aspberry P i

TTU GPIO 簡介
 樹莓派 3 B 腳位配置 Z 字型的腳位編號

9
R aspberry P i

TTU GPIO 簡 GPIO#


N/A
2nd func
+3V3
pin#
1
pin#
2
2nd func
+5V
GPIO#
N/A

介電源相關
GPIO2
GPIO3
SDA1 (I2C)
SCL1 ( C)
3
5
4
6
+5V
GND
N/A
N/A
GPIO4 GCLK 7 8 TXD0 (UART) GPIO14
 3B 腳位配置
5V: 2, 4
3.3V: 1, 17
N/A GND 9 10 RXD0 (UART) GPIO15

GND: 9, 25, 39, 6, 14, 20., 30, 3 4 GPIO17 GEN0 11 12 GEN1 GPIO18
GPIO27 GEN2 13 14 GND N/A
I2C ( 一種串列通訊匯流排 )
GPIO22 GEN3 15 16 GEN4 GPIO23
I2C Bus 的 I/O: 3, 5
EEPROM 使用 : 27, 28 N/A +3V3 17 18 GEN5 GPIO24
GPIO10 MOSI (SPI) 19 20 GND N/A
UART 通用非同步收發傳輸器 GPIO9 MISO (SPI) 21 22 GEN6 GPIO25
TXD( 傳送 ): 8
GPIO11 SCLK (SPI) 23 24 CE0_N (SPI) GPIO8
RXD( 接收 ): 10
N/A GND 25 26 CE1_N (SPI) GPIO7
SPI 序列周邊介面匯流排  for Model A and Model B
MOSI: 19, MISO: 21, SCLK: 23 EEPROM ID_SD 27 28 ID_SC EEPROM
CE0: 24, CE1: 26
GPIO5 N/A 29 30 GND N/A
GPIO6 N/A 31 32 - GPIO12
GPIO 的接腳除了 3V3, 5.0V,
GND 外,其他都可以用軟體規劃輸 GPIO13 N/A 33 34 GND N/A

出或輸入等不同模式。 CLK 是有 GPIO19 N/A 35 36 N/A GPIO16


高有低的信號送出, I2C, SPI 等 GPIO26 N/A 37 38 Digital IN GPIO20
是配合㇐些元件,這樣可以不用接 N/A GND 39 40 Digital OUT GPIO21
太多線,但是可以有接很多線的效
果。 10
R aspberry P i

TTU GPIO 簡介
 如何控制 Raspberry Pi 的
GPIO ? C
 C ++
 C#
 Ruby
 Perl
 Python
 Scratch
 Java
 Java Script

 .. .

11
R aspberry P i

TTU GPIO 簡介
 RPI3 的 GPIO 接腳依功能可分為幾大類
 電源相關
 5V : 第 2 、 4 腳。
 3.3V : 第 1 、 17 腳。
 GND : 第 9 、 25 、 39 、 6 、 14 、 20 、 30 及 34 共 8 隻腳。
 I2C (Inter-Integrated Circuit) 是㇐種串列通訊匯流排
 第㇐組是第 3 、 5 腳,這組能接其他 I2C Bus 的 I/O
裝置。
 另㇐組是第 27 、 28 腳,但已連接 EEPROM 。
 SPI 序列周邊介面匯流排
 腳位為 19-MOSI 、 21-MISO 、 23-SCLK 、 24-CE0 、 26-
CE1
 UART 通用非同步收發傳輸器
 UART (Serial Port) ,接腳 8-TX( 傳送 ) 、 10-RX( 接收 ) 。
 PWM
 第 12 腳可以做 PWM 輸出,但此 PWM 是由軟體模擬出來 12
的,
並非 Timer 迴路產生。
R aspberry P i

TTU GPIO 簡介
 如何控制 Raspberry Pi 的
GPIO ? C
 C ++
 C#
 Ruby
 Perl
 Python
 Scratch
 Java
 Java Script

 .. .

13
R aspberry P i

TTU GPIO 簡介
 Python 複習
 變數 , 物件 , 型
別 , 註解 模組
 縮排

 條件判斷

 迴圈
 函式

14
R aspberry P i

TTU GPIO 簡介
變數 , 物件 , 型別 , 註解
 動態型別 (dynamic typing)

# 這是註解
i = 3 # 變數 i 指到數字物件 3
i = [1, 2, 3, 4, 5] # 變數 i 指到串列
物件
p r i n t ( i [ 2 ] ) # 印出串列中第三個元素
i = “ abcde” # 變數 i 指到字串物件
p r i n t ( i [ 2 ] ) # 印出字串中第三個元素

15
R aspberry P i

TTU GPIO 簡介
模組

# 語法 1 : import MODULE
import RPi.GPIO
# 語法 2 : import MODULE as ALIAS
import RPi.GPIO as GPIO

# 語法 3 : from MODULE import


FUNCTION from time import sleep

16
R aspberry P i

TTU GPIO 簡介
縮排
 用縮排取代大括號

 程式碼的區塊是用縮排分


 不使用 tab, 使用空白
鍵 if 條 件 :
 常見縮排為 4 個空白鍵  
 
 

  
 
 
e l s e
 
 
 
17
R aspberry P i

TTU GPIO 簡介
條件判斷 條件判斷
 語法  範例

if c o n d i t i o n 1 : grade = 60
process1 if g r a d e > 6 0 :
elif c ondi t i on2 : print "great"
process2 else:
else: print "too bad"
process3

18
R aspberry P i

TTU GPIO 簡介
迴圈
 自動迭代

(iterator)
語法
for target i n list :
process

 範例
n a m e S = ["paul", "mary",
" t o m " , "rita"] for n a m e in n a m e S :
print n a m e

19
R aspberry P i

TTU GPIO 簡

語法
函式
def function_name():
process

語法
def function_name(parameter_name):
process
語法
def function_name(par1=2,par2=10):
process

 範例
def my_function(inPut= 5):
outPut=inPut+10
print(outPut)
20
R aspberry P i

TTU 實作: LED 控


制  常見電子入門套件
• LED 紅/ 黃/ 綠
• 電阻 1/4W
• 麵包板
• 按鍵
• 蜂鳴器
• 人體紅外線感測器 (PIR)
• A/DC IC
• 光敏電阻
• XY 搖桿
• 超音波距離感測器 HC-SR04
• 可變電阻
• 杜邦線 公對公 / 公對母 / 母
對母
21
R aspberry P i

TTU 實作: LED 控


制  電子入門套件
LE D
 發光二極體
 單向導通
 省電
 ⾧腳接正極 Vcc
 短腳接負極
GND

22
R aspberry P i

TTU 實作: LED 控


制  電子入門套

LED 特性

V F: 順向電壓
IF: 在順向電壓下的最大電
流 23
R aspberry P i

TTU 實作: LED 控


制  電子入門套件
LED 保護電阻
在順向電壓下 LED 能承受
的最大電流是 20mA ,由於
LED 順向導通電壓為 1.85V
樹莓派的 GPIO 腳位能提供
5V 與 3.3V 直流電壓,以
3.3 V 為例,在電流 20mA 下的最小電阻值為

表示要接不小於 72.5 歐姆的電阻 , 才能避免 LED
燒毀
24
R aspberry P i

TTU 實作: LED 控


制  電子入門套 10

電阻 阻值計算

0.22103 K

25
R aspberry P i

TTU 實作: LED 控


制 電子入門套件
麵包板 ( 機電元
件)

中間:垂直相連 上下:水平相連
5V

GND

26
R aspberry P i

TTU 實作: LED 控


制  GPIO 接 LED 電
路要接哪㇐個腳
要點:
(pin)

? ㇐隻腳接地,
? ㇐隻腳給電

 接地:
GND: #9, #14, . . .
 給電:
 固定電壓
5V: #2. #4
3.3V: #1, #17
 可變電壓
可程式控制 pin 腳:綠色部

27
R aspberry P i

TTU 實作: LED 控


制 GPIO 接 LED 電
路 LED GPIO
⾧腳 (RED) Pin12 (GPIO18)
短腳 (BLACK) Pin6 (GND)

28
R aspberry P i

TTU 實作: LED 控


制  GPIO 接 LED 電路 LED GPIO

樹莓派通電後,會不會亮 ? ⾧腳 Pin12
(RED) (GPIO18)
短腳 (BLACK) Pin6 (GND)

29
R aspberry P i

TTU 實作: LED 控


制  使用 Python 編程控制
GPIO LED GPIO
⾧腳 (RED) Pin12 (GPIO18)
短腳 (BLACK) Pin6 (GND)

30
R aspberry P i

TTU 實作: LED 控


制  使用 Python 編程控制 GPIO
 python Rpi.GPIO (raspberry-gpio-python) :
python
RPi.GPIO 是㇐個 python 模組,可幫助用戶完成樹莓派 IO 埠操

 安裝指令: $ pip install RPi.GPIO
 Python Code GPIO 基本控制流程
 載入模組 (Import module)
import RPi.GPIO as GPIO
 選擇編號系統 (Define pin numbering)
GPIO.setmode(GPIO.BOARD)
 定義腳位 (Setup up a channel)
LED_PIN = 12
 讀取輸入 / 寫入輸出 (Input/Output)
GPIO.output(LED_PIN, GPIO.HIGH)
 清理 (Cleanup)
GPIO.cleanup() 31
R aspberry P i

TTU 實作: LED 控


制  使用 Python 編程控制 GPIO
 Python 範例程式 led_on.py
#!/usr/bin/python

import RPi.GPIO as GPIO # 載入模組

import time

GPIO.setmode(GPIO.BOARD) # 選擇系統 ( 以實體腳位系統為


例)

LED_PIN = 12
GPIO.setup(LED_PIN, GPIO.OUT) # 定義腳位 ( 方向 )

print("LED is on")
GPIO.output(LED_PIN, GPIO.HIGH) # 設定腳位狀態
time.sleep(3)

GPIO.cleanup() # 清理 32
R aspberry P i

TTU 實作: LED 控


制  使用 Python 編程控制 GPIO
 Python 範例程式 + 詳細註解 led_on.py
#!/usr/bin/env python
# encoding: utf-8
# 導入模塊 RPI.GPIO ,命名為別名為
import RPi.GPIO as GPIO
# 導入 time 模塊
import time
# 聲明 GPIO 使用物理編號方式,也就是 12 號口就是物理編號 12 號口
GPIO.setmode(GPIO.BOARD)
# 聲明 12 號口是用於輸出模式
GPIO.setup(12, GPIO.OUT)
# 設置 12 號口為高電壓,也就是 12 號口變為 3.3 伏
# 這行代碼執行之後, 12 號口變為高電壓,
# 那麼根據電路原理, led 燈就會亮起來
GPIO.output(12, GPIO.HIGH)
# 程序休眠 3 秒鐘,程序休眠期間, led 燈會㇐直亮著
time.sleep(3)
# 設置 12 號口為低電壓,也就是 12 號口變為 0 伏,和 GND ㇐樣
# 這行代碼執行之後, 12 號口變為低電壓,那麼根據電路原理, led 燈就會熄滅
GPIO.output(12, GPIO.LOW)
# 將所有的 GPIO 口狀態恢復為初始化,㇐般代碼結束都執行此代碼,這
是㇐個好習慣 GPIO.cleanup()
33
R aspberry P i

TTU 實作: LED 控


制  使用 Python 編程控制 GPIO
 將編輯、修改後的程式碼儲存: led_on.py

 讀寫 GPIO 會存取 /dev/mem , 需 root 權限,因


此執行 led_on.py 必須用 sudo 指令
$ sudo python led_on.py

34
R aspberry P i

TTU 實作: LED 控


制  使用 Python 編程控制
GPIO
Python 範例程式
i m port R P i . G P I O a s GPIO # 載入模組
led_blink.py
import time
#!/usr/bin/python
GPIO.setmode(GPIO.BOARD) # 選擇系統 ( 以實體腳位系統為
例)
LED_PIN = 12
GPIO.setup(LED_PIN, GPIO.OUT) # 定 義 腳 位 ( 方 向 )

w h i l e Tr u e :
print("LED is on")
GPIO.output(LED_PIN, GPIO.HIGH) # 設 定 腳 位 狀 態
time.sleep(1)
p r i n t ( " L E D is off")
GPIO.output(LED_PIN, GPIO.LOW) t i m e . s l e e p ( 1 )
GPIO.cleanup() # 清理
35
R aspberry P i

TTU 課後學習單三
使用 A4 紙張,回答或完成下面問題。
1. 改寫 led_blink.py 讓 Led 交互閃爍 30 次後,
Led 熄
滅並停止閃爍,並在程式碼中加上完整的註解。

36

You might also like