Web Server Flask trên Raspberry Pi
Trung cấp5/4/2024

Web Server Flask trên Raspberry Pi

Xây dựng web server Flask trên Raspberry Pi để tạo REST API điều khiển GPIO từ xa. Tích hợp dashboard web responsive với real-time updates qua WebSocket.

FlaskREST APIWebSocketRemote ControlRaspberry Pi
445 lượt thích313 người đã làm1 giờ 30 phút5 bước5 linh kiện
← Quay lại dự án
Hướng dẫn chi tiết

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.

Cập nhật 01/06/2026

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.