Sim800l телефон своими руками

Обновлено: 01.07.2024

SIM800L GSM модуль который может звонить, отправлять или получать смс, заходить в интернет и тд.

Как сделать отправку и получение SMS при помощи Ардуино и модуля SIM800L GSM

Как сделать отправку и получение SMS при помощи Ардуино и модуля SIM800L GSM


На задней панели есть гнездо для SIM-карты! Любая активированная 2G микро SIM-карта будет работать отлично. Правильное направление для установки SIM-карты обычно выгравировано на поверхности гнезда для SIM-карты.

Этот модуль имеет размер всего 1 дюйм², но в его маленькую рамку входит удивительное количество функций. Некоторые из них перечислены ниже:

Питание для модуля SIM800L

Одной из наиболее важных частей работы модуля SIM800L является обеспечение его достаточной мощностью.

В зависимости от того, в каком состоянии он находится, SIM800L может быть относительно энергоемким устройством. Максимальный ток потребления модуля составляет около 2 А во время разрыва передачи. Обычно это не так сильно, но может потребоваться около 216 мА во время телефонных звонков или 80 мА во время сетевых передач. Эта диаграмма из таблицы описывает, что вы можете ожидать:

Режимы частота Потребление тока
Выключить 60 мкА
Спящий режим 1 мА
Ожидание 18 мА
Вызов GSM850 199 мА
EGSM900 216 мА
DCS1800 146 мА
PCS1900 131 мА
GPRS 453 мА
Взрыв передачи 2 А

Распиновка GSM-модуля SIM800L

Модуль SIM800L имеет всего 12 контактов, которые соединяют его с внешним миром.Соединения следующие:

Распиновка GSM-модуля SIM800L

NET это пин, где вы можете припаять спиральную антенну, поставляемую вместе с модулем.

VCC обеспечивает питание для модуля. Это может быть где-то от 3,4 В до 4,4 вольт.Помните, что подключение его к выводу 5В, скорее всего, разрушит ваш модуль! Он даже не работает на 3,3 В! Будет работать внешний источник питания, такой как батарея Li-Po или понижающие преобразователи постоянного тока на 3,7 В, 2A.

RST (Reset) - это пин-код сброса. Если у вас абсолютно плохой модуль, потяните этот вывод на 100 мс, чтобы выполнить полный сброс.

Контакт RxD (Receiver) используется для последовательной связи.

Контакт TxD (Transmitter) используется для последовательной связи.

GND является контактом заземления и должен быть подключен к контакту GND на Arduino.

Штырь RING действует как индикатор звонка. Это в основном вывод прерывания от модуля. По умолчанию он высокий и будет пульсировать в течение 120 мс при получении вызова. Он также может быть настроен на пульс при получении SMS.

Вывод DTR активирует / деактивирует спящий режим. Вытянув его на высоту, вы переведете модуль в спящий режим, отключив последовательную связь. Потянув его в НИЗКОМ, вы разбудите модуль.

MIC ± - это дифференциальный микрофонный вход. Два микрофонных контакта могут быть подключены непосредственно к этим контактам.

SPK ± - это интерфейс дифференциального динамика. Два контакта динамика могут быть связаны непосредственно с этими двумя контактами.

Подключение GSM-модуля SIM800L к Arduino


Arduino Code - Отправка СМС

Давайте перейдем к интересным вещам. Давайте запрограммируем наш Arduino для отправки SMS на любой телефонный номер, который вы пожелаете. Прежде чем попробовать набросок, вам нужно ввести номер телефона. Найдите строку XXxxxxxxxxxx и замените XX кодом округа, а xxxxxxxxxx - 10-значным номером телефона.



Arduino скетч - Чтение СМС

Sim800l

Общая информация

  • вводами и выводами;
  • индикатором питания;
  • кнопкой сброса;
  • стабилизирующими конденсаторами;
  • индикаторами связи UART;
  • гнездом питания;
  • кварцевым резонатором;
  • преобразователем DC-DC;
  • USB;
  • конвертером USB-UART;
  • светодиодом PIN13.

При подключении SIM800L к устройству владелец получает возможность совершать звонки, отправлять короткие послания и программировать систему по своему вкусу. Кроме того, устройство сможет также по первой необходимости связываться с хозяином и сообщать ему о происходящем.

Этот вид SIM используется в современных системах, управляемых GPRS и GSM. Например, для отправки СМС владельцу достаточно выбрать из записной книжки смартфона ард-номер и ввести текст.

SIM800L Ардуино

Технические характеристики и особенности SIM800L

SIM800 — модем. Буквы в конце модификации указывают на его возможности. Кроме того, Nano-устройство с литерой L внешне отличается от модельного ряда.

  • управляться АТ-командами;
  • определять местоположение по базовым станциям;
  • воспроизводить аудиофайлы удаленному абоненту или локально;
  • ловить радиоволны;
  • отправлять и получать СМС и данные GPRS;
  • декодировать и формировать тональный набор DTMF.

Производитель оснастил модем:

Размеры устройства составляют 25х24х4 мм, а вес — 5 г. Модель поддерживает сеть в режиме 2G. Для работы ей необходимо питание 3,7-4,2 В. При этом ток режима ожидания составляет 0,7 мА, а пиковый — 2 А.

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

Максимальное напряжение высокого уровня UART не должно превышать 2,8 В. Производитель запрограммировал универсальный асинхронный приемопередатчик на работу в пределах скорости от 1200 до 115200 бод. Максимальная скорость передачи GPRS-данных — 85,6 Кбод.

Micro-SIM поддерживает PBCCH, CSD, USSD, PAP, RTC, а кодируется CS с 1 по 4.

Чтобы пользователь смог легко подключить модем к устройству, связывающему проекты в единую систему, микро-сим-карта продается с неприпаянными антенной и контактами. Контакты рекомендуется припаивать, если микрочип планируется использовать с модульными микроконтроллерами, например Arduino.

Распиновка модели 800L:

  • RING — индикатор вызова;
  • DTR — готовность выходных данных;
  • MIC+/- — соединение с микрофоном;
  • SPK+/- — соединение с динамиком;
  • NET — подключение антенны;
  • VCC — напряжение питания;
  • RST — сброс, перезагрузка;
  • RXD — принимаемые данные;
  • TXD — передаваемые данные;
  • GND — общий контакт;
  • IPX ANT — подключение IPX-антенны;
  • LED — светодиодная индикация;
  • MICRO SIM — слот под карту формата micro-SIM.

Производитель рекомендует перед использованием микрочипа согласовать логические уровни подключаемых устройств. После этого в слот вставляют сим-карту.

Пока ей удастся поймать связь и установить скорость соединения, красный светодиод в верхнем левом углу на плате будет мигать раз в несколько секунд. Когда этот процесс закончится и устройство приступит к стабильной работе, скорость мерцания лампочки замедлится.

Для подсоединения SIM800L к контроллеру Аrduino UNO R3 понадобятся:

  • USB-кабель;
  • понижающий преобразователь напряжения;
  • источник питания от 6 до 20 В (батарейку 12 В);
  • соединительные провода.

Схема

Загрузка кода

Чтобы в процессе использования управлять устройством через монитор порта, необходимо ввести образцы команд и кодов через компьютер.

В библиотеке Software Serial в начале работы прописывают скетч:

Для настройки отправки и получения SMS код такой:

void sms(String text, String phone)


Несколько лет назад сделал себе на Arduino блок мониторинга питания дачного котла от UPS. Как показала практика, связка Arduino MEGA + шилд на SIM900 со стандартными библиотеками работает очень нестабильно. Периодически всё зависает, само перегружается и т.д. Отладить это невозможно, поэтому стал искать другие варианты. В результате решил всё переделать на современных технологиях: взял за основу STM32 Bluepill, приобрел на али модуль SIM800L, но самое главное – весь код решил написать на Rust, купился на обещания его высокой надёжности. Что из этого получилось читайте дальше.

Функциональность

Несколько слов о том, что хотелось получить от новой самоделки.

У меня на даче стоит UPS Inelt, в котором есть порт RS232 для управления UPS. Он поддерживает довольно древний протокол обмена Megatec, с помощью которого можно выполнять несложные действия по управлению UPS и узнавать его текущее состояние. Управление меня не особо интересовало, а вот состояние работы знать хотелось: как там сетевое напряжение, живы ли батареи и пр. На рынке я не нашёл готовых решений, которые могли бы решить эту задачу, поэтому решил всё сделать сам. Всё в духе DIY.

Пока проектировал электронику, решил добавить к модулю свой маленький UPS, т.е. микроконтроллер может у меня питаться либо от сети, либо от встроенной батареи. Раз такое дело, решил еще мониторить модулем напряжения питания сети и батареи.

Всё это было реализовано, как уже писал выше, на Arduino MEGA + SIM900. Теперь же нужно было всё это переделать на Bluepill с небольшими доработками схем питания и подключения датчиков. Аппаратные возможности bluepill существенно больше, чем Arduino, поэтому особых проблем с переходом нет, тем более, что многие контакты bluepill толерантны к 5 В сигналам. Единственная проблема, что в bluepill нет eeprom, поэтому пришлось подключить к конструкции дополнительную микросхему. В кладовке нашлась бесхозная 24LC16, поэтому использовал её, хотя мне нужно было всего несколько байт хранить. Как до меня дошло позже, эти байты можно было бы сохранить в ячейках SIM карты, но цели сделать оптимальное решение я не ставил. Наоборот, поскольку я решил использовать новые для себя технологии, то мне интересно было всё попробовать – испытать как можно больше аппаратных возможностей STM32 и попробовать embedded Rust в целях самообразования.

В конце статьи есть ссылка на репозитарий с исходным кодом, если посмотрите, то увидите, что я использовал очень многие блоки STM32. АЦП, таймеры, USART, прерывания, RTC и пр. Руки не дотянулись разве что до использования DMA и новомодной асинхронщины Rust.

Начало похода по граблям

Если на STM32 у меня уже был некоторый опыт программирования на C++, то Rust был совершенно в новинку. Вообще использовать Rust пришло в голову, когда наткнулся на несколько заметок, что кому-то удалось помигать светодиодом на bluepill используя Rust. К сожалению, более содержательных статей я тогда не встретил, поэтому решил для начала почитать поподробнее документацию Rust. Язык оказался довольно сложный для меня, надо прямо сказать, намного труднее того, что используется в Arduino. Самое печальное было то, что в книгах по Rust очень много уделяется внимания стандартным библиотекам, которые, что позже стало для меня неожиданностью, вообще не используются в embedded версии. Все эти String, Vec, сотни адаптеров и замыканий, которым посвящены тысячи страниц в документации вообще бесполезны. Печаль.

Но ради главного преимущества Rust, предсказуемого поведения программы, я готов был с этим всем примериться. Наверняка те, кто не потратил много бессонных ночей в поисках seg fault, не поймут меня, ну да и ладно.

Основным источником информации для меня стали исходники примеров использования библиотек на crates.io. Надо сказать, что даже имеющиеся там примеры нужно было допиливать чтоб они заработали на bluepill. Но тем интереснее и продуктивнее изучение языка. Начинающим сразу предлагаю изучить крейт heapless и использовать его методы вместо Vec, String стандартной библиотеки.

Далее в порядке важности, нужно разобраться в крейте stm32f1xx-hal. Собственно, благодаря ему обычно и идёт взаимодействие с оборудованием bluepill. Увидев слово HAL, сразу приходит мысль о STM32 CubeMX, но это обманчиво, тут HAL совсем другой. Другие функции, способы доступа к железу. Хорошо хоть на совсем низком уровне сохранили названия регистров и блоков микроконтроллера, иначе вообще ничего понять было бы невозможно без примеров. Документация на крейт есть, но довольно посредственная. Мне постоянно приходилось смотреть исходный код библиотеки для понимания как там всё реально работает.

Железо и драйверы

Отдельная тема — это поиск драйверов для всякого оборудования. Если для Arduino есть, видимо, драйвер для любого устройства, то с Rust не всё так радужно. Меня с самого начала интересовало, есть ли готовые библиотеки для eeprom, датчика температуры DS18B20, да и SIM800. К счастью, для памяти и датчика крейты есть, а для SIM800 всё пришлось делать самому. Для обучения самое то. Я изучил исходники ардуиновской библиотеки SIM900 и решил их творчески портировать на Rust в необходимом мне объёме.


Кстати, для DS18B20 есть несколько крейтов и я сперва взял первый попавшийся. И не попал. Он оказался очень нестабильным – датчик то считывал температуру, то выдавал ошибку CRC. Я сначала менял датчики, отключал прерывания, но ничего не помогало. В результате перешёл на другой крейт и всё заработало стабильно без танцев с бубном.

Надо сказать, что для работы с AT командами есть готовый крейт atat. Можно было попробовать его использовать. Но мне он показался сложным. Да и идеологически он обрабатывает ответы от модуля SIM800 не так, как это делает Arduino. Последний определяет окончание передачи по таймауту, а atat использует маркером конца передачи перевод строки. В результат добиваться работоспособности atat я не стал, а просто свой код написал.

С авторизацией звонков поступил просто – беру “доверенные” номера телефонов из первых трёх ячеек SIM карты. Модуль будет отвечать на звонки только с этих номеров и отправлять СМС на последний набранный номер.

Пришлось повозиться с проблемой связи между SIM800 и bluepill. Казалось бы, обычный RS232 и всё должно было бы сразу запуститься. Но нет, при независимом перезапуске или подаче питания на SIM800 и МК связь часто терялась. Пришлось использовать для устойчивого коннекта последовательную программную перезагрузку сначала SIM800, а потом, в случае неуспеха, и bluepill.

Что не понравилось

Больным вопросом оказалось быстрое распухание кода бинарника. Строчек 200 кода в отладочной сборке ещё влезали во флеш, а потом всё. Практически сразу пришлось установить несколько опций оптимизации и отлаживать уже релизную версию. Большой скачок в использовании памяти произошёл, как только я стал использовать математику с плавающей точкой. Библиотеки fp занимают около 9 кб, которые сразу прибавились к бинарнику. Точнее, всё перестало просто собираться и я не знал, что делать дальше. Помог stackoverflow, где посоветовали поставить опцию opt-level = "z". Только с ней и удалось сделать сборку. При этом финальный размер бинарника составил 45 килобайт при 1300 строках исходного кода. Не могу оценить эффективность компилятора, но такой размер не проблема даже для bluepill, где есть 64 Кб флеша.

Использование Result<> для возврата ошибок. Наверное это удобно, когда стек вызовов глубокий и активно применяется оператор “?”. В моем же случае всё довольно тривиально, а использование Result<> с разными типами ошибок только всё усложняет. Умные книги советуют для унификации передачи кодов ошибок опять же применять Box<>, которого в embedded нет. Ну или просто ради него не хочется делать свой аллокатор кучи и получать связанные с этим потенциальные проблемы.

Небольшой лайфхак

Для отладки программы мне нужно было связываться с UPS, который на даче, а второго у меня нет. Поэтому решил в качестве эмулятора использовать бесхозный модуль Arduino Nano. Написал для него несколько строк кода, которые обеспечивают эмуляцию нужной мне части протокола. Посмотреть можно здесь:

Работа с эмулятором оказалась очень удобна для отладки. Рекомендую.

Итого

Всё задуманное получилось! По ходу дела не обошлось без проблем, но где их нет? Можно сказать, что связка технологий вполне рабочая и подходит для DIY.

SIM800L GSM модем с внешней антенной - это не дорогой, современный и достаточно функциональный GSM модем. Такие модемы используются в некоторых современных смартфонах. Индес L указывает на то что модем может работать в режиме пониженного энергопотребления
Для полдключения SIM800L к Arduino понадобится отдельный источник питания. Для стабильной работы модуля ему требуется около 4.0 вольт.

Характеристики SIM800L:
- Четыре диапазона GSM 850/900/1800/1900 МГц
- Интерфейс - UART (Rx, Tx, Gnd)
- Микро СИМ карта
- Напряжение питания 3,5 . 4,5 В
- Рабочий температурный диапазон: -30 °C .. +80 °C
- Размеры: 22 мм x 18 мм
- Управление: АТ командами

nano_sim800

Описание

Схема достаточно проста, необходимо выполнить два основных требования: подать отдельно на модуль SIM800L отдельное питание в пределах 4,0 вольт, и согласовать шины последовательного порта (на схеме это сопротивления R1, R2, и R3.

Программ для охранной системы не включает ни одной специализированной библиотеки и имеет практически все необходимые функции и подпрограммы для создания своей индивидуальной охранной системы.

Читайте также: