MyTetra Share
Делитесь знаниями!
GSM GPRS SIM900 Shield
Время создания: 29.01.2023 18:56
Автор: alensav
Текстовые метки: GSM GPRS SIM900 Shield
Раздел: ARDUINO
Запись: alensav/MyTetra2/main/base/1675007808uml3casbay/text.html на raw.githubusercontent.com

GSM GPRS SIM900 Shield

Б аза знаний

-

М одули

-

Б еспроводная связь

-GSM GPRS SIM900 Shield

Беспроводные модули

Перейти в раздел

Плата Arduino GPRS/GSM Shield  предоставляет нам возможность использовать для удаленного приема и передачи данных мобильной GSM-связи.


Содержание

  • Обзор платы GSM/GPRS SIM900 Shiel
  • Подключение к плате Arduino
  • Управление модулем GSM GPRS SIM900 с помощью AT-команд
  • Пример отправки sms-сообщений с платы Arduino
    Часто задаваемые вопросы

Обзор платы GSM/GPRS SIM900 Shield

Плата Arduino GPRS/GSM Shield (рисунок 1) предоставляет нам возможность использовать для удаленного приема и передачи данных мобильной GSM-связи. Осуществить это можно тремя способами:

  • используя отправку/прием коротких текстовых сообщений (SMS);
  • отправкой голосовых (аудио) команд на основе технологий CSD (стандартная технология передачи данных в сети GSM) и/или DTMF (двухтональный многочастотный аналоговый сигнал, используемый для набора телефонного номера);
  • используя пакетную передачу данных на основе технологии GPRS.
  • Плата построена на базе модуля SIMCom SIM900.

Также на ней расположены:

  • слот для SIM-карты;
  • джек 3,5 мм для аудио-входа и выхода;
  • разъём для внешней антенны.

Общение с платой производится через serial-соединение с помощью набора AT-команд. С помощью перемычек на плате возможно установить используемые для коммуникации контакты: аппаратные 0- 1-й или 2-3 (на некоторых платах) 7- 8-й для работы через SoftwareSerial.


Рисунок 1. GPS GPRS shield.

Плату GSM GPRS SIM900 Shield можно включить двумя способами:

  • аппаратным (нажатие кнопки PWRKEY);
  • программным.



Подключение к плате Arduino 

Плата GSM GPRS SIM900 Shield сделана в формате шилда для плат Ардуино. Контакты шилда (гребенки) легко вставляются в разъемы платы, образуя при этом "бутерброд" (рисунок 2).


Рисунок 2. Установка GPS GPRS shield на плату Arduino. 


Управление модулем GSM GPRS SIM900 с помощью AT-команд

Рассмотрим управление модулем GSM GPRS shield с помощью AT-команд. Для этого установим модуль на плату Arduino  и подключим её к компьютеру. Arduino-скетч отправки и получения данных между компьютером и модулем GSM GPRS shield через плату показан в листинге 1.


Листинг 1

#include <SoftwareSerial.h>

// создание объекта

SoftwareSerial grs(7, 8); // RX, TX

// скорость обмена

#define GSMbaud 9600

String str1;

char buff[100];  

void setup() {

Serial.begin(9600);

gsm.begin(GSMbaud);

Serial.println("Start");

}  

void loop() {

if (Serial.available()) {

    str1 = Serial.readStringUntil('\n');

    str1.toCharArray(buffer, hh.length() + 1);

    gsm.write(buffer);

    gsm.board.write('\n');

}

if (gsm.available()) {

    Serial.write(gprs.read());

}

}

Загружаем скетч на плату ардуино, открываем монитор последовательного порта и набираем команды установки режима:

AT+CREG=1

AT+CREG?

Команда проверки подключения модуля к GPRS-сети, которую при ответе COMMAND NO RESPONSE необходимо постоянно повторять

AT + CGATT=1

AT + CGATT?

Подключаемся к точке доступа оператора связи. Для Билайн:

AT + CGDCONT = 1, "IP", "internet.beeline.ru"

AT + CSTT = "internet.beeline.ru","", ""

Установка интернет-соединения:

AT + CGACT = 1,1

Обращение к интернет-ресурсу

AT + CIPSTART = "TCP", www.yandex.ru  ", 80

Весь процесс подключения представлен на рисунке 3.


Рисунок 3. Процесс работы с модулем GSM GPRS SIM800 в мониторе последовательного порта.


Пример отправки sms-сообщений с платы Arduino

Рассмотрим пример использования отправки sms-сообщений при уменьшении температуры воздуха в помещении ниже определенного значения. Нам потребуются следующие детали:

  • плата Arduino Uno  – 1 шт;
  • плата прототипирования  – 1 шт;
  • модуль GSM GPRS Shield – 1 шт;
  • sim-карта сотового оператора с положительным балансом;
  • модуль датчика DHT11  – 1 шт;
  • блок питания 12В – 1 шт;
  • провода .

Схема подключения показана на рисунке 4.


Рисунок 4. Схема подключения для отправки sms-сообщений при низких значениях температуры воздуха.

Приступим к написанию скетча. Каждые 30 секунд получаем данные влажности и температуры с датчика DHT11. Используем библиотеку DHT. При значении температуры ниже критического отправляем sms на номер указанный в константе PHONE. И делаем паузу на 10 минут.

Содержимое скетча показано в листинге 2.


Листинг 2

// подключение библиотек

#include <SoftwareSerial.h>

#include "DHT.h"

// телефон для отправки sms

#define PHONE_NUMBER "+7928222222"

// создание объектов

SoftwareSerial gsm(7, 8);

DHT sensorDHT(2, DHT22);

// пороговое значение температуры

#define TEMPP 18

unsigned long millissend;

void setup() {

   // запуск последовательного порта

   Serial.begin(9600);

   // запуск датчика DHT

   sensorDHT.begin();

   // запуск SoftwareSerial

   gsm.begin(9600);

}

void loop() {

   if (millis()-millissend>30*1000) { // показания каждые 30 секунд?

      // получение данных с датчика DHT

      int h = sensorDHT.readHumidity();

      int t = sensorDHT.readTemperature();

      if(t<TEMPP) {

         // отправить sms

         SendSMS(t);

         // ждем 10 минут

         delay(10*60*1000);   

      }

      millissend=millis();

   }

}

// отправка sms

void SendSMS(int t) {

   // установка text mode

   gsm.print("AT+CMGF=1\r");

   delay(100);

   // телефон

   gsm.println("AT + CMGS = \"");

   gsm.println(PHONE_NUMBER);

   gsm.println("\"");

   delay(50);

   // отправить данные t

   gsm.println(t);

   delay(50);

   // окончание передачи

   gsm.println((char)26);

   delay(50);

   gsm.println();

}

Загружаем скетч, проверяем событие прихода sms-сообщения на выбранный номер телефона при критическом значении температуры.


Рисунок 5. Схема в сборе.

Создадим прошивку получения данных при отправке sms-сообщения на sim-карту, находящийся в модуле GSM GPRS shield. Содержимое скетча показано в листинге 3.


Листинг 3

// подключение библиотек

#include <SoftwareSerial.h>

#include "DHT.h"

// создание объектов

SoftwareSerial gsm(7, 8);

DHT sensorDHT(2, DHT22);

// переменные

String phone = ""

String str1 = ""; //

boolean isSMS = false;

void setup() {

   // подключение последовательного порта

   Serial.begin(9600);

   // запуск датчика DHT

   dht.begin();

   // запуск SoftwareSerial

   gsm.begin(9600);

   // Настройка приёма сообщений

   gsm.print("AT+CMGF=1\r");

   delay(500);

   gsm.print("AT+IFC=1, 1\r");

   delay(500);

   gsm.print("AT+CPBS=\"SM\"\r");

   delay(500);

   gsm.print("AT+CNMI=1,2,2,1,0\r");

   delay(500);

}  

void loop() {

   if (gsm.available()) {

      char c = gsm.read();

      if ('\r' == c) {

         if (isSMS) { // текущая строка - sms-сообщение,

            if (!str1.compareTo("tmp")) { // текст sms - tmp

               // отправить sms на приходящий номер

               // получение данных

               int t = dht.readTemperature();

               // AT-команда установки text mode

               gsm.print("AT+CMGF=1\r");

               delay(100);

               // номер телефона получателя

               gsm.println("AT + CMGS = \"");

               gsm.println(phone);

               gsm.println("\"");

               delay(50);

               // сообщение – данные температуры

               gsm.println(t);

               delay(50);

               // окончание передачи

               gsm.println((char)26);

               delay(50);

               gsm.println();

            }

            Serial.println(currStr);

            isSMS = false;

         }

         else {

            if (str1.startsWith("+CMT")) {

               Serial.println(str1);

               // выделить из сообщения номер телефона

               phone=str1.substring(7,19);

               Serial.println(phone);

               // если текущая строка начинается с "+CMT",

               // то следующая строка является сообщением

               isSMS = true;

            }

         }

         str1 = "";

      }

      else if ('\n' != c) {

         str1 += String(c);

      }

   }

}

Загружаем скетч на плату, отправляем sms-сообщение с текстом tmp на sim-карту и получаем в ответ sms-сообщение с данными температуры.


Часто задаваемые вопросы FAQ

1. Нет связи с Arduino по последовательному порту.

  • Проверьте питание платы.
  • Проверьте правильность установки перемычек.

2. Не отправляются sms-сообщения

  • Проверьте наличие внешнего питание GSM GPRS shield.
  • Проверьте баланс sim-карты.



Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования