Рубрики
Проекты на STM32

Передача и прием SMS с помощью STM32F103C8 и GSM модуля SIM800C

GSM модули в настоящее время находят широкое применение в разнообразных проектах тематики интернета вещей. При этом они гораздо менее зависимы от окружающих условий чем, к примеру, модули Wi-Fi или Zigbee, которые, к тому же, отличаются достаточно высокой стоимостью и малым радиусом действия. При этом GSM модули отличаются высокой надежностью и большой дальностью действия. Конечно, GSM модули не могут передавать большие объемы информации с высокой скоростью, но они отлично подходят для приложений, в который требуется сбор информации от датчиков с небольшими объемами передаваемых данных.

В данной статье мы рассмотрим подключение GSM модуля SIM800C к плате STM32F103C8 (Blue Pill) и передачу/прием с его помощью коротких текстовых сообщений (SMS). Передаваемые и принимаемые SMS будут отображаться на экране ЖК дисплея 16х2. Управлять передачей/приемом SMS мы будем с помощью двух кнопок, подключенных к плате STM32F103C8.

Ранее на нашем сайте мы уже рассматривали ряд проектов с использованием GSM модулей SIM900, SIM900A, SIM800 и т.д. Наиболее популярными из них являются следующие:

Также на нашем сайте вы можете посмотреть все проекты с использованием GSM модулей.

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

  1. Отладочная плата STM32F103C8 (STM32 Blue Pill) (купить на AliExpress).
  2. GSM модуль SIM800C (купить на AliExpress).
  3. ЖК дисплей 16×2 (купить на AliExpress).
  4. Кнопка – 2 шт.
  5. Потенциометр 10 кОм (купить на AliExpress).
  6. Макетная плата.
  7. Соединительные провода.

Почему мы выбрали GSM модуль SIM800C?

SIM800C – это широко используемый GSM модуль с последовательным интерфейсом, способным работать от напряжения в 3.4V-4.4V. Модуль SIM800C может работать в четырех диапазонах частот – 850/900/1800/1900 МГц и отличается низким энергопотреблением. С его помощью можно совершать голосовые вызовы и передавать/принимать SMS. Управлять работой модуля можно с помощью AT команд. Модуль SIM800C поддерживает одну SIM карту и имеет последовательный порт (контакты TX & RX) с интерфейсом RS232.

Для питания модуля SIM800C используется адаптер постоянного тока на 12V. SIM карта вставляется с обратной стороны модуля. При этом учтите что модуль не имеет поддержки технологии 4G, поэтому не вставляйте в него SIM карту, поддерживающую данную технологию.

Подключение GSM модуля SIM800C к плате STM32F103C8

Распиновка платы STM32F103C8 приведена на следующем рисунке.

Для подключения GSM модуля SIM800C к плате STM32F103C8 мы использовали первый последовательный порт платы (UART), расположенный на ее контактах A9 и A10. Всего плата STM32F103C8 содержит три последовательных порта, они обозначены на представленной схеме синим цветом.

AT команды

Для управления различными функциями GSM модуля (голосовые вызовы, текстовые сообщения и т.д.) могут быть использованы AT команды. Список наиболее часто используемых AT команд представлен на следующем рисунке.

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

Схема подключения GSM модуля SIM800C к плате STM32F103C8 (Blue Pill) представлена на следующем рисунке.

Схема соединений между платой STM32F103C8 и GSM модулем SIM800C приведена в следующей таблице.

Плата STM32F103C8 GSM модуль SIM800C
PA9 (TX) RX
PA10 (RX) TX
GND GND

Схема соединений между платой STM32F103C8 и ЖК дисплеем 16х2 приведена в следующей таблице.

№ контакта ЖК дисплея Обозначение контакта ЖК дисплея Контакт платы STM32
1 Ground (Gnd) Ground (G)
2 VCC 5V
3 VEE средний контакт потенциометра
4 Register Select (RS) PB11
5 Read/Write (RW) Ground (G)
6 Enable (EN) PB10
7 Data Bit 0 (DB0) No Connection (NC)
8 Data Bit 1 (DB1) No Connection (NC)
9 Data Bit 2 (DB2) No Connection (NC)
10 Data Bit 3 (DB3) No Connection (NC)
11 Data Bit 4 (DB4) PB0
12 Data Bit 5 (DB5) PB1
13 Data Bit 6 (DB6) PC13
14 Data Bit 7 (DB7) PC14
15 LED Positive 5V
16 LED Negative Ground (G)

Две кнопки с помощью подтягивающих резисторов 10 кОм подключены к контактам PA0 и PA1 платы STM32F103C8. Внешний вид собранной конструкции проекта представлен на следующем рисунке.

Объяснение программы для платы STM32

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Плату STM32F103C8 можно программировать через USB порт, FTDI плату или программатор ST-LINK. В нашем проекте мы будем загружать в нее программу через USB порт.

Первым делом в программе подключим библиотеку для работы с ЖК дисплеем и укажем контакты платы STM32F103C8, к которым подключен ЖК дисплей. Также создадим объект для работы с дисплеем.

Далее укажем тип ЖК дисплея (16х2) и покажем на его экране приветственное сообщение.

Установим режим работы для контактов, к которым подключены кнопки, на ввод данных.

Инициализируем 1-й последовательный порт на скорость работы 9600 бод.

Также запрограммируем функции для передачи и приема сообщений.

Передача сообщений

Данная функция будет использоваться для передачи SMS на заданный телефонный номер. Для этого на GSM модуль будет подаваться AT команда, переводящая его в текстовый режим.

Для перевода GSM модуля в текстовый режим будет использоваться AT команда AT+CMGF=1.

После этого с помощью AT команды AT+CMGS будем осуществлять передачу SMS через последовательный порт serial1 с указанием телефонного номера, на который нужно будет передать SMS.

Сообщения будут передаваться с помощью AT команд каждую секунду, после передачи сообщения нам необходимо передавать на GSM модуль ASCII код комбинации клавиш CTRL+Z.

После этого мы будем отображать на экране ЖК дисплея 16х2 сообщение “SMS sent”.

Прием сообщений

В этой функции мы будем принимать текстовые сообщения и отображать их на ЖК дисплее.

После приема GSM модулем SMS в его последовательном порту кроме этого самого SMS будет содержаться и другая информация: время, дата и т.д. Поэтому нам необходимо вычленить текст SMS из этого потока данных. Мы будем делать это при помощи подсчета символов двойных кавычек (“) в полученном потоке данных. После 6-го такого символа в принятом потоке данных будет содержаться текст SMS.

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

Для передачи SMS в нашем проекте просто нажмите на левую кнопку схемы. SMS отправится на номер, указанный в коде нашей программы.

Для приема текстового сообщения нажмите правую кнопку. В результате этого мы примем SMS и оно отобразится на экране ЖК дисплея.

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

5 ответов к “Передача и прием SMS с помощью STM32F103C8 и GSM модуля SIM800C”

Ну это же проще и удобнее чем писать на специфичном коде для stm32. Для поставленных в этом проекте задач использования Wiring вполне хватает. К тому же Wiring хорошо знаком тем, кто переходит на stm32 с платформы Ардуино

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

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

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