Симулятор GSM SIM800L онлайн в браузере
SIM800L это GSM-модем от Simcom: он умеет звонить, принимать и отправлять SMS, а ещё поднимать GPRS-интернет. Управляется он AT-командами по UART, то есть по сути это обычный текстовый протокол, в котором есть и запрос, и ответ.
В симуляторе SIM800L виртуальный и подключается через SoftwareSerial: отправленная AT-команда возвращает типовой ответ модема, например OK или +CSQ, а write(26) отправляет набранное SMS. Это позволяет написать и отладить всю логику обмена с модемом, не покупая сим-карту.
Откройте симулятор, выберите пример «GSM: Отправка SMS» в меню Examples, нажмите «Загрузить». В Serial появятся ответы модема.
AT-команды: язык модема
SIM800L управляется AT-командами по UART. AT проверяет связь и отвечает OK. AT+CSQ показывает уровень сигнала сети в шкале от 0 до 31, где 99 означает «неизвестно», а AT+CREG? сообщает, зарегистрирован ли модем в сети: значение 1 это домашняя сеть, 5 это роуминг. AT+CMGF=1 переключает модем в текстовый режим SMS, в котором номер и текст передаются обычными символами вместо двоичного PDU-формата.
Отправка SMS выглядит так: сначала идёт AT+CMGS с номером в кавычках, модем отвечает символом > и ждёт текст, затем вы отправляете сам текст и завершаете его символом Ctrl+Z, то есть кодом 26. Если Ctrl+Z не отправить, модем будет ждать вечно. Звонки управляются так: ATD с номером начинает вызов, ATA отвечает на входящий, ATH сбрасывает вызов, а AT+CLCC показывает состояние текущего соединения.
Грабль питания: модем требует 2 А
Питание это главная проблема SIM800L. В момент передачи GSM-модем потребляет до 2 А, и это пик, длящийся доли секунды. Вывод 5 V платы Arduino даёт около 500 мА, поэтому модем на нём голодает: он молчит, перезагружается или сбрасывает вызов прямо во время разговора. Нужен отдельный источник 4 В 2 А, и общий провод GND с Arduino обязателен.
Второй момент это уровни. Логика SIM800L это около 2.8 В, а Arduino выдаёт 5 В, и RX-пин модема не рассчитан на такое напряжение. Между TX Arduino и RX модема нужен либо делитель из двух резисторов, либо последовательно включённый диод 1N4148, который срежет около 0.7 В. Обратное направление проблемы нет: TX модема выдаёт 2.8 В, и это Arduino понимает как логическую единицу.
Третий момент это скорость. SoftwareSerial надёжно работает до 38400 бод, а выше начинает терять байты, потому что он делит один аппаратный таймер с millis и delay. Штатная скорость SIM800L 9600 бод, её менять обычно незачем. Если проекту нужен быстрый GPRS или большой объём данных, ставьте модуль на аппаратный Serial1 платы Mega или Leonardo.
Код: отправка SMS
#include <SoftwareSerial.h>SoftwareSerial gsm(2, 3); // RX=2, TX=3void setup() { Serial.begin(9600); gsm.begin(9600); delay(100); gsm.println("AT"); delay(100); gsm.println("AT+CMGF=1"); delay(100); gsm.println("AT+CMGS=+79123456789"); delay(100); gsm.print("Hello from Arduino"); delay(100); gsm.write(26); // Ctrl+Z — отправить SMS delay(100); Serial.println("SMS отправлено"); while (gsm.available()) Serial.write((char)gsm.read());}void loop() {}Почему после каждой команды стоит delay. Настоящий модем отвечает не мгновенно, а через десятки миллисекунд, и если читать буфер раньше, чем модем закончит, вы получите половину ответа. В симуляторе ответ приходит мгновенно, поэтому задержки там выглядят избыточными, но код переносится на железо без изменений, и это лучше, чем потом ловить плавающие ошибки разбора ответа.
write(26) это символ Ctrl+Z с кодом ASCII 26, и он завершает ввод текста SMS и запускает отправку. В коде его удобнее писать именно числом: gsm.write(26). Строковый вариант gsm.print("\x1A") работает, но при чтении ответа модема выглядит как невидимый символ и мешает отладке. Для чтения входящих SMS используется AT+CMGL, который возвращает список сообщений, а удалить конкретное можно командой AT+CMGD с индексом.
Подробнее про SoftwareSerial — в уроке про Serial. HC-05 Bluetooth — похожий модуль через AT.
| AT-команда | Ответ симулятора | Назначение |
|---|---|---|
| AT | OK | Проверка связи |
| AT+CSQ | +CSQ: 25,0 | Уровень сигнала (0-31) |
| AT+CREG? | +CREG: 0,1 | Регистрация в сети |
| AT+CMGF=1 | OK | Текстовый режим SMS |
| AT+CMGS=номер | > | Ожидание текста SMS |
| AT+CMGL | Список SMS | Прочитать входящие |
| ATD+номер | OK | Позвонить |
| ATA | OK | Ответить на звонок |
| ATH | OK | Сбросить звонок |
Что сначала не получилось
Первый скетч отправлял команду AT и сразу читал ответ, не делая паузу. В симуляторе это работало, а на настоящем модуле я получал пустой буфер и решил, что модем сломан. Добавленная задержка в 100 мс после команды всё починила, и я с тех пор не читаю ответ раньше, чем модем закончил его формировать.
Второй затык был с номером. Я отправлял AT+CMGS=+79123456789 без кавычек, и модем отвечал ERROR. Формат требует кавычки вокруг номера, и в симуляторе я тоже исправил это, чтобы код совпадал с реальным поведением.
Личный опыт: GSM-замок на даче
Первое устройство с SIM800L у меня было простым: реле на воротах дачи, а управление идёт SMS. Отправляешь команду, модем её принимает, включает реле на 5 секунд и в ответе приходит подтверждение. Логику я целиком написал и отладил в симуляторе, а на железе осталось только дождаться регистрации в сети.
Проверял я по цифрам: в симуляторе команда на отправку SMS давала ответ OK, а в списке отправленных появлялась запись с текстом сообщения. Отдельно я проверил поведение при отсутствии ответа: в коде стоит счётчик попыток, и если модем не ответил за 3 секунды, команда считается невыполненной и отправляется повторно, но не чаще одного раза в минуту, чтобы не списать весь баланс. Именно этот счётчик в реальности спас систему: при плохом сигнале модем иногда не отвечает, и без повторов ворота просто не открывались бы.
Авторская позиция: что взять новичку
Начинайте с симулятора и с одного простого сценария: отправить AT, дождаться OK, отправить SMS, убедиться, что она появилась в списке. Дальше добавляйте проверку регистрации в сети, потому что без неё модем может принять команду, но не сможет её выполнить. Для железа берите модуль с готовой платой и стабилизатором, а питание давайте от отдельного источника 4 В 2 А с общей землёй. И помните про сим-карту: для большинства операторов нужно включить приём SMS и выбрать формат сообщений в настройках, иначе модем будет уверенно отвечать OK, но SMS не дойдут.