8 (800) 350-30-16

Работа Arduino с GSM модулями

Дата: / Категория: Связь / Автор: marsel

В этой статье я покажу как использовать gsm модуль совместно с arduino на примере sim800L. Эта же инструкция вполне подойдет для использования любых других gsm модулей, например, sim900 и т.д., потому что все модули работают примерно по одному и тому же типу - это обмен АТ-командами через порт. 

Использование модуля с arduino я покажу на примере SMS-реле, которое можно использовать для управления устройством удаленно, посредством SMS-команд. Это можно применять совместно с автосигнализацией и т.д.

Подключается модуль к Arduino через UART интерфейс программного серийного порта, работающего на 2 и 3 цифровых выводах Arduino nano. Для питания модуля необходимо напряжение в диапазоне от 3.6В до 4.2В, это значит, что придется использовать дополнительный стабилизатор напряжения, так в Arduino установлен стабилизатор на 3.3 вольта, что не подходит для питания модуля, вторая причина установить дополнительный стабилизатор - GSM модуль является серьезной нагрузкой, так как в нем имеется не слабый передатчик, обеспечивающий стабильную связь с сотовой станцией. Питание для Arduino nano подводится к контакту VIN - это встроенный в Arduino стабилизатор, обеспечивающий работу модуля в широких диапазонах напряжения (6-10В). Модуль реле подключается согласно приведенному тексту программы, к 10 выводу Arduino nano и легко может быть изменен на любой другой, работающий как цифровой выход.

Работает это так: устанавливаем SIM-карту в GSM модуль, включаем питание и отправляем SMS с текстом "1" на номер SIM карты для того чтобы включить наше реле, чтобы отключить отправляем SMS с текстом "0".

#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(2, 3); // установка контактов 2 и 3 для программного порта
int LedPin = 10; // для реле

void setup()
{
gprsSerial.begin(4800);
pinMode(LedPin, OUTPUT);


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

gprsSerial.print("AT+CMGF=1\r");
delay(500); // задержка на обработку команды
gprsSerial.print("AT+IFC=1, 1\r");
delay(500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
delay(500); // задержка на обработку команды
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
delay(700);
}

String currStr = "";
// если эта строка сообщение, то переменная примет значение True
boolean isStringMessage = false;

void loop()
{
if (!gprsSerial.available())
return;

char currSymb = gprsSerial.read();
if ('\r' == currSymb) {
if (isStringMessage) {
// если текущая строка – сообщение, то…
if (!currStr.compareTo("1")) {
digitalWrite(LedPin, HIGH);
} else if (!currStr.compareTo("0")) {
digitalWrite(LedPin, LOW);
}
isStringMessage = false;
} else {
if (currStr.startsWith("+CMT")) {
// если текущая строка начинается с "+CMT", то следующая сообщение
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
}
}

Видео версия статьи:

Теги: #Arduino, #SIM800L

Ваша оценка:

Рейтинг: 10.0 (Оценок: 1)

Комментарий:

Copyright © RobOM.ru 2016 г. Все права защищены