Использование FastAPI на Raspberry Pi: использование GPIO и другие функции
В этой статье мы рассмотрим, как развернуть FastAPI на Raspberry Pi и настроить его для управления GPIO, а также обсудим несколько других полезных функций, которые можно реализовать.
Шаг 1: Установка FastAPI и подготовка окружения
Для начала установим необходимые зависимости и подготовим Raspberry Pi к запуску FastAPI.
Убедитесь, что Python 3 и pip установлены на вашем Raspberry Pi. Если нет, установите их с помощью:
sudo apt update sudo apt install python3 python3-pip
Установите FastAPI и Uvicorn — сервер для запуска FastAPI-приложений:
pip3 install fastapi uvicorn
Для управления GPIO на Raspberry Pi нам также понадобится библиотека RPi.GPIO. Установите её:
sudo apt install python3-rpi.gpio
Шаг 2: Создание базового FastAPI-приложения
Создайте файл main.py, который будет нашим основным файлом приложения. В этом файле мы создадим простое API с использованием FastAPI, чтобы проверить, что всё установлено правильно.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello from Raspberry Pi!"}
Перейдите в браузере по адресу http://<raspberry_pi_ip>:8000, и вы должны увидеть ответ {"message": "Hello from Raspberry Pi!"}, что означает, что приложение успешно запущено.
Шаг 3: Управление GPIO через FastAPI
Теперь мы добавим к нашему приложению возможность управлять GPIO Raspberry Pi. Это позволит контролировать такие компоненты, как светодиоды, реле и другие устройства, подключённые к выводам GPIO.
Пример: Управление светодиодом
Подключите светодиод к Raspberry Pi через резистор к одному из GPIO-пинов (например, GPIO 18). Затем обновим main.py, чтобы добавить маршруты для включения и выключения светодиода.
import RPi.GPIO as GPIO
from fastapi import FastAPI
# Настройка FastAPI и GPIO
app = FastAPI()
GPIO.setmode(GPIO.BCM) # Использование схемы нумерации GPIO BCM
GPIO.setup(18, GPIO.OUT) # Установка GPIO 18 как выход
@app.get("/led/on")
def led_on():
GPIO.output(18, GPIO.HIGH) # Включение светодиода
return {"status": "LED is ON"}
@app.get("/led/off")
def led_off():
GPIO.output(18, GPIO.LOW) # Выключение светодиода
return {"status": "LED is OFF"}
# Очистка GPIO при завершении работы приложения
@app.on_event("shutdown")
def cleanup_gpio():
GPIO.cleanup()
Объяснение кода
- GPIO.setup(18, GPIO.OUT): Устанавливаем 18-й GPIO в режим выхода.
- GPIO.output(18, GPIO.HIGH): Устанавливаем высокое напряжение на 18-м GPIO, чтобы включить светодиод.
- GPIO.output(18, GPIO.LOW): Устанавливаем низкое напряжение на 18-м GPIO, чтобы выключить светодиод.
- cleanup_gpio: Функция очищает состояние GPIO при завершении работы FastAPI.
Теперь можно управлять светодиодом с помощью запросов:
Дополнительные функции GPIO
Помимо включения и выключения устройств, вы можете использовать FastAPI для более сложных задач, таких как чтение данных с датчиков или управление ШИМ.
Пример: Чтение данных с датчика температуры
Допустим, у нас есть термометр, подключённый к Raspberry Pi. Мы можем прочитать данные и передать их через API:
from fastapi import FastAPI
import Adafruit_DHT
app = FastAPI()
sensor = Adafruit_DHT.DHT11
pin = 4 # GPIO, к которому подключён датчик
@app.get("/temperature")
def read_temperature():
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
return {"temperature": temperature, "humidity": humidity}
else:
return {"error": "Failed to read sensor data"}Для этого примера нам потребуется датчик температуры от Adafruit и библиотека Adafruit-DHT, которую можно установить так:
Шаг 4: Автоматизация задач на Raspberry Pi
FastAPI можно использовать для автоматизации различных задач, таких как запуск скриптов, управление настройками или мониторинг состояния устройства.
Пример: Мониторинг состояния CPU и памяти
Добавим эндпоинт для мониторинга ресурсов Raspberry Pi, таких как загрузка процессора и использование памяти:
import psutil
from fastapi import FastAPI
app = FastAPI()
@app.get("/system/status")
def system_status():
cpu_usage = psutil.cpu_percent(interval=1)
memory = psutil.virtual_memory()
return {
"cpu_usage": cpu_usage,
"memory_usage": memory.percent,
"available_memory": memory.available // (1024 * 1024)
}
Здесь psutil.cpu_percent возвращает загрузку CPU, а psutil.virtual_memory возвращает состояние памяти. Теперь, вызвав GET /system/status, вы получите актуальные данные о системе.
Шаг 5: Настройка автозапуска FastAPI-приложения на Raspberry Pi
Чтобы FastAPI-приложение автоматически запускалось при загрузке Raspberry Pi, можно настроить его как сервис systemd.
Настройка systemd
Создайте файл сервиса, например, /etc/systemd/system/fastapi.service:
[Unit] Description=FastAPI on Raspberry Pi After=network.target [Service] ExecStart=/usr/bin/python3 /path/to/your/main.py WorkingDirectory=/path/to/your/ Restart=always User=pi [Install] WantedBy=multi-user.target
Замените /path/to/your/ на путь к вашему приложению.
Затем активируйте и запустите сервис:
sudo systemctl enable fastapi sudo systemctl start fastapi
Теперь FastAPI будет автоматически запускаться при загрузке Raspberry Pi.
Заключение
Использовать FastAPI на Raspberry Pi — это как дать вашему мини-компьютеру суперсилу! 💪 Теперь вы можете управлять светодиодами, датчиками, отслеживать состояние системы и даже автоматизировать задачи с помощью удобного API. Всё это делается легко и быстро, как мурчание довольного котика. 🐱💡
FastAPI поможет вам превратить Raspberry Pi в мощный инструмент для управления IoT-устройствами, домашней автоматизацией или собственными проектами. Просто добавьте немного кода, и ваш Pi готов выполнять команды из любой точки мира! ✨
Начинайте творить, пробуйте новые функции и делитесь своими проектами с друзьями. Мир умных устройств ждёт ваших идей! 🌟