В данной статье мы рассмотрим IoT проект передачи данных на сервер Thingspeak с помощью платы STM32F103C8T6 (Blue Pill) и GSM модуля SIM800/900. Ранее на нашем сайте мы уже рассматривали подключение GSM модуля к плате STM32F103C8T6, но в нем мы использовали GSM модули только для отправки SMS, здесь же мы будем использовать его для передачи данных на сервер в сети Интернет.
Обзор проекта
В настоящее время мы используем модули ESP8266 или ESP32 или любые другие модули Wi-Fi для отправки любых данных датчиков в Интернет по беспроводной сети. Во всех этих решениях используется технология Wi-Fi и во многих случаях это очень даже неплохо смотрится. Но недостатком этих решений является то, что Wi-Fi может быть доступен не везде. Сигнал Wi-Fi ограничен определенными местами и определенным диапазоном до нескольких метров. Например, для того, чтобы использовать подключение IoT (интернета вещей) и получать данные с полей фермера, мы не можем полагаться на Wi-Fi из-за его недоступности. Аналогично, лес, речная зона, горы являются областями, где соединение Wi-Fi недоступно.
Поэтому в данных случаях GSM/GPRS — единственная доступная технология, позволяющая вам передавать данные с микроконтроллера в сеть Интернет. Модуль GSM/GPRS также позволяет добавить отслеживание местоположения, голос, текст, SMS и данные в ваше приложение. Большим преимуществом технологии GSM/GPRS является то, что оно охватывает большую область, и сигнал/подключение доступны практически везде.
Итак, в этой статье мы рассмотрим проект Интернета вещей с использованием модуля GSM/GPRS. Мы будем использовать SIM900A в качестве эталонного модуля GSM/GPRS и подключим его к микроконтроллеру STM32, т. е. плате STM32F103C8T6 (Blue Pill). Мы будем измерять окружающую влажность и температуру с помощью датчика влажности/температуры DHT11. Данные о влажности и температуре будут отправляться на сервер Thingspeak с помощью AT-команд для модуля GSM. Сервер ThingSpeak — это открытая платформа данных и API для Интернета вещей, которая позволяет собирать, хранить, анализировать, визуализировать и действовать на основе данных с датчиков.
Необходимые компоненты
- Отладочная плата STM32F103C8 (STM32 Blue Pill) (купить на AliExpress).
- GSM модуль SIM800/900 (купить на AliExpress).
- Датчик температуры и влажности DHT11 (купить на AliExpress).
- Блок питания 12/9 В.
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
GSM/GPRS модуль SIM900A
SIM900A — это легкодоступный GSM/GPRS-модуль, используемый во многих мобильных телефонах и КПК. Модуль также можно использовать для разработки проектов IoT (Интернет вещей) и встроенных приложений. Он работает на частотах 900/1800 МГц. Модем оснащен интерфейсом RS232, который позволяет подключать ПК, а также микроконтроллер с чипом RS232 (MAX232). Скорость передачи данных настраивается в диапазоне от 9600 до 115200 с помощью AT-команды. GSM/GPRS-модем имеет внутренний стек TCP/IP, позволяющий подключаться к Интернету через GPRS. Модуль подходит для SMS, голосовых сообщений, а также приложений передачи данных в интерфейсе M2M.
Встроенный регулируемый источник питания позволяет подключать широкий спектр нерегулируемых источников питания. Используя этот модем, вы можете совершать и принимать аудиозвонки, отправлять и читать SMS, пользоваться GPRS-интернетом и т. д. с помощью простых AT-команд.
Характеристики GSM/GPRS модема SIM900A:
1. Входное напряжение: 12 В постоянного тока.
2. Поддержка микрофона, аудиовхода и динамиков.
3. Двухдиапазонный GSM/GPRS 900/1800 МГц.
4. Интерфейс RS232 для прямой связи с компьютером или комплектом MCU.
5. Настраиваемая скорость передачи данных.
6. Проводная антенна (разъем SMA с GSM-антенной опционально).
7. Держатель SIM-карты.
8. Встроенный светодиодный индикатор состояния сети.
9. Встроенный мощный стек протоколов TCP/IP для передачи данных через Интернет с помощью GPRS.
10. GPRS: максимальная скорость загрузки составляет 85,6 Кбит/с, максимальная скорость отправки данных — 42,8 Кбит/с.
Схема проекта
Принципиальная схема подключения GSM-модуля SIM800/900 и датчика DHT11 к плате STM32F103C8T6 для отправки данных на сервер Thingspeak представлена на следующем рисунке.
SIM800/900 — это модуль с подключением по UART (последовательный порт). Поэтому нам нужно подключить SIM900A к выводу UART STM32 для последовательной связи. STM32F103C8T6 имеет 4 вывода UART, из них мы будем использовать UART 3 для сопряжения с SIM900A. Итак, подключите выводы TX и RX SIM900 к выводам PB10 и PB11 платы STM32F103C8T6 соответственно. Подайте на модуль GSM питание 9 В/12 В. Аналогично подключите выводы VCC и GND датчика DHT11 к выводу 5 В и GND платы STM32F103C8T6. Подключите его выходной вывод к PA0 платы STM32F103C8T6.
Внешний вид собранной конструкции проекта показан на следующем рисунке.
Настройка Thingspeak
ThingSpeak предоставляет очень хороший инструмент для проектов на основе IoT. Используя сайт ThingSpeak, мы можем отслеживать наши данные и управлять нашей системой через Интернет, используя каналы и веб-страницы, предоставляемые ThingSpeak. Поэтому сначала вам нужно зарегистрироваться в ThingSpeak. Для этого зайдите на сайт https://thingspeak.com и создайте учетную запись.
Затем создайте новый канал и настройте его по своему усмотрению.
Затем создайте ключи API. Этот ключ необходим для программирования модификаций и настройки ваших данных. Сохраните полученный ключ у себя в надежном месте - он нам понадобится для программы.
Теперь нажмите на каналы, чтобы увидеть онлайн-трансляцию данных.
Если у вас возникли какие либо проблемы по работе с сервисом ThingSpeak, то вы можете посмотреть на нашем сайте все проекты с использованием ThingSpeak, я думаю в них вы найдете ответы на интересующие вас вопросы.
Исходный код программы
Исходный код программы для отправки данных на Thingspeak с помощью платы STM32F103C8T6 и GSM/GPRS модуля SIM800/900 приведен ниже. Вы можете просто скопировать код и загрузить его на плату STM32.
Но перед этим вам нужно внести два изменения в код. Сначала измените свои APN Services. В моем случае я использую Airtel SIM, а APN по умолчанию для Airtel — airtelgprs.com. Вы можете проверить APN вашей SIM-карты у вашего провайдера сотовой связи.
Вам также необходимо внести изменения в ключ API из thingspeak.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
#define BOARD_USART3_TX_PIN PB10 #define BOARD_USART3_RX_PIN PB11 #include <String.h> #include <DHT.h> #define DHTPIN PA0 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial3.begin(9600); // the GPRS baud rate Serial.begin(9600); dht.begin(); delay(1000); } void loop() { float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); delay(100); Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" °C"); Serial.print("Humidity: "); Serial.print(humidity); Serial.println(" %"); if (Serial3.available()) Serial.write(Serial3.read()); Serial3.println("AT"); delay(1000); Serial3.println("AT+CPIN?"); delay(1000); Serial3.println("AT+CREG?"); delay(1000); Serial3.println("AT+CGATT?"); delay(1000); Serial3.println("AT+CIPSHUT"); delay(1000); Serial3.println("AT+CIPSTATUS"); delay(2000); Serial3.println("AT+CIPMUX=0"); delay(2000); ShowSerialData(); Serial3.println("AT+CSTT=\"airtelgprs.com\"");//start task and setting the APN, delay(1000); ShowSerialData(); Serial3.println("AT+CIICR");//bring up wireless connection delay(3000); ShowSerialData(); Serial3.println("AT+CIFSR");//get local IP adress delay(2000); ShowSerialData(); Serial3.println("AT+CIPSPRT=0"); delay(3000); ShowSerialData(); Serial3.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\"");//start up the connection delay(6000); ShowSerialData(); Serial3.println("AT+CIPSEND");//begin send data to remote server delay(4000); ShowSerialData(); String str="GET https://api.thingspeak.com/update?api_key=O13AOCHYYNU2LQ19&field1=" + String(temperature) +"&field2="+String(humidity); Serial.println(str); Serial3.println(str);//begin send data to remote server delay(4000); ShowSerialData(); Serial3.println((char)26);//sending delay(5000);//waitting for reply, important! the time is base on the condition of internet Serial3.println(); ShowSerialData(); Serial3.println("AT+CIPSHUT");//close the connection delay(100); ShowSerialData(); } void ShowSerialData() { while(Serial3.available()!=0) Serial.write(Serial3.read()); delay(5000); } |
Тестирование работы проекта
После загрузки кода на плату STM32F103C8T6 модуль начнет отвечать. Вы можете открыть окно монитора последовательной связи и увидеть там следующую картину.
Аналогичным образом вы можете открыть приватный просмотр Thingspeak и просмотреть зарегистрированные там данные о температуре и влажности.
27 просмотров