В современном мире Интернета вещей (IoT) множество устройств требуют удаленного доступа для передачи данных. Одним из способов реализации этого является использование модулей GSM, таких как SIM800C, в сочетании с микроконтроллерами. В этой статье мы рассмотрим подключение модуля GSM SIM800C к микроконтроллеру STM32F103C8 и создание простого проекта IoT.
STM32 (F103C8T6) – это микроконтроллер на базе ARM Cortex-M3, который отлично подходит для различных встраиваемых систем и IoT проектов. Он обладает достаточной вычислительной мощностью и обширными возможностями ввода-вывода, что делает его отличным выбором для подключения к внешним устройствам, таким как модули GSM.
SIM800C – это широко используемый GSM модуль с поддержкой GPRS, который позволяет отправлять и принимать SMS, осуществлять голосовые вызовы и обеспечивать доступ в Интернет. Он обладает небольшими размерами, низким энергопотреблением и поддерживает различные диапазоны частот, что делает его отличным выбором для проектов IoT.
GSM модуль SIM800C управляется с помощью AT команд через интерфейс UART. AT команды позволяют отправлять инструкции модулю для выполнения различных действий, таких как установка соединения, отправка и прием SMS, и многое другое. Ниже приведен список основных AT команд, которые можно использовать с GSM модулем:
- AT: Проверка работоспособности модуля
- AT+CPIN?: Проверка качества сигнала
- AT+COPS?: Поиск названия оператора связи
- ATDXXXXXXXXXX;: Вызов на определенный номер, завершается точкой с запятой, где X – это номер мобильного телефона
- AT+CNUM: Найти номер SIM-карты (может не работать для некоторых SIM-карт)
- ATA: Ответить на входящий вызов
- ATH: Завершить текущий входящий вызов
- AT+COLP: Показать номер входящего вызова
- AT+VTS=(номер): Отправить DTMF-номер. Можно использовать любую цифру на клавиатуре вашего мобильного телефона для (номера)
- AT+CMGR: AT+CMGR=1 читает сообщение на первой позиции
- AT+CMGD=1: Удалить сообщение на первой позиции
- AT+CMGDA=”DEL ALL”: Удалить все сообщения из SIM-карты
- AT+CMGL=”ALL”: Прочитать все сообщения из SIM-карты
- AT+CMGF=1: Установить конфигурацию SMS. “1” – это режим только текста
- AT+CMGS = “+91 XXXXXXXXXX”: Отправить SMS на определенный номер (XXXXXX). Когда вы видите “>”, начните вводить текст. Нажмите Ctrl+Z, чтобы отправить текст.
- AT+CNMI=2,2,0,0,0: Получить SMS
- AT+CGATT?: Проверить подключение к интернету по SIM-карте
- AT+CIPSHUT: Закрыть TCP-соединение, то есть отключиться от интернета
- AT+CSTT = “APN”, “имя пользователя”, “Пароль”: Подключиться к GPRS с вашим APN и ключом пароля. Можно получить у поставщика сети.
- AT+CIICR: Проверить, есть ли на SIM-карте пакет данных
- AT+CIFSR: Получить IP-адрес сети SIM
- AT+CIPSTART = “TCP”, “IP сервера”, “Порт”: Используется для установки TCP-соединения
- AT+CIPSEND: Эта команда используется для отправки данных на сервер
Схема подключения
Для подключения микроконтроллера STM32F103C8 к модулю GSM SIM800C необходимо выполнить следующие шаги:
- Подключите вывод TX (передачи данных) микроконтроллера STM32F103C8 (PA9) к входу RX (приема данных) модуля GSM SIM800C.
- Подключите вывод RX микроконтроллера STM32F103C8 (PA10) к выходу TX модуля GSM SIM800C.
- Убедитесь, что земля (GND) микроконтроллера STM32F103C8 соединена с землей модуля GSM SIM800C для обеспечения общей точки отсчета.
Эти соединения обеспечат двустороннюю передачу данных между микроконтроллером STM32F103C8 и модулем GSM SIM800C через интерфейс UART. Таким образом, микроконтроллер сможет отправлять команды и данные на модуль GSM для отправки SMS или выполнения других операций, а также принимать ответы и данные от модуля GSM.
Кнопки подключены к пинам PA0 и PA1 на STM32 и подтянуты к 5 В резисторами на 10 кОм.
О том, как подключить LCD дисплей, вы можете узнать в этой статье.
Библиотеки
Для работы с модулем SIM800C в среде Arduino IDE не требуется установка дополнительных библиотек. Но нам понадобится библиотека LiquidCrystal.h для взаимодействия с LCD дисплеем.
Пример кода
Этот пример кода демонстрирует, как отправлять и получать СМС-сообщения при помощи GSM модуля SIM800C. Для перехода в режим ожидания сообщения необходимо нажать на первую кнопку. Теперь, если отправить сообщение на номер сим-карты, установленной в модуле, оно отобразится на дисплее. При нажатии на вторую кнопку, модуль отправит сообщение на ваш номер. Не забудьте указать свой номер в коде вместо +7xxxxxxxxxx.
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 112 113 114 115 116 117 118 |
#include <LiquidCrystal.h> // Подключаем библиотеку для LCD дисплея // Определение пинов LCD дисплея #define RS PB11 #define EN PB10 #define D4 PB0 #define D5 PB1 #define D6 PC13 #define D7 PC14 LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); // Инициализация LCD дисплея int receive = 0; void setup() { // Настройка LCD дисплея lcd.begin(16, 2); // Установка размера LCD (16 символов в строке, 2 строки) // Настройка пинов для кнопок в качестве входов pinMode(PA0, INPUT); pinMode(PA1, INPUT); // Вывод приветственного сообщения на LCD дисплей lcd.print("STM32 WITH GSM"); lcd.setCursor(0, 1); lcd.print("SIM800C"); // Настройка последовательного порта для GSM модуля Serial1.begin(9600); delay(1000); // Небольшая задержка lcd.clear(); // Очистка дисплея } void loop() { // Очистка дисплея и вывод меню на LCD дисплей lcd.clear(); lcd.setCursor(0, 0); lcd.print("S to Send sms"); lcd.setCursor(0, 1); lcd.print("R to Receive sms"); delay(100); // Чтение состояния кнопок int a = digitalRead(PA0); int b = digitalRead(PA1); // Обработка нажатия кнопок if (a == HIGH) { SendMessage(); // Отправка SMS } else if (b == HIGH) { RecieveMessage(); // Получение SMS } } // Функция для отправки SMS void SendMessage() { lcd.clear(); lcd.print("Sending sms"); delay(1000); // Установка GSM модуля в текстовый режим Serial1.println("AT+CMGF=1"); delay(1000); // Отправка SMS на указанный номер Serial1.println("AT+CMGS=\"+7xxxxxxxxxx\"\r"); delay(1000); // Текст SMS сообщения Serial1.println("Hello from GSM Module"); delay(100); // Отправка SMS Serial1.println((char)26); // ASCII код CTRL+Z delay(1000); // Вывод сообщения о успешной отправке на LCD дисплей lcd.clear(); lcd.print("SMS SENT"); delay(1000); } // Функция для приема SMS void RecieveMessage() { lcd.clear(); lcd.print("Receiving sms"); // Настройка GSM модуля для приема SMS Serial1.println("AT+CNMI=2,2,0,0,0"); delay(1000); while (1) { // Проверка наличия входящего SMS if (Serial1.available()) { // Обработка входящего SMS processIncomingSMS(); break; } } } // Функция для обработки входящего SMS void processIncomingSMS() { // Очистка дисплея lcd.clear(); // Проверка наличия символа " while (Serial1.read() != '"'); // Вывод содержимого SMS на LCD дисплей while (1) { while (!Serial1.available()); char c = Serial1.read(); if (c == '\r') break; lcd.write(c); } } |
В этой статье мы рассмотрели процесс подключения GSM модуля SIM800C к микроконтроллеру STM32F103C8 для создания IoT проекта. Мы изучили основные шаги, необходимые для подключения и использования модуля GSM для отправки и приема SMS сообщений. После следования инструкциям и использования предложенного кода вы сможете создать свой собственный проект IoT на базе GSM.