Phần 3: Xây dựng REST API điều khiển GPIO
1. Giới thiệu về GPIO trên Raspberry Pi, 2. Cài đặt thư viện RPi.GPIO, 3. Tạo các endpoint REST API cho GPIO, 4. Xử lý lệnh điều khiển GPIO từ client, 5. Kiểm tra hoạt động của REST API.
Phần 3: Xây dựng REST API điều khiển GPIO
Trong phần này, chúng ta sẽ xây dựng REST API để điều khiển GPIO trên Raspberry Pi bằng Flask. REST API sẽ cho phép chúng ta gửi lệnh từ xa để bật hoặc tắt các chân GPIO, giúp chúng ta tạo ra những ứng dụng IoT thú vị và hữu ích.
1. Giới thiệu về GPIO trên Raspberry Pi
GPIO (General Purpose Input/Output) là một tính năng quan trọng trên Raspberry Pi cho phép chúng ta giao tiếp với các thiết bị bên ngoài. GPIO có thể được sử dụng để đọc tín hiệu từ cảm biến, hoặc gửi tín hiệu điều khiển đến các thiết bị khác như đèn LED, động cơ, và nhiều thiết bị khác.
Raspberry Pi có tổng cộng 40 chân GPIO, trong đó một số chân có chức năng đặc biệt như I2C, SPI, và UART. Trong dự án này, chúng ta sẽ tập trung vào việc điều khiển GPIO thông qua API.
2. Cài đặt thư viện RPi.GPIO
Để điều khiển GPIO từ Python, chúng ta cần cài đặt thư viện RPi.GPIO. Bạn có thể cài đặt thư viện này bằng cách sử dụng pip.
sudo apt-get update
sudo apt-get install python3-rpi.gpio
Sau khi cài đặt xong, bạn có thể kiểm tra xem thư viện đã được cài đặt thành công hay chưa bằng cách mở Python shell và thử nhập:
import RPi.GPIO as GPIO
3. Tạo các endpoint REST API cho GPIO
Chúng ta sẽ tạo một số endpoint REST API để điều khiển GPIO. Đầu tiên, hãy tạo một file Python mới có tên là app.py và thêm các đoạn mã sau:
from flask import Flask, jsonify, request
import RPi.GPIO as GPIO
app = Flask(__name__)
# Cấu hình GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT) # Chân GPIO 18 được sử dụng để điều khiển đèn LED
@app.route('/gpio/<int:pin>/on', methods=['POST'])
def turn_on(pin):
GPIO.output(pin, GPIO.HIGH)
return jsonify({'status': 'success', 'pin': pin, 'action': 'on'})
@app.route('/gpio/<int:pin>/off', methods=['POST'])
def turn_off(pin):
GPIO.output(pin, GPIO.LOW)
return jsonify({'status': 'success', 'pin': pin, 'action': 'off'})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Trong đoạn mã trên, chúng ta đã tạo hai endpoint:
- /gpio/<pin>/on: Bật chân GPIO.
- /gpio/<pin>/off: Tắt chân GPIO.
Chúng ta sử dụng phương thức POST để gửi lệnh bật hoặc tắt GPIO.
4. Xử lý lệnh điều khiển GPIO từ client
Để kiểm tra các endpoint mà chúng ta đã tạo, bạn có thể sử dụng công cụ như Postman hoặc curl. Dưới đây là ví dụ về cách gửi lệnh bật và tắt chân GPIO 18 bằng curl:
# Bật chân GPIO 18
curl -X POST http://<địa_chỉ_IP_Raspberry_Pi>:5000/gpio/18/on
# Tắt chân GPIO 18
curl -X POST http://<địa_chỉ_IP_Raspberry_Pi>:5000/gpio/18/off
Thay <địa_chỉ_IP_Raspberry_Pi> bằng địa chỉ IP thực tế của Raspberry Pi trong mạng của bạn.
Tips: Đảm bảo rằng bạn đã thực hiện các cài đặt mạng cần thiết để Raspberry Pi có thể truy cập từ máy tính hoặc thiết bị di động của bạn.
5. Kiểm tra hoạt động của REST API
Sau khi đã thực hiện các bước trên, bạn có thể kiểm tra hoạt động của REST API bằng cách thực hiện các lệnh curl mà chúng tôi đã đề cập ở trên. Nếu mọi thứ hoạt động tốt, bạn sẽ nhận được phản hồi JSON cho biết trạng thái của lệnh đã thực hiện thành công.
Ví dụ, khi bạn bật chân GPIO 18, bạn sẽ nhận được phản hồi như sau:
{
"status": "success",
"pin": 18,
"action": "on"
}
Và khi bạn tắt chân GPIO 18, phản hồi sẽ như sau:
{
"status": "success",
"pin": 18,
"action": "off"
}
Bây giờ, bạn đã hoàn thành việc xây dựng REST API để điều khiển GPIO trên Raspberry Pi. Trong các phần tiếp theo, chúng ta sẽ tích hợp WebSocket để cập nhật trạng thái GPIO theo thời gian thực trên dashboard web.
