Upgrade to Pro — share decks privately, control downloads, hide ads and more …

(學習護照)樹莓派基礎教學

 (學習護照)樹莓派基礎教學

D82180999c1d0153e03471ec4ead6a11?s=128

Yi-Zhen, Chen

July 14, 2021
Tweet

More Decks by Yi-Zhen, Chen

Other Decks in Programming

Transcript

  1. None
  2. None
  3.  體積輕巧的微型電腦  搭載Linux系統  低價位、高擴充性

  4. Raspberry Pi 微型電腦會以水果為基礎命名的傳統 例:蘋果電腦 程式語言 Python

  5. • 無人機飛行器

  6. • 遊戲機、掌上機

  7. • 網路攝影機、門禁監控

  8. • 智慧家電 智慧園藝系統、 自動寵物餵食器、平板、 各項感測器…等等族繁不及備載

  9. 連接攝像鏡頭 連接觸控螢幕 插入系統檔 通用型輸入輸出

  10. USB轉TTL/RS-232 HDMI轉VGA 相機鏡頭 電源 Micro USB

  11. None
  12. 紅/黃/綠 LED燈 大按鍵開關 1K/2K 電阻 自激/他激 蜂鳴器 10K可變電阻 光敏電阻 傾斜滾珠開關

    超音波距離感測器 類比轉換 紅外線感測器 雙軸XY搖桿組 20pin 公對母排線 20pin 公對公排線 20pin 母對母排線 麵包板
  13. None
  14. 1. 將樹莓派翻面 2. 將SD小卡從轉接卡中取出 3. 正面(有圖案面)朝上放入插槽

  15. 1. 翻回正面 2. 使用USB轉TTL/RS-232與樹莓派連結 3. 依序將黑色/白色/綠色插入Pin 6/8/10 4. USB連接電腦 5.

    Micro USB插這邊的 電源(power)→
  16. 1. 安裝USB to Serial驅動程式 http://goo.gl/QC5Q3O 2. 解壓縮後執行PL2303G_130_20190311.exe進行安裝 3. 重新開機

  17. 1.打開裝置管理員 > 通用埠(COMC和LPT) / 通用序列匯流排控制器 查看埠號,此顯示為COM4

  18. ※ 連接埠依然出現無法辨認的圖樣,可嘗試安裝舊版的驅動程式 https://reurl.cc/GkKrxW

  19. 1.依作業系統32/64位元下載對應版本 2.安裝Putty並執行 https://reurl.cc/lL7doQ

  20. 1.選擇Seesion 2.選擇連線方式為Serial 3.Serial line輸入查看到的COM埠號 4.Speed更改為115200 5.點擊Open連線

  21. 1.剛連線沒畫面可按下 ※再不行就拔電源重新連線 2.raspberrypi login輸入 pi 3.密碼請輸入預設的 raspberry

  22. None
  23. • ls • cd <目錄> • cd .. • cd

    ~ • pwd • sudo reboot • sudo poweroff # 查看目前工作目錄 # 重開機 # 關機 # 顯示該目錄下所有檔案與文件夾 # 前往指定目錄,若後頭空白則回到主目錄 # 回上一層 # 回家目錄
  24. • mkdir <目錄名> • touch <檔案名> • nano <檔案名> •

    vim <檔案名> • cp <原檔案或目錄> <新檔案或目錄> • mv <原檔案或目錄> <目標檔案或目錄> • rm <檔案或目錄> # 新建目錄(文件夾) # 新增空白檔案或 更新已存在文件時間戳記 # 在終端機編輯文字檔案 # 在終端機編輯文字檔案 # 複製檔案 # 移動檔案 # 刪除檔案
  25. sudo apt-get update sudo apt-get install -y python-dev python-pip libsdl1.2-dev

    x11vnc # 請輸入指令 (複製完後在putty按右鍵貼上) 下載此PPT跟範例程式碼(.py):https://reurl.cc/31eeeX
  26. • GPIO (General Purpose Input Output) • GPIO 是一種可用軟體控制的數位訊號 •

    決定是輸入還是輸出 1) 輸出:寫值到某根腳位 2) 輸入:從某根腳位讀值
  27. • 樹莓派擁有40個排針 • 控制樹莓派電子元件I/O • 每個排針有不同定義 選擇合適的排針位置連接 • raspberry-gpio-python 擴充庫控制GPIO

  28. • 引腳 1,2,4 1. 恆定輸出電壓 (3.3 / 5 V) •

    引腳 6,9,14 …等黑色圖標 1. GND代表Ground接地 2. 電壓為0V • 引腳 7,11,12,13,15 …等綠色圖標 1. 可輸入可輸出 2. 電壓負荷在3.3 ~ 0V 3. 使用程序來控制
  29. 變數 , 物件 , 型別 , 註解 模組, 縮排 ,

    迴圈 , 條件 , 判斷式
  30. • 宣告變數時不必指定資料型別,依照給定的內容定義其型別

  31. • 匯入模組與套件時使用import RPi.GPIO太長可利用as定義一個別名

  32. • Python用縮排取代其他語言常用的 大括號{ } 來表示區塊 • 有Tab或空白鍵兩種縮排(通常4格空白為一縮排) 整份文件裡須統一使用Tab或空白 不同編輯器Tab長度不同,可能造成排版混亂 所以建議使用空白做縮排

    Python 其他語言 (ex. Java, C#)
  33. • 迴圈 (loop) 讓程序敘述在指定條件符合的情況下一直重覆執行 • 主要分成兩種循環: 1. for迴圈 2. while迴圈

  34. • for 迴圈 (for loop) for迴圈可以遍歷任何序列的項目,如一個清單或者一個字串 指定一變數去做迭代 迴圈依照Sequence的範圍去做執行 條件符合每次執行的內容 範例:

    以range(3)產生的序列去做遍歷
  35. • range() 創建一個整數序列,可定義成 ( 起始值, 終止值, 遞增/減值 ) • range(10):產生0~9的整數序列

    • range(1, 11):產生1~10的整數序列 • range(0, 10, 2):產生從0, 2, 4, 6, 8的整數序列 未指定遞增值的情況下, 其遞增值預設為1 ※ range(10,0,-3) 會產生多少範圍內的序列?
  36. sudo nano test_forloop.py 寫一個for迴圈吧! 新增一個名為test_forloop的python檔案! 指令列輸入:

  37. 寫一個for迴圈吧! 請實作看看在for迴圈中range(10,0,-3)的結果 nano存檔方式: 1. 按下 Ctrl + X 離開 2.

    詢問是否儲存修改?按下 Y 3. 詢問要儲存的檔名 > 按下 ENTER ※ 注意縮排! 執行python檔案,指令列輸入: sudo python test_forloop.py
  38. • while 迴圈 (while loop) 當條件式成立(為Ture)會一直循環執行 • 條件沒有處理好的話會形成無限迴圈 • while

    True 語句中一定要有break語句,否則會一直迴圈下去
  39. • 條件判斷 (if..else..) 通過一個判斷句來決定執行的程式區塊 指定條件式 若符合條件則執行if區塊 若不符則進行 第二個條件句(elif)的判斷 以此類推 範例:

    最後結束條件句的判斷後 執行第四個區塊
  40. • 例外處理 (try..except..) 自行控制可能會產生例外的程式碼 • 可選擇加入finally ,無論例外有沒有發生都會執行 finally 後的程式區塊 •

    標準異常情況:KeyboardInterrupt用戶中斷執行 範例:
  41. • 函式(def) 可以定義一個由自己想要功能的函數 簡單規定: 1. 以 def 關鍵字開頭,後接函數識別字名稱和圓括號() 2. 任何傳入參數和引數須放在圓括號中

    3. 圓括號之間可以用於定義參數 4. 函數內容以冒號起始,並且縮進 範例:
  42. 準備材料 麵包板 x1 LED紅燈泡 x1 公對母排線 x2 (一黑一紅) 1K電阻(棕黑黑棕) x1

  43. LED燈 • 發光二導體 • 短腳接負極 GND (接地) • 長腳接正極 Vcc

    (接普通輸入出引腳) 一腳接地 一腳接電
  44. 麵包板 (Bread Board) 1. 藍綠兩區不通 (隔離) 2. 藍色水平相通 3. 紅色垂直相通

  45. 1. LED短腳接地 (與黑排線同水平排) 2. LED長腳接電 (與電阻一腳同水平排) 3. 通電處中間接電阻 (電阻另一腳的水平排上接線) 4.

    公母排線與樹莓派引腳連接 黑線:接GND (黑標 位置14) 紅線:接通用引腳 (綠標 位置12) 直接接GND即可
  46. 短腳與黑排線同水平排 長腳與電阻一腳 同水平排 通電處中間接電阻 公母排線與樹莓派引腳連接 黑線:接GND (黑標 位置14) 紅線:接通用引腳 (綠標

    位置12)
  47. 試著把排線 從GPIO 12換到GPIO 1上 看看會不會亮

  48. sudo nano led.py 再新增一個名為led_blink的python檔案吧! 指令列輸入: 記得將排線插回原本12的位置上唷

  49. #!/usr/bin/python import RPi.GPIO as GPIO import time LED_PIN = 12

    GPIO.setmode(GPIO.BOARD) GPIO.setup(LED_PIN, GPIO.OUT) try: while True: print "LED is on" GPIO.output(LED_PIN, GPIO.HIGH) time.sleep(1) print "LED is off" GPIO.output(LED_PIN, GPIO.LOW) time.sleep(1) except KeyboardInterrupt: print "Exception: KeyboardInterrupt" finally: GPIO.cleanup() 完整程式碼 請查看led_blink.py GPIO的Hello World—亮燈 1. 打開空白記事本 2. 將led_blink.py拉過去 3. 就可以看到程式碼! 4. 複製led_blink.py的程式碼 5. 在putty的文字編輯器視窗內 按下右鍵,即可貼上程式碼
  50. import RPi.GPIO as GPIO import time 載入模組 LED_PIN = 12

    GPIO.setmode(GPIO.BOARD) GPIO.setup(LED_PIN, GPIO.OUT) 設定編號規則與channel 填上燈泡接電的引腳編號
  51. 修改完畢請進行存檔 1. 按下 Ctrl + X 離開 2. 詢問是否儲存修改?按下 Y

    3. 詢問要儲存的檔名 > 按下 ENTER
  52. #!/usr/bin/python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) RED_PIN =

    11 # GPIO17 YEL_PIN = 12 # GPIO18 GRN_PIN = 13 # GPIO27 GPIO.setup(RED_PIN, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(YEL_PIN, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(GRN_PIN, GPIO.OUT, initial=GPIO.LOW) try: while True: GPIO.output(RED_PIN, GPIO.HIGH) time.sleep(4) GPIO.output(RED_PIN, GPIO.LOW) GPIO.output(YEL_PIN, GPIO.HIGH) time.sleep(2) GPIO.output(YEL_PIN, GPIO.LOW) GPIO.output(GRN_PIN, GPIO.HIGH) time.sleep(4) GPIO.output(GRN_PIN, GPIO.LOW) except KeyboardInterrupt: print "Exception: KeyboardInterrupt" finally: GPIO.cleanup() 完整程式碼 請查看 traffic_light_nonstructure.py 紅綠燈亮燈 這邊一樣要改引腳編號!
  53. sudo poweroff 將樹莓派關機 輸入指令 請幫忙將樹莓派裝置回復成組裝前模樣 待助教點收完畢設備再離位,謝謝配合!