Interfacing sim800l with arduino

Возможности подключения Sim800l к микроконтроллеру esp8266

Для смарт-домов и множества поделок требуется получать уведомление о местоположении платы, будь то дистанционная дверь или обычный трекер. Вот лишь краткий список поделок, которые можно создать, совмещая esp8266 sim800:

  1. Умный дом. Практически любую технику для умных домов можно настроить на определённые патерны при приближении объекта. Но зачем устанавливать датчики движения, если можно просто прикрепить в wi-fi плате sim800, вшить в какой-то предмет одежды мк с аккумулятором (благо, много энергии не потребуется) и автоматически включать свет или открывать дверь при приближении пользователя.
  2. Разнообразные отслеживающие устройства. Речь не идёт о противозаконных жучках и прочих устройствах, нарушающих ваше право на неприкосновенность. Однако мк может работать отдельно от ардуино, а если к нему прикрепить sim800, общие размеры устройства не превысят спичечный коробок. Просто оберните всё в металлический корпус и прикрепите к ключам, в качестве брелока. Отныне найти смартфон, ключи и даже вашу машину на парковке будет в разы проще.
  3. Робототехника и смежные направления. Здесь можно долго говорить о развитии современного виртуального интеллекта и нейросетях, но зачастую, чтобы создавать карту местности и ориентироваться в ней, железякам недостаточно датчиков. И если вы занимаетесь чем-то подобным, то gps модуль пригодится. Особенно он удобен в паре с дронами.

Когда вы определитесь с конечной целью проекта, следует разобраться в нюансах вопроса. Подключение устройств к вышеназванному микроконтроллеру такое же, как у стандартных плат ардуино, разница лишь в количестве доступных пинов. GPS трекер требует для работы от 3.7 до 4.2 вольт, в отличие от стандартных 5, выдаваемых микроконтроллером. Это следует учитывать при построении схемы платы и соответствующе подбирать вспомогательные источники питания. Либо устанавливать трансформаторы и резисторы, в зависимости от того, что вы ещё будете подсоединять к конечной системе.

Регистрируясь в сети, модулю потребуется приблизительно 2А, но это его пиковое потребление и в дальнейшем необходимая сила тока снизится до 1-1.2 А.

Как только вы подключите трекер к системе, необходимо будет его запустить и отправить первые команды, лучше всего подойдут АТ и АТ+. Только после этих действий модуль, наконец, начнёт посылать данные и отвечать на ваши запросы, поэтому не стоит беспокоится, если вы его подсоединили, диод мигает, но никаких реакций на скрипты нет. Вам просто необходимо активировать Sim800i при первом использовании, чтобы он успел зарегистрироваться в сети.

Также не стоит рассматривать Sim800i, как альтернативу ESP8266, чем грешат многие пользователи на форумах. Если вы натыкались на подобные заявления, можете смело утверждать, что автор в жизни не работал с ардуино. В первую очередь, сравнивать вспомогательную плату и микроконтроллер – бессмысленно. Не говоря уже о том, что одно из устройств создано для координации, отправки и принятия запросов по беспроводному интернету, а второе является GSM GPRS модулем. Соответственно, они являются хорошим дополнением друг к другу, но никак не альтернативой.

Популярные 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 В.

Отправка SMS через SIM800

Для теста работы пытаемся отправить SMS. Для начала отправляем команду: AT+CMGF=1. Если возник ERROR — скорее всего не прошла регистрация SIM-ки в сети.

AT команда Ответ Примечания
AT+CMGF=1 OK Переводим в текстовый режим отправки сообщений.
AT+CSCS=»GSM» OK Устаналиваем charset:«GSM» GSM 7 bit default alphabet (3GPP TS 23.038); «UCS2» 16-bit universal multiple-octet coded character set (ISO/IEC10646); UCS2 character strings are converted to hexadecimal numbers from 0000 to FFFF; e.g. «004100620063» equals three 16-bit characters with decimal values 65, 98 and 99 «IRA» International reference alphabet (ITU-T T.50) «HEX» Character strings consist only of hexadecimal bers from 00 to FF; «PCCP» PC character set Code «PCDN» PC Danish/Norwegian character set «8859-1» ISO 8859 Latin 1 character set
AT+CSCS? +CSCS: «GSM» Проверяем, что нужная кодовая таблица установилась корректно.
AT+CMGS=»+796019xxxxx» > Номер телефона вводить обязательно с +, иначе будет сообщение об ошибке: +CMS ERROR: invalid input value.После запуска команды появится запрос на ввод текста сообщения, которое должно быть завершено отправкой CTRL-z (0x1A или (char)26). К сожалению, Arduino Serial Monitor не позволяет отправить этот код, так что только программно.

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

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

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 ± — это интерфейс дифференциального динамика. Два контакта динамика могут быть связаны непосредственно с этими двумя контактами.

Как подключить к Arduino:

Питание:

Диапазон напряжение питания SIM800 (не китайского модуля на SIM800, а модема) составляет от 3,4 до 4,4 В. Рекомендуемое напряжение 4,0 В. Модем рассчитан на батарейное питание от одной Li-Ion банки, напряжение 5 вольт не допустимого, попытки запитать модем от 5 вольт приводит к тому, что модем выключается (уходит в защиту).

Источник питания должен обеспечивать достаточный ток, не менее 2А. Потребляемый ток модема зависит от режима его работы, максимальный пик потребления происходит при включении модуля и соединении с базовой станцией. На вход VBAT настоятельно рекомендуется подключать конденсатор большей емкости с низкий ESR

Потребление электричества не линейное, происходит короткими импульсами, в эти моменты важно не допустить проседания напряжения питания ниже 3,0 В

В документации на модем, для получения заветных 4,0 вольт, рекомендуют использовать линейный стабилизатор с низким падением напряжения MIC29302 либо более распространенный DC-DC преобразователь LM2596, схема включения выше. Подойдет и MP1584EN, главное напряжение в приделах от 3,4 до 4,4 В и достаточный запас мощности. Плохая идея брать питание от USB, либо выхода 5 вольт ардуино, в этом случаи добиться стабильной работы модема, будет практически не возможно.

Логические уровни и UART:

Как и питание, у модема не стандартный логический уровень 2,8 В, что добавляет веселья. При попытки подключить что либо к 5 или 3,3 вольтовой логике, модем выключается.

Включение модема и PWRKEY:

Например чтобы включить модем, необходимо на ногу PWRKEY модема подать логический 0, тоесть соединить с массой.

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

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

Временные интервалы включения показаны на графике выше, включать модуль ногой PWRKEY следует по прошествии 0,5 секунд после подачи питания на ноги VBAT, а добиться ответа на команды по UART, можно не раньше трех секунд после включения.

Выходы TX и RX также должны быть согласованны, подключение модема к 5 вольтовой ардуино без согласования может вывести его из строя, хотя обычно модем поругавшись на «овервольтаж» выключится.

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

Другой вариант, рекомендуемый для 5 вольтовых уровней, конвертировать при помощи транзисторов, схема включения аналогична дешевым китайским конвертерам в виде модулей для ардуино.

Подобным решением можно воспользоваться только при проектировании устройств на SIM800, т.е. не используя готовые китайские модули для ардуино, на которых не озаботились вывести выход VDD_EXT на колодку.

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

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

Обработка исключительных случаев

Все команды GSM/GPRS-модулей серии SIM800 имеют время исполнения

Разработчику ПО хоста важно знать время исполнения отдельно для каждой команды, чтобы исключить бесконечное ожидание реакции на команду (открытие соединения, к примеру). Значения максимального времени исполнения задокументированы, их можно найти в системе команд GSM/GPRS-модуля

В таблице 2 указаны значения максимального времени исполнения основных команд встроенного TCP/IP-стека. Как видно, некоторые команды исполняются десятки секунд. Это объясняется зависимостью этих команд от быстродействия сети и сервера.

Таблица 2. Максимальное время исполнения команд встроенного стека TCP/IP

Команда

Максимальное время исполнения, с

CIICR

85

CIPSTART

160

CIPSEND

645

CIPCLOSE

120

CIPSHUT

65

Рис. 6. Нормальная процедура закрытия соединения с сервером

Получается, некоторые команды могут исполняться несколько минут, прежде чем можно будет понять, что что-то пошло не так. В М2М такие задержки, конечно, недопустимы. Как же обрабатывать случаи, когда время исполнения команды затянулось, а реакции так и не последовало? Все зависит от того, на каком этапе установления соединения произошел сбой (ошибка или вышел таймаут) и в каком состоянии находится стек (рис. 6). Причин сбоя может быть несколько, и реакция может быть разная, но главное вернуть встроенный стек в исходное состояние IP INITIAL или IP STATUS. Рассмотрим на примере несколько случаев:

  1. Сервер вышел из строя или доступ в Интернет ограничен (потеря пакетов, высокий пинг и проч.). В этом случае все команды из таблицы 1 приведут к длительному времени исполнения. Чтобы повторить попытку соединения с этим или другим сервером, следует перед этим закрыть сокет командой AT+CIPCLOSE=1. При этом деактивировать контекст командой AT+CIPSHUT не обязательно.
  2. Потеря связи с GSM-сетью. Такое возможно в местах плохого покрытия сети, из-за ухудшения условий приема сигнала или внезапной выемки SIM-карты из прибора. Здесь следует проверить готовность SIM-карты (AT+CPIN? или чтение ячейки памяти командой AT+CMGR), уровень сигнала (AT+CSQ), наличие регистрации в сети (AT+CREG?) и доступ к услугам GPRS (AT+CGATT?). Если физический доступ к GSM-сети пропадет после или во время открытия сессии командой AT+CIPSTART, то придется закрыть соединение (AT+CIPCLOSE=1), деактивировать контекст и восстанавливать соединение с начала, сразу после того как будут успешно проверены SIM-карта, уровень сигнала, регистрация в сети и доступ к услугам GPRS.
  3. Истек срок жизни контекста. Когда открывается контекст, сеть выделяет определенные ресурсы на его поддержание. Операторы сотовой связи не допускают мертвые контексты, когда ресурс занят, а обмена данными в этом контексте нет. Если обмена данных нет, то через некоторое время оператор деактивирует контекст. У разных операторов это время разное примерно от трех до семи минут. Модуль при этом в порт UART выдаст уведомление: +PDP DEACT. Его нужно обработать и сбросить встроенный стек в исходное состояние командой CIPSHUT. Однако иногда в некоторых приложениях требуется поддерживать контекст в активном состоянии. Для этого можно периодически обмениваться с сервером пустыми данными, типа эха. Но это неудобно в реализации. Взамен можно воспользоваться функцией поддержания соединения командой AT+CIPTKA .
  4. Нагрузка на сеть GSM. Всем известно, что GPRS-услуги и голосовая связь делят общие ресурсы. GPRS всегда выделяется оператором по остаточному принципу, а у голосовых соединений наивысший приоритет. Контекст может быть деактивирован оператором принудительно. Внешне данный случай выглядит как предыдущий (п. 3), и обрабатывать его следует аналогично.

Следует предусмотреть случай, когда переинициализация соединения не дает желаемого эффекта. В этом случае рекомендуются штатное выключение/включение модуля и повторная попытка восстановить соединение с самого начала.

Отладочные средства

Компания SIMCom Wireless Solutions предоставляет универсальные отладочные средства, состоящие из двух основных компонентов:

  1. Отладочный комплект с многофункциональной материнской платой, общей для односимочных 2G-модулей.
  2. Мезонинная (дочерняя) плата, на которой распаян тот или иной модуль.

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

Для работы с двухсимочным 2G-модулем имеется специализированная мезонинная плата. Такое решение позволяет гибко подходить к вопросу знакомства с новыми сериями и не требует значительных денежных затрат.

Передача данных по TCP

Далее привожу AT команды для установки tcp соединения через GPRS.

AT команда Ответ Примечания
AT+CPIN? +CPIN: READYOK Проверка SIM PIN
AT+CSQ +CSQ: 23,0 OK Проверка уровня сигнала. Первая цифра — уровень сигнала :0 — 115 dBm or less 1 -111 dBm 2…30 -110… -54 dBm 31 -52 dBm or greater 99 — not known or not detectableВторая цифра — количество ошибок в канале. 0 — хорошо.
AT+CREG? +CREG: 0,1OK Первая цифра : 0 — Disable network registration unsolicited result code 1 — Enable network registration unsolicited result code +CREG: 2 — Enable network registration unsolicited result code with location informationВторая цифра : 0 — Not registered, MT is not currently searching a new operator to register to 1 — Registered, home network — правильный вариант2 — Not registered, but MT is currently searching a new operator to register to 3 — Registration denied 4 — Unknown 5 — Registered, roaming
AT+CGATT? +CGATT: 1OK Статус GPRS Service-а :0 — Detached 1 — Attached — правильный вариант
AT+CIPSHUT SHUT OK Deactivate GPRS PDP Context. В доке разработчик эта команда не указана, но без неё у меня не проходила команда установки APN.
AT+CSTT=«internet.beeline.ru»,»beeline»,»beeline» OK Устанавливаем APN. В примере — для оператора «Билайн».
AT+CSTT? +CSTT: «internet.beeline.ru»,»beeline»,»beeline» Проверяем, что APN сохранился.
AT+CIICR OK Переводим в режим беспроводного соединения (GPRS or CSD).
AT+CIFSR 100.89.139.161 Получаем выделенный оператором динамический IP адрес.
AT+CIPSTART=«TCP»,»116.228.221.51″,»8500″ OK Установка тестового TCP соединения с каким-то китайским тестовым сервером.

Суперконденсаторы в паре с GSM модулем SIM800/SIM7020

Хорошее качество обеспечивает питание от аккумуляторной батареи. Если мощности источника питания недостаточно, её можно компенсировать суперконденсатором. Он добавит энергии для SIM800 в моменты пикового потребления. Я заказывал суперконденсаторы на Aliexpress.

Добавление суперконденсатора даже к маломощному источнику электропитания улучшает стабильность работы SIM800. Сразу отмечу, я пока не использовал суперконденсаторы при разработке промышленного оборудования. Мне не доводилось встречать подробных результатов тестирования, как ведет себя пара суперконденсатор + SIM800.

Ниже схема использования суперконденсатора SPC1520 для демпфирования мощности Li-SOCl2 (литий-тионилхлорида)  батареи ER34615, которая обеспечивает емкость 19 А*ч, но пиковый ток всего 500 мА, а максимальный продолжительный ток порядка 230 мА. Но это пример для NB-IoT модуля, которые в пике потребляют порядка 500 мА.

Получение SMS. Инициализация.

Для начала нужно проверить, что тариф допускает отправку сообщений. Например, у Билайна на SIM-картах привязанных к основной голосовой но для использования в планшете, ноутбуке и пр. под Интернет нет опции отправки SMS. Можно потратить немало времени, пытаясь отправить SMS с такой SIM-ки.

Для работы с SIM800L я использую библиотеку TinyGSM.

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

  bool res = modemGSM.sendSMS("+7960XXXXXX", "GSM modem with IMEA " + modemGSM.getIMEI() + " has started.");
  Serial.println("SMS sending status: " + String(res ? "OK" : "fail"));

Он простой и хорошо работает.

К сожалению, в библиотеке не реализован функционал чтения SMS. При использовании сообщений SMS для управления устройствами нужно быть предельно внимательным, поскольку в зависимости от инициализации SIM800 модуль будет по-разному обрабатывать SMS сообщения.

AT команда AT+CNMI определяет будет ли принятое сообщение буферизовываться на SIM карте или будет лишь отображаться и передаваться напрямую в TE (например, микроконтроллеру). В последнем случае на SIM карте не будут сохранятся полученные SMS. Это довольно эксремальный вариант работы, поскольку в случае если по каким-то причинам микроконтроллер не вычитал SMS, то может быть проигнорирована важная команда управления.

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

Для инициализации я использую несколько команд:

void smsInit()
{
        modemGSM.sendAT(GF("+CPMS=SM,SM,SM")); //Storage to store SMS
        modemGSM.waitResponse();

        modemGSM.sendAT(GF("+CMGF=1")); //Text type messages instead of PDU
        modemGSM.waitResponse();

        modemGSM.sendAT(GF("+CNMI=1,0"));
        modemGSM.waitResponse();

        modemGSM.sendAT(GF("+CSCS=\"GSM\""));
        modemGSM.waitResponse();
}

AT+CPMS задает память для сохранения SMS сообщений:

  • SM – Память SIM-карты
  • ME – Память модема/телефона
  • MT – Это общая память SIM-карты и модема, т.е. MT = SM+ME
  • BM – Память для широковещательных сообщений сети
  • SR – Память для отчетов (о доставке и т.п.)

Память модема делится на три логических секции и поэтому при вызове +CPMS можно передавать три аргумента:

  • Первая — для просмотра, чтения и удаления сообщений
  • Вторая — для сохранения и отправки исходящих сообщений.
  • Третья — только для вновь полученных сообщений.

Я не нашел примеров работы с этими тремя видами памяти. Если кто-то найдет информацию — буду благодарен, если поделитесь. Для надежности буду использовать только SM.

Далее задаем формат SMS сообщений AT+CMGF=1 (тесктовые сообщения). Для формата PDU используется AT+CMGF=0. Формат PDU (Protocol Data Unit) используется по умолчанию. Он более информативный, но и более сложный для парсинга. Для управления IoT устройством достаточно простого текстового формата.

Например, команда AT+CNMI=1,2,0,0,0 говорит модулю SIM800 либо направлять толкьо что полученные SMS сообщения напрямую микроконтроллеру, или сохранять их в хранилище сообщений и затем уведомлять микроконтроллер о их размещении в хранилище. При использовании этой команды пришедшее SMS приходит в Serial порт микроконтроллера в виде:

15:52:58.028 -> +CMT: "+79601XXXXX","","19/05/02,15:52:53+12"
15:52:58.062 -> Test again

При этом пришедшие SMS сообщения не сохраняются в памяти SIM-карты.

Чтобы пришедшее SMS сообщение сохранилось в памяти SIM-ки нужно использовать команду AT+CNMI=1,0 или AT+CNMI=0,0. Мне не удалось найти обстоятельно описанные примеры использования команды.

Последняя команда AT+CSCS=»GSM» в функции инициализации устанавливает charset «GSM» для TE. Возможные значения:

  • «GSM» GSM 7 bit default alphabet (3GPP TS 23.038);
  • «UCS2» 16-bit universal multiple-octet coded character set (ISO/IEC10646); UCS2 character strings are converted to hexadecimal numbers from 0000 to FFFF; e.g. «004100620063» equals three 16-bit characters with decimal values 65, 98 and 99
  • «IRA» International reference alphabet (ITU-T T.50)
  • «HEX» Character strings consist only of hexadecimal numbers from 00 to FF;
  • «PCCP» PC character set Code
  • «PCDN» PC Danish/Norwegian character set «8859-1» ISO 8859 Latin 1 character set

Алгоритм запуска:

После получения команды на запуск, ардуино;

1 Обнуляет счётчик попыток запуска, в зависимости от температуры двигателя на датчике автоматически подбирается:

  • Время работы стартера от 1 до 6 сек

  • Таймер обратного отсчета от 5 до 30 минут

  • Число повторов прогрева свечей накала (для дизелистов) о 0 до 5

3 Проверяем что бы напряжение АКБ было больше 10 вольт, зажигание с ключа не включено (гарантия что двигатель не работает), температура выше -25, и число попыток запуска не достигло максимальных (5-ти попыток).

4 Если предыдущие условие выполненной то включаем реле первого положения замка зажигания , ожидаем 1 сек.

5 Включаем реле зажигания, ожидаем 4 сек., проверяем не было ли предыдущих неудачных попыток запуска

5.1 Eсли их было 2 и более то дополнительно выключаем/включаем зажигание на 2/8сек

5.2 Если предыдущих неудачных попыток запуска было 4 и более то дополнительно выключаем/включаем зажигание на 10/8сек

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

7 Выжидаем 6 сек. на набор аккумулятором напряжения заряда от генератора.

8 Заменяем напряжение АКБ, и если измеренное напряжение выше установленного порога в 13.5 то считаем старт успешным;

  • включаем реле подогрева сидений подключенное к , но только при успешном старте

  • отправляем смс если попыток зпуска было 2 и более

иначе возвращаемся к пункту 4, и так оставшихся 4 раза.

Результат

22:21:40.333 -> Read all SMSs.
22:21:40.367 -> Data: 1,"REC READ","+79601XXXXX","","19/05/05,16:52:16+12"
22:21:40.435 -> Message: Test again. 

22:21:40.469 -> Data: 2,"REC READ","+79601XXXXX","","19/05/05,16:53:01+12"
22:21:40.502 -> Message: And again

22:21:40.537 -> Data: 3,"REC READ","+79601XXXXX","","19/05/05,17:12:05+12"
22:21:40.604 -> Message: And one again

22:21:40.637 -> Data: 4,"REC READ","+79601XXXXX","","19/05/05,17:58:59+12"
22:21:40.706 -> Message: Ones again

22:21:40.706 -> Data: 5,"REC READ","+79601XXXXX","","19/05/05,21:27:58+12"
22:21:40.777 -> Message: New message again. 

Минимальный код EAT

Рассмотрим пример минимального пользовательского Си-кода:

{

            EatEvent_st event;

            while(1)

            {

                        eat_get_event(&event);

                        switch(event.event)

                        {

                                   ...

                        }

            }

}

Здесь app_main — это точка входа, с которой начинается пользовательская программа, а eat_get_event — интерфейс для получения событий от ядра ПО модуля. Пользовательский код выполняется в цикле while и должен вызывать API-функции, параллельно отслеживая события, которые посылает ядро.

Обычно программисту приходится работать с платой, на которой отдельно стоят GSM-модуль и микроконтроллер (MCU), управляющий GSM-модулем при помощи АТ-команд . А в случае с EAT у него возникнет вопрос, как слать GSM-модулю команды и как обрабатывать его ответы. На рис. 3 показан пример, поясняющий, как это можно реализовать в EAT по аналогии с классической архитектурой (раздельный MCU и GSM-модуль).

Рис. 3. Принцип работы классической архитектуры (слева) и EAT (справа)

Видно, что пользовательское ПО по отношению к ядру EAT следует рассматривать как ПО внешнего MCU. Все, что изменится при миграции ПО из внешнего MCU в GSM-модуль, — это синтаксис обращения к ядру EAT и интерпретация результатов. Для пояснения принципа обработки АТ-команды ядром приведен пример простейшего кода:

void app_main(void)

{

            …

            Eat_modem_write(“AT+CSQ\r”,strlen(“AT+CSQ\r”)); // Шлем АТ-команду

            while(TRUE)

            {

                        eat_get_event(&event);

                        switch (event.event)

                        {

                                   case EAT_EVENT_MDM_READY_RD: // При получении ответа от модуля получим индикатор события EAT_EVENT_MDM_READY_RD

                                   {

                                               Progress(); // обрабатываем ответ модуля

                                   }

                                   case …

                        }

            }

}

Разновидности китайских модулей:

Модуль на SIM800C с минимальной обвязкой. Отсутствует конвертер уровней UART интерфейса, фильтры, стабилизатор питания. Самый популярный, дешевый и малогабаритный.

Аналогичный китайский модуль на SIM800L

Этот модуль уже поинтереснее, есть конвертер уровней (на плате два транзистора 2n7002) два включенных последовательно диода, чтобы снизить напряжение питания 5 вольт до положенных модему 4.2 вольта, решение сомнительное но самое дешевое. Выведена нога для антенны встроенного bluetooth. Все еще отсутствуют фильтры в аналоговой части

Существует аналогичный модуль с тойже распиновкой, но за место конвертера уровней, стоит стабилизатор напряжения питания на DC-DC преобразователе MP1584EN. Странное решение.

Этот мало чем отличается от модулей выше, есть конвертер уровней, есть два диода чтобы снизить напряжение питания 5 вольт до положенных модему 4.2 вольта, к сожелению отсутствуют голосовые функции! возможно будет удобней в подключении, есть крепежные отверстия.

Вот, это уже чтото… Линейный стабилизатор напряжения питания MIC29302, конвертер логических уровней, на плате bluetooth антенна и SMA разъем для GSM антенны, Отсутствуют фильтры на аналоговой части.

Shield от Keystudio, вот это то как должно быть, есть возможность использовать внешнее питание и питание от ардуино, линейный стабилизатор питания MIC29302, фильтры в аналоговой части и джек для подключения гарнитуры, ионистор для часов, вывели даже USB. Один недостаток, цена…

5. Отправка показаний датчиков на сервер narodmon.ru

Каждые 5 минут открывает GPRS соединение с сервером и отправляет пакет вида:

— из шапки скетча

— температрура с датчика №1, DS18B20 подключенного на 4 й пин ардуино

— температрура с датчика №2, номер присваивается случайно исходя из серийного номера датчика

— температрура с датчика №3, номер присваивается случайно исходя из серийного номера датчика

— Напряжение АКБ, пересчитанное через делитель , 876 значение АЦП 66.91

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

— таймер автопрогрева в минутах.

— Окончание пакета данных.

Расход трафика до 20 Мб в месяц c ПОБАЙТНЫМ округлением сессии, которая к слову длится 20 сек, и открывается каждых 5 минут.

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

В предыдущей статье я подробно рассмотрел относительно дорогую (цвета морской волны ) плату модуля SIM800C и его подключение к ESP32/ESP8266. Схемотехника платы SIM800C мне не понравилась. На мой взгляд нет смысла переплачивать за этот модуль, лучше взять недорогой «красный» модуль SIM800C/L и немного его усовершествовать, добавив в схемотехнику:

  • Резистивный делитель на вход RX модуля для согласования уровня. Расчет делителя в предыдущей статье.
  • DC-DC step down converter. В схеме использовался недорогой модуль Mini-360 за 0,3 $.
  • Несколько емкостей для фильтрации пульсаций DC-DC step down converter-а.

По крайней мере этот модуль без проблем встает в монтажную плату, поскольку расстояние между разъемами «гребенки» кратно 2,54 мм. Нюансы работы с SIM800 подробно описаны в предыдущей статье.

Components You Will Need

Hardware Parts

  •  Arduino Uno 
  •  SIM800l module 
  •  Connecting cables 
  •  2G Sim card (Please note SIM800l is a 2g GSM module, this means that the 4G sim card will not work with this module. If you are looking for 4G GSM module then click on this link) 
  •  Resistors (1k and 2.2k)  
  •  3.7V battery  
  •  Breadboard 

 Note-    If you are using an Arduino as a microcontroller and not using a resistor divider Ckt then you will damage the Sim800l module. 

Softwares

  • Arduino IDE 
  • Software serial.h Library   

This is the part list you will need when working on a SIM800l module. Now, we’ve got all the things that will help us to play with sim800l module. Now it’s time to hook up this module with the microcontroller. Here we are using Arduino UNO as a microcontroller. To demonstrate it I have shared the interfacing diagram please take a lookFig. Interfacing Diagram

Полезные ссылки

  • Код для ESP32 для отправки AT комманд на SIM800.
  • Hardware design manual SIM800 с сайта производителя (Eng).
  • Схема модуля SIM800C (комментарии на китайском).
  • Документация по AT коммандам SIM800 здесь.
  • https://simcom.ee/documents/SIM800x/SIM800_Series_download_Tools_Customer_v1.19.rar — программатор SIM800 модулей на сайте производителя.
  • Отправка через HTTP GET.
  • Отправка данных на ThingSpeak через HTTP GET.
  • Подробное описание SIM800L (Rus).
  • Подключение модуля SIM800C (Eng).
  • Подключение модуля SIM800C (Eng).
  • Подключение модуля SIM800C (Rus).
  • Подключение к Arduino SIM800 (Eng).
  • AT commands Neoway M590 (Eng).
  • Hardware design manual Neoway M590 (Eng).
  • Распайка модуля Neoway M590
  • Видео по пайке модуля Neoway M590.
  • Видео по сборке, подключению и тестированию Neoway M590.
  • Видео по подключению Neoway M590 к ПК.
  • Обстоятельное описание Neoway M590 (Rus).
  • Подключение Neoway M590 к Интернет
  • https://www.instructables.com/id/GSMGPRS-Module-DIY-Kit/
  • Распайка модуля Neoway M590 mini
  • Видео по распайке модуля Neoway M590 mini
  • Распайка и подключение Neoway M590 mini.

Схема SIM800C (комментарии на китайском)Скачать

SIM800C board description V2.0 (на китайском)Скачать

Заключение

С появлением 800-й серии модулей от SIMCom Wireless Solutions заказчик получает возможность не только поддержать текущие проекты, но и реализовать в своих устройствах новые функции, такие как Bluetooth, повышенная скорость передачи данных, работа с двумя SIM-картами, хранение информации на SD-карте. Разработчики, имея опыт работы с SIM900R, могут освоить и применить описанные выше нововведения, не начиная разработку с чистого листа.

_______________________________________________________________

_______________________________________________________________

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector