Оглавление:

Начало работы с AWS IoT с беспроводным датчиком температуры с использованием MQTT: 8 шагов
Начало работы с AWS IoT с беспроводным датчиком температуры с использованием MQTT: 8 шагов

Видео: Начало работы с AWS IoT с беспроводным датчиком температуры с использованием MQTT: 8 шагов

Видео: Начало работы с AWS IoT с беспроводным датчиком температуры с использованием MQTT: 8 шагов
Видео: Разработка устройств IoT - то, о чем не написано в книгах / Андрей Цислав (Стриж) 2024, Июль
Anonim
Начало работы с AWS IoT с беспроводным датчиком температуры с использованием MQTT
Начало работы с AWS IoT с беспроводным датчиком температуры с использованием MQTT

В предыдущих инструкциях мы прошли через различные облачные платформы, такие как Azure, Ubidots, ThingSpeak, Losant и т. Д. Мы использовали протокол MQTT для отправки данных датчиков в облако почти на всех облачных платформах. Для получения дополнительной информации о MQTT, его преимуществах и преимуществах по сравнению с протоколом HTTP вы можете обратиться к этому руководству.

В этом руководстве мы рассмотрим еще одну и наиболее знакомую облачную платформу Amazon Web Services. Многие из вас могут быть знакомы с AWS, также известным как Amazon Web Services, и облачными функциями, предоставляемыми AWS. Он был основой веб-разработки на протяжении многих лет. С ростом масштабов приложений Интернета вещей AWS предложила решение AWSIoT. AWSIoT - надежное решение для размещения наших приложений IoT.

Следуя этой инструкции:

  • Вы сможете настроить учетную запись AWS для своего IoT-приложения.
  • Вы сможете подключить ESP32 к ядру AWS IoT.
  • Отправлять и получать сообщения с использованием протокола MQTT и
  • Визуализируйте отправленные данные в AWS

Шаг 1. Настройка учетной записи AWS

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

Чтобы настроить учетную запись AWS, следуйте этому руководству.

Шаг 2: Технические характеристики оборудования и программного обеспечения

Технические характеристики оборудования и программного обеспечения
Технические характеристики оборудования и программного обеспечения

Спецификация программного обеспечения

Аккаунт AWS

Спецификация оборудования

  • ESP32
  • Беспроводной датчик температуры и вибрации
  • Приемник Zigmo Gateway

Шаг 3. Беспроводные датчики вибрации и температуры

Беспроводные датчики вибрации и температуры
Беспроводные датчики вибрации и температуры

Это промышленный беспроводной датчик вибрации и температуры для Интернета вещей с большим радиусом действия, обеспечивающий дальность действия до 2 миль с использованием архитектуры беспроводной ячеистой сети. Этот датчик, оснащенный 16-битным датчиком вибрации и температуры, передает высокоточные данные о вибрации через определенные пользователем интервалы. Он имеет следующие особенности:

  • Промышленный 3-осевой датчик вибрации с диапазоном ± 32 г
  • Вычисляет RMS, MAX и MIN g вибрации
  • Удаление шума с помощью фильтра нижних частот
  • Частотный диапазон (полоса пропускания) до 12, 800 Гц
  • Частота дискретизации до 25, 600 Гц
  • Зашифрованная связь с 2-мильным диапазоном беспроводной связи
  • Диапазон рабочих температур от -40 до +85 ° C
  • Настенный или магнитный корпус с классом защиты IP65 Пример программного обеспечения для Visual Studio и LabVIEW
  • Датчик вибрации с опцией внешнего датчика
  • До 500000 передач от 4 батареек AA Доступно множество вариантов шлюза и модема

Шаг 4. Прошивка ESP32 AWS

Чтобы подключиться к AWS и начать отправку данных, выполните следующие действия.

  • Загрузите библиотеку AWS из следующего репозитория Github
  • клонируйте репо и поместите файл AWS_IOT в папку библиотеки в каталоге Arduino

git clone

Теперь пройдемся по коду:

  • В этом приложении мы использовали захватывающий портал для сохранения учетных данных WiFi и для наведения курсора на настройки IP. Для подробного ознакомления с адаптивным порталом вы можете ознакомиться со следующими инструкциями.
  • Адаптивный портал дает нам возможность выбирать между статическими настройками и настройками DHCP. Просто введите учетные данные, такие как статический IP-адрес, маска подсети, шлюз, и шлюз беспроводного датчика будет настроен на этом IP-адресе.
  • Размещается веб-страница, на которой отображается список доступных сетей Wi-Fi и RSSI. Выберите сеть Wi-Fi и пароль и введите "Отправить". Учетные данные будут сохранены в EEPROM, а настройки IP будут сохранены в SPIFFS. Подробнее об этом можно прочитать в этой инструкции.

Шаг 5: Получение данных датчика от беспроводного датчика вибрации и температуры

Получение данных датчика от беспроводного датчика вибрации и температуры
Получение данных датчика от беспроводного датчика вибрации и температуры
Получение данных датчика от беспроводного датчика вибрации и температуры
Получение данных датчика от беспроводного датчика вибрации и температуры

Мы получаем 54-байтовый фрейм от беспроводных датчиков температуры и вибрации. Эта рамка используется для получения фактических данных о температуре и вибрации.

ESP32 имеет три UART, доступных для последовательного использования

  1. RX0 GPIO 3, TX0 GPIO 1
  2. RX1 GPIO9, TX1 GPIO 10
  3. RX2 GPIO 16, TX2 GPIO 17

и 3 аппаратных последовательных порта

  • Серийный
  • Serial1
  • Serial2

Сначала инициализируйте файл заголовка Hardware Serial. Здесь мы будем использовать RX2 и TX2, также известные как. Контакты GPIO 16 и GPIO 17 платы ESP32 для получения последовательных данных.

#включают

# определить RXD2 16 # определить TXD2 17

Serial2.begin (115200, SERIAL_8N1, RXD2, TXD2); // выводы 16 rx2, 17 tx2, 19200 бит / с, 8 бит без контроля четности 1 стоповый бит

Следующие шаги приведут вас к получению реальных значений датчика.

  • Создавайте переменные для хранения значений температуры, влажности, заряда батареи и других датчиков.
  • Установите Rx, tx pin, скорость передачи и биты четности для аппаратного последовательного порта.
  • Сначала проверьте, есть ли что прочитать, используя Serial1.available ().
  • У нас получится фрейм размером 54 байта.
  • Проверьте начальный байт 0x7E.
  • Данные вибрации состоят из среднеквадратичного значения для 3-х осей, минимальных значений для 3-х осей, максимальных значений для 3-х осей.
  • значения температуры и батареи будут содержать 2 байта данных
  • получить имя датчика, тип, версию датчика будет содержать 1 байт данных и оттуда можно получить соответствующий адрес

if (Serial2.available ()) {Serial.println ("Прочитать серийный номер"); данные [0] = Serial2.read (); задержка (k); if (data [0] == 0x7E) {Serial.println ("Получил пакет"); while (! Serial2.available ()); для (я = 1; я <55; я ++) {данные [я] = Serial2.read (); задержка (1); } if (data [15] == 0x7F) /////// для проверки правильности полученных данных {if (data [22] == 0x08) //////// убедитесь, что тип датчика правильно {rms_x = ((uint16_t) (((data [24]) << 16) + ((data [25]) << 8) + (data [26])) / 100); rms_y = ((uint16_t) (((данные [27]) << 16) + ((данные [28]) << 8) + (данные [29])) / 100); rms_z = ((uint16_t) (((данные [30]) << 16) + ((данные [31]) << 8) + (данные [32])) / 100); int16_t max_x = ((uint16_t) (((данные [33]) << 16) + ((данные [34]) << 8) + (данные [35])) / 100); int16_t max_y = ((uint16_t) (((данные [36]) << 16) + ((данные [37]) << 8) + (данные [38])) / 100); int16_t max_z = ((uint16_t) (((данные [39]) << 16) + ((данные [40]) << 8) + (данные [41])) / 100);

int16_t min_x = ((uint16_t) (((данные [42]) << 16) + ((данные [43]) << 8) + (данные [44])) / 100); int16_t min_y = ((uint16_t) (((данные [45]) << 16) + ((данные [46]) << 8) + (данные [47])) / 100); int16_t min_z = ((uint16_t) (((данные [48]) << 16) + ((данные [49]) << 8) + (данные [50])) / 100);

cTemp = ((((данные [51]) * 256) + данные [52])); плавающая батарея = ((данные [18] * 256) + данные [19]); напряжение = 0,00322 * аккумулятор; Serial.print («Номер датчика»); Serial.println (данные [16]); senseNumber = данные [16]; Serial.print («Тип датчика»); Serial.println (данные [22]); Serial.print («Версия прошивки»); Serial.println (данные [17]); Serial.print («Температура в градусах Цельсия:»); Serial.print (cTemp); Serial.println ("C"); Serial.print («Среднеквадратичная вибрация по оси X:»); Серийный.печать (rms_x); Serial.println («мг»); Serial.print («Среднеквадратичная вибрация по оси Y:»); Серийный.печать (rms_y); Serial.println («мг»); Serial.print («Среднеквадратичная вибрация по оси Z:»); Serial.print (rms_z); Serial.println («мг»);

Serial.print («Минимальная вибрация по оси X:»);

Серийный.печать (min_x); Serial.println («мг»); Serial.print («Минимальная вибрация по оси Y:»); Серийный.печать (min_y); Serial.println («мг»); Serial.print («Минимальная вибрация по оси Z:»); Серийный.печать (min_z); Serial.println («мг»);

Serial.print ("Значение АЦП:");

Serial.println (аккумулятор); Serial.print («Напряжение аккумулятора:»); Serial.print (напряжение); Serial.println ("\ п"); if (Voltage <1) {Serial.println («Пора заменить батарею»); }}} else {для (я = 0; я <54; я ++) {Serial.print (данные [я]); Serial.print (","); задержка (1); }}}}

Шаг 6. Подключение к AWS

Подключение к AWS
Подключение к AWS
  • Включите файлы заголовков AWS_IOT.h, WiFi.h, чтобы настроить соединение с концентратором AWSIoT.
  • Введите свой адрес хоста, идентификатор клиента, который будет именем политики, и имя темы, которое будет именем вещи

// ********* Учетные данные AWS ************* // char HOST_ADDRESS = "a2smbp7clzm5uw-ats.iot.us-east-1.amazonaws.com"; char CLIENT_ID = "ncdGatewayPolicy"; char TOPIC_NAME = "ncdGatewayThing";

Создайте переменную char для хранения вашего JSON, в этом случае мы создали формат для хранения JSON

const char * format = "{" SensorId / ": \"% d / ", \" messageId / ":% d, \" rmsX / ":% d, \" rmsY / ":% d, \" rmsZ / ":% d, \" cTemp / ":% d, \" напряжение / ":%. 2f}";

Создайте экземпляр класса AWS_IOT

AWS_IOT esp; // Экземпляр класса AWS_IOT

Теперь подключитесь к концентратору AWSIoT, используя следующий метод

void reconnectMQTT () {if (hornbill.connect (HOST_ADDRESS, CLIENT_ID) == 0) {Serial.println («Подключено к AWS»); задержка (1000);

если (0 == hornbill.subscribe (TOPIC_NAME, mySubCallBackHandler))

{Serial.println («Подписка успешна»); } else {Serial.println («Подписка не удалась, проверьте имя объекта и сертификаты»); в то время как (1); }} else {Serial.println («Ошибка подключения к AWS, проверьте адрес HOST»); в то время как (1); }

задержка (2000);

}

публиковать данные датчика каждые 1 минуту

if (tick> = 60) // публиковать в теме каждые 5 секунд {tick = 0; полезная нагрузка символа [PAYLOAD_MAX_LEN]; snprintf (полезная нагрузка, PAYLOAD_MAX_LEN, формат, senseNumber, msgCount ++, rms_x, rms_y, rms_z, cTemp, напряжение); Serial.println (полезная нагрузка); if (hornbill.publish (TOPIC_NAME, payload) == 0) {Serial.print ("Опубликовать сообщение:"); Serial.println (полезная нагрузка); } else {Serial.println ("Ошибка публикации"); }} vTaskDelay (1000 / portTICK_RATE_MS); галочка ++;

Шаг 7. Визуализация данных в AWS

Визуализация данных в AWS
Визуализация данных в AWS
Визуализация данных в AWS
Визуализация данных в AWS
Визуализация данных в AWS
Визуализация данных в AWS
  • Войдите в свою учетную запись AWS.
  • в левом углу панели инструментов вы найдете вкладку Services
  • Щелкните эту вкладку и под заголовком «Интернет вещей» выберите «Ядро Интернета вещей».
  • Выберите QoS и нет. сообщений подписчикам. Введите название темы.

Шаг 8: Общий код

Вы можете найти общий код в этом репозитории Github.

Кредиты

  • Arduino Json
  • Беспроводные датчики температуры и влажности
  • ESP32
  • PubSubClient

Рекомендуемые: