»»

Работа с SIM модулем SIM800L

2016-11-12 в 12:27

В примере покажем как работает GSM модуль SIM800L. Можно использовать и другие GSM модули SIMxxx так как они работаю по схожему принципу, а отличаются функционалом. В данном случае будем отправлять SMS с командами "1" и "0" тем самым включая и отключая нашу нагрузку - светодиод. вы же можете использовать какое либо реле. А управлять можно будет чем угодно, тут на что фантазии и навыков хватит.

Подключается к Arduino через серийный порт:
Pin 2 Arduino - pin TX SIM800L
Pin 3 Arduino - pin RX SIM800L

Модуль sim800 питается от 3.7 до 4.2 вольт. Если его подключить к 5 вольт то модуль просто сгорит, а если к 3.3 вольт то этого будет недостаточно. Поэтому используем стабилизатор на 4 вольта. Вся система питается у меня от блока аккумулятора 7.2 вольта.

В Arduino есть встроенный преобразователь который позволяет подавать напряжение до 20 вольт.Для примера работы использовал простой светодиод подключенный к pin 10 Arduino.
Отправляем на номер sim карты которая установлена в модуле сообщение с текстом "1" и в течении 10 секунд светодиод загорится.
Для того чтобы выключить светодиод, отправим другое сообщение, но уже с текстом "0". И через некоторое время светодиод погаснет.

Скетч для Arduino

Код

#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);
 }
}

Если Вы заметили ошибку, нажмите Ctrl+Enter и сообщите нам.
Оценка статьи: 5.0/5 Уже оценило 2
Всего комментариев: 0
Добавить комментарий

Вход на сайт

Яндекс.Метрика Рейтинг@Mail.ru Проверка орфографии