Практическое руководство по кодированию для управления устройствами Интернета вещей с помощью Python
Практическое руководство по кодированию для управления устройствами Интернета вещей с помощью Python

Интернет вещей (IoT, Internet of Things) — актуальная тема в современной области технологий. Он соединяет различные физические устройства через Интернет, позволяя им обмениваться данными и удаленно управлять ими. Будучи эффективным и простым в освоении языком программирования, Python стал одним из предпочтительных языков для разработки приложений Интернета вещей. В этой статье мы рассмотрим, как использовать Python для управления и сбора данных с устройств Интернета вещей, а также приведем соответствующие примеры кода.

1. Обзор архитектуры Интернета вещей

Типичная система Интернета вещей состоит из следующих частей:

  • Датчики и исполнительные механизмы:для сбора данных и управления устройством Аппаратные компоненты。
  • сеть связи:Сеть, отвечающая за передачу данных,Включая Wi-Fi, Bluetooth, Зигби и др.
  • Обработка и хранение данных:Сервер или облачная платформа, используемая для обработки и хранения собранных данных.。
  • пользовательский интерфейс:Интерфейс для взаимодействия пользователей с системой,Например, мобильные приложения или веб-приложения.

В рамках этой архитектуры Python можно использовать на нескольких уровнях, включая управление устройствами, сбор данных, обработку данных и разработку пользовательского интерфейса.

2. Управляйте устройствами Интернета вещей с помощью Python

Чтобы показать, как использовать Python для управления устройствами Интернета вещей, мы возьмем в качестве примера управление простым светодиодом. Мы будем использовать Raspberry Pi в качестве аппаратной платформы и управлять светодиодным выключателем через интерфейс GPIO (ввод-вывод общего назначения).

Подготовка оборудования

  • Малиновый Пи
  • светодиодный свет
  • резистор
  • Некоторые линии Dupont

Подключить цепь

Подключите положительный полюс (длинная ножка) светодиодного индикатора к контакту GPIO17 Raspberry Pi через резистор, а отрицательный полюс (короткая ножка) к контакту GND Raspberry Pi.

контрольный код

мы будем использоватьPythonизRPi.GPIOбиблиотека для управленияGPIOприколоть。первый,Установите библиотеку:

Язык кода:sh
копировать
pip install RPi.GPIO

Затем напишите следующий код Python:

Язык кода:python
кодКоличество запусков:0
копировать
import RPi.GPIO as GPIO
import time

# Установите режим GPIO на BCM.
GPIO.setmode(GPIO.BCM)

# Установите GPIO17 в режим вывода
GPIO.setup(17, GPIO.OUT)

try:
    while True:
        # Включите светодиод
        GPIO.output(17, GPIO.HIGH)
        time.sleep(1)
        # Выключить светодиод
        GPIO.output(17, GPIO.LOW)
        time.sleep(1)
except KeyboardInterrupt:
    pass
finally:
    # Очистить статус GPIO
    GPIO.cleanup()

Этот код устанавливает вывод GPIO17 в режим вывода и управляет переключателем светодиодной подсветки, переключаясь между высоким и низким уровнями, достигая эффекта мигания один раз в секунду.

3. Сбор данных с помощью Python

В приложениях Интернета вещей сбор данных является еще одним важным аспектом. Мы можем использовать различные датчики (например, датчики температуры, датчики влажности и т. д.) для сбора данных об окружающей среде и загрузки этих данных на серверы или облачные платформы для обработки и хранения. Здесь мы возьмем датчик температуры и влажности DHT11 в качестве примера, чтобы продемонстрировать, как использовать Python для сбора данных об окружающей среде.

Подготовка оборудования

  • Малиновый Пи
  • один Датчик температуры и влажности DHT11
  • Некоторые линии Dupont

Подключить цепь

Подключите контакт VCC DHT11 к контакту 3,3 В Raspberry Pi, контакт GND к контакту GND Raspberry Pi, а контакт данных к контакту GPIO4 Raspberry Pi.

код сбора данных

мы будем использоватьAdafruit_DHTбиблиотека для чтенияDHT11датчикизданные。первый,Установите библиотеку:

Язык кода:sh
копировать
pip install Adafruit_DHT

Затем напишите следующий код Python:

Язык кода:python
кодКоличество запусков:0
копировать
import Adafruit_DHT
import time

# Установите тип датчика DHT11.
sensor = Adafruit_DHT.DHT11
# Установите контакт датчика на GPIO4.
pin = 4

while True:
    # Чтение данных о температуре и влажности
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    
    if humidity is not None and temperature is not None:
        print(f'Temperature: {temperature:.1f}°C  Humidity: {humidity:.1f}%')
    else:
        print('Failed to get reading. Try again!')

    # Читать каждые 2 секунды
    time.sleep(2)

ДолженкодпроходитьAdafruit_DHT.read_retry()функция отDHT11датчик Чтение данных о температуре и влажности,и выводим данные на консоль. Читать каждые 2 секундыданные。

4. Загрузка и обработка данных

Собранные данные обычно необходимо загрузить на сервер или облачную платформу для дальнейшей обработки и анализа. Мы можем отправлять данные в RESTful API по протоколу HTTP. Здесь мы предполагаем, что уже существует конечная точка API, которая может получать запросы POST.

Загрузить код данных

мы будем использоватьrequestsБиблиотека Воляданные发送приезжатьAPIконечная точка。первый,Установите библиотеку:

Язык кода:sh
копировать
pip install requests

Затем напишите следующий код Python:

Язык кода:python
кодКоличество запусков:0
копировать
import Adafruit_DHT
import time
import requests

# Установите тип датчика DHT11.
sensor = Adafruit_DHT.DHT11
# Установите контакт датчика на GPIO4.
pin = 4

# URL-адрес конечной точки API
url = 'http://example.com/api/data'

while True:
    # Чтение данных о температуре и влажности
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    
    if humidity is not None and temperature is not None:
        # Подготовьте данные
        data = {
            'temperature': temperature,
            'humidity': humidity
        }
        # Отправить POST-запрос
        response = requests.post(url, json=data)
        
        if response.status_code == 200:
            print('Data uploaded successfully')
        else:
            print('Failed to upload data')
    else:
        print('Failed to get reading. Try again!')

    # Читать каждые 2 секунды
    time.sleep(2)

После того как код успешно считывает данные о температуре и влажности, он отправляет данные в указанную конечную точку API через запрос POST. Если загрузка прошла успешно, консоль выведет «Данные загружены успешно».

5. Хранение и анализ данных

После сбора и загрузки данных,Следующим шагом является сохранение этих данных для последующего анализа. Общие варианты хранения включают реляционные базы данных (например, MySQL, PostgreSQL) и базы данных NoSQL (например, MongoDB). здесь,Мы будем использовать MongoDB для хранения данных о температуре и влажности.,И показывает, как выполнить простой анализ данных.

Установите MongoDB и связанные библиотеки.

первый,Убедитесь, что у вас установлен сервер MongoDB.,и установленPythonизMongoDBклиентская библиотекаpymongo

Язык кода:sh
копировать
pip install pymongo

Подключитесь к MongoDB и сохраните данные

Напишите следующий код Python для хранения собранных данных о температуре и влажности в MongoDB:

Язык кода:python
кодКоличество запусков:0
копировать
import Adafruit_DHT
import time
import requests
from pymongo import MongoClient

# Установите тип датчика DHT11.
sensor = Adafruit_DHT.DHT11
# Установите контакт датчика на GPIO4.
pin = 4

# Подключиться к серверу MongoDB
client = MongoClient('mongodb://localhost:27017/')
# Выберите базу данных
db = client.iot_data
# Выберите коллекцию (эквивалент таблицы в реляционной базе данных).
collection = db.sensor_data

while True:
    # Чтение данных о температуре и влажности
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    
    if humidity is not None and temperature is not None:
        # Подготовьте данные
        data = {
            'temperature': temperature,
            'humidity': humidity,
            'timestamp': time.strftime('%Y-%m-%d %H:%M:%S')
        }
        # Вставка данных в MongoDB
        result = collection.insert_one(data)
        
        if result.acknowledged:
            print('Data inserted with id:', result.inserted_id)
        else:
            print('Failed to insert data')
    else:
        print('Failed to get reading. Try again!')

    # Читать каждые 2 секунды
    time.sleep(2)

Код подключается к локальному серверу MongoDB.,Воля温湿度данные插入приезжатьiot_dataданные Библиотекаизsensor_dataв коллекции。每条данные记录включать温度、Влажность и временная метка.

анализ данных

Как только данные будут сохранены в MongoDB, мы сможем их проанализировать. Ниже приведен простой пример, показывающий, как рассчитать среднюю температуру и влажность за определенный период времени.

Язык кода:python
кодКоличество запусков:0
копировать
from pymongo import MongoClient
from datetime import datetime, timedelta

# Подключиться к серверу MongoDB
client = MongoClient('mongodb://localhost:27017/')
# Выберите базу данных
db = client.iot_data
# выбрать коллекцию
collection = db.sensor_data

# Установить временной диапазон
end_time = datetime.now()
start_time = end_time - timedelta(hours=1)

# Данные запроса
query = {
    'timestamp': {
        '$gte': start_time.strftime('%Y-%m-%d %H:%M:%S'),
        '$lte': end_time.strftime('%Y-%m-%d %H:%M:%S')
    }
}
data = list(collection.find(query))

# Рассчитать среднюю температуру и влажность
if data:
    avg_temperature = sum(d['temperature'] for d in data) / len(data)
    avg_humidity = sum(d['humidity'] for d in data) / len(data)
    print(f'Average Temperature: {avg_temperature:.2f}°C')
    print(f'Average Humidity: {avg_humidity:.2f}%')
else:
    print('No data found for the given time range.')

Код запрашивает данные за последний час и вычисляет среднюю температуру и влажность. Результаты будут распечатаны на консоли.

6. Визуализация данных

визуализация данных是理解и分析данныеиз重要手段。мы можем использоватьPythonизmatplotlibБиблиотека来绘制温湿度随时间变化из图表。

Установить матплотлиб

первый,УстановитьmatplotlibБиблиотека:

Язык кода:sh
копировать
pip install matplotlib

Данные диаграммы

Напишите следующий код Python, чтобы получать данные из MongoDB и рисовать диаграммы:

Язык кода:python
кодКоличество запусков:0
копировать
import matplotlib.pyplot as plt
from pymongo import MongoClient
from datetime import datetime, timedelta

# Подключиться к серверу MongoDB
client = MongoClient('mongodb://localhost:27017/')
# Выберите базу данных
db = client.iot_data
# выбрать коллекцию
collection = db.sensor_data

# Установить временной диапазон
end_time = datetime.now()
start_time = end_time - timedelta(hours=1)

# Данные запроса
query = {
    'timestamp': {
        '$gte': start_time.strftime('%Y-%m-%d %H:%M:%S'),
        '$lte': end_time.strftime('%Y-%m-%d %H:%M:%S')
    }
}
data = list(collection.find(query))

# Извлечение данных о времени, температуре и влажности
timestamps = [datetime.strptime(d['timestamp'], '%Y-%m-%d %H:%M:%S') for d in data]
temperatures = [d['temperature'] for d in data]
humidities = [d['humidity'] for d in data]

# Нарисуйте температурную кривую
plt.figure(figsize=(10, 5))
plt.plot(timestamps, temperatures, label='Temperature (°C)', color='tab:red')
plt.xlabel('Time')
plt.ylabel('Temperature (°C)')
plt.title('Temperature Over Time')
plt.legend()
plt.grid(True)

# Показать диаграмму
plt.show()

# Нарисуйте кривую влажности
plt.figure(figsize=(10, 5))
plt.plot(timestamps, humidities, label='Humidity (%)', color='tab:blue')
plt.xlabel('Time')
plt.ylabel('Humidity (%)')
plt.title('Humidity Over Time')
plt.legend()
plt.grid(True)

# Показать диаграмму
plt.show()

Этот код получит данные за последний час из MongoDB.,并绘制温度и湿度随时间变化из曲线图。использоватьmatplotlibизplot函数绘制данные曲线,и использоватьfigureиshowДиаграмма отображения функций。

7. Дистанционное управление и автоматизация.

Важной особенностью IoT является возможность удаленного управления устройствами и реализации автоматизации. Мы можем удаленно управлять светодиодными индикаторами на Raspberry Pi, написав программы на стороне сервера и программы на стороне клиента.

Создайте простой веб-сервер

мы можем использоватьPythonизFlaskрамка Создайте простой веб-сервер, принимайте управляющие инструкции от клиента.

первый,УстановитьFlask

Язык кода:sh
копировать
pip install Flask

Затем напишите следующий код сервера:

Язык кода:python
кодКоличество запусков:0
копировать
from flask import Flask, request
import RPi.GPIO as GPIO

app = Flask(__name__)

# Установите режим GPIO на BCM.
GPIO.setmode(GPIO.BCM)
# Установите GPIO17 в режим вывода
GPIO.setup(17, GPIO.OUT)

@app.route('/led', methods=['POST'])
def control_led():
    action = request.json.get('action')
    if action == 'on':
        GPIO.output(17, GPIO.HIGH)
        return 'LED is ON', 200
    elif action == 'off':
        GPIO.output(17, GPIO.LOW)
        return 'LED is OFF', 200
    else:
        return 'Invalid action', 400

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Код создал приложение Flask.,定义了один/ledконечная точка,Выключателем светодиодного освещения можно управлять посредством запроса POST.

Создать контрольный код клиента

Напишите следующий клиентский код для управления светодиодными индикаторами путем отправки HTTP-запросов:

Язык кода:python
кодКоличество запусков:0
копировать
import requests

url = 'http://raspberrypi_ip:5000/led'

def turn_led_on():
    response = requests.post(url, json={'action': 'on'})
    print(response.text)

def turn_led_off():
    response = requests.post(url, json={'action': 'off'})
    print(response.text)

# Светодиодные индикаторы тестового контроля
turn_led_on()
time.sleep(5)
turn_led_off()

Воляraspberrypi_ipЗаменить наRaspberry Фактический IP-адрес Пи. Запустите клиентский код для удаленного управления светодиодным выключателем.

8. Безопасность и масштабирование

Безопасность является важной проблемой в приложениях IoT. Чтобы обеспечить безопасность системы, нам необходимо принять некоторые меры, такие как шифрование данных, аутентификация и контроль авторизации.

Включить HTTPS

МожетиспользоватьFlaskизFlask-Talismanрасширить до Включить HTTPS, тем самым шифруя передачу данных.

Язык кода:sh
копировать
pip install Flask-Talisman

Добавьте в код сервера следующее:

Язык кода:python
кодКоличество запусков:0
копировать
from flask_talisman import Talisman

# Инициализировать Настой-Талисман
Talisman(app)

Добавить аутентификацию

МожетиспользоватьFlask-HTTPAuth扩展添加简单из身份验证机制。

Язык кода:sh
копировать
pip install Flask-HTTPAuth

Добавьте в код сервера следующее:

Язык кода:python
кодКоличество запусков:0
копировать
from flask_httpauth import HTTPBasicAuth

auth = HTTPBasicAuth()

# Информация для аутентификации пользователя
users = {
    "admin": "password"
}

@auth.get_password
def get_pw(username):
    if username in users:
        return users.get(username)
    return None

@app.route('/led', methods=['POST'])
@auth.login_required
def control_led():
    action = request.json.get('action')
    if action == 'on':
        GPIO.output(17, GPIO.HIGH)
        return 'LED is ON',

 200
    elif action == 'off':
        GPIO.output(17, GPIO.LOW)
        return 'LED is OFF', 200
    else:
        return 'Invalid action', 400

Таким образом, только пользователи, которые введут правильное имя пользователя и пароль, смогут управлять светодиодными индикаторами.

Расширить доступ к большему количеству устройств

Благодаря аналогичному подходу систему можно расширить, чтобы контролировать больше устройств и собирать больше типов данных. Просто добавив соответствующее оборудование и код, вы можете создать более многофункциональную систему Интернета вещей.

9. Развертывание, эксплуатация и обслуживание

После успешной разработки и тестирования приложения Интернета вещей следующим шагом является развертывание и эксплуатация. Развертывание предполагает перемещение приложения из среды разработки в производственную среду, а операции обеспечивают бесперебойную работу приложения в производственной среде. Вот некоторые ключевые шаги и соображения.

Подготовка среды развертывания

При развертывании приложений Интернета вещей сначала необходимо подготовить производственную среду. Для проектов, использующих Raspberry Pi, следует учитывать несколько моментов:

  • Операционная система:убеждаться运行最新版本изRaspbian(В настоящее времяRaspberry Pi OS)。
  • Управление зависимостями:использоватьvirtualenvилиpipenvуправлятьPython环境и依赖Библиотека,для лучшего контроля версий и изоляции сред.
  • Аппаратный мониторинг:Регулярный осмотрRaspberry Состояние оборудования Pi, включая температуру, напряжение питания и т. д., гарантирует, что устройство работает в безопасном диапазоне.

Автоматизация развертывания

Чтобы упростить процесс развертывания,Можно использовать автоматизированные инструменты. Например,использоватьFabricилиAnsible进行远程部署и管理:

Развертывание с использованием Fabric

Сначала установите Fabric:

Язык кода:sh
копировать
pip install fabric

Затем,Написать сценарий развертыванияfabfile.py

Язык кода:python
кодКоличество запусков:0
копировать
from fabric import Connection

def deploy():
    host = "raspberrypi_ip"
    user = "pi"
    code_dir = "/home/pi/iot_project"

    conn = Connection(host=host, user=user)

    with conn.cd(code_dir):
        conn.run("git pull")
        conn.run("pip install -r requirements.txt")
        conn.run("sudo systemctl restart iot_service")

if __name__ == "__main__":
    deploy()

Запуск этого сценария может автоматически получить последнюю версию кода, установить зависимости и перезапустить службу.

Эксплуатация, обслуживание и мониторинг

При эксплуатации и обслуживании приложений Интернета вещей ключевым моментом является мониторинг состояния и производительности системы. Для мониторинга и обслуживания вашей системы можно использовать следующие инструменты и методы:

Мониторинг с помощью Prometheus и Grafana

Prometheus — это система мониторинга с открытым исходным кодом, а Grafana — платформа визуализации данных с открытым исходным кодом. Комбинация этих двух функций позволяет достичь мощных функций мониторинга и сигнализации.

Установите Прометей и Графану.

Установите Prometheus на Raspberry Pi:

Язык кода:sh
копировать
sudo apt-get update
sudo apt-get install prometheus

Установите Grafana на Raspberry Pi:

Язык кода:sh
копировать
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
Настроить Прометей

редактироватьPrometheusКонфигурационный файл/etc/prometheus/prometheus.yml,Добавьте цели для мониторинга:

Язык кода:yaml
копировать
scrape_configs:
  - job_name: 'iot_devices'
    static_configs:
      - targets: ['localhost:9090']
Размещение Графана

Запустите Графану:

Язык кода:sh
копировать
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

Затем,проходить浏览器访问http://raspberrypi_ip:3000,Настройте источники данных и информационные панели.

Резервное копирование и восстановление

Чтобы предотвратить потерю данных,定期备份是必要из。Можетиспользоватьrsyncили其他备份工具Резервное копирование данных MongoDBи其他关键文件。

Резервное копирование данных с помощью rsync

Напишите скрипт резервного копированияbackup.sh

Язык кода:sh
копировать
#!/bin/bash

# Определите каталог резервного копирования и целевой каталог
BACKUP_DIR="/home/pi/backups"
TARGET_DIR="/mnt/external_drive/backups"

# Создать каталог резервной копии
mkdir -p $BACKUP_DIR

# Резервное копирование данных MongoDB
mongodump --out $BACKUP_DIR/mongodb_backup_$(date +%Y%m%d)

# Синхронизировать с целевым каталогом с помощью rsync
rsync -av --delete $BACKUP_DIR $TARGET_DIR

Настройте запланированное задание для регулярного выполнения резервного копирования:

Язык кода:sh
копировать
crontab -e

Добавьте следующую строку, чтобы выполнять резервное копирование каждый день в 2 часа ночи:

Язык кода:sh
копировать
0 2 * * * /home/pi/backup.sh

Обновления и обновления

Постоянное обновление ваших систем и программного обеспечения обеспечивает безопасность и функциональность. Пакеты System и Python можно регулярно обновлять с помощью следующей команды:

Язык кода:sh
копировать
sudo apt-get update && sudo apt-get upgrade -y
pip install --upgrade pip setuptools wheel
pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U

Поиск неисправностей

В процессе эксплуатации и обслуживания могут возникнуть различные проблемы. Вот некоторые распространенные проблемы и их решения:

  • Проблемы с сетевым подключением:Проверьте сетевое соединение,Убедитесь, что малина Pi может нормально выходить в Интернет.
  • Проблема с перезагрузкой устройства:Проверьте источник питания,Убедитесь, что малина Pi обеспечивает стабильное питание, чтобы избежать частых перезапусков.
  • Проблема с запуском службы:Проверьте журналы обслуживания,нравитьсяjournalctl -u iot_service,Найдите причину проблемы и устраните ее.

10. Расширение и оптимизация

Расширение и оптимизация систем Интернета вещей являются ключом к повышению производительности и доступности систем. Вот некоторые распространенные методы масштабирования и оптимизации.

Расширить датчики и устройства

Для увеличения функциональности системы можно добавить больше датчиков и устройств. Например, вы можете добавить датчики освещенности, датчики качества воздуха и т. д. и отслеживать различные данные об окружающей среде, изменяя код и электрические соединения.

Оптимизация обработки и анализа данных

Использование более совершенных технологий обработки и анализа данных может повысить уровень интеллекта системы. Например, алгоритмы машинного обучения можно использовать для прогнозирования и классификации собранных данных для обеспечения интеллектуального управления и сигнализации.

Прогнозирование с использованием scikit-learn

Установитьscikit-learn

Язык кода:sh
копировать
pip install scikit-learn

Напишите код прогнозирования данных:

Язык кода:python
кодКоличество запусков:0
копировать
from sklearn.linear_model import LinearRegression
from pymongo import MongoClient
import numpy as np

# Подключиться к MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client.iot_data
collection = db.sensor_data

# Получить данные
data = list(collection.find().sort('timestamp', -1).limit(100))

# Извлечение объектов и меток
temperatures = np.array([d['temperature'] for d in data]).reshape(-1, 1)
timestamps = np.array([i for i in range(len(data))]).reshape(-1, 1)

# Создайте и обучите модель
model = LinearRegression()
model.fit(timestamps, temperatures)

# Прогнозирование будущих температур
future_timestamps = np.array([i for i in range(len(data), len(data) + 10)]).reshape(-1, 1)
predictions = model.predict(future_timestamps)

print('Predicted future temperatures:', predictions)

Оптимизация производительности системы

Для улучшения производительности системы можно предпринять следующие меры:

  • Оптимизировать код:проходитькод优化и重构,Уменьшите ненужные вычисления и передачу данных,Повысьте эффективность системы.
  • Используйте асинхронное программирование:дляI/OИнтенсивные операции,Может Используйте асинхронное программирование Модель(нравитьсяasyncio),Улучшите возможности параллельной обработки.
  • Обновление оборудования:по требованию,Выбирайте более производительные аппаратные устройства,нравиться升级Raspberry Версия Pi или используйте другие встроенные платы разработки.

Распределенная системная архитектура

Для крупномасштабных систем Интернета вещей рассмотрите возможность использования Распределенной. системная архитектуру, улучшить масштабируемость и надежность системы. Например, используя несколько Raspberry Узлы Pi образуют кластер и реализуют распределенную обработку данных и задач через распределенные базы данных и балансировщики нагрузки.

Интеграция облачной платформы

Интеграция IoT-систем с Интеграцией облачной Платформа может использовать мощные вычислительные возможности и возможности хранения данных облачной платформы для крупномасштабной обработки данных и интеллектуального анализа. Общие облачные платформы включают AWS, Google. Облако и Лазурь. Используя сервисы Интернета вещей с облачных платформ, таких как AWS. IoT Core может легко управлять и контролировать большое количество устройств Интернета вещей.

11. Пример проекта

Чтобы лучше понять, как применять вышеуказанные технологии и методы, мы можем реализовать реальный проект Интернета вещей. Здесь мы возьмем систему умного дома в качестве примера, чтобы показать, как использовать Python для разработки системы умного дома, которая содержит множество датчиков и устройств.

Требования к проекту

  1. Экологический мониторинг:проходить温湿度датчик监控室内环境。
  2. Управление светом:проходитьумная лампочка добиться удаленного управления светом。
  3. Система контроля доступа:проходитьRFID-модуль Внедрить управление контролем доступа。
  4. анализ данных и визуализация:收集данные并进行分析и可视化。

Архитектура системы

Система состоит из множества подсистем, каждая подсистема соответствует функциональному модулю. Каждая подсистема обменивается данными через протокол MQTT и собирает данные на центральный сервер для обработки и анализа.

Аппаратные компоненты
  • Raspberry Pi:作为中央服务器и各子系统из控制中心。
  • Датчик температуры и влажности DHT11:используется для Экологический мониторинг。
  • умная лампочка:используется для Управление светом。
  • RFID-модуль:используется для门禁管理。
программные компоненты
  • Flask:используется для开发Web服务器иAPIинтерфейс。
  • paho-mqtt:используется дляMQTTкоммуникация。
  • MongoDB:используется дляданные存储。
  • **

Grafana**: для визуализации данных.

  • scikit-learn:используется дляанализ данныхи预测。

Модуль экологического мониторинга

Код для реализации функции мониторинга окружающей среды выглядит следующим образом:

Язык кода:python
кодКоличество запусков:0
копировать
import Adafruit_DHT
import time
import paho.mqtt.client as mqtt

# Конфигурация MQTT
MQTT_BROKER = "broker_ip"
MQTT_PORT = 1883
MQTT_TOPIC = "home/environment"

# Установите тип датчика и контакт
sensor = Adafruit_DHT.DHT11
pin = 4

# Конфигурация MQTT-клиента
client = mqtt.Client()
client.connect(MQTT_BROKER, MQTT_PORT, 60)

while True:
    # Чтение данных о температуре и влажности
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    
    if humidity is not None and temperature is not None:
        # Публикация данных в MQTT
        payload = f"{{'temperature': {temperature}, 'humidity': {humidity}}}"
        client.publish(MQTT_TOPIC, payload)
        print(f"Published: {payload}")
    else:
        print("Failed to get reading. Try again!")
    
    time.sleep(2)

Модуль управления освещением

Код для реализации функции управления освещением выглядит следующим образом:

Язык кода:python
кодКоличество запусков:0
копировать
import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO

# Конфигурация MQTT
MQTT_BROKER = "broker_ip"
MQTT_PORT = 1883
MQTT_TOPIC = "home/light"

# Установите режим GPIO и контакт
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)

# Функция обратного вызова MQTT
def on_message(client, userdata, msg):
    if msg.topic == MQTT_TOPIC:
        action = msg.payload.decode()
        if action == "on":
            GPIO.output(17, GPIO.HIGH)
            print("Light ON")
        elif action == "off":
            GPIO.output(17, GPIO.LOW)
            print("Light OFF")

# Конфигурация MQTT-клиента
client = mqtt.Client()
client.connect(MQTT_BROKER, MQTT_PORT, 60)
client.subscribe(MQTT_TOPIC)
client.on_message = on_message

# Запустите клиент MQTT
client.loop_forever()

Модуль системы контроля доступа

Код для реализации функции управления доступом выглядит следующим образом:

Язык кода:python
кодКоличество запусков:0
копировать
import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
import paho.mqtt.client as mqtt

# Конфигурация MQTT
MQTT_BROKER = "broker_ip"
MQTT_PORT = 1883
MQTT_TOPIC = "home/access"

# Инициализируйте RFID-считыватель
reader = SimpleMFRC522()

# Конфигурация MQTT-клиента
client = mqtt.Client()
client.connect(MQTT_BROKER, MQTT_PORT, 60)

try:
    while True:
        print("Place your card to scan")
        id, text = reader.read()
        print(f"Card ID: {id}, Text: {text.strip()}")
        
        # Публикация данных контроля доступа в MQTT
        payload = f"{{'card_id': {id}, 'text': '{text.strip()}'}}"
        client.publish(MQTT_TOPIC, payload)
        print(f"Published: {payload}")

finally:
    GPIO.cleanup()

анализ данных и визуализация

Использовал вышеупомянутые Prometheus и Grafana для мониторинга и визуализации данных, а также scikit-learn для анализа данных и прогнозирования.

12. Резюме и перспективы на будущее

Через приведенные выше примеры,мы можем видеть,Python имеет широкое применение и мощные функции в области Интернета вещей. Из Аппаратное управление、Сбор и хранение данных,Для анализа данных, визуализации и удаленного управления,Python предоставляет полный набор решений,Помогите разработчикам быстро создавать и развертывать системы Интернета вещей. будущее,Благодаря постоянному развитию технологий Интернета вещей,Python продолжит играть важную роль в этой области.,для умного дома、Промышленная автоматизация、Умные города и многое другое предлагают более инновационные и эффективные решения.

Подвести итог

через эту статью,Мы подробно рассмотрели, как использовать Python для управления и сбора данных с IoT-устройств.,покрыто от Аппаратное управление、Хранение и анализ данных、Дистанционное управление и автоматизация,приезжать Развертывание и эксплуатация、Расширение и Все аспекты оптимизации. Вот основные положения каждого раздела. Подвести итог:

  1. Аппаратное управление
    • Использование малины Piи Датчик температуры и влажности DHT11。
    • Управляйте светодиодными индикаторами для выполнения основных операций с оборудованием.
  2. Сбор и хранение данных
    • Используйте библиотеку Adafruit_DHT для чтения данных датчиков.
    • Используйте Flask для создания веб-сервера и загрузки данных через REST API.
    • Используйте MongoDB для хранения данных.
  3. анализ данных и визуализация
    • Используйте MongoDB для простого запроса данных и статистики.
    • Используйте библиотеку matplotlib для построения графика изменений температуры и влажности.
    • Используйте scikit-learn для прогнозирования данных.
  4. Дистанционное управление и автоматизация
    • Разрабатывайте веб-серверы с использованием платформы Flask.
    • Используйте протокол MQTT для реализации связи и управления между устройствами.
  5. Развертывание и эксплуатация
    • Используйте такие инструменты, как Fabric и Ansible, для автоматизации развертывания.
    • Мониторинг системы с помощью Prometheus и Grafana.
    • Регулярно создавайте резервные копии данных с помощью таких инструментов, как rsync.
    • Используйте Flask-TalismanVwitch HTTPS, чтобы обеспечить безопасную передачу данных.
    • Добавить HTTP Basic Аутентификация реализует простую аутентификацию.
  6. Расширение и оптимизация
    • Добавляйте больше датчиков и устройств, чтобы расширить возможности системы.
    • Повышайте производительность кода системы за счет оптимизации и асинхронного программирования.
    • использовать Распределенная системная Архитектурные и облачные платформы улучшают масштабируемость и надежность системы.
  7. Пример проекта
    • Разработать систему «умный дом», содержащую Экологический мониторинг、Управление светом, управлением доступом и другими функциональными модулями.

Благодаря этим шагам и примерам вы сможете увидеть широкое применение и мощные функции Python в области Интернета вещей. Python может не только легко реализовать аппаратное управление и обработку данных, но также поддерживать эффективную разработку, развертывание, эксплуатацию и обслуживание с помощью богатых библиотек и инструментов. Благодаря постоянному развитию технологий Интернета вещей Python продолжит играть важную роль в умных домах, промышленной автоматизации, умных городах и других областях, предоставляя разработчикам более инновационные и эффективные решения.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose