Как отправлять/принимать sms и звонить с платой расширения sim900 gsm shield и arduino

Расширение размера буфера SoftwareSerial на Arduino

Если ваше сообщение достаточно длинное, как и наше, вы, вероятно, получите его с пропущенными символами. Это не из-за неисправного кода. Ваш буфер приема заполняется и отбрасывает символы. А вы не читаете из буфера достаточно быстро.

Самое простое решение – увеличить размер буфера со стандартного размера с 64 до 256 байт (или меньше, в зависимости от того, что у вас заработает).

На компьютере с Windows перейдите в C:\Program Files (x86) → Arduino → hardware → Arduino → avr → libraries → SoftwareSerial (→ src для более новой версии Arduino IDE). Откройте SoftwareSerial.h и измените строку:

на

Сохраните файл и попробуйте скомпилировать скетч еще раз.

Рисунок 22 – Расширение размера буфера на Arduino

Принципиальная схема и макетная плата

В проекте используется достаточно простая к повторению принципиальная схема:

Выполнить ее можно как на основе макетной платы, так и вытравив при помощи ЛУТ свой вариант. Или же заказать аналогичную на специализированных сайтах или магазинах.

Теперь, что касается элементов россыпью, их характеристики:

Тип Обозначение на плате Характеристики Аналоги
Резистор R6, R8 1M
R2-5, 9-14 4,7k
Биполярный конденсатор C1, 3, 5, 6 0,1 uF
Полярный конденсатор С2 1000 uF 6.3V
С4 33 uF 6.3V
Диод шотки D1-4 MBR0520LT MBR0520-TP, SBR80520LT1G, MBR0530T1G
Диод D5 1N4148W КД522Б, PML4148L, DL4148, LL4148-GS08
Транзистор Q1 IRLML6401 p-типа 12 В FDN302P, Si2305DS, Si2315DS
Фоторезистор R1 300
BZ1 Зумер
SW1 Геркон

Схема открытая, ее kiCAD вариант доступен на Github по адресу https://github.com/AlexIII/gsmGuard/tree/master/kicad-project

Там же, для желающих самостоятельно изготовить плату, ее разводка.

Окно KiCAD с платой:

С целью увеличения времени работы от батареи, крайне рекомендуется выпаять с платы Arduino Pro mini светодиод, информирующий о поступлении питания на микроконтроллер или резистор, через который тот подключается к основной схеме. Кроме того, можно снять и микросхему регулятора напряжения, так как она не используется, но все равно тратит энергию.

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

Код Arduino – тестирование AT команд

Для отправки AT команд и взаимодействия с платой расширения SIM900 мы будем использовать монитор последовательного порта. Приведенный ниже скетч позволит Arduino связываться с платой расширения SIM900 в мониторе последовательного порта. Прежде чем приступить к подробному разбору кода, подключите Arduino к компьютеру, скомпилируйте приведенный ниже код и загрузите его в Arduino.

Открыв монитор последовательного порта, убедитесь, что выбрана опция «NL & CR»!

Скетч начинается с включения библиотеки и ее инициализации выводами Arduino, к которым подключены Tx и Rx платы расширения SIM900.

В функции мы инициализируем последовательные каналы связи между Arduino и Arduino IDE, Arduino и платой расширения SIM900 со скоростью передачи 9600 бод.

Теперь, когда мы установили базовое соединение, мы попытаемся установить связь с платой расширения SIM900, отправляя AT команды.

– это самая базовая AT команда. Она также инициализирует автоматическое определение скорости. Если всё работает, вы должны увидеть эхо символов AT, а затем ОК, сообщающее, что все в порядке, и модуль вас правильно понимает! Затем вы можете отправить несколько команд для запроса и получения информации о плате расширения, таких как:

– проверить «уровень сигнала» — первое число – это уровень в дБ, он должен быть выше 5. Чем выше, тем лучше. Конечно, это зависит от вашей антенны и местоположения!

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

– убедиться, что вы зарегистрированы в сети. Второе число должно быть 1 или 5. 1 означает, что вы зарегистрированы в домашней сети, а 5 – в роуминге. Другие цифры, отличающиеся этих двух, означают, что вы не зарегистрированы ни в одной сети.

В основном цикле программы мы вызываем пользовательскую функцию , которая непрерывно ожидает любые входные данные от последовательного монитора и отправляет их на плату расширения SIM900 через вывод D8 (Rx платы расширения). Она также постоянно читает вывод D7 (Tx платы расширения) на случай, если плата расширения выдает какие-либо отклики.

В мониторе последовательного порта вы должны увидеть вывод, примерно такой как показан ниже.

Рисунок 16 – Базовые AT команды SIM900 GSM Shield на Arduino

Теперь вы можете свободно отправлять любые команды через монитор последовательного порта, например, те, которые показаны ниже, и которые дает дополнительную информацию о подключении к сети и состоянии аккумулятора:

– получить имя и версию платы расширения

– проверить, что вы подключены к сети

– вернуть список операторов, присутствующих в сети

– вернуть состояние литий-полимерного аккумулятора. Второе число является процентом от полного заряда (в данном случае это 93%), а третье число является фактическим напряжением в мВ (в данном случае 3,877 В)

Рисунок 17 – Получение дополнительной информации от SIM900 GSM Shield с помощью AT команд на Arduino

Для получения дополнительной информации о AT командах SIM900 смотрите документ ниже.

Популярные GSM-модули связи

Модуль сотовой связи для Arduino представляет собой устройство из платы и размещенных на ней элементов, включая приемопередатчик. Все они скомпонованы в едином корпусе, снабженном выведенными контактами для подсоединения к материнскому контроллеру. Иногда такой компонент называют шилдом.

SIM900

Контроллер SIM900 от SIMCom Wireless Solution соединяется с Ардуино посредством распространенного протокола взаимодействия UART. К ПК его можно подключить простым USB-UART переходником, который легко собирается даже самостоятельно.

SIM900 выполняет работу в полнодуплексном режиме и дает возможность осуществлять голосовые звонки и обмен сообщениями. Основные характеристики:

  • рабочие частоты четырех стандартов — EGSM900, GSM850, DCS1800, PCS1900;
  • напряжение — от 3.2 до 4.8 вольт;
  • ток в состоянии простоя — 450 мА, пиковый – 2 А;
  • скорость канала GPRS — 14.4 Кбит/с;
  • рабочие температуры с гарантией отсутствия искажений — от −30 до +80 градусов, с таковыми от −40 до +85. В последнем диапазоне заявлены минимальные отклонения без потери работоспособности устройства;
  • масса — 6.5 г;
  • габариты — 24×24×3 мм.

Существует несколько модификаций модуля с индексами B, D. TE-C, R и X. Они обладают определенными отличиями. Так, модель D дооснащена подсистемой зарядки аккумулятора, а плата с индексом X содержит улучшенные режимы энергосбережения, продлевающие срок работы батареи без подзарядки. Это позволяет применить радиомодуль в требующих длительной автономности системах охраны, трекинга, промышленной автоматизации.

Вне зависимости от модификации этот GSM модуль Ардуино поставляется в корпусе SMT с выведенными на торец контактами для распайки. Существуют версии и в иных исполнениях.

Контроллер SIM800L

Чип SIM800L «умеет» обмениваться информацией в режиме дуплекса через GSM и технологию GPRS. В устройстве предусмотрен слот под сим-карту, интегрированная антенна и дополнительный выход для внешней. Питание подается как от конвертера тока DC-DC, так и от иных внешних источников. С главным контроллером SIM800L взаимодействует через UART.

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

  • четырехдиапазонный радиомодуль;
  • рабочее напряжение питания — от 3.8В до 4.2 В;
  • ток в standby 0.7 мА, в пиковом нагрузке — 500 мА;
  • слот под SIM карту;
  • имеется поддержка связи 2G;
  • температурный режим — от −30 до +75 градусов.

A6

Это популярный шилд от разработчика AI-Thinker. Контроллер А6 позволяет принимать и посылать GSM GPRS сигналы через сотовые сети и весьма популярен в проектах систем автоматизации и удаленного доступа к управлению.

Характеристики модуля:

  • четырехдиапазонный терминал мобильной связи;
  • питание — от источника 5 В;
  • потребляемый в состоянии «сна» ток — 3 мА, в standby 100 мА, при передаче 500 мА;
  • максимальная нагрузка гаджета — 2 А;
  • скорость GPRS — до 42.8 Кбит/с;
  • диапазон рабочих температур от −30 до +80 градусов.

А7

Он развивает модуль А6 и отличается встроенным чипом позиционирования GPS. Последний добавляет плате функциональности, одновременно упрощая конструкцию.

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

  • сотовый терминал с 4-мя диапазонами;
  • напряжение питания — от 3.3 до 4.6 В;
  • источник тока — 5 В;
  • модуль GPRS класса 10, скорость трансляции до 86.5 Кбит/с;
  • имеется встроенное подавление электронного эха, статических шумов и паразитных наводок.

NeoWay M590

Данное GSM GPRS устройство 10 класса подключается по UART и умеет осуществлять обмен SMS, работать со звонками и взаимодействовать по протоколу GPRS.

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

  • двухдиапазонный контроллер с поддержкой стандартов DCS1800 и EGSM 900;
  • 10 класс модуля GPRS;
  • напряжение питания от 3.3 до 5 В;
  • пиковый ток — 2 А;
  • рабочий ток устройства — 210 мА;
  • заявленный диапазон эксплуатационных температур — от −40 до +80 градусов.

Для подсоединения к Ардуино понадобится преобразователь электропитания 3.3–5 В.

Зачем это нужно

Аббревиатура GSM расшифровывается как Global System for Mobile (Communications). Технология эксплуатирует сети связи сотовых операторов, обеспечивая трансляцию голосовой, текстовой и служебной информации между подключенными устройствами.

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

  • сообщать о состоянии датчиков периферийного оборудования;
  • передавать информацию о срабатывании тревожной сигнализации;
  • управлять подсоединенной системой, и выполнять любые другие действия по заданному сценарию;
  • осуществлять звонки.

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

Простейший пример применения Ардуино с GSM — автономная сигнализация. Периферийные датчики фиксируют свое состояние и передают на центральную плату, которая через модуль отправляет данные на смартфон владельца. Такое решение можно считать базой для «умного дома»: если добавить дополнительные подключаемые блоки, датчики и программные оболочки, Arduino превращается в полноценный комплекс Smart Home.

Любой GSM/GPRS блок соединяется с основной платой. Для реализации простых проектов, как правило, используют Arduino Uno, но есть возможность построения и на базе минималистичного Nano, и более богато оснащенного Mega. Соединенный с Arduino GSM модуль обеспечивает все возможности технологии передачи данных по сотовой сети.

Модулей связи на рынке представлено достаточно много. Далее мы рассмотрим характеристики наиболее популярных и приведем пример типового проекта.

Работа схемы

Схема устройства представлена на следующем рисунке.

Как вы можете видеть, мы подали питание на GSM модуль с помощью адаптера на 12V 1A, а на плату Arduino мы подали питание с помощью батарейки 9V, голосовой модуль ISD 1820 запитывается от платы Arduino. Записанный голос с данного модуля (с его контактов динамика) мы можем непосредственно передавать на контакты микрофона GSM модуля.

Плата Arduino и GSM модуль соединены по последовательному каналу связи, контакт Tx модуля подсоединен к контакту 9 платы Arduino, а контакт Rx модуля — к контакту 10 платы Arduino. Это позволит плате Arduino «прослушивать» GSM модуль. Когда на GSM модуль будет поступать входящий звонок плата Arduino будет обнаруживать это. Когда плата Arduino удостоверится в том, что звонок активен, она будет воспроизводить голосовое сообщение с голосового модуля при помощи подачи сигнала высокого уровня на свой контакт 8 в течение 200 мс – таким образом имитируется нажатие кнопки PlayE.

Прием и чтение SMS.

В этом случае GSM модуль принимает входящее SMS и сохраняет его на SIM-карте. Плата Arduino непрерывно мониторит принятые SMS через универсальный последовательный приемопередатчик (последовательный порт). Когда мы будем видеть на экране ЖК дисплея символ, свидетельствующий о поступлении нового SMS, нам необходимо будет нажать ‘D’ чтобы прочесть это SMS. Для выполнения этих операций необходимо на GSM модуль передать следующие команды:

Когда Arduino получает индикацию ‘SMS received’ оно извлекает (находит) место хранения SMS и передает команду на GSM модуль прочесть принятое SMS. После этого на экране ЖК дисплея высвечивается сообщение ‘New Message Symbol’.

После этих команд GSM модуль передает хранившееся сообщение в Arduino, после чего Arduino извлекает главное SMS и отображает его на ЖК дисплее. После прочтения SMS на экран ЖК дисплея выдается сообщение ‘New SMS symbol’.

Более подробно все описанные процессы вы можете посмотреть в видео в конце статьи.

Устройство и характеристики

Устройство отправляет SMS при возникновении следующих событий:

  • открытие двери (герконовый датчик);
  • резкое изменение освещения (фоторезистор);
  • движение (PIR датчик);
  • выход температуры из заданного диапазона;
  • низкое напряжение батареи.

Пример SMS с событием

Также, раз в сутки можно настроить время ежедневного отчета

Питается устройство от 3-х батареек AA. Расчетное время работы ≥6мес.

Настройка устройства, считывание логов событий и построение месячного графика температуры происходит с помощью утилиты (Python 2.7 + Tk + pyserial + matplotli).

Основное окно утилиты настройки

Окно лога событий

Окно лога температуры

Обзор

Инфракрасные (ИК, IR) датчики обычно используются для измерения расстояний, но их также можно использовать и для обнаружения объектов. ИК-датчики состоят из инфракрасного передатчика и инфракрасного приемника. Передатчик выдает импульсы инфракрасного излучения в то время, как приемник детектирует любые отражения. Если приемник обнаруживает отражение, это означает, что перед датчиком на некотором расстоянии есть какой-то объект. Если отражения нет, нет и объекта.

IR-датчик, который мы будем использовать в данном проекте, обнаруживает отражение в определенном диапазоне. Эти датчики имеют небольшое линейное устройство с зарядовой связью (CCD), которое детектирует угол, с которым ИК-излучение возвращается к датчику. Как показано на рисунке ниже, датчик передает инфракрасный импульс в пространство, а когда перед датчиком появляется объект, импульс отражается обратно к датчику под углом, пропорциональным расстоянию между объектом и датчиком. Приемник датчика детектирует и выводит угол, и, используя это значение, вы можете рассчитать расстояние.

Подключив пару ИК-датчиков к Arduino, мы можем сделать простую охранную сигнализацию. Мы установим датчики на дверной косяк, и, правильно выровняв датчики, мы сможем обнаружить, когда кто-то проходит через дверь. Когда это произойдет, сигнал на выходе ИК-датчика изменится, а мы обнаружим это изменение, постоянно считывая выходной сигнал датчиков с помощью Arduino. В данном примере мы знаем, что объект проходит через дверь, когда показание на выходе ИК-датчика превышает 400. Когда это произойдет, Arduino включит сигнал тревоги. Чтобы сбросить срабатывание сигнализации, пользователь может нажать на кнопку.

What is SIM800L?

      This is the GSM module similar to the one which is on your phone. And I can assume that every one of you knows the application of GSM module. Speaking of SIM800L module, it is a small chip that uses serial-communication to communicate with any microcontroller or microprocessor. It has an in-built onboard antenna and an onboard SIM slot for SIM insertion purposes. The SIM800L module has 12 total pins that are used to establish connections with the microcontroller. For your simplicity, here I have shared a detailed pinout of the SIM800L and a function of each pin. 

Sim800L PinOut:

 Ring

DTR

We can call this pin an enable pin. This pin plays an important role in saving electricity. If you make this pin high, the module enters sleep mode by disabling serial communication and if you make it low, the module turns on. In the case, if SIM800L is not working, it may be the reason that you are accidentally making this pin high. 

Mic+, Mic-, SPK+ & SPK- 

These are the pins where you can connect the microphone and speaker.

NET

Here you can attach that helical shape antenna. 

RST 

This pin is used to reset the sim800l module. If your module is not responding to the AT command, possibly due to a baud rate problem, you can make this pin high for 100ms to reset the SIM800L. 

VCC and GND  

You can power SIM800l using these pins but the voltage should not be more than 3.3V and Current should not be less than 1A. 

RX and TX

These pins are used for Serial communication Rx for receiving commands from the controller and Tx for sending out the data. This was the introduction part of Sim800L Module if you want to know more about this you can mail us at . Next, we are going to learn about setting the baud rate, Network Scan, Sending and receiving SMS and Answering and Dialling the call. 

Голосовой модуль (Voice Module) ISD 1820

Голосовой модуль ISD 1820 может добавить в ваши проекты голосовые объявления. Модуль способен записывать аудио сигнал в течение 10 секунд и затем воспроизводить его когда потребуется. Модуль включает в себя и микрофон, и динамик (8ohms 0.5watts) и выглядит примерно так, как показано на следующем рисунке.

Модуль работает от напряжения +5V и может быть запитан с помощью контактов на его левой стороне. Также на нижней стороне модуля есть 3 кнопки с названиями Rec, PlayE и PlayL. Вы можете записать ваш голос нажимая кнопку Rec и затем воспроизвести его используя кнопку PlayE. При нажатии кнопки PlayL голос будет воспроизводиться так долго, как долго вы держите кнопку. Подать питание на модуль можно непосредственно с платы Arduino. В нашем проекте мы будем управлять контактом PLAYE используя контакт D8 платы Arduino. Таким образом, мы сможем воспроизводить записанный голос всегда, когда мы будем обнаруживать входящий звонок на GSM модуль.

Схема платы SIM800C

В datasheet модуля указан максимальный уровень логической единицы на входе RX — 3,1 В (при минимальном 2,1 В). Для конвертации TTL уровней на плате SIM800C разведен конвертер. В принипе достаточно было конвертер поставить только на RX вход, поскольку микроконтроллеры Arduino/ESP8266/ESP32 чувствительны к низкому входному напряжению TTL с SIM800C.

Конвертер TTL уровней и преобразователь напряжения 5V -> 3,7V модуля SIM800C

Схема двунаправленного конвертера уровней довольно стандартная и обеспечивает приведение напряжения логической 1 на SIM800 к уровню VDD_EXT. Это напряжение снимается с SIM800 и по datasheet соотвествует 2,8 V.

Напряжение на выходе VDD_EXT чипа SIM800

Соотвественно, на входе модуля SIM800 преобразователь уровней обеспечивает напряжение логической 1 не выше 2,9 V при максимальном значении.

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

Резистивный делитель при подключении входов SIM800 напрямую к Arduino

Вероятно, в данном случае использовали более дорогую схему согласования уровней, чтобы гарантировать, что пользователь неосторожными действиями не сожжет RX порт чипа SIM800. В случае резистивного делителя это можно сделать попутав Rx и Tx

Ну и важно для полноценного согласования уровней SIM800 с микроконтроллером 5-ти вольтовой логики, когда уровень логический единицы может быть высоким, так что микроконтроллер не будет воспринимать уровень логической единицы на выходе Tx

Замечу, что при использовании дешевого модуля SIM800C/L без конвертера уровней, даже при подключении его напрямую к ESP8266/ESP32 с уровнем логики 3,3 V вместо максимальных 3,1 V, указанных в datasheet, можно вывести SIM800 из строя. По крайней мере у меня один модуль SIM800L перестал реагировать на RX. Видимо, внутри чипа нет защитных диодов, либо они не справились даже с такой небольшой разницей в напряжении.

Поэтому при подключении модуля SIM800 без конвертера уровней к ESP8266/ESP32 тоже нужно добавить хотя-бы резистивный делитель на вход RXD.

Резистивный делитель напряжения для подключения SIM800 без конвертера TTL уровней к ESP8266/ESP32

Напряжение питания модуля SIM800 (VBAT) 3,4 — 4,5 V, рекомендуемое 4 V при максимальном токе до 2А. Модуль достаточно прожорлив, поэтому его нельзя запитывать от платы Arduino и от маломощных USB зарядок, дажы не вывести их из строя.

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

Схема фильтрации питания платы SIM800C

Слот SIM карты, в отличие от недорогого модуля SIM800L, подключен к чипу с защитой диодной сборкой SMF05C. Она предохраняет чип SIM-карты и SIM800C от статического электричества.

GSM модуль Fly Scale SIM900

GSM модули часто используются в разнообразных радиоэлектронных проектах для реализации возможностей удаленного доступа. Эти модули могут выполнять те же самые функции как и мобильные телефоны: совершение/прием вызовов, передача/прием SMS, соединение с сетью интернет при помощи технологии GPRS и т.д. Если вы подключите к GSM модулю микрофон и громкоговоритель вы можете превратить его в полноценный мобильный телефон. На нашем сайте вы можете посмотреть все проекты, в которых используется GSM модуль.

Как вы можете видеть на рисунке ниже GSM модуль включает в себя USART adapter (адаптер универсального синхронно-асинхронного приемопередатчика – то есть последовательный порт связи), поэтому его можно подключить к компьютеру с использованием модуля MAX232, или использовать его контакты Tx и Rx для подключения к микроконтроллеру. Также вы можете заметить разъемы MIC+, MIC-, SP+, SP-, к которым можно подключать микрофон и громкоговоритель. Модуль запитывается от адаптера на 12 В с помощью обычного разъема для постоянного тока (DC barrel jack).

Вставьте SIM карту в соответствующий слот модуля и подайте питание на него – после этого вы должны заметить как загорится светоиод, сигнализирующий о подаче питания на модуль. После этого подождите около минуты и вы увидите как красный (или другого цвета) светодиод будет мигать один раз в каждые 3 секунды. Это означает что теперь модуль может установить соединение с вашей SIM картой. После этого вы можете подключать модуль к микроконтроллеру/плате Arduino.

Плюсы и минусы самодельной сигнализации на Arduino

Универсальность Arduino, и зачастую не самое лучшее качество неофициально выпускаемых плат микроконтроллера, приводят к некоторым проблемам в их использовании. Кроме того, GSM модуль, по сути сам такой же по структуре, как и управляющий аппарат, не отличается избыточной надежностью. Основная причина, конечно же, заключена в перебоях электропитания, почему и стоит для снабжения энергией сигнализации использовать контроль состояния и отдельные батареи. Известность ресурса последних окажет неоспоримую помощь в процессе эксплуатации системы безопасности.

Еще один метод борьбы с зависанием устройств уже изначально внесен в конструкцию. Речь идет о RTC плате часов, которая перегружает весь комплекс оборудования при отсутствии ответа от него в течение определенного времени.

Еще одной проблемой зачастую становятся неверные показания датчиков при температуре окружающей среды ниже 5 °С. К сожалению, этой неприятности в основном подвержен сам модуль, определяющий нагрев окружающей среды и сенсор движения. Что в настоящем случае может помочь — это подборка качественных комплектующих доверенных производителей и нахождение Arduino, со всеми дополнительными компонентами в тепле.

Тем не менее, есть и большой плюс у самодельной сигнализации. Равная ей по возможностям, но произведенная уже конечным образом, стоила бы десятки тысяч рублей. Затраченная сумма же на выполненную самостоятельно, даже с учетом всех требуемых компонентов, не выше 1500 р.

Распиновка

Пины питания

  • VIN: Пин для подключения внешнего источника напряжения в диапазоне от 5 до 6 вольт.
  • 5V: На вывод поступает напряжение 5 В при подключении платы через USB. При питании платформы через пин или разъём для внешнего аккумулятора — на пине может быть напряжение в диапазоне от нуля до входного.
  • VCC: Пин от стабилизатора напряжения с выходом 3,3 вольта и максимальных током 600 мА. Регулятор обеспечивает питание микроконтроллера ATSAMD21G18. В любом варианте питания платформы на пине будет присутствовать 3,3 вольта.
  • GND: Выводы земли.

Порты ввода/вывода

В отличие от большинства плат Arduino, родным напряжением Arduino MKR GSM 1400 является 3,3 В, а не 5 В. Выходы для логической единицы выдают 3,3 В, а в режиме входа ожидают принимать не более 3,3 В. Более высокое напряжение может повредить микроконтроллер!

Будьте внимательны при подключении периферии: убедитесь, что она может корректно функционировать в этом диапазоне напряжений.

  • Цифровые входы/выходы: 22 пина; – и –
    Логический уровень единицы — 3,3 В, нуля — 0 В. Максимальный ток выхода — 7 мА. К контактам подключены подтягивающие резисторы, которые по умолчанию выключены, но могут быть включены программно.
  • UART/Serial:

    • Serial: пины и

I²S: пины 2(SCK/BCLK), 3(WS/LRCLK/FS) и A6(SD/SDATA/SDIN/SDOUT)
Используется для передачи и приёма цифрового звука с другими аудио устройствами. Для работы используйте библиотеки I²S и Arduino Sound

Arduino Sample Code For Sim800L

In the section below, I have shared some sample codes for SIM800L, using these codes you will be able to send and receive SMS. 

Troubleshooting Guide 

If you use the following code, then your module should work, but it is not working then there may be the following reasons: 

 1 Out of Coverage Area: 

  In this case, you can run the AT + COPS command to check if it is connected to the network.   There can be another reason and that is the issue of power. To make sure you can run AT + CSQ and AT + CBC.   AT + CSQ will tell you the signal strength and AT + CBC will tell you the percentage of the battery. 

  2 Functionality is Enabled 

  If all the above works are working and you have followed this blog from the beginning and still it is not sending SMS then the issue may be here.   To overcome this problem you can run the following command   AT + CFUN = 1   This command enables the functionality of the module. 

Отправка SMS

При использовании указанной выше команды AT+CNMI=1,0 при приходе SMS строчек

09:33:19.153 -> +CMT: "+79601XXXXX","","19/05/05,09:33:15+12"
09:33:19.187 -> Test the SMS send

индициирующих о приходе сообщения не будет. Нужно вычитывать сообщения. Чтобы вычитать все SMS сообщения я написал функцию:

enum ReadSMSMode
{
  ReceivedUnread,
  ReceivedRead,
  StoredUnsent,
  StoredSent,
  All
};

void readAllSMSs(ReadSMSMode mode = ReadSMSMode::AllSMS)
{
  smsInit();
  String readMode = "ALL"; 
  switch (mode)
  {
    case ReadSMSMode::ReceivedUnread:
      readMode = "REC UNREAD";
      break;
    case ReadSMSMode::ReceivedRead:
      readMode = "REC READ";
      break;
    case ReadSMSMode::StoredUnsent:
      readMode = "STO UNSENT";
      break;
    case ReadSMSMode::StoredSent:
      readMode = "STO SENT";
      break;
    case ReadSMSMode::AllSMS:
      readMode = "ALL";
      break;
  }
  
  modemGSM.sendAT(GF("+CMGL=\"" + readMode + "\"")); 
  Serial.println("Read all SMSs.");
  while (true)
  {
    if (modemGSM.waitResponse(10000L, GF(GSM_NL "+CMGL:"), GFP(GSM_OK), GFP(GSM_ERROR))) 
    {
      String data = modemGSM.stream.readStringUntil('\n');
      data.trim();
      if (data.length() == 0)
        break;
      Serial.println("Data: " + data);
      String msg = modemGSM.stream.readStringUntil('\n');
      Serial.println("Message: " + msg);
    }
    else
    {
      break;
    }
  }
}

Чтобы прочитать SMS с определенным id функция:

void readSMS(uint8_t i)
{
  char message;
  
  modemGSM.sendAT(GF("+CMGF=1"));
  modemGSM.waitResponse();
  modemGSM.sendAT(GF("+CNMI=1,2,0,0,0"));
  modemGSM.waitResponse();
  
  modemGSM.sendAT(GF("+CMGR="), i);
  if (modemGSM.waitResponse(10000L, GF(GSM_NL "+CMGR:"))) 
  {

    String header = modemGSM.stream.readStringUntil('\n');
    String body = modemGSM.stream.readStringUntil('\n');

    Serial.println("Header: " + header);
    Serial.println("Body: " + body);
  }
}

После того как SMS сообщение получено, распарсено и команда отработана, сообщение его лучше удалить. Для удаления SMS сообщения с определенным id используется функция:

bool deleteSmsMessage(const uint8_t index) 
{
    modemGSM.sendAT(GF("+CMGD="), index, GF(","), 0); // Delete SMS Message from <mem1> location
    return modemGSM.waitResponse(5000L) == 1;
}

Для удаления сообщений определенного типа использую функцию:

enum DeleteSmsMode
{
  Read     = 1,
  Unread   = 2,
  Sent     = 3,
  Unsent   = 4,
  Received = 5,
  All      = 6
};

bool deleteAllSmsMessages(DeleteSmsMode method);
bool deleteAllSmsMessages(DeleteSmsMode method) 
{
    // Select SMS Message Format: PDU mode. Spares us space now
    modemGSM.sendAT(GF("+CMGF=0"));
    
    if (modemGSM.waitResponse() != 1) {
        return false;
    }

    modemGSM.sendAT(GF("+CMGDA="), static_cast<const uint8_t>(method)); 
    const bool ok = modemGSM.waitResponse(25000L) == 1;

    modemGSM.sendAT(GF("+CMGF=1"));
    modemGSM.waitResponse();

    return ok;
}

Overview

Arduino SIM card offers easy, global cellular connectivity for your Arduino IoT Cloud projects. You can monitor your devices anytime, anywhere in the world thanks to the GSM / 3G network, which currently is the most extended one. Arduino SIM is ideal for connected devices on the go, or in areas without any other reliable IoT network.

GSM and Arduino IoT Cloud

At Arduino we have made connecting to a GSM network as easy as getting an LED to blink. Arduino SIM will let you connect and send data directly into the Arduino IoT Cloud. The preferred board of choice for the Arduino SIM is the MKR GSM 1400, here some references about the interaction between both products:

  • Arduino’s own IoT Cloud: Arduino’s IoT Cloud is a simple and fast way to ensure secure communication for all of your connected Things. Check it out here
  • Google Spreadsheets via Arduino IoT Cloud: collect data from an industrial sensor, send it over the Arduino IoT Cloud via cellular network and from there to a GSheet using webhooks, this example will show you how to do it

Dataplan Associated to the Arduino SIM

The Arduino SIM sends data only to the Arduino IoT Cloud. In this way, we provide you with a secure communication channel from device to dashboard. Once data reaches the Arduino IoT Cloud, it is possible to bridge it to other platforms and services via webhooks or the Arduino IoT API.

Upon the activation of the SIM card, you get 10MB free data for up to 90 days (5MB per month for $1.50 USD thereafter). This plan’s main features are:

  • Cellular connectivity directly to the Arduino IoT Cloud
  • Compatible ONLY with the Arduino IoT Cloud
  • Data can be bridged from the Arduino IoT Cloud to other platfomrs and services using webhooks or the Arduino IoT API
  • Global roaming profile — one simple data plan operates in over 100 countries. the coverage by country
  • Monthly Arduino SIM plan can be hired worldwide except Brazil
  • The initial free data will expire after 90 days or when you’ve used the 10MB free data, whichever happens first
  • You can pause and re-start your SIM here. Please note your SIM can be paused for a maximum of 6 months and there is an ongoing pause-fee of $0.30 USD per month plus applicable taxes. The SIM cannot be paused during your free 90 day trial period
  • Same amount of data traffic for the same price wherever you are operating the device around the world
  • Scalable cellular service by Arm Pelion Connectivity — suitable for large numbers of devices in the future

Other Arduino GSM Options

Besides the SIM card, there is the option of getting the Cellular Kit, that includes an Arduino SIM card bundled together with the Arduino MKR GSM 1400. It is also possible to purchase the MKR GSM 1400 without a SIM card and use whatever operator of your choice.

Need Help?

Check the Arduino Forum for questions about the Arduino Language, or how to make your own Projects with Arduino. Need any help with your product please get in touch with the official Arduino User Support as explained in our Contact Us page.