GPIO với raspberry

Giới thiệu

Raspberry Pi được hiểu như một máy tính với với các cổng HDMI, chuột, bàn phím, ngõ vào camera, kết nối internet và chạy bằng hệ điều hành Linux. Nhưng Raspberry Pi nhiều tính năng hơn 1 máy tính nhỏ vì nó là một công cụ cho phép tạo các dự án phần cứng nhanh chóng. Pi có bi-derectional I/O pins (sử dụng như input và output), cho việc PWM , uart , spi … nhằm phục vụ cho các dự án phần cứng của bạn. Bài hướng dẫn này dùng cho Raspberry Pi phiên bản B, B+ và phiên bản mới Raspberry Pi 2 model B. Hình ảnh về Pi Wedge model B tham khảo hình bên dưới:

Việc điều khiển ngõ ra vào của Raspberry Pi yêu cầu bạn phải biết một ít kiến thức về lập trình. Có nhiều ngôn ngữ cho bạn, chúng tôi đã so sánh và nhận thấy có 2 lựa chọn tối ưu, dễ điều khiển GPIO là Python và C language. Nếu bạn chưa từng điều khiển LED hoặc đọc tín hiệu nút nhấn bằng cách dùng Raspberry Pi thì bài hướng dẫn này sẽ giúp bạn bắt đầu.

Khái quát

Chúng ta sẽ có nhiều cách cho việc điều khiển GPIO trên raspberry, bài viết trình bày 2 cách khác nhau để đọc và điều khiển GPIO của Raspberry Pi dùng python và C. Tổng quan các nội dung của bài viết :
1. GPIO Pinout. Tổng quan về GPIO của Pi.
2. Python API và một số ví dụ.
3. C (and WiringPi) API và một số ví dụ.
4. Dùng 1 IDE.
Bạn sẽ cần gì ?
Hardware
– Raspberry.
– Sd card đã cài đặt os raspbian.
– Dây bus.
– Nút nhấn và led.
Software
– Raspraspbian os.
– Các bộ thông dịch python và gpio package python (thông thường sẽ được cài đặt một cách mặc định cho os rasbian).

GPIO Pinout.
Nếu so sánh phiên bản hiện nay (bản thứ 3) với phiên bản đầu tiên. Raspberry đã tăng số lượng chân i/o từ mức 26 lên 40 pins như hình dưới.

Có nhiều cách đánh số chân khác nhau mà bạn có thể gặp phải khi sử dụng các chân GPIO của Pi. Trong chương trình, nếu sử dụng loại nào thì buộc phải khai báo pin GPIO theo cách đặt tên của loại đó. Hình bên dưới trình bày tất cả 26pins header của P1, bao gồm số thứ tự GPIO và cả chức năng của nó.

Bảng liệt kê các header numbers của Pi, tên và chức năng của các chân khi dùng wiringPi, Python và phần hiển thị ở silkscreen trên wedge board:


Pi không chỉ cho phép truy cập vào các chân I/O hai chiều, mà còn cả Serial (UART), I2C, SPI và thậm chí là một số PWM (“ngõ ra analog”).

Cài đặt phần cứng.
Sử dụng 2 LED để kiểm tra chức năng ngõ ra (digital và PWM) và một nút nhấn để kiểm tra ngõ vào. Để bắt đầu, bạn có thể kết nối mạch như hình dưới. Chúng ta sẽ sử dụng phần cài đặt này cho cả C (nằm ở các bài hướng dẫn sau) và Python.
Hình ảnh kết nối với original Pi:

Hình ảnh kết nối với Pi 2+ và Pi 2B:

Hai đèn LED được kết nối với GPIO18 và GPIO23 của Pi. Nếu bạn có Pi Wedge thì kết nối theo sơ đồ như hình dưới:

Python (RPi.GPIO) API

Hãy bắt đầu với Python API. Chúng ta sẽ dùng module RPi.GPIO để truy xuất, sử dụng các API Linux để điều khiển I/O cho raspberry. Thông thường gói này sẽ được cài tự động vào python trên raspberry. RPi.GPIO Vì sẽ được dùng xuyên suốt ở python script của bạn nên hãy đặt câu lệnh này ở đầu file chương trình:

import RPi.GPIO as GPIO

Import package GPIO cho rpi
Để sử dụng package RPi.GPIO, dùng câu lệnh sau để import vào chương trình:

import RPi.GPIOGPIO as GPIO

Pin Numbering Declaration
Bước tiếp theo là khai báo chân đang sử dụng (2 cách khai báo chân cho raspberry đã đề cập ở phần GPIO.pinout):
1. GPIO.BOARD. Cách khai báo theo số pin trên header P1.
2. GPIO.BCM. Cách khai báo theo Raspberry Pi’s Broadcom-chip brain.
Nếu bạn đang sử dụng board Pi Wedge, chúng tôi khuyên bạn nên sử dụng định nghĩa PIO.BCM. Đây là những con số được in ra ở lớp SilkScreen trên PCB. Việc dùng GPIO.BCM có thể sẽ dễ dàng hơn nếu nối dây tới pin header.
Để chỉ định pin đang sử dụng, dùng GPIO.setmode ()  nó sẽ kích hoạt chân cụ thể của chip Boardcom. Ví dụ:

GPIO.setmode(GPIO.BCM)

Setting a pin mode
Nếu bạn đã sử dụng Arduino, có lẽ đã quen thuộc với việc phải khai báo chế độ cho các chân (In/Out) trước khi dùng nó. Để cài đặt chế độ chân, sử dụng hàm setup([pin], [GPIO.IN, GPIO.OUT]. Ví dụ cài đặt chân 18 là ngõ ra:

GPIO.setup(18, GPIO.OUT)

Để xuất tín hiệu cao hay thấp, ta dùng hàm GPIO.output([pin], [GPIO.LOW, GPIO.HIGH]).Ví dụ, đặt chân 18 ở mức cao:

GPIO.output(18,GPIO.HIGH)

Khi sử dụng “GPIO.HIGH”, nó sẽ kéo mức điện áp chân lên 3.3V và  sử dụng “GPIO.LOW” khi muốn xuất tín hiệu xuống mức thấp 0V. Có thể dùng “1” thay cho “GPIO.HIGH” và dùng “0” thay cho “GPIO.LOW” để cài đặt mức điện áp cho chân.

PWM (“Analog”) Output
PWM trên rashberry Pi có sự giới hạn, chỉ có 1 chân duy nhất có thể thực hiện là chân 18 theo cách đánh số chân broadcom chip (chân 12 trên board). Để khởi tạo PWM, ta dùng hàm GPIO.PWM([pin], [frequency]). Cho phép quá trình pwm diễn ra bằng lệnh pwm.start ([duty circle]). Ví dụ để đặt PWM về tần số 1kHz và sẽ điều chế xung 50%:

pwm = GPIO.PWM(18, 1000)
pwm.start(50)

Để điều chỉnh giá trị đầu ra PWM, dùng pwm.ChangeDutyCycle([duty cycle]). “duty cycle” có thể là giá trị từ 0( tức là 0% hoặc LOW) đến 100 (100% hoặc HIGH). Ví dụ:

pwm.ChangeDutyCycle(75)

Tắt chức năng PWM dùng:

pwm.stop()

Chú ý: Khai báo chân là output trước khi sử dụng nó.

Inputs
Nếu 1 chân được cần được cấu hình là đầu vào, bạn cần dùng GPIO.input([pin]) để đọc giá trị của nó. hàm input() sẽ trả về giá trị True hoặc False tương ứng với mức logic HIGH và LOW. Có thể dùng lệnh if để kiểm tra điều này thông qua code bên dưới:

if GPIO.input(17):
    print("Pin 11 is HIGH")
else:
    print("Pin 11 is LOW")

Pull-Up/Down Resistors
Trở lại với hàm GPIO.setup() để thiết lập chế độ (In/Out) cho các chân.Có thể thêm vào một tham số thứ 3 cho hàm để cài đặt điện trở pull-up hoặc pull-down. Dùng điện trở pull-up bằng cách thêm vào dòng lệnh pull_up_down=GPIO.PUD_UP, tương tự nếu dùng điện trở pull-down là pull_up_down=GPIO.PUD_DOWN.Ví dụ, dùng điện trở pull-up với chân số 17:

GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)

Nếu không khai báo gì ở phần tham số thứ 3 cả 2 điện trở pull-up và pull-down sẽ bị vô hiệu hóa.

Etc
Dùng chức năng delay nếu cần làm chậm chương trình của bạn. Để sử dụng được hàm delay, cần thêm dòng lệnh sau ở đầu script:

include time

Tạo delay bằng cách dùng hàm time.sleep([seconds]). Ví dụ thực hiện delay 250ms:

time.sleep(0.25)

Các hàm về delay có thể tham khảo tại Đây

Garbage Collecting
Và cuối cùng, sau khi hoàn thành những dòng code trên, sử dụng hàm GPIO.cleanup() nhằm giải những tài nguyên mà bạn đã sử dụng. Pi có thể vẫn tồn tại nếu bạn không dùng GPIO.cleanup() tuy nhiên đây là điều không nên.

Bây giờ, hãy kết hợp những thứ đã học được ở trên để viết một script.

[Còn tiếp…]

Bài viết nằm trong chuỗi bài Sử dụng gpio với raspberry. Tham khảo và biên dịch từ nguồn https://learn.sparkfun.com/tutorials/raspberry-gpio#introduction.
Một số ý được được tác giả chỉnh sửa chỉ nhằm mục đích làm bài viết dễ hiểu hơn , phục vụ cho việc phổ biến kiến thức đến cộng đồng.

Trân Trọng!!!

Gửi phản hồi


Notice: Undefined offset: 0 in /var/www/learn.iotmaker.vn/wp-includes/class-wp-query.php on line 3162