- Установка SDK устройства AWS IOT для Python на Raspberry Pi:
- Принципиальная электрическая схема:
- Программирование вашего Raspberry Pi:
- Тестирование программы python через окно оболочки:
- За работой:
Raspberry Pi всегда был лучшим выбором для разработки приложений на основе Интернета вещей, если требуется некоторый уровень вычислений. Благодаря гибкости Python и сильному сообществу разработчиков очень легко собирать, регистрировать, анализировать или сообщать набор данных с помощью Pi. В этом руководстве мы узнаем, как совместить мощь Raspberry Pi с сервисом Amazon AWS для публикации данных в Интернете в Интернете.
В этом руководстве мы будем использовать датчик DHT11 для считывания значений температуры и влажности, затем подключимся к сервису AWS IOT и обновим значения датчика с помощью AWS IOT SDK. Затем эти данные можно визуализировать в консоли Amazon IOT, чтобы убедиться, что мы публикуем данные в Интернете.
Вы также можете использовать AWS Elastic Search Service для получения значений этих датчиков и сохранения их в базе данных, а затем использовать службу Kibana Dashboard для визуализации данных датчиков в виде аккуратного построенного графика. Достаточно интересно? !!! Итак, приступим…
Предварительные условия:
В этом руководстве предполагается, что вы уже создали бесплатную учетную запись AWS и знаете основы службы AWS IoT, такие как создание объекта, сертификата, политики и публикация значений с ее помощью. В противном случае прочтите приведенный ниже учебник.
- Начало работы с Amazon AWS IOT с MQTT.fx
Также предполагается, что вы знаете, как подключить ЖК-дисплей и датчик DHT11 к Raspberry Pi, и библиотеки для этого уже установлены на вашем Pi. В противном случае перейдите к следующему руководству.
- Взаимодействие DHT11 с Raspberry Pi
В конце приведенного выше руководства вы создали бы вещь на AWS-IOT, и у вас также должен быть адрес брокера для вашей вещи вместе с сертификатами, необходимыми для доступа к вашей вещи. Мы также предполагаем, что ваш Raspberry pi уже настроен с ОС и подключен к Интернету. Установив их, продолжим обучение. Если вы новичок в Raspberry Pi, сначала прочтите Начало работы с Raspberry Pi.
Установка SDK устройства AWS IOT для Python на Raspberry Pi:
Чтобы использовать сервис AWS на Pi, мы можем установить любой из двух SDK. Один из них - это JavaScript SDK, который использует JavaScript в качестве языка программирования, а другой - Python SDK, который, очевидно, использует Python в качестве языка программирования. Здесь мы выбираем Python в качестве нашего SDK, поскольку нам немного удобнее использовать Python, чем JavaScript.
Полная информация об AWS IOT SDK доступна на его странице GitHub.
Шаг 1. Чтобы установить SDK на Pi, откройте терминал и введите следующую команду
git clone
Шаг 2: Это должно было установить каталог aws на вашем Pi, теперь перейдите в него, используя следующую команду.
cd aws - iot -device- sdk -python
Шаг 3: Внутри каталога установите установочный файл, используя строку ниже
установка python setup.py
Принципиальная электрическая схема:
С аппаратной стороны у нас есть Raspberry Pi, подключенный к датчику DHT11 и ЖК-экрану. DHT11 используется для получения значений температуры и влажности, а ЖК-дисплей используется для отображения значений и информации об устранении ошибок. Принципиальная схема для этого же показана ниже.
И ЖК-датчик, и датчик DHT11 работают с питанием +5 В, поэтому мы используем выводы 5 В на Raspberry Pi для питания обоих. На выходном контакте датчика DHT11 используется подтягивающий резистор номиналом 1 кОм, если вы используете модуль, вы можете избежать этого резистора.
К штырю Vee ЖК-дисплея добавляется подстроечный резистор 10k для управления уровнем контрастности ЖК-дисплея. В остальном все связи довольно просты. Но обратите внимание, какие контакты GPIO вы используете для подключения контактов, поскольку они нам понадобятся в нашей программе. Приведенная ниже диаграмма должна позволить вам определить номера контактов GPIO.
Воспользуйтесь таблицей и выполните подключения в соответствии с принципиальной схемой. Я использовал макетную плату и перемычки для подключения. Поскольку я использовал модуль, я подключил его напрямую к Raspberry Pi. Мое оборудование выглядело так ниже
Программирование вашего Raspberry Pi:
В нашей программе на Python мы должны считывать значения температуры и влажности, отображать их на ЖК-экране, а также публиковать оба значения в Amazon IOT, который мы создали уже в предыдущем руководстве. Поэтому убедитесь, что вы создали вещь, и у вас есть все три ключевых файла и адрес брокера того, что вы создали.
В нашей программе на Python мы должны связать три ключевых файла, чтобы Raspberry Pi мог получить доступ для публикации значений на нашем устройстве. Так что скопируйте все три ключевых файла и вставьте их на рабочий стол вашего Raspberry pi, поскольку нам понадобится их путь в нашей программе.
Полная программу питона можно найти в нижней части этой страницы, вы можете использовать программу после редактирования адреса брокера и путей каталогов в соответствии с вещью, которую вы создали. Ниже я объяснил код небольшими фрагментами.
Мы начнем импортировать библиотеки, необходимые для нашего проекта. Три основных библиотеки - это AWS SDK, библиотека LCD и библиотека DHT, убедитесь, что вы установили все три на свой Pi. Библиотека времени и даты и времени будет установлена по умолчанию.
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient # Import from AWS-IoT Library import time # Чтобы создать задержку с даты и времени импорта date, datetime # Чтобы получить дату и время, импортируйте Adafruit_CharLCD как ЖК-дисплей # Импортируйте ЖК-библиотеку import Adafruit_DHT # Импортируйте библиотеку DHT для датчика
В следующей строке мы должны предоставить детали Thing, такие как адрес брокера, имя клиента и путь к файлам сертификата и ключей. Здесь я использовал имя клиента как new_Client, вы можете использовать то же или любое имя по вашему выбору. Адрес брокера должен быть изменен на адрес того, что вы создали, и каталог пути также должен быть изменен в соответствии с вашей вещью. Кроме этих двух вещей, вам не нужно ничего менять в следующих строках.
myMQTTClient = AWSIoTMQTTClient ("новый_клиент") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureThingCredentials (Desktop "/ home / pi / Certificates (Desktop" / ESP32_pi / Certificates) "/ home / pi / Desktop / ESP32_Thing Certificates / private.pem.key", "/ home / pi / Desktop / ESP32_Thing Certificates / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Бесконечный офлайн Публикация в очереди myMQTTClient. configureDrainingFrequency (2) # Слив: 2 Гц myMQTTClient.configureConnectDisconnectTimeout (10) # 10 секунд myMQTTClient.configureMQTTOperationTimeout (5) # 5 секунд
Затем нам нужно указать контактные данные нашего соединения. Номер контакта GPIO каждого контакта назначается соответствующему имени. Здесь мы использовали датчик DHT на выводе 17 и ЖК-дисплей в 4-битном режиме. Код для того же показан ниже
sensor_name = Adafruit_DHT.DHT11 # мы используем датчик DHT11 sensor_pin = 17 # Датчик подключен к GPIO17 на Pi lcd_rs = 7 # RS ЖК-дисплея подключен к GPIO 7 на PI lcd_en = 8 #EN ЖК-дисплея подключен к GPIO 8 на PI lcd_d4 = 25 # D4 ЖК-дисплея подключен к GPIO 25 на PI lcd_d5 = 24 # D5 ЖК-дисплея подключен к GPIO 24 на PI lcd_d6 = 23 # D6 ЖК-дисплея подключен к GPIO 23 на PI lcd_d7 = 18 # D7 of ЖК-дисплей подключен к GPIO 18 на PI lcd_backlight = 0 # Светодиод не подключен, поэтому мы присваиваем 0
Затем мы инициализируем ЖК-дисплей и выводим на экран небольшое вступительное сообщение. После этого мы попытаемся подключиться к AWS, используя адрес брокера и ключевые файлы, указанные выше. Если соединение установлено успешно, на ЖК-дисплее отобразится « Connected to AWS thing », или будет предпринята попытка в течение 10 секунд, а в случае сбоя - появится сообщение об ошибке. Если вы получили сообщение об ошибке, убедитесь, что вы успешно создали объект и правильно связали его с кодом. Вы всегда можете вернуться к предыдущему руководству, чтобы проверить, правильно ли вы создали вещь в AWS.
if time.time () <connected_time: # попробуйте подключиться к AWS в течение 10 секунд myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "connected", 0) выведите "Успешное соединение клиента MQTT!" lcd.message ('Connected to \ n AWS thing') #if connected else: print "Error: Проверьте данные AWS в программе" lcd.message ('Error: \ nInvalid details') #if not connected
После того как соединение установлено успешно, мы входим в бесконечный в то время как цикл, чтобы опубликовать значение времени, температура и влажность в качестве полезной нагрузки. Полезная нагрузка здесь всегда должна быть строкой в формате JSON. Итак, сначала мы читаем текущую дату и время и сохраняем их в переменной, используя следующие строки
now = datetime.utcnow () # получить дату и время current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') # получить текущее время в строковом формате
Затем мы считываем значения влажности и температуры с датчика DHT11 и отображаем их на ЖК-экране. Переменная влажность и температура будут содержать значение влажности и температуры соответственно.
влажность, температура = Adafruit_DHT.read_retry (sensor_name, sensor_pin) # читать с датчика
и сохранить соответствующие значения в варибале температуры и влажности
lcd.clear () # Очистить ЖК-экран lcd.message ('Temp =%.1f C'% temperature) # Показать значение температуры lcd.message ('\ nHum =%.1f %%'% влажности) # Показать значение Humidity time.sleep (2) # Подождите 2 секунды, затем обновите значения
Как было сказано ранее, полезная нагрузка должна быть в виде строки с фигурными скобками вокруг нее. Мы добавляем значение даты, времени, температуры и влажности после преобразования переменной в строки, как показано ниже.
# подготовить полезную нагрузку в строковом формате payload = '{"timestamp": "' + current_time + '", "temperature":' + str (температура) + ', "влажность":' + str (влажность) + '}'
Наконец, как только полезная нагрузка будет готова, мы должны опубликовать ее в MQTT-клиенте. Это можно сделать с помощью команды myMQTTclient.publish . При публикации объекта мы также должны дать ему имя, здесь я назвал его DHT11 / data, но вы можете называть его как хотите. Но убедитесь, что вы помните имя, так как нам нужно будет подписаться на нашу вещь для просмотра данных.
Тестирование программы python через окно оболочки:
Как только программа будет готова, запустите ее, используя ваш выбор. Я использовал Python IDE для запуска программы в окне оболочки. Если все в порядке, вы должны получить сообщение об успешном подключении, и вся полезная нагрузка должна отображаться в окне. Вы можете проверить правильность считывания значений температуры и влажности. Полезная нагрузка будет обновляться каждые 5 секунд. Окно оболочки будет выглядеть примерно так, как показано ниже.
Если у вас возникли какие-либо проблемы, убедитесь, что вы указали правильные ключевые данные и адрес брокера, а также проверьте, можно ли подключить эту вещь с помощью программного обеспечения MQTT.fx. Если оболочка отображает успешное подключение клиента MQTT и зависает там, это означает, что датчик DHT11 не отвечает, проверьте, подключились ли вы к правильному контакту и работает ли датчик.
За работой:
После того, как вы запустите программу и получите указанные выше сведения в окне оболочки, это означает, что программа отвечает правильно, и значения загружаются на сервер Amazon AWS. Вы также можете заметить, что ЖК-дисплей каждые 5 секунд проверяет, отображается ли сообщение Опубликовано в AWS-IoT, как показано ниже.
Мы можем попасть в приложение MQTT.fx и подписаться на тему DHT11 / data . Тогда мы сможем получить все данные, которые публикует Raspberry Pi. Эти данные также будут обновляться каждые 5 секунд; ваш экран MQTT будет выглядеть примерно так, как показано ниже
Как вы можете видеть, полезная нагрузка поступает в программное обеспечение MQTT, как выделено синим цветом. Вы также можете посмотреть видео ниже, чтобы узнать, как работает проект. Поскольку теперь у нас есть данные в Интернете, мы можем использовать их с другими инструментами, предоставляемыми Amazon, такими как эластичный поиск и Lambda, для сохранения данных в базе данных или их визуализации на графике. Существует гораздо больше приложений, в зависимости от того, как мы должны извлечь пользу из данных.
Надеюсь, вы поняли руководство и вам понравилось создавать что-то подобное. Если у вас возникнут проблемы с этим, опубликуйте их в разделе комментариев ниже или используйте форумы для технической помощи.