SIM800C — это компактный gsm/gprs модуль. Помимо GSM, модуль так же поддерживает Bluetooth версии 3.0. А ещё SIM800C может воспроизводить аудио и поддерживает протоколы POP3, SMTP, MMS, FTP, HTTP, SSL и др.
Несмотря на плюсы, у данного модуля есть и минусы:
- Первый минус — питание. Запитать данный модуль от arduino не получится, т.к. для его работы потребуется источник питания с напряжением 5 В и 2 А( при пиковой нагрузке).
- Второй минус — это избирательность по операторам. Не со всеми операторами модуль может стабильно работать. Теряет сеть или не получается авторизоваться в сети.
У модуля, который мы будем подключать, выведен необходимый минимум для доступа к подавляющему большинству функций, включая голосовые (выходы для подключения микрофона и динамика):
И обратная сторона.
Назначение выводов модуля:
- GND — пин земли
- VCC_IN — пин источника питания от 5В до 20В
- RI — пин для звонка
- DTR — пин вывода модуля из спящего режима
- RXD и TXD — пины UART
- U2_R и U2_T — пины второго UART
- V_M — пин преобразования UART в TTL логику
- ADC — пин АЦП
- SPN и SPP — пины подключения динамика
- PWR — пин включения или выключения модуля
- MC- и MC+ пин подключения микрофона
- BAT — пин подключения аккумулятора напряжением от 3.3В до 4.4В
Теперь соберем простую схему
После сборки схемы, загрузим тестовый скетч для настройки модема
#include <SoftwareSerial.h>
SoftwareSerial SIM800(8, 9); // 8 - RX Arduino (TX SIM800), 9 - TX Arduino (RX SIM800L)
void setup() {
Serial.begin(9600); // Скорость обмена данными с компьютером
Serial.println("Start!");
SIM800.begin(9600); // Скорость обмена данными с модемом
SIM800.println("AT");
}
void loop() {
if (SIM800.available()) // Ожидаем прихода данных (ответа) от модема…
Serial.write(SIM800.read()); // …и выводим их в Serial
if (Serial.available()) // Ожидаем команды по Serial…
SIM800.write(Serial.read()); // …и отправляем полученную команду модему
}
После загрузки скетча, запускаем Serial Monitor и видим ответ от модема.
После, по очереди вводим команды для настройки модема. После каждой команды нажимаем «Отправить»
AT+CLTS=1 автоматическое определение времени по сети
AT+IPR=9600 задаем скорость работы модуля
AT&W сохранение настроек
После введенных команд, перезагружаем модуль и повторно через «монитор порта» проверяем настройки модуля.
AT+IPR?- команда проверки скорости обмена.
AT+CLTS?-команда проверки определения времени
Существует ряд команд при помощи которых можно определить состояние GSM-модуля и совершать конкретные действия, также получить полезную информацию при диагностике модуля. Некоторые из них представлены ниже:
- команда AT — ответ модуля при ее вводе, покажет готовность модуля (ОК)
- команда ATI — ответ модуля при ее вводе, покажет модель и версия модуля (SIM800 R14.18)
- команда AT+CGMR — ответ модуля при ее вводе, покажет модель и версия ПО (Revision:1348B04SIM800L36)
- команда AT+CCALR? — ответ модуля при ее вводе, говорит о готовности модуля совершать звонки (+CCALR: 1)
- команда AT+CSQ — ответ модуля при ее вводе, говорит о уровне качества связи (+CSQ: 8,0)
- команда AT+GSN — ответ модуля при ее вводе, покажет IMEI-модуля (664813735230592)
- команда AT+GSV — ответ модуля при ее вводе, покажет идентификационные данные модуля (SIMCOM_Ltd SIMCOM_SIM800L Revision:1418B04SIM800L24)
- команда AT+CBC — ответ модуля при ее вводе, покажет напряжение питания модуля (+CBC: 0,72,3963)
- команда AT+CREG? — ответ модуля при ее вводе, покажет тип регистрации в сети (+CREG: 0,1). Где 0 это незапрашиваемый код регистрации в сети отключен, а 1 это зарегистрирован в домашней сети.
- команда AT+COPS? — ответ модуля при ее вводе, покажет информацию об операторе (+COPS: 0,0,»MegaFon»)
- команда AT+COPN — ответ модуля при ее вводе, покажет список всех доступных операторов (+COPN: «24201»,»TELENOR»)
- команда AT+CPAS — ответ модуля при ее вводе, покажет статус модуля +CPAS: 4 — где цифра 4 означает, что модуль готов к работе.
Практическое применение.
Для примера, попробуем поуправлять светодиодом, подключенным к Arduino Nano, посылая с помощью SMS команды «1» и «0». Аналогичным образом можно управлять и любой другой нагрузкой, используя вместо светодиода реле.
Загрузим несложный скетч для управления светодиодом или реле с помощью СМС сообщений.
#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(8, 9);
int LedPin = 10;
void setup(){
gprsSerial.begin(9600);
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 = "";
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")) {
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
}
}
Теперь проверим работу схемы: отправляем на номер SIM карты, которая вставлена в SIM800L модуль СМС с «1» и в течении 10 секунд загорится светодиод, а чтобы его выключить отсылаем сообщение с «0».
Таким образом мы управляем любой нагрузкой с помощью модуля SIM800L и Arduino. Разумеется, вместо светодиода можно подключить, например, реле и контактор, что позволит управлять более или менее серьезной нагрузкой дома и в саду.
Картинка не соответствует действительности. 8 пин на тхд симки должен быть по скетчу, а на картинке на рхд идёт…
Не подскажите мне работает ли пин RST как перезагрузка модуля
Да. Конечно работает.
про блютуз не расскажете?
Добрый день
Подскажите пожалуйста, а с какими операторами этот модем не работает или работает не стабильно?
Вы намекаете на Теле2?
Проверял на операторах Мегафон и Теле2. Остальные не могу сказать.