Использование 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 готов выполнять команды из любой точки мира! ✨
Начинайте творить, пробуйте новые функции и делитесь своими проектами с друзьями. Мир умных устройств ждёт ваших идей! 🌟