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

智慧插座(Smart Relay): 從 GPIO 到繼電器

智慧插座(Smart Relay): 從 GPIO 到繼電器

《特色》
1. 四小時工作坊,手把手教學,附完整範例程式。
2. 從 GPIO 控制 LED 到控制 110V 家用電器。
3. 全系列 Pi 都可以使用。

《內容》
1.GPIO + Python介紹(1 小時)
2.數位輸出,使用 Python 控制 LED(1 小時)
3.繼電器介紹,控制家用插座,讓 USB LED 亮和暗(2 小時)

《範例程式》
https://github.com/piepie-tw/smart-relay

《購買套件》
https://www.piepie.com.tw/19657/smart-relay-kit

台灣樹莓派

March 30, 2018
Tweet

More Decks by 台灣樹莓派

Other Decks in Technology

Transcript

  1. 姓名標示 — 非商業性 — 相同方式分享 CC (Creative Commons) 姓名標示 —

    你必須給予 適當表彰、提供指向本授權 條款的連結,以及 指出(本作品的原始版本)是否已 被變更。你可以任何合理方式為前述表彰,但不得以 任何方式暗示授權人為你或你的使用方式背書。 非商業性 — 你不得將本素材進行商業目的之使 用。 相同方式分享 — 若你重混、轉換本素材,或依本 素材建立新素材,你必須依本素材的授權條款來 散布你的貢獻物。
  2. 7 • 硬體:Raspberry Pi 3B/3B+ • 作業系統:2018-11-13-raspbian-stretch.img • 為了可以使用USB 轉TTL

    傳輸線 • 修改/boot/config.txt, 新增三行 – dtoverlay=pi3-miniuart-bt – core_freq=250 – enable_uart=1 • 修改/boot/cmdline.txt, 將quiet splash 的quiet 移除 今日環境 刪除 quiet 新增三行
  3. • $ sudo apt-get update • $ sudo apt-get -y

    install python- pip python-dev x11vnc python3-dev python3-venv 安裝今日所需軟體 ( 已安裝 )
  4. 10 • General Purpose Input Output • GPIO 是一種可用軟體控制的數位訊號 什麼是

    GPIO ? http://www.tek.com/datasheet/tps2000b-series-digital-storage-oscilloscopes-datasheet
  5. 13 • GPIO 高電位輸出為 3.3V • GPIO 容忍輸入電位為 3.3V •

    單一 Pin 輸出電流為 3mA-16mA • 全部 Pin 輸出總和小於 50mA • GPIO 輸入低電位為小於 0.8V, 高電位為大於 1.3V 幾個 GPIO 的數字 https://www.scribd.com/doc/101830961/GPIO-Pads-Control2
  6. 14 • C • C + wiringPi • C# •

    Ruby • Perl • Python • Scratch • Java Pi4J Library • Shell script 如何控制 Raspberry Pi 的 GPIO ?
  7. 16 • 變數 , 物件 , 型別 , 註解 •

    模組 • 縮排 • 迴圈 • 條件判斷 • 函式 Python2 五分鐘速成
  8. 17 • 動態型別 (dynamic typing) # 這是註解 i = 3

    # 變數 i 指到數字物件 3 i = [1, 2, 3, 4, 5] # 變數 i 指到串列物件 print(i[2]) # 印出串列中第三個元素 i = "abcde" # 變數 i 指到字串物件 print(i[2]) # 印出字串中第三個元素 變數 , 物件 , 型別 , 註解
  9. 18 # import MODULE import RPi.GPIO # import MODULE as

    ALIAS import RPi.GPIO as GPIO 模組
  10. 20 • 自動迭代 (iterator) for i in xrange(start, stop[, step]):

    process for i in xrange(0, 11, 5): print(i) 迴圈
  11. 23 • 1. 存成檔案以後 , 用 python 執行 • $

    nano test.py • $ python test.py • 2. 進到互動模式 , 可直接看輸出結果 • $ python Python 2.7.9 (default, Sep 17 2016, 20:26:04) [GCC 4.9.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 兩種執行 Python 的方法
  12. 28 線路圖 LED RPi 長腳 (RED) Pin12 (GPIO18) 短腳 (BLACK)

    Pin6 (Ground) 1k 電阻 : 棕黑黑棕 ( 棕 )
  13. 29 線路圖 LED RPi 長腳 (RED) Pin12 (GPIO18) 短腳 (BLACK)

    Pin6 (Ground) 1k 電阻 : 棕黑黑棕 ( 棕 )
  14. 34 • 載入模組 (Import module) • 選擇編號系統 (Define pin numbering)

    • 定義腳位 (Setup up a channel) • 讀取輸入 / 寫入輸出 (Input/Output) • 清理 (Cleanup) Python Code 基本流程 http://code.google.com/p/raspberry-gpio-python/wiki/BasicUsage
  15. 35 #!/usr/bin/python • import RPi.GPIO as GPIO # Import module

    import time GPIO.setmode(GPIO.BOARD) # Define pin numbering LED_PIN = 12 GPIO.setup(LED_PIN, GPIO.OUT) # Setup up a channel print("LED is on") GPIO.output(LED_PIN, GPIO.HIGH) # Input/Output status time.sleep(3) GPIO.cleanup() # Cleanup 一個實際的範例 以下都是使用別名 (alias)
  16. 36 使用 :nano < 檔名 , 例如 led_on.py> 離開 :Ctrl

    + x > 令存新檔 :y > 不存離開 :n > 離開 :Ctrl + c nano 編輯器使用
  17. 38 • Wiki • http://sourceforge.net/p/raspberry-gpio- python/wiki/Home/ • Code • http://sourceforge.net/p/raspberry-gpio-

    python/code/ci/default/tree/ • Reference detail • http://elinux.org/RPi_Low-level_peripherals • http://elinux.org/RPi_BCM2835_GPIOs • http://www.raspberrypi.org/wp- content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf 更多 RPi.GPIO 的使用方法
  18. 41 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() 永不停止的 while 迴圈 - 按 Ctrl+c 跳出迴圈
  19. 42 $ cd ~ $ git clone https://github.com/piepie-tw/smart-relay $ cd

    ~/smart-relay $ python led_blink.py 讀寫 GPIO 會存取 /dev/mem, 需 root 權限 (2015-09-24 以後的 image 可以用一般使用者身份執行 ) 執行方式
  20. • COM(Common) 表示共接點 • NO(Normally Open) 為常開接點 , 平常處於開路 (

    斷 ) 路 • NC(Normally Close) 為常閉接點 , 平常處於閉路 內部構造和名詞縮寫 https://zh.wikipedia.org/wiki/%E7%BB%A7%E7%94%B5%E5%99%A8
  21. • 額定工作電壓 :5V • 吸合電流 : 直流 30V/10A, 交流 250V/10A

    • 釋放電流 :15-20mA • 觸點切換電壓和電流 : 低電位觸發 技術參數
  22. 56 線路圖 Rpi Relay Pin4 (5V) VCC (Red) Pin6 (Ground)

    IN1 (Orange) Pin12(GPIO18) GND (Black)
  23. 57 • RELAY_PIN = 12 GPIO.setup(RELAY_PIN, GPIO.OUT, initial=GPIO.HIGH) • try:

    while True: print("Relay is on") GPIO.output(RELAY_PIN, GPIO.LOW) time.sleep(2) print("Relay is off") GPIO.output(RELAY_PIN, GPIO.HIGH) time.sleep(2) except KeyboardInterrupt: print("Exception: KeyboardInterrupt") finally: GPIO.cleanup() 低電位觸發