Home Ứng dụng Raspberry Pi Lập trình cho Raspberry Pi với thư viện wiringPi

Lập trình cho Raspberry Pi với thư viện wiringPi

0
Lập trình cho Raspberry Pi với thư viện wiringPi

Trong bài viết trước, dientuviet đã hướng dẫn các bạn cách dùng thư viện RPi.GPIO để lập trình cho Raspberry Pi. Trong bài viết này, dientuviet tiếp tục giới thiệu thư viện wiringPi nhằm giúp cho các bạn có thêm lựa chọn khi lập trình cho Raspberry Pi

Giới thiệu sơ lược về thư viện wiringPi

WiringPi là một thư viện được viết bằng ngôn ngữ C dùng để truy xuất GPIO của Raspberry Pi cho BCM2835 (là bộ vi xử lý SoC được sử dụng trong Raspberry Pi). WiringPi được thiết kế cho người dùng từng sử dụng hệ thống “nối dây” của Arduino và dành cho các lập trình viên C/C++ có kinh nghiệm sử dụng.

WiringPi có tiện ích dòng lệnh GPIO có thể được sử dụng để lập trình và thiết lập các chân GPIO. Chúng ta có thể sử dụng tiện ích này để đọc và ghi các tín hiệu của các chân, thậm chí điều khiển hoạt động của chúng qua các shell script.

Để sử dụng wiringPi, trước tiên chúng ta cần cài đặt thư viện này trên Raspberry Pi

Cài đặt thư viện wiringPi

Để cài đặt wiringPi, các bạn thực hiện tuần tự theo các bước sau đây:

Đầu tiên, bạn cần phải cập nhật phiên bản mới nhất của hệ điều hành Raspbian bằng cách gõ các lệnh sau:

sudo apt-get update

sudo apt-get upgrade

Bây giờ, chúng ta có thể sử dụng git để tải xuống thư viện WiringPi. Để làm được điều này, bạn cần cài đặt git trên Raspberry Pi. Để cài đặt git, hãy gõ lệnh:

sudo apt-get install git-core

Sử dụng git để tải thư viện wiringPi về máy tính:

git clone git://git.drogon.net/wiringPi

Chuyển vị trí đến thư mục của wiringPi:

cd wiringPi

Để thiết lập wiringPi cho lần đầu tiên sử dụng, gõ lệnh:

git pull origin

Để cài đặt wiringPi, chạy build script bằng cách gõ lệnh:

./build

Thực hiện tuần tự các bước như trên, chúng ta đã hoàn tất việc cài đặt thư viện wiringPi, có thể đính kèm vào trong các tập tin lập trình C để sử dụng cho lập trình điều khiển GPIO.

Chúng ta có thể kiểm tra thư viện WiringPi đã được cài đặt trên Raspberry hay chưa bằng cách gõ lệnh như sau:

gpio -v

Kiểm tra cài đặt thư viện wiringpi

Ảnh chụp màn hình ở trên cho biết thư viện WiringPi đã được cài đặt thành công.

Bây giờ, chúng ta có thể truy cập GPIO bằng thư viện WiringPi. Tuy nhiên, cách đánh số chân được sử dụng trong thư viện WiringPi khác với cách đánh số GPIO (BCM) và đánh số vật lý (BOARD).

Để nhận biết về cách đánh số chân trên phiên bản Raspberry Pi tương ứng của mình, bạn có thể sử dụng lệnh sau:

gpio readall

Sơ đồ chân thư viện wiringpi

Ảnh chụp màn hình ở trên cho thấy việc đánh số pin theo WiringPi, BCM (đánh số GPIO) và đánh số vật lý (Board).

Và để so sánh, hình dưới đây là sơ đồ chân của Raspberry Pi 3.

Sơ đồ chân của Raspberry Pi

Dưới đây là một số giải thích cho mỗi cột từ bảng ở trên:

  • Physical: Nó khớp với các chân vật lý từ header GPIO, vì vậy bạn có thể xác định vị trí các chân trên board mạch.
  • V: “giá trị” hiện tại của chân, về cơ bản cột này cho biết nếu chân đó ở trạng thái THẤP hay CAO.
  • Mode: Một chân cần được thiết đặt ở một “chế độ” nhất định để thực hiện các hoạt động. Các chế độ phổ biến cho chân kỹ thuật số là INPUT (chân đọc giá trị) và OUTPUT (chân ghi giá trị). Bạn cũng có thể nhận thấy chế độ ALT0, ở đây được sử dụng cho giao thức I2C (SDA, SCL) và giao thức SPI (MOSI, MISO, SCLK).
  • Name: Nếu bạn nhìn vào hình ảnh thứ hai với sơ đồ chân Raspberry Pi, bạn có thể thấy rằng cột “Name” chỉ hiển thị chức năng tiêu chuẩn của mỗi chân và nếu có, sẽ ghi đè chức năng tiêu chuẩn này bằng chức năng thay thế. Lưu ý rằng số GPIO tương ứng với cột “wPi” chứ không phải cột “BCM”.
  • wPi: Số chân thực sự được sử dụng bởi thư viện WiringPi. Quy ước đánh số này đã được thiết lập cách đây khá lâu khi thư viện WiringPi lần đầu tiên được viết. Nó đảm bảo số chân giữ nguyên cho tất cả các phiên bản Raspberry. Ngoại trừ khi bạn sử dụng phiên bản rất cũ (<Raspberry Pi 2), thì không sử dụng được quy ước này nữa.
  • BCM: Raspberry Pi có BCM2835 (Kênh Broadcom SOC). Nó xác định số chân và các chức năng thay thế cho header GPIO. Quy ước đánh số này hiện được sử dụng nhiều nhất trong cộng đồng Raspberry Pi.

Một số hàm chức năng của WiringPi

Các chức năng thiết lập: Có 4 cách để thiết lập wiringPi.

int wiringPiSetup (void);

int wiringPiSetupGpio (void);

int wiringPiSetupPhys (void);

int wiringPiSetupSys (void);

Một trong bốn hàm thiết lập trên phải được gọi thực thi khi bắt đầu chương trình, nếu không, chương trình có thể hoạt động không đúng.

Chức năngMô tả
wiringPiSetup(void)Thiết lập này quy định chương trình sử dụng cách đánh số chân mặc định của wiringPi. Cách đánh số chân đơn giản hóa này cung cấp một sự ánh xạ các số chân ảo từ 0 đến 40 với số chân thật của Broadcom GPIO. Phương thức này phải được thực thi với phân quyền root.
wiringPiSetupGpio(void)

Phương thức này giống phương thức trên, tuy nhiên, chương trình có thể dùng số chân Broadcom GPIO trực tiếp mà không cần phải ánh xạ lại.

Phương thức này cũng phải được gọi với quyền root.

wiringPiSetupPhys(void)

Giống với ở trên, tuy nhiên, chương trình cho phép sử dụng số chân vật lý chỉ trên bộ kết nối P1.

Phương thức này cũng phải gọi với quyền root.

wiringPiSetupSys(void)

Phương thức này cũng thiết lập wiringPi nhưng sử dụng /sys/class/gpio hơn là truy xuất trực tiếp phần cứng. Cách đánh số chân ở chế độ này thuần khiết là số chân của Broadcom GPIO.

Các chức năng cốt lõi: Các chức năng này làm việc trực tiếp trên Raspberry Pi cũng như các mô-đun GPIO bên ngoài như mạch mở rộng GPIO và những thành phần khác. Mặc dù vậy, không phải tất cả các mô-đun đều hỗ trợ tất cả các chức năng – ví dụ các PiFace được cấu hình trước cho các đầu vào và đầu ra cố định của nó, và Raspberry Pi không có phần cứng on-board tương tự.

Chức năngMô tả
void pinMode(int pin, int mode)

Phương thức này thiết lập chế độ của một chân là INPUT, OUTPUT, PWM_OUTPUT hay GPIO_CLOCK.
Phương thức này không có tác dụng khi ở chế độ Sys mode. Nếu muốn thay đổi chể độ của một chân, có thể sử dụng script gpio trước khi bắt đầu chương trình.

void pullUpDnControl(int pin, int pud)

Thiết lập chế độ điện trở pull-up hay pull down trên một chân nhất định, chân cần được thiết lập là một đầu vào.

Chức năng này không có tác dụng trên RPi GPIO khi ở chế độ Sys mode. Nếu muốn kích hoạt pul-up/pull-down, có thể sử dụng script gpio trước khi bắt đầu chương trình.

void digitalWrite(int pin, int value)

Ghi giá trị HIGH hoặc LOW (1 hoặc 0) đến chân nhất định, chân mà trước đó đã được thiết lập là một ngõ ra.

WiringPi xem bất kỳ số khác 0 như HIGH, tuy nhiên 0 là đại diện duy nhất của LOW.

void pwmWrite(int pin, int value)

Ghi giá trị đến thanh ghi PWM cho một nhất định.

Chức năng này là không thể kiểm soát PWM on-board của RPi khi ở chế độ Sys mode.

int digitalRead(int pin)Chức năng này trả về giá trị đọc tại một chân nhất định. Giá trị này sẽ là HIGH hay LOW phụ thuộc vào mức logic tại chân đó.
  
analogRead(int pin)Chức năng này trả về giá trị đọc trên chân đầu vào analog được cung cấp.
analogWrite(int pin, int value)Ghi giá trị cho sẵn đến một chân analog. Cần phải đăng ký mô-đun analog để cho phép thêm chức năng này cho các thiết bị như Gertboard.

Lập trình điều khiển đèn led sử dụng thư viện wiringPi

Bài thực hành này cũng giống như bài điều khiển led sử dụng thư viện RPi.GPIO trong bài viết trước, cũng cần chuẩn bị các thiết bị, linh kiện và lắp mạch điện tương tự. Tuy nhiên, bài này sẽ sử dụng thư viện wiringPi để lập trình điều khiển chân GPIO, kích hoạt nguồn điện 3V vào chân GPIO để làm đèn led phát sáng.

Sơ đồ kết nối Raspberry Pi với Led

Tạo mới tập tin batdenled.c bằng cách gõ lệnh vi batdenled.

Tạo tập tin mới điều khiển led

Nhấn phím i trên bàn phím để kích hoạt chức năng nhập ký tự cho tập tin batdenleb.c.

Nhập đoạn mã lệnh sau vào tập tin batdenled.c:

#include <stdio.h>

#include <wiringPi.h>

const int chanDenLed = 7;

void main(){

               /* Thiết lập sử dụng cấu hình của wiringPi */

               wiringPiSetup();

              /* Thiết lập chân số 7 là ngõ ra */

               pinMode(chanDenLed, OUTPUT);

             /* Bật nguồn 3V cho chân số 7 */

               digitalWrite(chanDenLed, HIGH);

  }

Lập trình python điều khiển led dùng thư viện wiringpi

Nhấn phím Esc trên bàn phím để thoát chế độ nhập ký tự cho tập tin batdenled.c.

Gõ lệnh : x và nhấn phím Enter để lưu và thoát khỏi tập tin batdenled.c.

Biên dịch tập tin batdenled.c bằng cách gõ lệnh:

sudo gcc -o batdenled batdenled.c -l wiringPi

Biên dịch chương trình

Lệnh biên dịch trên sẽ tạo ra một tập tin batdenled, có thể kiểm tra bằng lệnh ls –la. Thực thi mã lệnh đã biên dịch, gõ lệnh:

sudo ./batdenled

Thực thi chương trình

Sau khi thực thi lệnh sudo ./batdenled, nguồn điện 3V sẽ được kích hoạt cho chân số 7 (theo sơ đồ chân wiring đánh số đơn giản từ 0 đến 16), đèn led nhận được nguồn điện cung cấp từ chân số 7 và phát sáng.

Lời kết

Trong bài viết này, bạn đã khám phá thư viện WiringPi là gì và cách điều khiển các chân GPIO của Raspberry Pi. 

Bây giờ, bạn có thể dễ dàng cài đặt thư viện WiringPi, tìm thông tin về một chân đã cho trên thiết bị đầu cuối và viết chương trình C/C++ hoàn chỉnh để điều khiển các chân kỹ thuật số.

Đây là một bước tiến tuyệt vời mà bạn đã thực hiện, nhưng vẫn còn nhiều điều phải học! Hãy tiếp tục xem thêm các bài viết trên dientuviet.com để học thêm những kiến thức bổ ích khác bạn nhé!

LEAVE A REPLY

Please enter your comment!
Please enter your name here