- Встановлення SDK для пристрою AWS IOT для Python на Raspberry Pi:
- Кругова діаграма:
- Програмування вашого Raspberry Pi:
- Тестування програми python через вікно оболонки:
- Робоча:
Raspberry Pi завжди був першим вибором для розробки додатків, заснованих на IoT, якщо задіяний якийсь рівень обчислень. Завдяки гнучкості python та потужній спільноті розробників дуже легко збирати, реєструвати, аналізувати або повідомляти набір даних за допомогою Pi. У цьому підручнику ми дізнаємось, як поєднати потужність Raspberry Pi із послугою Amazon AWS для публікації даних в Інтернеті в Інтернеті.
У цьому посібнику ми використовуватимемо датчик DHT11 для зчитування значення температури та вологості, а потім підключимось до служби AWS IOT та оновимо значення датчика за допомогою AWS IOT SDK. Потім ці дані можна візуалізувати на консолі Amazon IOT, щоб переконатися, що ми отримуємо дані, опубліковані в Інтернеті.
Ви також можете використовувати службу еластичного пошуку AWS, щоб отримати ці долини датчиків і зберегти їх у базі даних, а потім скористатися послугою 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
Крок 2: Це мало встановити каталог aws на вашому Pi, тепер перейдіть до нього, використовуючи наступну команду.
cd aws - iot -device- sdk -python
Крок 3: Всередині каталогу встановіть файл налаштування за допомогою рядка нижче
python setup.py встановити
Кругова діаграма:
З апаратної сторони у нас є Raspberry Pi, підключений до датчика DHT11, та РК-екран. DHT11 використовується для отримання значення температури та вологості, а РК-дисплей використовується для відображення значень та інформації про усунення помилок. Принципова схема для того ж наведена нижче.
І РК-датчик, і датчик DHT11 працюють із джерелом живлення + 5 В, тому ми використовуємо 5-контактні висновки на Raspberry Pi для живлення обох. На вихідному штифті датчика DHT11 використовується підтягувальний резистор значення 1k, якщо ви використовуєте модуль, цього резистора можна уникнути.
Для регулювання рівня контрастності РК-дисплея на штифт Vee РК-дисплея додається касета тримером 10k. Крім цього, всі зв’язки досить прямі. Але занотуйте, які штифти GPIO ви використовуєте для підключення штифтів, оскільки це буде потрібно в нашій програмі. Наведена нижче діаграма повинна дозволити вам з’ясувати номери штифтів GPIO.
Скористайтеся діаграмою та зробіть свої з’єднання відповідно до принципової схеми. Для встановлення з’єднань я використовував макетну плату та дроти для перемичок. Оскільки я використовував модуль, я підключив його безпосередньо до Raspberry Pi. Моє обладнання виглядало так нижче
Програмування вашого Raspberry Pi:
У нашій програмі на python ми маємо прочитати значення температури та вологості, відобразити їх на РК-екрані, а також опублікувати обидва значення в Amazon IOT, що ми створили вже в попередньому підручнику. Тож переконайтеся, що ви створили річ, і у вас є всі три ключові файли та адреса брокера речі, яку ви створили.
У нашій програмі на python ми повинні зв’язати три ключові файли, щоб Raspberry Pi отримав доступ до публікації значень на нашій речі. Тож скопіюйте всі три ключові файли та вставте їх на робочий стіл вашого Raspberry pi, оскільки нам знадобиться адреса шляху у нашій програмі.
Повна програму пітона можна знайти в нижній частині цієї сторінки, ви можете використовувати програму після редагування адреси брокера і шляхів каталогів в відповідно до річчю, яку ви створили. Далі нижче я пояснив код у невеликих фрагментах.
Ми починаємо з імпорту бібліотек, необхідних для нашого проекту. Три основні бібліотеки - це AWS SDK, РК-бібліотека та DHT-бібліотека, переконайтесь, що ви встановили всі три ваші Pi. Час і дата і час бібліотека будуть встановлені за замовчуванням.
від AWSIoTPythonSDK.MQTTLib імпорту AWSIoTMQTTClient #import з AWS-IoT бібліотеки часу імпорту # Щоб створити затримку з дати і часу дати імпорту, дати і часу # по отримати дату і час імпорту Adafruit_CharLCD, як РК - бібліотека LCD #import імпорту Adafruit_DHT #import DHT бібліотеки для датчика
У наступному рядку ми повинні надати такі відомості, як адреса брокера, ім'я клієнта та шлях до файлів сертифікатів та ключів. Тут я використовував ім'я клієнта як new_Client, ви можете використовувати те саме або будь-яке ім'я на ваш вибір. Адресу посередника слід змінити на адресу того, що ви створили, а каталог шляхів також слід змінити відповідно до вашої речі. Крім цих 2 речей, вам не потрібно нічого змінювати в наступних рядках.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / pi / Desk / CA32 / CA / pi. "/ home / pi / Desktop / ESP32_Thing certificate / private.pem.key", "/ home / pi / Desktop / ESP32_Thing certificate / 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 LCD підключений до 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 РК-дисплей підключений до GPIO 18 на PI lcd_backlight = 0 #LED не підключений, тому ми призначаємо 0
Потім ми ініціалізуємо РК-дисплей і виводимо невелике вступне повідомлення на РК-екран. Після цього ми спробуємо зв’язатись із AWS, використовуючи адресу брокера та ключові файли, введені вище. Якщо підключення вдале, на РК-дисплеї з'явиться повідомлення « Підключено до AWS », або він спробує впродовж 10 секунд, а якщо не вдалося, відобразиться повідомлення про помилку. Якщо ви отримуєте повідомлення про помилку, переконайтеся, що ви створили річ успішно і правильно зв’язали його з кодом. Ви завжди можете повернутися до попереднього підручника, щоб перевірити, чи правильно ви створили річ у AWS.
якщо time.time () <connection_time: # спробуйте підключитися до AWS протягом 10 секунд myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "connected", 0) print "MQTT Client connection connection!" lcd.message ('Підключено до \ n речі AWS') # якщо підключено інакше: print "Помилка: Перевірте деталі AWS у програмі" lcd.message ('Помилка: \ nНедійсні дані') # якщо не підключено
Після того як з'єднання встановлено успішно, ми входимо в нескінченний в той час як цикл, щоб опублікувати значення часу, температура і вологість в якості корисного навантаження. Корисне навантаження тут завжди має бути рядком у форматі JSON. Отже, спочатку ми читаємо поточну дату та час і зберігаємо їх у змінній, використовуючи наведені нижче рядки
now = datetime.utcnow () #get date and time current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') #get поточний час у форматі рядка
Потім ми зчитуємо значення вологості та температури з датчика DHT11 і відображаємо їх на РК-екрані. Змінні вологість та температура будуть містити значення вологості та температури відповідно
вологість, температура = Adafruit_DHT.read_retry (ім'я датчика, датчик_шпильки) # читання з датчика
і збережіть відповідні значення при зміні температури та вологості
lcd.clear () # Очистити рідкокристалічний екран lcd.message ('Temp =%.1f C'% temperature) # Відобразити значення температури lcd.message ('\ nHum =%.1f %%'% вологості) # Дисплей значення Humidity time.sleep (2) # Зачекайте 2 секунди, а потім оновіть значення
Як вже говорилося раніше, корисне навантаження має бути у вигляді рядка з фігурними дужками навколо нього, і ми додаємо значення дати, часу, температури та вологості після перетворення змінної в рядки, як показано нижче.
#prepare the payload in string format payload = '{"timestamp": "' + current_time + '", "температура":' + str (температура) + ', "вологість":' + str (вологість) + '}'
Нарешті, як тільки корисне навантаження буде готове, ми повинні опублікувати його в клієнті MQTT. Це можна зробити за допомогою команди myMQTTclient.publish . Опубліковуючи щось, ми також повинні дати йому ім'я, тут я назвав його DHT11 / data, але ви можете назвати його як завгодно. Але обов’язково запам’ятайте ім’я, оскільки нам потрібно буде підписатися на нашу сторінку, щоб переглянути дані.
Тестування програми python через вікно оболонки:
Коли програма буде готова, запустіть її, вибравши ваш вибір. Я використовував Python IDE для запуску програми у вікні оболонки. Якщо все в порядку, ви повинні отримати зв’язок з повідомленням успішно, і все корисне навантаження повинно відображатися у вікні. Ви можете перевірити, чи правильно зчитуються значення температури та вологості. Корисне навантаження оновлюватиметься кожні 5 секунд. Вікно оболонки буде виглядати приблизно так нижче
Якщо у вас виникли проблеми, переконайтеся, що ви вказали правильні ключові дані та адресу брокера, також перевірте, чи може річ бути підключена за допомогою програмного забезпечення MQTT.fx. Якщо оболонка відображає успішне підключення клієнта MQTT і зависає там, це означає, що датчик DHT11 не відповідає, перевірте, чи підключено ви до правильного штифта, і сенсор працездатний.
Робоча:
Після запуску програми та отримання вищезазначених деталей у вікні оболонки це означає, що програма реагує належним чином і значення завантажуються на сервер Amazon AWS. Ви також можете помітити на РК-дисплеї, щоб перевірити, чи не пише " Опубліковано в AWS-IoT" кожні 5 секунд, як показано нижче.
Ми можемо потрапити в додаток MQTT.fx і підписатися на тему DHT11 / data . Тоді ми повинні мати змогу отримати всі дані, які публікує Raspberry Pi. Ці дані також оновлюватимуться кожні 5 секунд; ваш екран MQTT буде виглядати приблизно так нижче
Як бачите, корисне навантаження надходить на програмне забезпечення MQTT, виділене синім кольором. Ви також можете переглянути відео нижче, щоб дізнатись, як працює проект. Оскільки зараз у нас є свої дані в Інтернеті, ми можемо використовувати їх з іншими інструментами, наданими Amazon, як Elastic search та Lambda, щоб зберегти дані в базі даних або візуалізувати їх потім на графіку. Існує набагато більше додатків, заснованих на тому, як ми маємо отримувати вигоду від даних.
Сподіваюся, ви зрозуміли підручник і сподобалося створювати щось подібне, якщо у вас виникли проблеми з цим, опублікуйте його в розділі коментарів нижче або скористайтеся форумами для отримання технічної допомоги.