ELECTRONICS

SIM800L и Arduino: подключение GSM-модуля, питание 4 В, отправка СМС AT-командами

Беспроводные модулиСкетч проверен компиляцией

SIM800L — модуль сотовой связи размером с монету: сим-карта, антенна, и Arduino умеет звонить, отправлять СМС и ходить в интернет по GPRS там, где ловит обычный телефон. Сигнализация с СМС на телефон, датчик на даче без Wi-Fi, управление котлом по сообщению — всё это он.

Половина вопросов про SIM800L — про питание, и они заслужены. Модулю нужно от 3,7 до 4,2 В и до двух ампер в момент регистрации в сети. Вывод 5V Arduino не подходит ни по напряжению, ни по току. Нужен отдельный источник: литиевый аккумулятор или понижающий модуль на 4 В с конденсатором.

Схема подключения

477A102SIM800LIMEI:862643031465390FCC ID: UDV-2013072402S2-1065J-Z142XCE0678
Наведите на провод или нажмите на него — расскажу, зачем он нужен.

Распиновка

ПроводКуда и зачем
VCC3,7–4,2 В, до 2 А в пиках. Не от Arduino.
GNDЗемля, общая с платой.
RXDПриём команд от платы.
TXDОтветы модуля.
RSTСброс, активный ноль. Обычно не подключают.
NETВыход на светодиод сети: есть на плате.
RINGНизкий уровень при входящем звонке или СМС.
DTRПробуждение из спящего режима.
MIC±, SPK±Микрофон и динамик для голосовых звонков.

Характеристики

Сети
GSM 850/900/1800/1900, 2G
Питание
3,4–4,4 В, оптимально 4,0
Ток
до 2 А в пиках, 20 мА в покое
Логика
2,8 В, терпит 5 В на входе
Интерфейс
UART, 9600 или автоопределение
Сим-карта
micro-SIM, только 2G

Светодиод и регистрация в сети

Красный светодиод рядом с антенной мигает по-разному, и это единственная диагностика без монитора порта. Раз в секунду — ищет сеть. Раз в три секунды — зарегистрировался, можно работать. Часто, дважды в секунду — есть GPRS-соединение. Не мигает вообще — нет питания или модуль в сбросе.

Если мигает раз в секунду минуту и дольше — не хватает питания в момент регистрации либо сим-карта не 2G. Операторы отключают 2G постепенно; убедитесь, что у вашего он ещё есть.

Библиотека

не нужнаМодуль управляется AT-командами через SoftwareSerial. Библиотеки TinyGSM и Sim800L упрощают, но для СМС хватает трёх команд.

Готовый скетч

#include <SoftwareSerial.h>

SoftwareSerial gsm(2, 3);            // RX платы ← TXD модуля, TX платы → RXD модуля
const char* PHONE = "+79001234567";  // ваш номер

void sendCommand(const char* cmd, unsigned long waitMs) {
  gsm.println(cmd);
  unsigned long start = millis();
  while (millis() - start < waitMs) {
    while (gsm.available()) Serial.write(gsm.read());   // ответ модуля в монитор
  }
}

void setup() {
  Serial.begin(9600);
  gsm.begin(9600);
  delay(3000);                          // модулю нужно время после подачи питания

  sendCommand("AT", 500);               // отвечает OK — связь есть
  sendCommand("AT+CMGF=1", 500);        // текстовый режим СМС

  gsm.print("AT+CMGS=\"");
  gsm.print(PHONE);
  gsm.println("\"");
  delay(500);
  gsm.print("Privet ot Arduino");       // текст; кириллица требует UCS2-кодировки
  gsm.write(26);                        // Ctrl+Z — отправить
  sendCommand("", 5000);
}

void loop() {
  // пробрасываем монитор порта в модуль: можно набирать AT-команды руками
  if (Serial.available()) gsm.write(Serial.read());
  if (gsm.available()) Serial.write(gsm.read());
}

Скетч собирается arduino-cli под Arduino UNO

После setup скетч превращается в терминал: наберите AT+CSQ в мониторе порта — модуль ответит уровнем сигнала.

Частые ошибки

Модуль перезагружается при попытке отправить

Питание. Два ампера в пике — это аккумулятор 18650 или понижающий модуль на 4 В с электролитом 1000 мкФ и выше на выводах VCC и GND. От 5V Arduino не работает и не заработает.

Подключил к 5 В — умер

Предел 4,4 В. Модуль без стабилизатора; версия на плате с красным стабилизатором терпит 5 В, эта — нет.

На AT не отвечает

Перепутаны RX и TX — самая частая причина. Или скорость: некоторые прошивки стартуют на 115200, попробуйте её.

Мигает раз в секунду и не регистрируется

Сим-карта без 2G, заблокирован PIN-код, плохой сигнал или проседает питание в момент регистрации. По порядку: снять PIN в телефоне, вынести антенну к окну, добавить конденсатор.

СМС отправляется, но приходит абракадабра

Кириллица. В текстовом режиме модуль шлёт латиницу; для русского переключают кодировку AT+CSCS="UCS2" и кодируют текст в hex.

Что понадобится