HTTP-запросы в формате JSON с помощью STM32F103C8T6 и SIM900/800


В этой статье мы узнаем, как использовать GSM модуль SIM800 или SIM900 с микроконтроллером STM32 (платой STM32F103C8T6) и делать HTTP-запросы в формате JSON на любой API-сервер. Ранее мы уже использовали GSM модуль и плату STM32F103C8T6 (Blue Pill) для передачи данных на сервер Thingspeak и передачи SMS.

Проект для передачи HTTP-запросов в формате JSON с помощью STM32F103C8T6 и SIM900/800

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

Необходимые компоненты

  1. Отладочная плата STM32F103C8 (STM32 Blue Pill) (купить на AliExpress).
  2. GSM модуль SIM800/900 (купить на AliExpress).
  3. Датчик температуры и влажности DHT11 (купить на AliExpress).
  4. Модуль часов реального времени DS3231 (купить на AliExpress).
  5. Блок питания 12/9 В.
  6. Макетная плата.
  7. Соединительные провода.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Что такое API?

API — это аббревиатура от Application Programming Interface, программного посредника, который позволяет двум приложениям общаться друг с другом. Каждый раз, когда вы используете приложение вроде Telegram, отправляете мгновенное сообщение или проверяете погоду на своем телефоне, вы используете API.

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

Что такое формат JSON?

JSON означает JavaScript Object Notation. Это облегченный формат для хранения и транспортировки данных. Он часто используется при отправке данных с сервера на веб-страницу.

Например, ниже приведен пример простого объекта User, сериализованного в XML:

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

JSON обычно используется вместе с протоколами IoT, которые не обеспечивают собственной поддержки сериализации структур данных, такими как HTTP/Rest, WebSockets, MQTT и SMQ.

В JSON данные структурированы определенным образом. JSON использует такие символы, как { } , : ” ” [ ] и имеет следующий синтаксис.

Данные представлены в парах ключ/значение:
1. Двоеточие (:) присваивает значение ключу.
2. Пары ключ/значение разделяются запятыми (,).
3. Фигурные скобки содержат объекты ({ }).
4. Квадратные скобки содержат массивы ([ ]).

Схема проекта

Давайте теперь сделаем настройку оборудования нашего проекта. В нем мы будем использовать 2 модуля, данные которых должны отправляться на сервер через API в формате JSON. Этими модулями будут датчик влажности и температуры DHT11 и модуль часов реального времени (RTC) DS3231 для проверки времени и отправки его на сервер.

Схема подключения GSM-модуля, датчика DHT11 и модуля часов реального времени DS3231 к плате STM32F103C8T6 представлена на следующем рисунке.

Схема подключения GSM-модуля, датчика DHT11 и модуля часов реального времени DS3231 к плате STM32F103C8T6

Таким образом, мы запитали GSM-модуль напряжением 12 В, а плату STM32 — напряжением 5 В от USB-порта компьютера.

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

Внешний вид собранной конструкции проекта

Библиотека Arduino JSON

Самый простой способ декодировать и кодировать строки JSON с помощью Arduino IDE — использовать библиотеку ArduinoJson, которая была разработана как самая интуитивно понятная библиотека JSON с наименьшим объемом и наиболее эффективным управлением памятью для Arduino. ArduinoJson — это библиотека C++ JSON для Arduino и IoT (Интернет вещей).

Функции данной библиотеки:

1. Декодирование JSON (поддерживаются комментарии).
2. Кодирование JSON (с необязательным отступом).
3. Элегантный API, очень простой в использовании.
4. Фиксированное выделение памяти (ноль malloc).
5. Отсутствие дублирования данных (ноль копирования).
6. Переносимый (написан на C++98).
7. Автономный (без внешних зависимостей).
8. Малый размер.
9. Библиотека только для заголовков.

Исходный код программы

Исходный код для создания HTTP POST в формате JSON с API для GSM-модуля SIM900/800 и платы STM32  приведен ниже.

Перед этим вам понадобятся некоторые библиотеки. Загрузите библиотеки по следующей ссылке и добавьте в Arduino IDE.

1. RTC Lib для DS3231: Загрузить
2. Библиотека DHT для датчика DHT11: Загрузить
3. Библиотека Arduino JSON: Загрузить

В следующем коде внесите изменения в APN. Я использовал Airtel APN. Проверьте APN вашего оператора сотовой связи и внесите изменения в код программы. Также внесите изменения в веб-сервер или добавьте адрес вашего веб-сервера api, куда вы хотите отправлять данные.

Дополнительную информацию о подключении модуля часов реального времени DS3231 к плате STM32F103C8 можно посмотреть в этой статье.

Тестирование работы проекта

После загрузки кода в плату STM32 и включения модуля он попытается подключиться к Интернету и отправить данные в формате JSON.

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

Откройте окно последовательного монитора и вы должны увидеть следующую картину.

Тестирование работы проекта в окне монитора последовательной связи (часть 1)

Тестирование работы проекта в окне монитора последовательной связи (часть 2)

(Проголосуй первым!)
Загрузка...
32 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *