SIM800L V2.0 GSM / GPRS - це чотирьохдіапазонний GSM / GPRS модуль, сумісний з Arduino. Модуль використовується для реалізації функцій GSM (дзвінки і SMS) і GPRS. Перевагою цього модуля є інтерфейс TTL, мають вольтаж рівний 5В, що дозволяє безпосередньо підключити його до Arduino або будь-який інший системі з напругою живлення 5В. Більшість GSM / GPRS модулів на ринку вимагають підключень регулятора або перетворення рівня, в той час як в SIM800L V.2 GSM / GPRS не вимагає додаткових ланцюгів перетворення рівнів інтерфейсів.

Наведемо приклад проекту, що використовує SIM800L V.2 GSM / GPRS. Сенс проекту в управлінні перемикачів за допомогою SMS-контролера. Ви з легкістю зможете включати і вимикати більшість предметів побутової технікив будинку, як наприклад ламу, вентилятор і так далі.

Характеристики модуля SIM800L V.2 GSM / GPRS

Нижче наведені всі технічні характеристикимодуля SIM800L V.2 GSM / GPRS:
  • Серійний інтерфейс TTL сумісний з 3,3 і 5В микроконтроллерами, сумісними з Arduino.
  • Модуль SIM800L має серійний інтерфейс TTL.
  • Штекер підключення антени.
  • Підтримка мережі: чотири діапазони 850/900/1800/1900 Мгц, здатні здійснювати дзвінки, SMS та передачу даних зі значно зменшеною витратою заряду.
  • Інтерфейс VDD TTL UART, так що ви зможете безпосередньо підключити MCU такий, як 51MCU, ARM або MSP430. Штекер VDD використовується для відповідності вольтажу TTL.
  • Модель: SIMCOM SIM800L
  • Робочий вольтаж: від 3,7 до 5В;
  • розміри: 40мм х 28мм х 3 мм
  • GPRS мультислот-клас 12/10
  • GPRS пакетних сервіс клас B
  • Відповідає GSM фазі 2/2 +
  • Клас 4 (2 Ват @ 850/900 МГц)
  • Клас 1 (1Ват @ 1800 / 1900Мгц)

необхідні матеріали

ESP8266 став справжньою новиною минулого року для всіх, хто займається створенням девайсів на Ардуіно. Дешевий мікроконтролер, з можливостями, що перевищують його дорогий аналог, і при цьому сумісний з АТ +.

Ардуіно не залишилися за бортом, і тепер цей модуль офіційно доданий до списків підтримуваних платою, а відповідно, все більше користувачів долучиться до китайського мк для wi-fi з'єднання. Але буває, що в системі необхідно відстежувати і місце розташування модуля, для чого однією плати esp8266 буде недостатньо. Тут і стане в нагоді esp8266 sim800l.

Для смарт-будинків і безлічі виробів потрібно отримувати повідомлення про місцезнаходження плати, будь то дистанційна двері або звичайний трекер. Ось лише короткий список виробів, які можна створити, поєднуючи 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 модулем. Відповідно, вони є хорошим доповненням один до одного, але ніяк не альтернативою.

Схема підключення sim800l до esp8266

Терморегулятори більш ніж стандартна. Пін з харчуванням підключаєте до джерела, здатному видавати напругу в межах 3.7-4.2 Вольт, або ж до трансформатора. TX йде до RX піну і навпаки. Як тільки ви виконаєте спайку і вирішите протестувати роботу модуля, підключивши джерело живлення, про правильність підключення просигналізує діоди. Далі залишається активувати модуль за описаним вище методом, і ви зможете використовувати АТ-команди для управління. Якщо захочете довантажити допоміжну бібліотеку або якісь вагомі медіа, варто ознайомитися з підключенням карти пам'яті до системи Ардуіно.

Для початку давайте протестуємо швидкість роботи порту і інформацію про модуль, для цього скористаємося «AT + IPR?» і «AT + CPAS» відповідно. Якщо все в порядку і інформація виводиться без помилок, то можна продовжити перевірку і протестувати рівень сигналу, а також операторів, яких може побачити модуль.

Найголовніше - Sim800i дозволяє дзвонити на вказані номери і приймати дзвінки, притому за допомогою базових бібліотек.

Це також відкриває простір для застосування систем з його участю. Якщо ви захочете написати певний скрипт, який запускає щось по вхідному дзвінку, то враховуйте, що модуль реагує на нього фразою «RING» в командному рядку.

Подібний функціонал дозволяє створювати сотні автономних систем управління, аж до того, що замість відбитків пальців або ключ-карт, ви можете відкривати двері по дзвінку на певний номер. Але, природно, для хорошого рівня захисту, варто прописати вайт-лист номерів.

Приклад реалізації підключення gsm модуля sim800l до мк esp8266

Після підключення і спайки по вищеописаним пінам, модуль повинен почати мигати. Як тільки відбудеться аутентифікація в мережі, діоди стануть рідше моргати.

Якщо зменшення частоти світлових сигналів не відбулося, то варто, за допомогою АТ-команд, упевнитися, сприйняв взагалі sim800I мережу вашого мобільного оператора і чи немає ніякої помилки. Також перевірте правильність терморегулятори і як встановлена ​​СІМ-карта з антеною, помилка може бути і в них.

Ну і, звичайно, піднесіть систему ближче до вікна, якщо перебуваєте в багатоповерховій будівлі, цілком можливо, вона просто не може зловити сигнал.

Всім привіт! Давненько ми з вами не говорили про GSM. Тож почнемо. Вельмишановні Китайці забацали новий бюджетний модуль під назвою SIM800L. Так, так, цей модуль випускає іхняяя ж фірма SIMCOM. Я по початку боявся його тестувати, мовляв на просторах Росії його немає і немає гарантії що даний модуль знюхалися з нашими мережами. Займатися перепрошивкой від іншого модуля я не хотів, але мені просто чудово пощастило вбити двох тарганів одним тапком. Я зовсім забув про чудовому магазині ЧіпРезістор який з радістю мені надав даний модуль на розтерзання.
Ось як виглядає це диво.

Не густо, на платі встановлений сам модуль, тримач для мікросім, тантал, пару кераміки, резистор і світлодіод. Як не дивно Китайці позиціонують даний модуль як Шилд для Ардуіно. Ардуіно ніби як харчується від 5 вольт і найчастіше від USB, а якщо мене не зраджує пам'ять пам'ять, то СІМкомовскіе модулі їдять від 3,6 до 4,2 і при цьому в піку хочуть 2А. Ну да ладно, підключаю до отладочной платі і ... Китайці !!! Все що завгодно аби здешевити. Чи не працює даний модуль від 5 вольт. Моя пам'ять мене не підвела. Коротше можна довго міркувати ніж його живити, але я вам покажу один прекрасний девайс, який легко вирішить цю проблему. Прикупити його можна там же де і SIM800L, а саме в ЧіпРезісторе. Модуль представляє собою понижуючий імпульснік до 3А.

Довше беремо цей модуль і припаюємо вхідні і вихідні дроти. Позика підключаємо до тостера і налаштовуємо на 4 вольта.

Ось схемку, вид зверху.

Мій хаос виглядає ось так.

Перевіряємо на короткий, вставляємо сімку, підключаємо USB-RS232 і харчування. Якщо нічого не задимилося і закліпав світлодіод на модулі, значить все в порядку. Далі запускаємо како-небудь термінал, у мене PuTTYn і кидаємо першу команду AT. У відповідь якщо отримали OKзначить все працює.

Бінго! далі кидаємо AT + COPS?і якщо у відповідь отримали свого оператора, то для закріплення зателефонуйте собі набравши команду ATD89161234567;. Крапка з комою обов'язково! Якщо модуль додзвонився, то значить він працює з нашими мережами. Я тестіл на пчелайне. Якщо я зараз скажу що на цьому все, то мене закидають яйцями і помідорами, а цього не хочу))) Значить давайте зберемо з цього що-небудь корисне. Наприклад сигналізацію. Прикрутимо модуль до МК і будемо стежити за стан пару ніжок. Як тільки на ніжці з'явиться зміни, то тут же пошлемо SMS з оповіщенням про цю зміну. У ролі МК виступатиме ATmegs32a. На ноги PB2 і PB3 прикрутимо кнопки. Кнопки мають загальний GND, а для підтяжки використовуємо вбудовані резистори. Для роботи з модулем напишемо пару функцій, а саме ініціалізації і передачі SMS. Щож, поїхали.

Для початку сконфігурім проект за допомогою генератора коду axlib. Для цього виберемо МК ATmega32, зовнішній кварц на 7372800 (Такий кварц потрібен для зменшення помилок при передачі по UART). Налаштуємо UART на швидкість 9600. Далі згенерувати проект відкриємо його в AtmelStudio 6. Насамперед створимо файл sim800l.hв корені проекту і підключимо його. #include #include "main_init.h" #include "axlib / usart.h" #include "sim800l.h"Тепер переходимо в наш створений файл і впишемо туди потрібні нам дефайни. // Перша команда, овет OK#define SIM800L_AT_AT "AT" // Команда на введення номера абонента для відправки йому SMS повідомлення#define SIM800L_AT_SMS "AT + CMGS = \" " // Налаштування формату Покета#define SIM800L_AT_SMS_SET "AT + CMGF = 1"Такс, дефайни для спрощення записали, тепер пишемо складну функцію ініціалізації. void sim800l_init (void) (usart_str_rn (SIM800L_AT_AT);)Вся складність даної функції полягає в тому, що ми просто передаємо команду АТ модулю. З цієї команди повинен починати працювати модуль. Наступна функція трохи складніше. BYTE sim800l_send_sms (BYTE * num, BYTE * text, BYTE lenght) ( // Масив для отримання відповідей від модуля BYTE str = (0); _delay_ms (1000); // Налаштування режиму передачі usart_str_rn (SIM800L_AT_SMS_SET); // Подача номера телефону абонента usart_str_out (SIM800L_AT_SMS, 9); usart_str_out (num, 12); usart_str_rn ( "\" "); // Очікування початку введення тексту _delay_ms (3000); // Відправка тексту usart_str_out (text, lenght); str = 0x1A; str = 0; usart_str_rn (str); // Чекаємо OK usart_str_in (str, 18); if (! ((str == 0x4F) & (str == 0x4B))) return 0x34; return 0x30; )Ось тут я зрозумів всю сутність дешевизни даного модуля. Ця фіговіна геть відмовлялася стабільно повертати відповіді. Як я тільки не перекручували, і ставив таймаут по приходу даних гігантські, і затримки ліпив. Коротше плюнув на ті відповіді що плавали в часі і настромив затримок. Для роботи це не сильно заважає. Платимо за дешевизну. Поїхали по функції. Насамперед тикаємо настройку передачі пакета. Це потрібно щоб модуль відправляв дані отримавши номер телефону, а потім чекав прийняття тексту. Потім передаємо номер телефону абонента якому відправляємо SMS. Беремо його з аргументу цієї функції. Є одне але! Номер телефону повинен мати формат вигляду: +79161234567. +7 обов'язково, цей модуль на відміну від 900-тих не розуміє 8. Після передачі номера абонента просто тупим 3 секунди. Весь цей час модуль не поспішаючи пережовує номер і по хрін знає яким алгоритмом, як раз на цих затримках я підірвався, видає нам запрошення на введення тексту значком > 3 секунд залізно вистачає пережувати і виплюнути запрошення. Після 3 секунд кидаємо текст повідомлення. Його так само беремо з аргументу цієї функції і від туди ж довжину тексту для функцій UART. Адже ми не знаємо скільки букв ви збираєтеся послати. Якщо уважно придивитися, то можна помітити байт 0x1Aв кінці тексту повідомлення. це команда Ctrl + Zпотрібна для закінчення передачі тексту. Коли модуль отримає цю команду, то все кине і передасть SMS. Все, з даним файлом закінчили, переходимо в основний файл програми. #define BUTTON_1 "Nazhata knopka 1" #define BUTTON_2 "Nazhata knopka 2" // Ініціалізація GSM модуля sim800l_init (); // Налаштування портів введення виведення на читання DDRB = 0x00; // Включаємо підтяжку внутрішнім резистором PORTB | = (1 // Якщо натиснули кнопку 1 if (! (PINB & (1 // Чекаємо поки не відпустили кнопку while (! (PINB & (1 // Якщо натиснули кнопку 2 if (! (PINB & (1 // чекаємо поки не відпустили кнопку while (! (PINB & (1Що ми тут бачимо. Два дефайна із заздалегідь підготовленим текстом. Потім ми инициализируем модуль. Потім налаштовуємо ніжки 2 і 3 порту В на вхід і підтягуємо внутрішній резистор до плюса харчування. Потім в нескінченному циклі перевіряємо на натискання кнопок. Як тільки будь-яка з кнопок буде натиснута, відразу ввалюється в нескінченний цикл і чекаємо поки не відпустять кнопку. Після того як кнопку відпустили викликаємо функцію відправки SMS із заздалегідь продефаненим текстом. Ось і все.))) Проект викладати не буду так як його можна згенерувати axlib генератором і скопіпастіть текст звідси. Ой, так, ось що я отримав на телефон.))


Фива 09.10.16 23:29

Якщо вірити mt-system, то 800 серія це приймач 900 серії, яку нібито згортають до кінця 2016 року. Тому досить дивно читати про таких прикрих одвірках як затиснуті відповіді.
може чого в датішах нового завелося? Або ти чисто по аналогії з 900 кидал команди, особливо не розпалюючи?

Олексій 09.10.16 23:39

Мене ці паузи насторожили ще коли я з нею спілкувався через термінал. Думав порт гальмує, але на ноут та ж пісня.

Юрій 05.03.17 20:36

Підкажіть як змусити модуль, за запитом USSD відправляти баланс, зчитувати і встановлювати на ніжках Avrкі уровнь. Загалом хочеться зробити "Розумний будинок" Спасибі

Олексій 06.03.17 12:36
Олег 28.03.17 2:43


передається \ n, для роботи з сіммодулем це потрібно або на всякий випадок?
Що робить символ / "тут

#define SIM800L_AT_SMS "AT + CMGS = \" "

usart_str_out (SIM800L_AT_SMS, 9);
usart_str_out (num, 12);
usart_str_rn ( "\" ");
тут теж / "/ r / n
чому не можна разом usart_str_rn (AT + CMGS = "+ 7xxxxxxxxxx"), як в терміналі?
І

usart_str_out (text, lenght);
str = 0x1A; зрозуміло
str = 0; навіщо нуль?
usart_str_rn (str); і ще / r / n?

Олексій 28.03.17 12:33

-> Що робить символ / "тут
Символ \ ставиться перед службовими символами для того щоб ці символи перетворити в прості. Справа в тому що лапки це службовий символ. Його використовують щоб передати рядок в масив. А для того щоб компілятор прочитав саме як символ, то перед службовими символами ставлять зворотну косу риску.
приклад:


BYTE data = "Якийсь текст \" Текст в лапках \ "";

Тепер внутрішні лапки запишуться в масив як символи.

-> чому не можна разом usart_str_rn (AT + CMGS = "+ 7xxxxxxxxxx"), як в терміналі?

Тому що функція приймає в якості аргументу покажчик на перший елемент масиву з номером абонента. Якщо написати відразу, то SMS будуть надсилатися вічно тільки цього абоненту. І змінити можна буде лише переписавши код.

-> Роз'ясніть будь ласка. Для чого в функції usart_str_rn
передається \ n

Тому що документація на модуль SIMCOM вимагає в кінці команди вводити код кінця рядка і перекладу каретки.

Олег 28.03.17 14:05

Спасибі, Олексій це усвідомив, маю проблему з передачею 1А, в таблиці службових символів немає комбінації з \ ....

Олексій 28.03.17 15:04

А як повинен виглядати символ Ctrl + z? Або наприклад пробіл, табуляція. Тому передається саме кодом. Наприклад \ r \ n можна записати як два байти 0x0D, 0x0A. Це одне і теж.

Олег 28.03.17 16:59

Це я зрозумів, коммада вирушила ось так


str = 0x4D;
str = 0x4B;
str = 0x4D; // три букви текст для тесту.
str = 0x1A;
str = 0;
usart_str_rn (str);
, Текст напевно можу рядком, але 1А виходить тільки через масив, як-то простіше не можна?

Олексій 28.03.17 17:14

void usart_char_out (BYTE data)

Просто посилає один байт в порт.

Євген 07.05.17 17:47

BYTE sim800l_send_sms (BYTE * num, BYTE * text, BYTE lenght)
{
// Масив для отримання відповідей від модуля
BYTE str = (0);
далі исходник
// Чекаємо OK
usart_str_in (str, 18);
if (! ((str == 0x4F) & (str == 0x4B))) return 0x34;
Звідки взялися 14 і 15 індекс в масиві, якщо він оголошений явно str?

Олексій 07.05.17 20:05

А ось такий я валянок. Масив не на 10 осередків, а на 20)))

Євген 08.05.17 20:13

Буває)) Так і зрозумів що помилка. Почав свій код писати, взяв за основу і просто відразу побачив

Олексій 08.05.17 21:34

Раджу краще використовувати SIM800C замість L. Ті ж гроші але у C є синєзуб в модулі.

Євген 12.05.17 6:43

Так, у мене як раз 800C модулі. Олексій, після виконання читання, в str порожньо, в чому може бути проблема? Команди на модуль йдуть і модуль відповідає (перевірено лог.аналізатором), але в str порожньо
// Чекаємо OK
usart_str_in (str, 18);
if (! ((str ==

Євген 12.05.17 18:57

Олексій. Розібрався в чому проблема, в функції usart_str_in було прийняття 18 байт, а модуль відповідав тільки 9тью байтами, відповідно функція сприймала дану відповідь як таймаут. (BYTE usart_str_in (BYTE * str, BYTE count)
{
BYTE out = 0;
BYTE data = 0;
BYTE timeout = 0;

While (count> data) // тут поки 18> 9 - таймаут
{
data = GetData ();

// Якщо протягом 250 мс дані не прийшли
// то вийти з функції і повернути 0
if (timeout> = 250)
{
ClearBuffer ();
return out;
}

Timeout ++;
_delay_ms (1);
}

Out = OutBufferStr (str, count);
return out;
}
А як бути якщо не відомо якої довжини прийде відповідь?

Олексій 12.05.17 20:03

Опитувати буфер на прийом більше одного байта, а потім почекавши вичитати весь пакет з буфера.

Євген 12.05.17 20:21

Олексій, не зовсім зрозумів ідею, поясни плз

Олексій 12.05.17 20:58


main ()
{

// Кількість прийнятих байт в буфер
BYTE len_pocket = 0;

// Масив для даних
BYTE data = (0);

while (1)
{
// Дивимося що в буфері
len_pocket = usart_data ();

// Перевіряємо настав що в буфер
if (len_pocket> 0)
{
// Якщо прийшло, чекаємо
// розрахунок паузи (1000 / (бітрейт / 10)) * макс байт.
// Приклад бітрейт 19200, макс байт 40. (1000/1920) * 40 = 20.8мс

// Пауза для гарантованого отримання всіх байт
_delay_ms (22);

// Отримуємо кількість прийнятих байт
len_pocket = usart_data ();

// Записуємо дані в масив
usart_str_in (data, len_pocket);

// Тепер в масиві data лежать всі прийняті байти.
}
}
}

Євген 12.05.17 21:25

Олексій, спасибі, ідею зрозумів наочно, буду пробувати. Ще хотів запитати про два слейв і майстер, з приводу втрати зв'язку при сдергіваніе лінії, не пробував макетировать?

Олексій 12.05.17 22:18

Поки немає. Дуже багато роботи. Я взагалі з-за неї призабули на сайт.

Олег 08.07.17 23:28

Олексій, розкажіть як узгодити рівні якщо мк харчується 5в а модуль 3,3в? На али знайшов модуль харчування KIS-3R33S, він має управління виходом, чи є сенс затівати перезавантаження SIM модуля зняттям харчування або вистачить резета і виведення включення модуля?

Олексій 09.07.17 12:28

По-перше для узгодження з модулем потрібно не 3,3в, а 3в. Для цього достатньо поставити резистивний дільник, де RXD МК буде на вході резистора верхнього плеча, а резистор нижнього плеча підключений до загального сигналу.
По-друге. Затівати перезавантаження перекручуванням харчування можна якщо модуль завис. Якщо модуль працює, то це категорично не можна, та як це може привести до вбивання прошивки в модулі. Рестарт потрібно робити перекручуванням ніжки PWR або АТ командою.

Олег 09.07.17 12:44

Спасибі, за першим все зрозуміло.
За другим, такий жорсткий резет і планується якщо модуль не відповідає і смикання rst і pwr не дає результату, до речі є pcb модулів без pwr або без rst, питання а як прошивка при виключенні живлення всього пристрою, є рекомендації?

Олексій 09.07.17 14:48

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

Олег 09.07.17 15:05

А коли модуль повис що спочатку смикати pwr або rst, і якщо ПВР і резет не допомагає як правильно по харчуванню пересмикнути?

Олексій 09.07.17 19:29

Якщо завис наглухо, то просто зняти харчування секунди на три. А потім подати і проинициализировать за правилами.

Ігор 12.09.19 19:21

Підкажіть як передати номер бз лапок модем MC52i
// Подача номера телефону абонента
usart_str_out (SIM800L_AT_SMS, 9);
usart_str_out (num, 12);
usart_str_rn ( "" ");

Модуль GSM GPRS SIM800L(SIM800L) MicroSIM з антеною
SIM800L GPRS GSM Module MicroSIM Card Core BOard Quad-band TTL Serial Port

Мініатюрний модуль GSM / GPRS стільникового зв'язку на основі компонента SIM800L, розробленого компанією SIMCom Wireless Solutions. Російськомовна версія сайту SIMCom. Стандартний інтерфейс управління компонента SIM800L надає доступ до сервісів мереж GSM / GPRS 850/900/1800 / 1900МГц для відправки дзвінків, СМС повідомлень і обміну цифровими даними GPRS. Поставляється з вбудованою антеною, також можна підключити додаткові антенидля поліпшення якості сигналу.
Управляти модулем можна за допомогою персонального комп'ютерачерез перетворювач інтерфейсу USB-UART або безпосередньо через UART модулем мікроконтролера самостійної розробки або Arduino, Raspberry Pi і аналогічними.
Компонент SIM800L має реалізований стек протоколу TCP / IP. Містить мікросхему MT6260SA компанії MediaTek і мікросхему приймача RFMD RF7176.
Завдяки функції відправки СМС повідомлень найбільш часто модуль GSM GPRS SIM800 MicroSIM з антеною використовується в диспетчеризації, бездротової сигналізації і в охоронних системах. При цьому в результаті різних подій відбувається відправлення повідомлень виду: "Аварійна зупинка ліфта 3 будинки №17", "Гараж відкритий", "Двері підвалу відкрита", "Відключено 220 з перевантаження", "Протікання системи опалення", "Опалювальний котел вимкнений" , "Температура в теплиці нижче норми".
До модулю GSM GPRS SIM800 MicroSIM підключаються динамік і мікрофон. З модуля можна здійснювати дзвінки і приймати.

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

живлення
Напруга, В
номінальне 4
діапазон 3,4-4,4
струм
в режимі очікування 0,7 мА
граничний 500 мА
Максимальна напруга високого рівняінтерфейсу UART 2,8 В
Швидкість UART 1200-115200 бод
Чотири діапазони EGSM900, DCS1800, GSM850, PCS1900
Потужність передачі в різних діапазонах
DCS1800, PCS1900 1 Вт
GSM850, EGSM900 2 Вт
Автоматично перевіряє наявність в чотирьох частотних діапазонах
Підтримує мережа 2G
Опір підключається динаміка 8 Ом
мікрофон електретний
Управляється командами AT через UART (3GPP TS 27.007, 27.005 SIMCOM enhanced AT Commands)
Автоматичне визначення швидкості передачі керуючих АТ команд
Відправлення та отримання GPRS даних (TCP / IP, HTTP, і т.д.)
Макс швидкість передачі GPRS даних 85,6 Кбод
Кодування CS-1, CS-2, CS-3 і CS-4
Підтримує GSM 07.10 протокол
Підтримка пакетної передачі широкомовного каналу управління (PBCCH) CSD на швидкостях 2.4, 4.8, 9.6 і 14.4 Кбод
Підтримка неструктурованих даних додаткових послуг USSD
Підтримує PAP (протокол ідентифікації пароля)
Підтримка годин реального часу RTC
Підтримує сімкарт харчуванням 3 і 1,8 В
Температура, ℃
повітря при роботі -30 ... 75
зберігання -45 ... 90
Розміри 25 х 25 мм

індикація

При включенні модуля GSM GPRS на платі швидко блимає світлодіод. При установці з'єднання з мобільним оператором частота миготіння знижується. Якщо зв'язок з мобільним оператором втрачена, то світлодіод знову блимає швидко.


Швидке мигання світлодіода говорить про пошук в ефірі сигналу станції мобільного зв'язку.

підключення

Назви деяких контактів і функції сигналів, ліній.

Для поліпшення якості сигналу приєднується антена. Перевищення вхідної напруги інтерфейсу UART призведе до псування модуля SIM800. Не існує перетворювача інтерфейсу USB-UART c вихідною напругою 2,8 В. Існуючі перетворювачі мають більш високу напругу на виході UART. Тому між виходом перетворювача і входом модуля GSM GPRS SIM800 встановлюється резисторний дільник напруги.

Залежно від вихідної напруги U_usbttl наявного у вас перетворювача інтерфейсу розраховуються номінали резисторів в дільнику за формулою, наведеною на малюнку. При розрахунках слід прагнути до величинам опорів порядку декількох кіло.

Перші кроки

Для перевірки працездатності пристрою досить мати ПК і симкарту з невеликим грошовим рахунком. Перевірку працездатності можна проводити за двома методами підключення модуля до ПК: через перетворювач інтерфейсів USB-UART або використовуючи Arduino UNO. Розглянемо метод перевірки без Arduino. Встановіть симкарту в модуль GSM GPRS, дотримуючись розташування контактів. З'єднайте ПК через перетворювач інтерфейсів USB-UART з пристроєм за схемою наведеної вище. Підключіть живлення номінальною напругою. Дочекайтеся орієнтуючись на мигання світлодіода підключення до мобільному оператору. Увімкніть на ПК термінальну програму. Дані в неї слід вводити великими буквами. Використовуючи термінальну програму відправте в модуль GSM GPRS SIM800 через порт підключення наступні команди.

АТ
Відповідь модуля ОК

AT + CSQ
Відповідь модуля + CSQ: 18,0 OK

Ця команда дає інформацію про рівень сигналу. Перше число - рівень сигналу, величина 18 означає -78 dbм. Друге число - кількість помилково прийнятих біт, величина "0" говорить про частку помилок менше 0,2%, що свідчить про хорошу зв'язку.


Спробуйте відправити в модуль команду ATI.

Якщо у вас немає перетворювача USB-UART, то можна використовувати Arduino UNO. З'єднайте контакт RX модуля SIM800L з контактом 11 цифрового сигналу Arduino UNO застосовуючи резисторний дільник напруги. Величини опорів резисторів потрібно обчислити заново враховуючи напруга живлення Arduino UNO. З'єднайте контакт TX модуля SIM800L з контактом 10 цифрового сигналу Arduino UNO. Завантажте в Ардуіно програму, текст якої наведено далі. Тут використовується бібліотека SoftwareSerial дозволяє реалізувати послідовний інтерфейсна будь-яких цифрових висновках Ардуіно за допомогою програмних засобів, Дублюючих функціональність UART.

#include
SoftwareSerial mySerial (10, 11); // RX, TX
void setup ()
{
// Open serial communications and wait for port to open:
Serial.begin (9600);
mySerial.begin (9600);
}
void loop () // run over and over
{
if (mySerial.available ())
Serial.write (mySerial.read ());
if (Serial.available ())
{
while (Serial.available ())
{
mySerial.write (Serial.read ());
}
mySerial.println ();
}
}

Текст програми та багато корисної інформації. Тепер ви можете відправляти AT команди через послідовний монітор Arduino.

На російськомовних і зарубіжних сайтах розміщені тексти програм Arduino за допомогою яких можна відправляти СМС, контролювати стан контактів датчика і відправляти на сайт час зміни стану контрольованих контактів, а на сайті зберігати прийняті дані у вигляді журналу.

GSM і GPRS модуль в проектах Ардуіно дозволяє підключатися до віддалених автономним пристроїв через звичайну стільниковий зв'язок. Ми можемо відправляти команди на пристрої і приймати інформацію від нього за допомогою SMS-команд або через інтернет-підключення, відкрите по GPRS. У цій статті ми розглянемо найбільш популярні модулі для Arduino, розберемося з підключенням і розглянемо приклади програмування.

Модулі GSM GPRS

GSM модуль використовується для розширення можливостей звичайних плат Ардуіно - відправка смс, здійснення дзвінків, обмін даними по GPRS. Існують різні види модулів, найбільш часто використовувані - SIM900, SIM800L, A6, A7.

Опис модуля SIM900

Модуль SIM900 використовується в різних автоматизованих системах. За допомогою інтерфейсу UART здійснюється обмін даними з іншими пристроями. Модуль забезпечує можливість здійснення дзвінків, обмін текстовими повідомленнями. Робота модуля релізі на компоненті SIM900, створеним фірмою SIMCom Wireless Solution.

Технічні характеристики:

  • Діапазон напруг 4,8-5,2В;
  • В звичайному режиміструм досягає 450 мА, максимальний струм в імпульсному режимі 2 А;
  • Підтримка 2G;
  • Потужність передачі: 1 Вт 1800 і 1900 МГц, 2 Вт 850 і 900 МГц;
  • Є вбудовані протоколи TCP і UDP;
  • GPRS multi-slot class 10/8;
  • Робоча температура від -30С до 75С.

За допомогою пристрою можна відстежувати маршрут транспорту спільно з ГЛОНАСС або GPS пристроєм. Можливість відправки смс-повідомлень використовується в бездротової сигналізації і різних охоронних системах.

Опис модуля SIM800L

Модуль виконаний на основі компонента SIM800L і використовується для відправки смс, реалізації дзвінків і обміну даними по GPRS. У модуль встановлюється мікро сім карта. Пристрій володіє вбудованою антеною і роз'ємом, до якого можна підключати зовнішню антену. Харчування до модуля надходить від зовнішнього джерелаабо через DC-DC перетворювач. Управління здійснюється за допомогою комп'ютера через UART, Ардуіно, Raspberry Pi або аналогічні пристрої.

Технічні характеристики:

  • Діапазон напруг 3,7 - 4,2В;
  • Підтримка 4х діапазонної мережі 900/1800/1900 Мгц;
  • GPRS class 12 (85.6 кБ / с);
  • Максимальний струм 500 мА;
  • Підтримка 2G;
  • Автоматичний пошук в чотирьох частотних діапазонах;
  • Робоча температура від -30С до 75С.

Опис модуля A6

Модуль A6 розроблений фірмою AI-THINKER в 2016 році. Пристрій використовується для обміну смс-повідомленнями і обміну даними по GPRS. Плата відрізняється низьким споживанням енергії і малими розмірами. Пристрій повністю сумісний з російськими мобільними операторами.

Технічні характеристики:

  • Діапазон напруг 4,5 - 5,5В;
  • Харчування 5В;
  • Діапазон робочих температур від -30С до 80С;
  • Максимальне споживання струму 900мА;
  • GPRS Class 10;
  • Підтримка протоколів PPP, TCP, UDP, MUX.

Модуль підтримує карти формату мікросім.

Опис модуля A7

A7 є новітнім модулем від фірми AI-THINKER. У порівнянні зі своїм попередником A6 має вбудований GPS, що дозволяє спрощувати конструкцію пристрою.

Технічні характеристики:

  • Діапазон робочих напруг 3,3-4,6В;
  • Напруга живлення 5В;
  • Частоти 850/900/1800/1900 Мгц;
  • GPRS Class 10: Макс. 85.6 кбіт;
  • Придушення луни і шумів.

Пристрій підтримує мікросім карти. Модуль підтримує обмін дзвінками, обмін смс-повідомленнями, передачу даних по GPRS, прийом сигналів по GPS.

Де купити GSM модулі для Ардуіно

Традиційно, перш ніж почати, кілька порад і корисних посилань на продавців Aliexpress.

Дуже якісний модуль KEYES SIM900 GSM GPRS Модуль SIM800C для Ардуіно від перевіреного постачальника
Шілд для розробки, сумісний з Ардуіно, на базі модуля SIM900 GPRS / GSM Недорогий модуль mini A6 GPRS GSM

Підключення GSM GPRS Шілд до Arduino

У цьому розділі ми розглянемо питання підключення GSM - модулів до плати адуіно. За основу майже у всіх прикладах береться Arduino Uno, але в більшості своїй приклади підуть і для плат Mega, Nano і т.д.

Підключення модуля SIM800

Для підключення потрібні плата Ардуіно, модуль SIM800L, понижуючий перетворювач напруги, дроти для з'єднання і батарея на 12В. Модуль SIM800L вимагає нестандартне для Ардуіно напруга в 3,7, для цього потрібен понижуючий перетворювач напруги.

Терморегулятори модуля SIM800 приведена на малюнку.

Плату Ардуіно потрібно підключити до комп'ютера через USB кабель. Батарею на 12 В підключити через перетворювач: 12В на землю Ардуіно, від землі в перетворювач в мінус, +12 в перетворювач в плюс. Виходи з модуля TX і RX потрібно підключити до пінам 2 і 3 на Ардуіно. Кілька модулів можна підключати до будь-яких цифрових пінам.

Підключення модуля A6

Модуль A6 коштує дешевше, ніж SIM900, і його дуже просто підключати до Ардуіно. Модуль живиться напругою 5В, тому для з'єднання не потрібні додатково знижують напругу елементи.

Для підключення будуть потрібні плата Ардуіно (в даному випадку розглянута Arduino UNO), GSM модуль А6, з'єднувальні дроти. Схема підключення приведена на малюнку.

Висновок RX з модуля GSM потрібно підключити до TX на платі Ардуіно, висновок TX підключити до піну RX на Ардуіно. Земля з модуля з'єднується з землею на мікроконтролері. Висновок Vcc на GSM модулі потрібно з'єднати з PWR_KEY.

Підключення за допомогою GSM-GPRS Шілд

Перед підключенням важливо звернути увагу на напруга живлення Шілд. Струм в момент дзвінка або відправки даних може досягати значень в 15-2 А, тому не варто живити Шилд безпосередньо від Ардуіно.

Перед підключенням до Ардуіно потрібно встановити сім-карту на GSM-GPRS Шилд. Також потрібно встановити джампери TX і RX, як показано на малюнку.

Підключення проводиться таким чином - перший контакт (на малюнку жовтий провід) з Шілд потрібно з'єднати з TX на Ардуіно. Другий контакт (зелений провід) підключається до RX на Ардуіно. Земля з Шілд з'єднується з землею з Аруін. Харчування на мікроконтролер надходить через USB кабель.

Макет з'єднання Шілд і плати Ардуіно зображений на малюнку.

Для роботи буде потрібно встановити бібліотеку GPRS_Shield_Arduino.

Для перевірки правильності зібраної схеми потрібно зробити наступне: з'єднати на Ардуіно RESET і GND (це призведе до того, що дані будуть передаватися безпосередньо від Шілд до комп'ютера), вставити сім-карту в Шилд і включити харчування Шілд. Плату Ардуіно потрібно підключити до комп'ютера і натиснути кнопку включення. Якщо все поєднано правильно, загориться червоний світлодіод і буде блимати зелений.

Короткий опис взаємодії через AT-команди

AT-команди - це набір спеціальних команд для модему, що складається з коротких текстових рядків. Щоб модем розпізнав подану йому команду, рядки повинні починатися з букв at. Рядок буде сприйматися, коли модем знаходиться в командному режимі. AT-команди можна відправляти як за допомогою комунікаційного програмного забезпечення, Так і вручну з клавіатури. Практичні всі команди можна розділити на 3 режиму - тестовий, в якому модуль відповідає, чи підтримує команду; читання - видача поточних параметрів команди; запис - відбудеться записування нових значень.

Список найбільш використовуваних AT-команд:

  • AT - для перевірки правильності підключення модуля. Якщо все справно, повертається OK.
  • A / - повтор попередньої команди.
  • AT + IPR? - отримання інформації про швидкість порту. Відповіддю буде + IPR: 0 OK (0 в даному випадку - автоматично).
  • AT + ICF? - настройка передачі. У відповідь прийде + ICF: біт, парність.
  • AT + IFC? - контроль передачі. Відповіддю буде + IFC: термінал від модуля, модуль від терміналу (0 - відсутній контроль, 1 - програмний контроль, 2 - апаратний).
  • AT + GCAP - показує можливості модуля. Приклад відповіді - + GCAP: + FCLASS, + CGSM.
  • AT + GSN - отримання IMEI модуля. Приклад відповіді 01322600XXXXXXX.
  • AT + COPS? - показує доступні оператори.
  • AT + CPAS - стан модуля. Відповідь + CPAS: 0. 0 - готовність до роботи, 3 - вхідний дзвінок, 4 - голосовий зв'язок, 2 - невідомо.
  • AT + CCLK? - інформація про поточний час і дату.
  • AT + CLIP = 1 - включення / вимикання АОН. 1 - включений, 0 - вимкнено.
  • AT + CSCB = 0 - прийом спеціальних смс-повідомлень. 0 - дозволено, 1 - заборонено.
  • AT + CSCS = "GSM" - кодування смс-повідомлення. Можна вибрати одну з наступних кодувань: IRA, GSM, UCS2, HEX, PCCP, PCDN, 8859-1.
  • AT + CMEE = 0 - отримання інформації про помилку.
  • AT + CPIN = XXXX - введення пін-коду сім-карти.
  • AT & F - скидання до заводських налаштувань.
  • AT + CPOWD = 1 - термінове (0) або нормальне (1) вимикання модуля.
  • ATD + 790XXXXXXXX - дзвінок на номер + 790XXXXXXXX.
  • ATA - відповідь на виклик.
  • AT + CMGS = "+ 790XXXXXXXX"> Test sms - відправка смс-повідомлення на номер + 790XXXXXXXX.

В даному випадку розглянуті основні команди для модуля SIM900. Для різних модулів команди можуть незначно відрізнятися. Дані для модуля будуть подаватися через спеціальну програму «термінал», яку потрібно встановити на комп'ютер. Також подавати команди модулю можна через монітор порту в Arduino IDE.

Скетчі для роботи з модулем GSM

Відправка СМС на прикладі SIM900

Перед тим, як відправити повідомлення, потрібно налаштувати модуль. В першу чергу потрібно перевести в текстовий формат передане повідомлення. Для цього існує команда AT + CMGF = 1. Потрібно перевести кодування на GSM командою AT + CSCS = »GSM». Це кодування найбільш зручна, так як там символи представлені в ASCII коді, який легко розуміє компілятор.

Потім потрібно набрати смс-повідомлення. Для цього посилається команда з номером абонента AT + CMGS = "+ 79XXXXXXXXX» r, у відповідь пропонується набрати текст смс. Потрібно виконати відправку повідомлення. Після закінчення потрібно відправити код комбінації Ctrl + Z, модуль дозволить відправку тексту адресату. Коли повідомлення буде відправлено, повернеться OK.

Взаємодія з модулем засноване на індексах, які присвоюються кожному новому повідомленням. За цим індексом можна вказати, яке з повідомлень видалити або прочитати.

Отримання смс. Для читання смс-повідомлення використовується команда AT + CNMI = 2,2,0,0,0. Коли на модуль прийде текстове повідомлення, він відправить в послідовний порт + CMTI: «SM», 2 (в даному випадку 2 - порядковий номер повідомлення). Щоб його прочитати, потрібно відправити команду AT + CMGR = 2.

Прийом голосового дзвінка. В першу чергу для розмови потрібно підключити до модуля динамік і мікрофон. При отриманні дзвінка буде показаний номер, з якого він зроблений. Для здійснення роботи потрібно включити бібліотеку GSM:

#include

Якщо сім-карта заблокована, потрібно ввести її пін-код. Якщо пін-код не потрібно, це поле потрібно залишити порожнім.

#define PINNUMBER ""

У setup () повинна бути проведена ініціалізація передачі даних на комп'ютер. Наступним кроком буде створення локальної змінної, щоб відстежити статус підключення до мережі. Скетч НЕ буде запущений, поки сім-карта не підключена до мережі.

boolean notConnected = true;

За допомогою функції gsmAccess.begin () відбувається підключення до мережі. При встановленні з'єднання повернеться значення GSM_READY.

vcs.hangCall (); - функція, що показує, що модем готовий приймати дзвінки.

getvoiceCallStatus () - визначає статус скетчу. Якщо хтось дзвонить, вона повертає значення RECEIVINGCALL. Для запису номера потрібно скористатися функцією retrieveCallingNumber (). Коли буде здійснений відповідь на дзвінок, повернеться TALKING. Потім скетч чекатиме символу нового рядка, Щоб перервати розмову.

Встановити GPRS-з'єднання і відправити дані на віддалений сервер

Спочатку потрібно встановити бібліотеку SoftwareSerial, яка дозволяє забезпечувати послідовну передачу інформації і зв'язати GSM-модуль і мікроконтролер Ардуіно.

Для відправки даних на сервер потрібно відправити наступні команди:

AT + SAPBR = 1,1 - відкриття Carrier.

Наступні три команди пов'язані з установкою налаштувань підключення до мережі.

AT + SAPBR = 3,1, \ "APN \", \ "internet.mts.ru \" - вибір оператора mts, ім'я точки доступу.

AT + SAPBR = 3,1, \ "USER \", \ "mts \" - вибір користувача mts.

AT + SAPBR = 3,1, \ "PWD \", \ "mts \"

AT + SAPBR = 1,1 - щоб установити.

AT + HTTPINIT - ініціалізація http.

AT + HTTPPARA = "URL", - URL адресу.

AT + HTTPREAD - очікування відповіді.

AT + HTTPTERM - зупинка http.

Якщо все виконано правильно, в моніторі порту будуть з'являтися рядки з АТ командами. Якщо відсутній зв'язок з модемом, то буде показувати по одному рядку. При успішній установці GPRS-з'єднання на модулі почне блимати світлодіод.