Raspberry PI và GPIO pins: Điều khiển LED với Bash và trăn

Trong bài trước chúng ta đã thấy là chân GPIO và một số ví dụ về ứng dụng thực tế, Hôm nay chúng tôi sẽ tập trung vào các hoạt động của chân đa năng, và học cách kiểm soát chúng với đơn đặt hàng của các thông dịch viên Bash và với Python.

Proto&lãnh đạo

Sẽ sử dụng một ĐÈN LED, một sức đề kháng của 330 Ohm, dây điện, và một Breadboard, hoặc Hàn và một sắt hàn.

Chúng tôi cũng sẽ cần chúng tôi Quả mâm xôi đã có Raspbian trước khi cài đặt, Nếu không phải là trường hợp của bạn, Bạn có thể xem làm thế nào để làm điều đó trong sau liên kết từ các Thư mục.

Ngựa mạch

Bạn có thể hàn trực tiếp các ĐÈN LED dây và sức đề kháng như bạn sẽ thấy trong những điều sau đây Sơ đồ, Mặc dù nó là tốt hơn để sử dụng một Breadboard; Nó cũng là rất quan trọng để xem xét tốt trên râu mép, như trong các “đường chéo” bên trong của các Diode ĐÈN LED kết hợp hai mã pin để gắn kết các mạch, đã mà nếu bạn gắn kết nó ngược trở lại sẽ không bật.

Mạch cần phải kiểm soát đánh lửa của một diode LED.

Mạch cần phải kiểm soát quyền lực của một diode LED.

Tôi sẽ sử dụng một Breadboard, và tôi khuyên bạn nên sử dụng một, Có là một số từ khoảng 4 € và họ cho phép chúng tôi để tái sử dụng thành phần hơn và hơn nữa mà không cần phải hàn chúng, Các kết nối nội bộ của một Breadboard họ có xu hướng sau đây.

protocon

Một kết nối Breadboard.

Các kết nối giữa các Breadboard và các Quả mâm xôi họ phải như trong sơ đồ sau, Các GPIO Bạn có thể tiếp cận vấn đề 3,3V để gán một giá trị hợp lý cao.

Mạch trên Breadboard.

Mạch cần phải kiểm soát quyền lực của một diode LED.

Xin chào thế giới của GPIO với Bash

Sau khi lắp mạch, Chúng ta sẽ làm những gì tôi gọi một “Xin chào thế giới GPIO” ở Bash chạy như sau kịch bản.

#!/bin/bash
#Exportamos el puerto GPIO 17 
echo 17 > /sys/class/gpio/export 
#Lo configuramos como salida 
echo out > /sys/class/gpio/gpio17/direction 
#Encendemos el LED asignandole 1 como valor lógico
echo 1 > /sys/class/gpio/gpio17/value

Để tắt các đèn LED, chúng tôi có thể làm điều đó với những điều sau đây kịch bản.

#!/bin/bash
#Apagamos el LED asignandole 0 como valor lógico
echo 0 > /sys/class/gpio/gpio17/value  
#Eliminamos la entrada del puerto GPIO 17 
echo 17 > /sys/class/gpio/unexport 

Về cơ bản chúng tôi đang làm gì với Bash để tạo ra một Hệ thống phân cấp thư mục/SYS/lớp/gpio và thêm nội dung cho mỗi tập tin sẽ được xử lý như một biến.

Hệ thống phân cấp

Hệ thống phân cấp trong thư mục /sys/class/gpio.

Giới thiệu Python

Chúng tôi đã chứng minh rằng mạch của chúng tôi là làm việc một cách chính xác và ĐÈN LED nó đã được bắn để cung cấp cho một giá trị hợp lý cao biến, Bây giờ chúng ta hãy xem làm thế nào chúng tôi có thể làm tương tự Python, điều đó sẽ cho phép chúng tôi để lịch của chúng tôi ứng dụng web để kiểm soát các yếu tố đầu vào và đầu ra của các GPIO từ bất kỳ thiết bị.

funcweb

Hoạt động bằng cách sử dụng các ứng dụng WEB.

Trước khi tiếp tục, Tôi khuyên bạn nên mà bạn nhìn thấy Các chương trong các 1 để các 10 của Video này hướng dẫn từ Python Các kênh của YouTube của Mã tạo điều kiện, Nếu như tôi không có nhiều ý tưởng về lập trình trong Python, Nó có thể đến với bạn rất tốt để bạn làm quen với các mã mà chúng ta sẽ thấy nhiều hơn trước và đến để hiểu nó.

Khác nhau Pinouts GPIO (BCM và hội đồng quản trị)

Có hai loại pin đánh số, vật lý số hoặc chế độ HỘI ĐỒNG QUẢN TRỊ, và cách đánh số của chip SoC Broadcom việc kiểm soát chúng, Chúng tôi sẽ sử dụng pinout ở chế độ BCM, nhưng hãy nhìn vào sự khác biệt.

BCMvsBOARD

Xin chào thế giới của GPIO với Python

Sau khi xem các video, và pinouts khác nhau đã có thể hiểu các mã cơ bản để thực hiện các “Xin chào thế giới GPIO” ở Python.

Lần đầu tiên chúng tôi sẽ tải về mọi thứ bạn cần để kiểm soát các GPIO với Python, ở Raspbian họ đã được cài đặt Python và các thư viện GPIO, nhưng chúng ta sẽ cài đặt một gói bổ sung và cập nhật hệ thống để có phiên bản mới nhất.

usuario@maquina:~$ sudo apt-get install python-dev
usuario@maquina:~$ sudo apt-get install python-rpi.gpio
usuario@maquina:~$ sudo apt-get update && sudo apt-get upgrade

Cập Nhật một lần, Chúng ta hãy xem làm thế nào để bật các ĐÈN LED với những điều sau kịch bản, Ví dụ: bạn có thể gọi enciende.py, và chúng tôi có thể chạy nó như là root với lệnh “sudo Python enciende.py”.

#!usr/bin/env/ python
#enciende.py
#importamos la libreria GPIO
import RPi.GPIO as GPIO 
#Definimos el modo BCM 
GPIO.setmode(GPIO.BCM) 
#Ahora definimos el pin GPIO 17 como salida
GPIO.setup(17, GPIO.OUT) 
#Y le damos un valor logico alto para encender el LED
GPIO.output(17, GPIO.HIGH) 

Với điều này, chúng tôi có thể tắt nó đi, Ví dụ: gọi apaga.py

#!usr/bin/env/ python
#apaga.py
#importamos la libreria GPIO
import RPi.GPIO as GPIO 
#Definimos el modo BCM
GPIO.setmode(GPIO.BCM)  
#Ahora definimos el pin GPIO 17 como salida
GPIO.setup(17, GPIO.OUT) 
#Y le damos un valor logico bajo para apagar el LED
GPIO.output(17, GPIO.LOW) 
#Finalmente liberamos todos los pines GPIO, es decir, los desconfiguramos)
GPIO.cleanup() 

Và với điều này, chúng tôi sẽ gọi cho bạn parpadea.py, Chúng tôi sẽ làm cho nhấp nháy của ĐÈN LED.

#!usr/bin/env/ python
#parpadea.py
#importamos la libreria GPIO
import RPi.GPIO as GPIO 
#Importamos la libreria time
import time 
#Definimos el modo BCM 
GPIO.setmode(GPIO.BCM) 
#Ahora definimos el pin GPIO 17 como salida
GPIO.setup(17, GPIO.OUT) 
#Queremos que lo que contenga el for i in range se repita 5 veces
for i in range(0,5): 
        #Asignamos valor logico alto para encenderlo
               GPIO.output(17, GPIO.HIGH) 
        #Esperamos un segundo
               time.sleep(1)
        #Asignamos valor logico bajo para apagarlo
         GPIO.output(17, GPIO.LOW) 
        #Esperamos un segundo
         time.sleep(1) 
#Una vez termina las 5 repeticiones, liberamos el pin GPIO utilizado; en este caso el 17
GPIO.cleanup() 

Nếu bạn không phải nhập viện “thời gian“, không thể thêm các “giấc ngủ“, và nếu không thêm các “giấc ngủ” trong một lần thứ hai giữa trong và ngoài, Nó là khá tốt mà mắt của chúng tôi sẽ không cảm nhận flicker.

Nó là rất quan trọng không để thêm các ký tự đặc biệt trong các kịch bản bằng Python, Vì lý do này các ý kiến không mang dấu, Kể từ khi nó đã cho nhân vật lỗi không hợp lệ.

Trong các mục sau đây Chúng tôi sẽ xem làm thế nào để làm cho một đơn giản Ứng dụng web cho phép chúng tôi thực hiện các kịch bản, để có thể kiểm soát nó từ bất kỳ thiết bị nào với trình duyệt Web.

Nếu bạn muốn bạn có thể theo tôi trên Twitter, Facebook, Google +, LinkedIn, hoặc chia sẻ nó với các nút trong ấn phẩm này, Nếu bạn có bất kỳ câu hỏi hoặc góp ý xin vui lòng đừng ngần ngại để bình luận.

Giúp chúng tôi để tiếp cận với nhiều người đọc Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

16 suy nghĩ về"Raspberry PI và GPIO pins: Điều khiển LED với Bash và trăn

  1. Tôi có một câu hỏi từ newbie…
    vì sức đề kháng của 330 Ohm và khi nào thì sử dụng nó?

    Luôn luôn được sử dụng cho 330 Khi chúng tôi làm việc với RPI, hoặc nó có thể khác nhau?

    Một lời chào và tuyệt vời blog!!!

  2. Xin chào làm việc cho tôi, và sau đó làm theo các bước để thư với python, bạn phải cung cấp quyền truy cập vào tập tin vào python?

    • Hi Peter,

      Về nguyên tắc nó sẽ làm việc, lỗi chỉ đã trao quyền cho một số người, nhưng chạy từ các ứng dụng web, như là người dùng www-data mặc định không còn có các cấp phép này.

      Chỉ trong trường hợp thử chạy: “sudo chmod + x script.py” để làm cho nó thực thi, Mặc dù không phải như vậy nó sẽ làm việc chỉ từ terminal; Bạn có thể dạy cho tôi nếu trả về một lỗi tại nhà ga để chạy các kịch bản??

      Cảm ơn bạn rất nhiều vì bình luận của bạn.

  3. Tốt, Khi tôi nhập các kịch bản python, nói với tôi rằng arroba là một SyntaxError những gì có thể? Cảm ơn và chúc mừng.

    • Tìm thấy tôi nó rất lạ, Vì trong kịch bản không không @, bạn có thể cho biết thêm chi tiết lỗi?

      Gặp lại bạn sớm, và cảm ơn bạn đã cho ý kiến.

  4. Xin chào,
    Tôi đang cố gắng để bật một đèn LED thông qua python sau hướng dẫn mẫu nhưng nó mang lại cho tôi những lỗi sau khi tôi chạy mã nó:

    nhập RPi.GPIO như GPIO

    Lỗi:
    -bash: nhập khẩu: lệnh không được tìm thấy

    Bạn có biết tại sao lỗi này?

    Cảm ơn bạn và xin chúc mừng trên blog là phục vụ tôi nhiều!

    • Xin chào Nano, Cảm ơn bạn đã cho ý kiến.

      Có vẻ như rằng mã được giải thích bởi Bash và không phải bằng Python.

      Bạn có đang chạy kịch bản, hoặc những dòng mã trong nhà ga trực tiếp?

        • Tôi vui mừng rằng bạn đã giải quyết!!!

          Cảm ơn bạn đã cho ý kiến, không ngần ngại làm như vậy nếu bạn có bất kỳ câu hỏi; giữa độc giả và anh sẽ nhớ em một tay.

  5. Tốt một lần nữa,
    những gì tôi không hiểu là dòng đầu tiên của mã: #!usr/bin/env/python
    Nó là cái gì?
    Tôi thấy rằng nó hoạt động chỉ có hoặc không có nó

    • Xin chào Nano, Chào mừng bạn một lần nữa.

      Dòng bạn đề cập đến là tuyên bố rằng thường được bao gồm vào đầu của một kịch bản cho biết nhà ga nơi mà các thông dịch viên đơn đặt hàng nên bạn vượt qua, trong trường hợp này, Python; cho bash sẽ như sau:

      #!/bin/bash

      Trong trường hợp này, nó hoạt động với các tuyên bố và không có nó kể từ khi các tập tin có phần mở rộng .py, nhưng nó là tốt thực hành để luôn luôn thêm.

      Tôi hy vọng đã xoá nghi ngờ của bạn, trở lại đây bất cứ khi nào bạn muốn và cảm ơn bạn rất nhiều cho bạn 🙂 bình luận

  6. Cảm ơn bạn, Các hướng dẫn là tuyệt vời, nhưng tôi có một nghi ngờ:

    họ để lại cho tôi với các lỗi sau đây:

    dòng 12 nhập khẩu:không tìm thấy
    dòng 14 lỗi cú pháp: bất ngờ từ (Hy vọng “)”)

    Mã của tôi là:

    #GPIO-setup.py
    ### BẮT ĐẦU INIT THÔNG TIN
    # Cung cấp: GPIO-setup.ch
    # Bắt đầu yêu cầu: $remote_fs $syslog
    # Yêu cầu dừng: $remote_fs $syslog
    # Bắt đầu mặc định: 2 3 4 5
    # Mặc định-Stop: 0 1 6
    # Mô tả ngắn: Thiết lập chế độ gpio
    # Mô tả: Thiết lập gpio 22/27/17/4 trong chế độ
    ### KẾT THÚC INIT THÔNG TIN

    nhập RPi.GPIO như GPIO
    #Chúng tôi xác định chế độ BCM
    GPIO.setmode(GPIO. BCM)
    #Bây giờ chúng ta định nghĩa các chân đầu ra GPIO
    GPIO.setup(4, GPIO. RA)
    GPIO.setup(17, GPIO. RA)
    GPIO.setup(27, GPIO. RA)
    GPIO.setup(22, GPIO. RA)

    Bất cứ ý tưởng???

    • Xin chào Leoctam, Cảm ơn bạn đã cho ý kiến.

      Dòng đầu tiên cho hiểu rằng bạn đang cố gắng để tạo ra một hệ thống daemon, nhưng họ có nhận xét như vậy nó sẽ không được đưa vào tài khoản.

      Mặt khác, Các mã mà bạn đang sử dụng để tương tác với GPIO là Python, Vì vậy, bạn phải ở trong một .py kịch bản sẽ được kích hoạt từ daemon hệ thống của bạn, hoặc sử dụng Bash để làm điều đó như trong ví dụ đầu tiên trong hướng dẫn này.

Gửi phản hồi