Перевод: Введение в IoT с помощью Raspberry Pi и Python
@Ent_TranslateIB
В этой статье мы будем использовать язык программирования python для подключения к raspberry pi и разработки нескольких простых приложений. Интернет вещей (IoT) - это термин, используемый для описания растущей сети подключенных к Интернету устройств, которые встроены в повседневные предметы и способны собирать и обмениваться данными. Эти устройства могут включать в себя все: от умных термостатов и камер наблюдения до промышленных систем управления и медицинских приборов.
Raspberry Pi - это маленький, недорогой компьютер, который широко используется для проектов IoT. Это универсальная платформа, которую можно использовать для создания широкого спектра IoT-устройств, от простых проектов, таких как системы домашней автоматизации, до более сложных проектов, таких как промышленные системы управления.
Это универсальное устройство, которое можно использовать для широкого спектра приложений, включая:
- Создание домашнего медиацентра или файлового сервера
- Создание умного дома или устройства Интернета вещей (IoT)
- Обучение программированию или создание пользовательских программных приложений
- Создание и управление проектами робототехники
- Создание небольшого, маломощного и недорогого компьютера для использования в качестве настольного ПК
- Запуск веб-сервера или хостинг веб-сайта
- Создание ретро-игровой аркады
- И многое другое!
Raspberry Pi работает на базе небольшого процессора ARM и под управлением операционной системы Linux. Он имеет ряд возможностей ввода/вывода (I/O), включая порты USB, порт HDMI и множество контактов ввода/вывода общего назначения (GPIO), которые можно использовать для подключения к датчикам, исполнительным механизмам и другим аппаратным устройствам. Это делает его отличной платформой для создания пользовательских аппаратных проектов и интерактивных программных приложений.
Python - это язык программирования, который хорошо подходит для проектов IoT, поскольку его легко изучить и у него большое, активное сообщество пользователей. Существует множество библиотек и фреймворков, которые облегчают работу с датчиками, исполнительными механизмами и другими аппаратными компонентами на Raspberry Pi.
Чтобы начать работу над проектами IoT с использованием Raspberry Pi и Python, вам необходимо настроить Raspberry Pi и установить на него интерпретатор Python. Вам также нужно будет подключить Raspberry Pi к любым датчикам или исполнительным механизмам, которые вы хотите использовать. После настройки оборудования вы можете использовать Python для написания программ, которые могут собирать данные с датчиков, выполнять вычисления или принимать решения на основе этих данных, а также управлять исполнительными механизмами на основе результатов этих вычислений.
В Интернете есть много ресурсов, которые помогут вам узнать больше об использовании Raspberry Pi и Python для проектов IoT. Начать стоит с сайта Raspberry Pi Foundation и документации по Python. Возможно, вам также будет полезно найти в Интернете учебные пособия или примеры программ на Python, которые использовались в проектах IoT.
Чтобы установить библиотеку RPi.GPIO на Raspberry Pi, вам потребуется рабочая среда Python и менеджер пакетов pip, установленный на Raspberry Pi.
Чтобы установить pip, вы можете использовать следующую команду:
sudo apt-get install python3-pip
После установки pip вы можете использовать его для установки библиотеки RPi.GPIO, выполнив следующую команду:
pip3 install RPi.GPIO
Это приведет к установке библиотеки RPi.GPIO и ее зависимостей. После завершения установки вы можете начать использовать библиотеку в своих программах на Python, импортируя ее следующей строкой в верхней части вашего скрипта:
import RPi.GPIO as GPIO
Затем вы можете использовать функции, предоставляемые библиотекой RPi.GPIO, для управления пинами GPIO Raspberry Pi и взаимодействия с другими аппаратными периферийными устройствами.
Вот простой пример программы на Python, которая считывает значение с датчика, подключенного к Raspberry Pi, и выводит его на экран:
import RPi.GPIO as GPIO # Set up the GPIO pins GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.IN) # Read the value from the sensor value = GPIO.input(4) # Print the value to the screen print(value) # Clean up the GPIO settings GPIO.cleanup()
Эта программа импортирует библиотеку RPi.GPIO, которая предоставляет функции для управления контактами GPIO (General Purpose Input/Output) Raspberry Pi. Затем она устанавливает контакт GPIO с номером 4 в качестве входного, считывает значение этого контакта и печатает значение на экран. Наконец, он очищает настройки GPIO, чтобы предотвратить любые конфликты с другими программами, которые могут использовать контакты GPIO.
Вот простой пример того, как можно использовать библиотеку RPi.GPIO для управления светодиодом, подключенным к контакту GPIO Raspberry Pi:
import RPi.GPIO as GPIO
import time
# Set the numbering mode for the GPIO pins
GPIO.setmode(GPIO.BCM)
# Set up the GPIO pin for output
GPIO.setup(17, GPIO.OUT)
# Turn the LED on and off
while True:
GPIO.output(17, GPIO.HIGH)
time.sleep(1)
GPIO.output(17, GPIO.LOW)
time.sleep(1)
# Clean up the GPIO settings
GPIO.cleanup()
Эта программа импортирует библиотеку RPi.GPIO и библиотеку Time, а затем устанавливает режим нумерации выводов GPIO на GPIO.BCM. Затем она устанавливает вывод GPIO с номером 17 в качестве выходного вывода и запускает цикл, который включает и выключает светодиод, устанавливая значение вывода в GPIO.HIGH и GPIO.LOW соответственно. Функция time.sleep() используется для приостановки программы на 1 секунду между каждым изменением состояния светодиода. Наконец, программа очищает настройки GPIO, чтобы предотвратить любые конфликты с другими программами, которые могут использовать пины GPIO.
Вот еще один пример того, как можно использовать библиотеку RPi.GPIO для управления серводвигателем, подключенным к контакту GPIO Raspberry Pi:
import RPi.GPIO as GPIO
import time
# Set the numbering mode for the GPIO pins
GPIO.setmode(GPIO.BCM)
# Set up the GPIO pin for output
GPIO.setup(17, GPIO.OUT)
# Create a PWM object to control the servo
pwm = GPIO.PWM(17, 50)
# Set the initial position of the servo
pwm.start(7.5)
# Move the servo to different positions
while True:
pwm.ChangeDutyCycle(7.5) # Neutral position
time.sleep(1)
pwm.ChangeDutyCycle(12.5) # Maximum rotation
time.sleep(1)
pwm.ChangeDutyCycle(2.5) # Minimum rotation
time.sleep(1)
# Clean up the GPIO settings
pwm.stop()
GPIO.cleanup()
Эта программа импортирует библиотеку RPi.GPIO и библиотеку Time, а затем устанавливает режим нумерации выводов GPIO на GPIO.BCM. Она устанавливает вывод GPIO с номером 17 в качестве выходного вывода и создает объект PWM (Pulse Width Modulation) для управления сервоприводом. Затем он устанавливает начальное положение сервопривода, вызывая функцию pwm.start() и передавая ей значение рабочего цикла для нейтрального положения (7,5%).
Затем программа входит в цикл, который перемещает сервопривод в различные положения, вызывая функцию pwm.ChangeDutyCycle() и передавая ей значения рабочего цикла для максимального (12,5%) и минимального (2,5%) оборотов соответственно. Функция time.sleep() используется для приостановки программы на 1 секунду между каждым изменением положения сервопривода. Наконец, программа останавливает объект PWM и очищает настройки GPIO.
Вот еще один пример того, как можно использовать библиотеку RPi.GPIO для управления двигателем постоянного тока, подключенным к GPIO-контактам Raspberry Pi:
import RPi.GPIO as GPIO
import time
# Set the numbering mode for the GPIO pins
GPIO.setmode(GPIO.BCM)
# Set up the GPIO pins for output
GPIO.setup(17, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)
# Set the initial direction of the motor
GPIO.output(17, GPIO.HIGH)
GPIO.output(22, GPIO.LOW)
# Create a PWM object to control the speed of the motor
pwm = GPIO.PWM(17, 100)
# Set the initial speed of the motor
pwm.start(50)
# Change the speed of the motor
while True:
pwm.ChangeDutyCycle(100) # Maximum speed
time.sleep(1)
pwm.ChangeDutyCycle(50) # Half speed
time.sleep(1)
pwm.ChangeDutyCycle(0) # Stop
time.sleep(1)
# Clean up the GPIO settings
pwm.stop()
GPIO.cleanup()
Эта программа импортирует библиотеку RPi.GPIO и библиотеку Time, а затем устанавливает режим нумерации выводов GPIO на GPIO.BCM. Она устанавливает контакты GPIO с номерами 17 и 22 в качестве выходных контактов и задает начальное направление вращения двигателя, устанавливая значения контактов в GPIO.HIGH и GPIO.LOW соответственно.
Затем программа создает объект PWM для управления скоростью двигателя и устанавливает начальную скорость двигателя, вызывая функцию pwm.start() и передавая ей значение рабочего цикла (50%). Затем программа входит в цикл, который изменяет скорость двигателя, вызывая функцию pwm.ChangeDutyCycle() и передавая ей значения рабочего цикла для максимальной скорости (100%), половины скорости (50%) и остановки (0%), соответственно. Функция time.sleep() используется для приостановки программы на 1 секунду между каждым изменением скорости двигателя. Наконец, программа останавливает объект PWM и очищает настройки GPIO.
Вот еще один пример использования библиотеки RPi.GPIO для считывания данных с датчика температуры, подключенного к контактам GPIO Raspberry Pi:
import RPi.GPIO as GPIO
import time
# Set the numbering mode for the GPIO pins
GPIO.setmode(GPIO.BCM)
# Set up the GPIO pins for input
GPIO.setup(4, GPIO.IN)
GPIO.setup(17, GPIO.OUT)
# Set up the temperature sensor
GPIO.output(17, GPIO.HIGH)
time.sleep(0.025)
GPIO.output(17, GPIO.LOW)
# Read the temperature from the sensor
pulse_start = 0
pulse_end = 0
while GPIO.input(4) == 0:
pulse_start = time.time()
while GPIO.input(4) == 1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
temperature = pulse_duration * 17150
temperature = round(temperature, 2)
# Print the temperature to the screen
print(temperature)
# Clean up the GPIO settings
GPIO.cleanup()
Эта программа импортирует библиотеку RPi.GPIO и библиотеку Time, а затем устанавливает режим нумерации выводов GPIO на GPIO.BCM. Она устанавливает контакты GPIO с номерами 4 и 17 в качестве входных и выходных контактов соответственно, а также устанавливает температуру.
Вот пример использования библиотеки RPi.GPIO для считывания данных с датчика температуры и влажности DHT11, подключенного к контакту GPIO на Raspberry Pi:
import RPi.GPIO as GPIO
import time
import Adafruit_DHT
# Set the numbering mode for the GPIO pins
GPIO.setmode(GPIO.BCM)
# Set up the GPIO pin for input
GPIO.setup(4, GPIO.IN)
# Set the sensor type and the GPIO pin number
sensor = Adafruit_DHT.DHT11
pin = 4
# Read the temperature and humidity
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
# Print the temperature and humidity to the screen
if humidity is not None and temperature is not None:
print("Temperature: {:.1f} C".format(temperature))
print("Humidity: {:.1f} %".format(humidity))
else:
print("Failed to read data from the sensor")
# Clean up the GPIO settings
GPIO.cleanup()
Эта программа импортирует библиотеку RPi.GPIO, библиотеку time и библиотеку Adafruit_DHT, а затем устанавливает режим нумерации для выводов GPIO на GPIO.BCM. Он устанавливает вывод GPIO с номером 4 в качестве входного вывода и задает тип датчика и переменные номера выводов.
Библиотека RPi.GPIO предоставляет ряд функций для работы с контактами GPIO Raspberry Pi. Вот список некоторых из доступных функций:
- GPIO.setmode(mode): Устанавливает режим нумерации для выводов GPIO. Режим может быть либо GPIO.BOARD, который использует номера физических выводов на плате, либо GPIO.BCM, который использует номера каналов Broadcom SOC.
- GPIO.setup(channel, mode, initial=None, pull_up_down=None): Настройка канала GPIO. channel - номер вывода или номер канала Broadcom SOC, в зависимости от текущего режима нумерации. mode - GPIO.IN для входного вывода или GPIO.OUT для выходного вывода. initial - необязательное начальное значение для выходного вывода (либо GPIO.HIGH, либо GPIO.LOW). pull_up_down - необязательный параметр, определяющий внутренний подтягивающий или отводящий резистор для вывода (GPIO.PUD_UP, GPIO.PUD_DOWN или GPIO.PUD_OFF).
- GPIO.input(channel): Чтение значения входного вывода GPIO. channel - это номер вывода или номер канала Broadcom SOC, в зависимости от текущего режима нумерации. Возвращает значение GPIO.HIGH или GPIO.LOW.
- GPIO.output(channel, value): Установка значения выходного вывода GPIO. channel - номер вывода или номер канала Broadcom SOC, в зависимости от текущего режима нумерации. value - GPIO.HIGH или GPIO.LOW.
- GPIO.cleanup(): Сброс настроек GPIO. Это может использоваться для освобождения ресурсов и предотвращения конфликтов с другими программами, которые могут использовать выводы GPIO.
Это лишь некоторые из функций, доступных в библиотеке RPi.GPIO. Более подробную информацию о библиотеке и ее функциях можно найти в документации.
Какие есть другие альтернативные библиотеки для управления Raspberry Pi?
Существует множество библиотек для управления аппаратным обеспечением и периферийными устройствами Raspberry Pi из Python. Некоторые из наиболее популярных альтернатив библиотеке RPi.GPIO включают:
- gpiozero: Библиотека для управления пинами GPIO Raspberry Pi, которая предоставляет простой, интуитивно понятный интерфейс для таких распространенных задач, как управление двигателями и считывание значений датчиков.
- pigpio: Библиотека для управления пинами GPIO Raspberry Pi, которая предоставляет высокоуровневый интерфейс для обычных задач и низкоуровневый доступ для более сложных задач.
- wiringpi: Библиотека, обеспечивающая доступ к контактам GPIO, I2C и SPI периферии Raspberry Pi.
В дополнение к этим библиотекам существует множество других библиотек, которые можно использовать для работы с определенными типами оборудования или для поддержки определенных типов проектов. Например, существуют библиотеки для управления ЖК-дисплеями, работы с определенными типами датчиков и обмена данными по различным типам сетей.
Важно выбрать подходящую библиотеку для вашего проекта, исходя из ваших потребностей и возможностей библиотеки. Вы должны учитывать такие факторы, как простота интерфейса, производительность библиотеки и уровень контроля, который она обеспечивает над аппаратным обеспечением.

В этой статье мы вместе узнали, что можно сделать с помощью raspberry pi и языка программирования python. Это было небольшое начало. Берегите себя и до встречи в моей следующей статье.
Оригинал статьи - здесь.
Поддержите автора хлопками на Medium.
Перевод статьи был выполнен проектом перевод энтузиаста:
- 📚 @Ent_TranslateIB - Телеграмм канал с тематикой информационной безопасности
- 🔥 @Ent_Translate - Инстаграм проекта