Sim900 опис російською. Освоєння GSM з урахуванням модуля SIM900D. Експерименти з модулем GSM

До ряду побували в моїх руках GSMМодемах нещодавно додався відомий SIM900.

У статті йтиметься про налагоджувальну плату для нього.

Чому SIM900? Т.к. багато чув про нього і багато, де його бачив, давно захотілося ознайомитись з ним та його функціоналом. Особливо зацікавив він після статті з журналу « Бездротові технології» "Все в одному або що нового в GSM-модулі SIM900". І один проект.

Основні характеристики:

  • Чотири діапазони GSM 850/900/1800/1900 МГц;
  • Клас передачі даних GPRS 10/8;
  • Клас потужності 4 (2Вт у діапазонах 850.900 МГц);
  • Клас потужності 1 (1Вт у діапазонах 1800/1900 МГц);
  • Управління AT-командами (GSM 07.07, 07.05+AT команди від SIMCom);
  • Аудіокодеки HR, FR, EFR, AMR, придушення відлуння;
  • CSD до 14,4 кбіт/сек;
  • PPP-стек;
  • Вбудований стек TCP/IP, UPD/IP;
  • MUX (07.10);
  • Протоколи HTTP та FTP;
  • Напруга живлення 3,2-4,8В;
  • Температурний робочий режим –30 +80 °С;
  • SIM картки підтримує з напругою 1,8 та 3,3В;
  • Розміри: 24*24*3 мм
  • Вага 4 гр.

Характеристики взяті з цієї статті і даташита до модуля.

Перейдемо до налагоджувального або демонстраційного модуля, що вийшов. За основу розробки взяв свої напрацювання від . Ось що вийшло:

У схемі було застосовано такі спрощення від рекомендацій з даташиту:


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

Тепер про те, що реалізовано:

  1. Живлення від 5В (що зручно при роботі від USB або в 5В мікроконтролером) до 7-8В, стало можливим завдяки LM1086CT з низьким падінням напруги;
  2. UART – для налагодження чи підключення до МК;
  3. + виведений I2C (не забуваємо про узгодження рівнів, якщо підключати до 5В логіки, у налагодженні їх не заклав);
  4. Кнопка та спец. висновок (5 пін на UART інтерфейсі, включення високим рівнем), як ручного запуску модуля, т.к. та для його включення з мікроконтролера;
  5. Аудіо вхід і вихід для експериментів, де може знадобитися голосовий зв'язок.
  6. 2 статус діода для відображення режимів роботи модуля;
  7. Джампер JUMP1, який замикає стабілізатор і дозволяє живити модуль від 3,3-4,7В, що дозволяє його безпосередньо запитати, наприклад від літій-іонної батареї. Під час складання та перевірки не опинилося під рукою стабілізатора, живив від однієї 18650 банки;
  8. Розлучені додаткові землідля зручного підключенняпериферії;
  9. Розведений SMD майданчик лінії NRESET, для можливості додавання ланцюга перезавантаження модуля.

Друк виглядає так:

Плата виконана на односторонньому склотекстоліті розміром 61х49мм. Основа – модуль GSM SIM900 (B09). Стабілізатор VR1 LM1086CT-ADJ у корпусі ТО-220. Утримувач симкарт Sim card SCV-W2523X-08 або Sim card SCV-W2523X-06. Світлодіоди будь-які в корпусах 0603 або 0805 з малим струмом споживання. Єдиний транзистор VT1 – BC847 чи подібний. Резистори R1 і R2, струмообмежувачі статус світлодіодів, по 510Ом 0805. R3 4,7кОм, R4 47кОм, R5-R6 1кОм все типорозміру 0805. R7 0805 68Ом, R8 1206 1 R8-R10 по 22Ома в корпусах типорозміру 0805. R12 1кОм, R13 10кОм, обидва 0805. Конденсатори C2-C3, C7-C8 по 33пФ, С4 22пФ, C5 1мкФ, С6 10Ф, С6 10п типорозміру 0805. Конденсатор C1 10мкФ чип-тантал типорозміру A. С10 100мкФ не менше 16В, C13 470-680мкФ не менше 10В, плату розводив під EPCOS: 100мкФ бочонок розміру 8х0 0х12, 5-20мм . Кнопка S1 – DTSM13-5.0N (у пормелектронніку), можливо, її справжня назва – DTSM13-4.3N. Антена будь-яка на GSM діапазон із роз'ємом SMA-M, на платі SMA-F гніздо. Штирі PLS5 та 3х PLS2+ для перемички JUMP1 потрібні PLS3 і сам джампер з кроком 2,54. Аудіо роз'єми Jack 3,5 - CK3-101B, ставив, що було в наявності, не вдалий варіант, краще поставити якісь моно гнізда.

Досвід використання SIM900, описаний нижче буде кориснішим тим, хто вже встиг трохи попрацювати з модулем. Для тих самих читачів, хто тільки починає вивчення даної мікросхеми і планує використовувати її для обміну даними через інтернет, ми підготували серію уроків на цю тему. Ось.

Отже, SIM900 – GSM-модуль компанії SIM COM, управляється AT-командами, вміє надсилати SMS, здійснювати дзвінки, організовувати пряме CSD-з'єднання, обмінюватися інформацією GPRS.

У моїх руках була замовлена ​​з Китаю налагоджувальна плата SIM900 GPRS shield – сумісна з платформою Arduino.

На платі знаходиться сам чіп SIM900, роз'єм для мікрофона і навушників, перемикач джерела живлення (від зовнішнього роз'ємуабо від Arduino), антена, кілька світлодіодів для індикації режимів роботи, роз'єм для батареї (якщо потрібний годинник реального часу), кнопка ввімкнення/вимкнення. Гарний опися знайшов на wiki виробника . Там же наведено код для керування модемом у різних режимах.

Як заявляє нам виробник, плата відмінно сумісна з Arduino Uno. Дійсно, плата SIM900 просто встромляється в Uno і відразу починає працювати. Однак, як з'ясувалося, Arduino Uno може виявитися «слабкуватим» для реалізації деяких функцій, але про це я розповім трохи нижче.

З Arduino Mega плата працює з деякими обмеженнями. Це пов'язано з тим, що Мега на відміну від Uno піни 7 і 8, недоступні для використання як software serial (програмний USART). Це вирішується перемиканням інтерфейсу USART на ноги 0 та 1, для цього на платі SIM900 передбачені джампери.

Взагалі, плату можна підключити до будь-якого контролера з USART. Наприклад, пробував керувати модемом за допомогою контролера STM32F4.

SIM900: SMS-повідомлення та дзвінки

Випробування модуля для обміну SMS-повідомленнями та дзвінків пройшли «на УРА»! Модуль впорався з цими завданнями без особливих проблемдля цього я просто скопіював c того ж сайту, скомпілював і прошив у Arduino Uno ось цей код:

//Serial Relay - Arduino will patch a //serial link між комп'ютером та GPRS Shield //at 19200 bps 8-N-1 //Computer is connected to Hardware UART //GPRS Shield is connected to the Software UART #include SoftwareSerial GPRS(7, 8); unsigned char buffer; // buffer array for data recieve over serial port int count=0; // counter for buffer array void setup() ( GPRS.begin(19200); // the GPRS baud rate Serial.begin(19200); // the Serial port of Arduino baud rate. ) void loop() ( if (GPRS .available()) // if date is comming from softwareserial port ==> data is comming from gprs shield ( while(GPRS.available()) // reading data в char array ( buffer=GPRS.read(); // writing data in array if(count == 64)break; ) Serial.write(buffer,count); data from array count = 0; // set counter while loop to zero ) if (Serial.available()) // if data available on hardwareserial port ==> data is comming from PC or notebook GPRS.write(Serial .read());// write it to the GPRS shield ) void clearBufferArray() /

Щоб посилати модулю команди, його потрібно підключити до комп'ютера. Це можна зробити за допомогою USB порту Arduino. На комп'ютері цього потрібен будь-який монітор COM-порта. Його можна завантажити звідси, а можна використовувати монітор, вбудований в Arduino IDE.

Все, що робить прошита програма Arduino, - "ловить" команди користувача і посилає їх модулю, а потім повертає користувачеві відповіді SIM900. Таким чином, передаючи модулю AT-команди в ручному режимі, я випробував прийом та передачу SMS-повідомлень, а підключивши у відповідні роз'єми мікрофон та навушники – скористався модулем SIM900 як мобільний телефон.

Передача даних по GPRS за допомогою SIM900

Свої перші досліди передачі даних через GPRS я почав, використовуючи для управління SIM900 платформу Arduino UNO (просто тому, що вона була під рукою). Для початку купив хостинг із сервером під Apatche і розгорнув на ньому найпростіший додаток, який вміло відповідати на GET-запити. Вийшло! Я так само посилав команди з ПК контролеру Arduino, який у свою чергу пересилав їх SIM900.

Все працювало коректно, поки GET-запити були досить короткими (до 100 символів). Але щойно запити стали довшими — почалися збої: запити передавалися не повністю. Було помічено, що глюки можуть з'явитися або зникнути навіть при збільшенні/зменшенні програми Arduino на кілька рядків. Згодом з'ясувалося, що збої пов'язані з програмним USARTом, який Arduino UNO використовує спілкування з SIM900, т.к. такий USART повністю залежить від програмного циклу ядра контролера. При малій кількості даних вони встигають передаватися завжди, а при збільшенні їх кількості - результат передачі залежить від тривалості програмного циклу.

Висновок з усього вищесказаного: використовувати програмний USART при спілкуванні з SIM900 НЕ МОЖНА, особливо коли йдеться про велику кількість даних, що передаються.

У Arduino Uno всього один «залізний» інтерфейс USART, який був зайнятий під обмін з ПК, тому довелося відмовитися від UNO, замінивши її на Arduino Mega, яка не страждає на брак «залізних» USARTів. Після такого «рокування» робота пристрою стала стабільною та коректною.

SIM900: TCP-IP стек або HTTP? Що краще?

Вивчаючи посібник з управління модемом, я виявив, що існує дві групи AT-команд. Перша група використовується передачі даних через вбудований TCP-IP стек, а друга використовує HTTP протокол вже реалізований внутрішньої логікою SIM900. Скільки я не мучив Google і Яндекс намагаючись дізнатися, чим відрізняються дані способи, які плюси і мінуси кожного з них, - нічого не знайшов, тому спробував обидва і ділюся своїм практичним досвідом тут.

Обидва способи робітники мають право на існування.

TCP-IP стек трохи складніше ініціалізується (більше команд потрібно передати модулю), ним трохи складніше керувати. Щоб передати запит, необхідно відкрити з'єднання, дочекатися відповіді та коректно закрити його.

HTTP – це, кажучи простими словами, браузер вбудований у SIM900. Він простий в ініціалізації, щоб розпочати обмін із сервером необхідно відкрити сеанс. При цьому відкриття та закриття з'єднання при кожному запиті та вирішення інших «організаційних завдань» лягатиме на плечі SIM900. Це зручно, до того ж передача даних у такий спосіб відбувається дещо швидше, саме через те, що SIM900 швидше виходить виконувати всі «допоміжні операції», ніж це може робити контролер.

Таким чином, при виборі способу обміну я таки зупинився на протоколі HTTP.

Некоректний GET-запит на сервер

На самому початку своєї роботи з передачі даних по GPRS я припустився помилки, яка коштувала мені не одного дня мук. Не маючи достатнього досвіду роботи із взаємодії з сервером за допомогою GET-запитів, я, набравшись поверхневих знань в інтернеті, склав запит на вигляд:

GET http://xxx.ru/d_command.php?UC=1111 HTTP/1.1
HOST: xxx.ru

Цей запит не є коректним, проте його чудово «їв» браузер і проксі сервер, з якого я надсилав запити для налагодження - саме тому я вважав запит вірним.

Найдивовижніше те, що SIM900 теж чудово справлявся з «поганим» запитом (а відправляв запити тоді через TCP-IP стек). Однак, одного дня сервер почав відповідати на такі запити помилкою 404. Сталося це за так і не з'ясованими обставинами, чи хостинг-провайдер змінив алгоритми обробки запиту (він відхрещується від цього), чи це зробив мобільний оператор. Але факт залишається фактом. Тоді я спробував передати той самий запит через HTTP — все працювало. Пояснюється це тим, що внутрішній HTTP протокол модуля SIM900 (як я вже казав, по суті, вбудований браузер) вміє сам правильно «розпаровувати» некоректні запити і транслювати в мережу вже в правильному вигляді. Це ще один плюс (сумнівний, звичайно) використання HTTP, оскільки дозволяє програмісту деякі неточності. А взагалі, звичайно, запит має бути написаний правильно і виглядати так:

GET /d_command.php?UC=1111 HTTP/1.1
HOST: xxx.ru

З таким коректним запитом SIM900 успішно обмінюється через TCP-IP стек, і через HTTP.

Зависання SIM900

Іноді при обміні GPRS виникають ситуації, після яких модуль може зависнути. Цьому виною можуть бути некоректні дані, що прийшли по мережі і загнали в ступор SIM900, або перешкоди на лінії обміну модуля та контролера, при яких SIM900 отримав «не те, що чекав», або якісь невідомі проблеми. Виробник чіпа попереджає про те, що це може відбуватися і пропонує у таких випадках перезавантажувати модуль за допомогою спеціальної послідовності імпульсів, що подаються на вхід PWRKEY.

Однак, як з'ясувалося, це не завжди допомагає - після такого перезавантаження модуль може прокинутися все ще "глюкнутим". І про це також нас попереджає виробник, якщо уважно читати DataSheet на модуль. Ось що рекомендується у документації:

NOTE: Це необов'язково cut off the VBAT потужність безпосередньо безпосередньо з використанням external reset pin, коли SIM900 може не відповідати AT Command “AT+CPOWD=1” і PWRKEY pin.

Тому найправильнішим способом перезавантаження модуля є повне зняття з нього живлення (з ніжки VBAT), витримка деякої паузи (хоча секунду про всяк випадок) і повторна подача харчування. Для перезавантаження модуля на платі краще передбачити реле або транзисторний ключ, керований контролером.

Висновок

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

До побачення! Слідкуйте за оновленнями LAZY SMART .

Останнім часом з'явилося багато різних варіантів схем пристроїв сигналізації GSM. Якщо в цій схемі застосовується модуль GSM, то в більшості випадків широко поширений модуль виробництва китайської фірми SimCom SIM300. Даний модуль показав себе з хорошого боку, як щодо надійності, так і низької вартості.
В представлений опис пристрою сигналізації GSMна основі модуля SIM300, розроблене автором. Там же наводяться креслення друкованих плат та повнофункціональна версія прошивки мікроконтролера. Також під цю систему сигналізації розроблені різні модулі розширення, пульти ДУ, клавіатурні блоки управління, блоки живлення.
Але фірмою-виробником було заявлено, що з кінця 2010 року виробництво модулів GSM лінійки SIM3xx буде припинено. Замість нього рекомендується використовувати новий модуль, що випускається тим самим виробником – SIM900. Причому, як було заявлено, SIM900 буде набагато функціональнішим за свого «предка», і, що для нас є одним з найважливіших критеріїв, дешевше.

Дещо про SIM900…

Так що ж є модуль SIM900? Візьмемо в руки данішляху і спробуємо його прочитати.
Модуль SIM900 є чотиридіапазонним GSM/GPRS прилад, що працює на частотах 850/900/950/1900 МГц, призначений для передачі голосу, даних, SMS повідомлень і ін.
Основні технічні характеристики модуля:
Діапазон частот:
GSM850, EGSM900, DCS1800, PCS1900
з сумісність із GSM phase 2/2+.
Випромінювана потужність:
class 4 (2W/900 MHz)
class 1 (1W/1800 MHz)

Управління: AT commands (GSM 07.10)
Напруга живлення модуля: 3,4 - 4,5 В
Струм споживання:
у сплячому режимі – 1,5 мА
у режимі передачі – до 500 мА
максимальний – 1,8 А
Робоча температура: -30 … +80 С
розміри: 24х24х3 мм
Маса: 3,4 г
Як можна побачити, даний модуль за габаритами відрізняється від свого попередника, модуля SIM3xx приблизно в півтора рази. Але і за параметрами та функціональністю теж перевершує на порядок.


Рисунок 1 – Зовнішній вигляд модуля GSM SIM900



Рисунок 2 – Призначення висновків модуля SIM900

Зовнішній вигляд модуля подано на рис. 1, а призначення висновків – на рис. 2. За малюнками можна визначити, що крім стандартного інтерфейсного набору, властивого попереднім моделям (порти UART для обміну даними, виведення статусу модуля STATUS, висновки інтерфейсу SIM-картки тощо), додано кілька нових (висновки підключення клавіатури KBR/KBC, ШИМ-вихід PWM, виведення скидання модуля NRESET).
Зважаючи на те, що даний модуль на момент написання цієї статті ще не пройшов повної «обкатки» на теренах України, постійно проводяться доопрацювання програмного забезпечення, в описі можливі зміни, які не погіршують роботу в цілому.

Основні параметри пристрою

Цей пристрійє продовженням лінійки приладів сигналізації GSM, розроблених автором. Тому параметри багато в чому ідентичні.
Спостереження за станом чотирьох шлейфів сигналізації (ШС) у всіх режимах роботи, крім режиму «Програмування», та відображення стану шлейфів за допомогою світлодіодних індикаторів, розташованих на передній панелі приладу (світлення індикатора – «шлейф у нормальному стані», в іншому випадку – присутній обрив чи замикання шлейфу сигналізації).
У шлейфи сигналізації можуть бути включені:
> магнітоконтактні сигналізатори (геркони СМК, СОМК);
> сповіщувачі типу "Фольга", "Вікно";
> сповіщувачі пожежні (ІП-104, ІП-105);
> датчики руху, об'єму, биття;
> інші датчики, що мають замкнутий вихід у нормальному стані, та розмикаючі контакти при порушенні.
Підтримка приладом таких типів зон (шлейфів) сигналізації:
"нормальна" (сигнал "Тривога" формується відразу при надходженні сигналу порушення цілісності шлейфу сигналізації, шлейф після спрацьовування не відновлюється);
"з затримкою" (користувачеві надається час на вихід і на вхід, щоб можна було встигнути ввімкнути прилад і залишити об'єкт або розкрити об'єкт і вимкнути прилад);
коридор (при спрацьовуванні зони та подальшому її поверненні в нормальному стані даний тип зони знову береться під охорону);
«цілодобова, пожежна» (шлейф сигналізації постійно під охороною, зняття та взяття проводиться за допомогою спеціальної SMS-команди);
«цілодобова, Кнопка тривоги»(Шлейф сигналізації постійно під охороною, зняття та взяття проводиться за допомогою спеціальної SMS-команди, при спрацьовуванні шлейфу проводиться тільки додзвон, відправка SMS-повідомлення про саботаж, сирена при цьому не включається);
«відключена» (система не реагує на жодні зміни на вході ШС).
Увімкнення режиму "Охорона" за допомогою "прихованої", або "секретної" кнопки, "секретного" перемикача (замість якого може бути використана клавіатура із замикаючими контактами, типу "Satel"), пульта дистанційного керування, ключа TouchMemory (Dallas) або додаткову клавіатуру, залежно від прошивки контролера. Прошивка, що описується тут, використовує тільки «секретний» перемикач, інші версії будуть розглянуті пізніше.
Підтримується два режими роботи приладу:
сигналізація GSM (GSM-термінал підключений і з ним здійснюється обмін даними);
автономна сигналізація (GSM-термінал не бере участі в роботі системи, пристрій працює як автономна сигналізація).
Зняття з охорони та постановка під охорону за допомогою дзвінка з певного телефону (може бути вимкнено) з передачею відповідного SMS про стан системи.
Передача підтверджуючого SMS-повідомлення при взятті об'єкта під охорону (може бути вимкнено).
Формування сигналу «Тривога» (включення сирени, передача даних «тривоги» на мобільний телефон) при порушенні цілісності («обрив» або «замикання») хоча б одного зі шлейфів сигналізації.
Надсилання SMS-повідомлень та автодозвон на три мобільні або стаціонарні (якщо забезпечується підтримка SMS-функцій оператором зв'язку) номери телефонів.
Переведення приладу в режим «Знятий з охорони» за допомогою лише пульта дистанційного керування, клавіатури, шляхом прийому SMS-повідомлення з мобільного номера 1 та (або) додзвону з цього номера (може бути відключено), а також «секретного» перемикача, залежно від від прошивки контролера.
Можливість дистанційного керування пристроєм шляхом передачі SMS-повідомлень певного змісту (може бути вимкнено).
Програмування основних функцій та параметрів приладу (номери телефонів, час затримки, час роботи сирени тощо) за допомогою комп'ютерної програми Lite Programmer у режимі «Програмування» приладу. При цьому вихід СОМ порту комп'ютера (висновки RxD і TxD) підключаються до відповідного роз'єму приладу сигналізації за допомогою спеціального кабелю.
Подача приладом певного сигналу користувачеві про брак коштів на рахунку мобільної картки.
Подача приладом певного сигналу для користувача про відсутність сигналу зв'язку з мобільною станцією.
Передача сигналу SMS при зникненні напруги живлення мережі (220В) в режимі "Охорона" (може бути відключено).
Застосування вбудованого модему GSM дозволяє обійтися без зайвих блоків та підключень, а також підвищити сумісність та стабільність зв'язку GSM-каналу.
Програмована реакція силового виходу: увімкнення виходу тільки в режимі "Тривога" на встановлений користувачемчас (від 60 до 240 секунд).
Використання оригінального протоколу передачі даних ІЧ-випромінювання пультом дистанційного керування для керування пристроєм та пультом радіовипромінювання, а також оригінальне кодування даних, що надходять з клавіатури.
Є можливість контролю приладом напруги живлення мережі та напруги акумуляторної батареї, при цьому при зникненні та появі напруги мережі надсилаються відповідні SMS-повідомлення. Також при зниженні напруги живлення резервного джерела(Акумулятора) нижче заданого рівня (8-9В) надсилається повідомлення, після чого прилад переходить в «сплячий» режим, вихід з якого можливий тільки при відновленні живлення (мережевого або акумуляторного).
Надсилання SMS-повідомлення на мобільний номер 1 при надходженні вхідних дзвінків із зазначенням вхідного номера(Може бути відключена).
Прилад дозволяє здійснити комутацію зовнішніх звукових або світлових оповіщувачів (дзвінок, сирена, лампа) з робочою напругою 12В і струмом, що споживається до 1,25А.
Прошивка мікроконтролера, описана в цій статті, призначена для роботи пристрою спільно з «секретним» перемикачем, а також увімкнення-вимкнення приладу за допомогою додзвону та відсилання SMS-повідомлень. Решта варіантів виконання пристрою буде описана в наступних матеріалах, за наявності, природно, читацького інтересу.

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

Кількість шлейфів сигналізації – 4.
Опір виносного елемента (кінцевого), ком – 2,7.
Максимальний опір шлейфу охорони без урахування опору виносного елемента Ом – 750.
Струм від джерела постійного струму(без підключених активних датчиків сигналізації), при напрузі 12,6 В, у наступних режимах роботи, не більше:
- "черговий", без використання GSM-модуля - 0,16 А;
- "черговий", при використанні GSM-модуля - 0,23 А;
- "охорона", при використанні GSM-модуля - 0,28 А;
- «тривога», при використанні GSM-модуля та відключеної сирені – 0,34 А;
- пікове (імпульсне) споживання - 1,8 А.
Підтримувані стандарти GSM: 850/900/1800/1900 MHz.
Межі установок часу:
- Час затримки на вхід – 0…150 секунд;
- Час затримки на вихід – 0…250 секунд;
- Час роботи сирени – 30…250 секунд.

Опис схеми

Схема електрична основна принципова блоку наведена на рис. 3. Я уточнюю – «основного блоку», адже до даних систем сигналізації додатково розроблено великий набір периферії: тут і різноманітні пульти керування, блоки розширення та ін.
Порівняно з попереднім варіантомсхема зазнала якісних змін: крім, як говорилося вище, застосування іншого модуля GSM, також виключено реле (замість нього застосована ІМС – набір потужних транзисторних ключів), і навіть виключено блок перетворювача RS232-UART (як показала практика, програмування проводиться дуже часто , і для цього використовують, в основному, ноутбук, в якому порт RS232 часто просто відсутня).



Рисунок 3 – Схема електрична принципова

Головним керуючим елементом пристрою є мікроконтролер ATmega168 виробництва компанії Atmel. Мікроконтролер контролює стани шлейфів сигналізації, підключених до входів АЦП, і, в залежності від режиму роботи, здійснює подальші дії, як-от: додзвон і відсилання SMS-повідомлень, включення сирени, і т.д.
Входи АЦП PC0-PC3 призначені контролю стану шлейфів сигналізації, МК виробляє вимірювання напруги цих висновках, і, залежно від напруги, формує сигнал «обрив», «норма» чи «замикання». На PC5, PC6 подаються напруги з виходу блоку живлення контролю їх значень. До речі, якщо ці висновки не будуть підключені, пристрій не запуститься!
У схемі використовуються контрольні світлодіоди: LED1 – контроль роботи модуля GSM (за наявності зв'язку та роботи модуля моргає з частотою 1 спалах протягом 2-3 секунд, в інших випадках є проблеми зі зв'язком або з самим модулем), LED2 – контроль роботи системи ( в робочих режимах моргає із частотою 3-5 разів на секунду, в режимі програмування горить постійним світлом). Крім цього, до висновків IND1...IND4 підключаються світлодіоди контролю стану шлейфів сигналізації LED4...LED7. KEY_S – власне, сама «таємна» кнопка чи перемикач. SPEAKER – роз'єм для підключення динаміка, він може бути на будь-який опір, потужність щонайменше 0,25 Вт.

Про живлення приладу.Даний пристрій вимагає напруги живлення в межах 10 – 18 В, при струмі до 2 А. Блок живлення доцільно побудувати таким чином, щоб напруга живлення не пропадала навіть при зникненні мережі, тобто передбачити акумуляторну батарею. Рекомендується використовувати блок живлення, що застосовується в попередніх версіяхописуваного пристрою. Також описано і підключення блока живлення до приладу сигналізації.

Програмування основних функцій пристрою

Програмування основних функцій приладу здійснюється за допомогою спеціальної програми Lite Programmer. Остання версіяпрограми завжди можна завантажити на сайті автора. В принципі, замість комп'ютера для програмування приладу можливо використовувати мобільний телефон, підключений до пристрою через data-порт, або інфрачервоний порт, але для цього потрібно написати хоча б java-мідлет, а за відсутністю вільного часу автору просто ніколи цим зайнятися, та й програмування за допомогою ноутбука поки що влаштовує. Якщо є охочі зайнятися вирішенням цього питання – пишіть автору на електронну пошту, всю документацію буде представлено.
Підключення пристрою здійснюється до вільного СОМ-порту комп'ютера через спеціальний перетворювач RS232-UART, або до USB-порту через перехідник USB-UART. Тільки не надумайте підключати безпосередньо, без перехідника (є зараз і такі умільці)! Це загрожує смертю мікроконтролеру чи порту комп'ютера!
Порядок перемикання режим програмування:
1. Натиснути кнопку S1 на час не менше 2 секунд і дочекатися припинення миготіння індикатора стану роботи модуля 2HL1 (зазвичай не більше 10 секунд)
2. Знеструмити пристрій.
3. Встановити джампер J1, перевівши пристрій у режим «Програмування».
4. Підключити кабель для підключення пристрою до комп'ютера.
5. Здійснити встановлення зв'язку з пристроєм та програмування (описано нижче).
6. Знеструмити пристрій.
7. Вимкнути кабель зв'язку з ПК та прибрати джампер J1.
8. Програмування завершено, можна подати живлення та користуватися приладом.
Головна формаПрограма є стандартною, ніяких надмірностей і «наворотів». У правій частині форми встановлюється номер СОМ-порту, а також швидкість прийому-передачі даних (для нашого випадку - 115200 бод), для переведення пристрою в режим програмування вибрати у кадрі "Дія" (у правому нижньому кутку) - "встановити зв'язок", при цьому світлодіод 1LED1 займеться постійним світлом. Можна програмувати!



Рисунок 4 – Головна форма програми Lite Programmer

Особливих труднощів робота з програмою для користувача, хоча б раз у житті включає комп'ютер не представляє. Крім того, все докладно описано у згадуваній неодноразово Інструкції з експлуатації та програмування. Якщо коротко: встановлюєте потрібні вам параметри, переконуєтеся, що у третій колонці червоним кольором з'явився напис "Змінити", у кадрі "Дія" вибираєте пункт "Програмування", натискаєте кнопку "Виконати", і все. Якщо параметр запрограмований, то в п'ятій колонці з'явиться напис "Запрограмовано", при помилках програма також видасть відповідне повідомлення.

Деякі аспекти програмування.

Слід особливу увагуприділити процесу програмування, оскільки від цього залежить робота пристрою загалом. Як показала практика, основна помилка допускається під час встановлення номера SMS-центру мобільного оператора. Якщо Ви цей номер не знаєте, або не впевнені, краще його зовсім не програмувати. Програмне забезпечення модуля GSM у разі самостійно визначить номер.
Також уважно поставтеся до встановлення номера USSD-запиту про залишок коштів, якщо планується його використовувати. Спочатку пристрій розроблявся для українських користувачів, тому мінімальна сума залишку коштів дорівнює одному-дев'яти гривням-рублям. Можливі два варіанти вибору установки. Перший – вибрати потрібного оператора, і програма сама виставить необхідний номер та суму мінімального залишку, що дорівнює двом гривням. Другий варіант – вибрати з спадного меню вибору оператора USSD-запиту пункт TUNE USSD, і потім у формі заповнити необхідні параметри: мінімальна сума (від одного до дев'яти рублів), роздільник рублі-копійки (деякі оператори застосовують різні знаки поділу, наприклад, точка , кома, двокрапка).
Програма поки що підтримує тільки латиницю при введенні текстів SMS-повідомлень, оскільки дана функціяпідтримується і програмою мікроконтролера. В даний час ведуться роботи з включення та кирилиці.

Короткий Посібник з експлуатації.

Перед встановленням у пристрій сигналізації слід деяким чином «підготувати» SIM-картку, а саме: відключити пароль. Рекомендується використовувати у пристрої SIM-картку того самого мобільного оператора, що й телефони додзвону. Принаймні ймовірність доставки SMS-повідомлень неодноразово зросте.
Після подачі живлення та запуску прилад видасть один довгий звуковий сигнал внутрішнім динаміком, потім здійснюється встановлення зв'язку з модулем, по завершенню якої звучать три короткі звукові сигнали. Прилад готовий до роботи.
Далі йтиметься про використання приладу як пристрій охоронної сигналізації приміщень будинків та ін. Для використання пристрою як автомобільної сигналізації або інших функцій потрібна в першу чергу інша прошивка мікроконтролера, а це виходить за межі цієї статті. Це тема наступних публікацій.
Щоб поставити прилад під охорону, потрібно замкнути перемикач KEY_S. До речі, замість цього перемикача можна використовувати будь-яку клавіатуру із замикаючими контактами, наприклад, Satel SW02. Після цього прилад почне відраховувати час на вихід (час встановлюється при програмуванні), протягом якого необхідно залишити об'єкт, що охороняється. Якщо після закінчення часу на вихід усі шлейфи перебувають у зібраному стані, пристрій переходить у режим охорони. У тому випадку, якщо після закінчення часу на вхід хоча б один із шлейфів буде в обриві або замиканні, прилад видає переривчастий звук протягом 100-140 секунд, надсилається повідомлення про невзяти об'єкт під охорону на номер 1 (якщо запрограмовано), після чого переходить у режим тривоги з надсиланням усіх повідомлень та додзвоном. Також можна поставити прилад під охорону додзвоном із номера, запрограмованого першим, або надісланим SMS-повідомленням із текстом «START» із цього ж номера. Слід пам'ятати, що у цій версії прошивки не рекомендується спільне використанняпри постановці під охорону «секретного» перемикача та функцій GSM для виключення їхнього взаємного впливу. При спільному використанні пріоритет буде на стороні перемикача, GSM-функції не працюватимуть!
У режимі охорони пристрій постійно контролює стан всіх шлейфів сигналізації, а також стан модуля GSM. При цьому, якщо відбувається спрацьовування шлейфу, надсилаються SMS-повідомлення та здійснюється додзвон, відповідно до карти програмування. Дзвінок здійснюється до зняття абонентом трубки, але не більше восьми разів. Також в режимі охорони контролюється живлення мережі 220В та акумуляторної батареї резервного джерела. При цьому, при кожному зникненні 220В і його появі відбувається передача відповідного SMS-повідомлення (цю функцію можна відключити при програмуванні).
Для зняття приладу з охорони необхідно відкрити об'єкт, і протягом часу на вихід розімкнути контакти перемикача. Якщо цього не зробити, пристрій переходить у режим тривоги. Або зняти об'єкт з охорони до розтину, зателефонувавши або відправивши з першого номера SMS-повідомлення «STOP».
У черговому режимі пристрій контролює стан шлейфів сигналізації, а також модуль GSM. При втраті зв'язку з модулем або втраті мережі через кожні 2-4 хвилини лунає п'ять короткочасних зумерів. Також кожні 30-40 хвилин іде опитування стану рахунку мобільного номера. При цьому лунають десять короткочасних звукових сигналів («трель»), і надсилається одне SMS-повідомлення (“NO MONEY!!”) на номер 1.
У таблиці наведено службові повідомлення, які може надсилати пристрій при появі тих чи інших подій (при відключеній функції відправки, при програмуванні, дані повідомлення не надсилаються!):

Текст SMS

Опис

Примітка

Stop guard!

Підтвердження зняття системи з охорони

черговий режим

POWER OFF!

Несправність або відсутність напруги мережі 220В

Тільки у режимі охорони

Power ON

Поява напруги мережі 220В (після відсутності)

ALL POWERS OFF!

Всі напруги живлення нижче норми. Через деякий час пристрій перейде в режим сну.

У всіх режимах роботи

Start after sleeping

Відновлення роботи пристрою після зникнення живлення

NO MONEY!

Мінімальна сума коштів у рахунку. Необхідно поповнити рахунок!

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

Висновок

Цей пристрій пройшов початкове тестування в лабораторії автора і показав непогані результати. Модуль SIM900 показав стабільну роботупід час управління стандартними AT-командами, особливих скарг немає. Незабаром буде розроблено друковані плати даного приладу та підготовлено відповідну документацію. Демо-версія прошивки мікроконтролера додається до цієї статті. Повнофункціональна версія прошивки мікроконтролера пристрою надається будь-кому, хто бажає безкоштовно. Для цього слід надіслати відповідний запит на електронна скринькаавтора або за ICQ. Також розглядаються будь-які пропозиції щодо організації виробництва описуваного приладу сигналізації та периферійних пристроїв.
Надалі планується забезпечити сумісність приладу з усіма периферійними пристроями, призначеними для попередньої версії сигналізації GSM авторства Д. Дмитренка. Тут зібрано доповнення до статті для різних приватних застосувань.

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

1. Використання для керування пристроєм ключа TouchMemory

В даний час розроблено прошивку мікроконтролера для роботи з ключами TouchMemory. Для цього необхідно пристрій доповнити нескладним пристроєм, що складається з двох резисторів, ємності та стабілітрона. І, звичайно, використовувати прошивку для цього типу пристроїв.
Приклад використання такого пристрою наочно описується у статті Сигналізація GSM із застосуванням ключів iButton. Там же, на схемі електричної принципової показано підключення додаткового пристрою, наведені креслення друкованої плати.
Прошивку можна завантажити [шукаємо для DDN Research HG45Q]

Нещодавно друг запропонував мені роботу, пов'язану зі створенням прошивки для мікроконтролера, який повинен був зв'язуватися з сервером за допомогою GSM-модуля SIM900D. Раніше я з програмуванням мікроконтролерів справи не мав, та й на C програмував останній раз у студентські часи, але цікавість переважила і я взявся до роботи. Документація по даній залізниці є в інтернеті, проте гарних прикладівроботи з TCP/IP у коді знайти не вдалося. Нічого не залишалося, окрім як обкластися документацією, запастись цигарками та чаєм та приступити до лавірування між граблями. А граблів виявилося чимало. Власне, тому я й написав цю статтю – щоб іншим було легше.

Що було потрібно

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

Що вийшло в результаті

Вийшов код C, який може все, що було потрібно. Через вимоги компактності, розбирати відповіді та генерувати рядки довелося за допомогою свого коду, який навіть соромно показати чесному народу. Тому рекомендую всім використовувати з цією метою регулярні висловлювання. Свій код я теж збираюся перевести на легкий двигун регулярних виразів, але вже після створення повнофункціональної прошивки.

Код вимагає функцій/макросів для роботи з послідовним портом, а також наявності функцій memset та memcpy. Так що його з відносною легкістю можна перенести на іншу платформу, не зачепивши купою бібліотек.

І як воно виглядає?

Програмування та тестування проводилося під Windows 7. Код, отриманий у результаті, став основним матеріалом цієї статті. Я не наводитиму код повністю і коментуватиму його, а натомість покажу алгоритм налаштування та роботи з GSM-модулем.

Функції, які потрібні коду:

  • uint16_t init_serial_port(char *port_name) Ця функція налаштовує вказаний послідовний порт. Під Windows.
  • uint16_t puts_serial(uint8_t *buffer, uint16_t size) А ця пише рядок байт у цей порт.
  • gets_serial(uint8_t *buffer, uint16_t size) Ця, відповідно, читає рядок байт із послідовного порту.
Функції, які код надає:
  • init_gprs() & stop_gprs() Відповідно ініціалізують та вирубують GSM-модуль.
  • uint16_t connect_gprs(uint8_t index, uint8_t mode, char *address, char *port) Встановлює підключення із сервером. Модуль вміє працювати з протоколами TCPі UDP як клієнта, так і будучи клієнтом. Підтримується щонайбільше 8 одночасних підключень.
  • uint16_t close_gprs(uint8_t index) Закриває це підключення.
  • uint16_t send_gprs(uint8_t index, uint8_t *buffer, uint16_t size) Надсилання повідомлення через зазначене підключення.
  • uint16_t recv_gprs(uint8_t index, uint8_t *buffer, uint16_t size) Отримання повідомлення. Неблокуюча функція, що означає, вона не чекатиме появи даних у потоці, а поверне управління, якщо отримувати нічого. Варто відзначити, що така поведінка реалізувати простіше, ніж блокуюча.

Як працювати з послідовним портом

Це досить просто. Під цільовий мікроконтролер є макроси для відправки/отримання даних через USART, але так як налагоджувати такий код простіше з стаціонарного комп'ютера, мені була надана зв'язка з перехідника USB<->USART та GSM-модуля. Залишалося лише навчитися працювати з послідовним портом під Windows. Це виявилося просто. Коротко, послідовний порт представляється в ОС звичайним файлом, передача інформації здійснюється функціями ReadFile та WriteFile . Потрібно встановити деякі параметри за допомогою функцій SetCommTimeouts і SetCommState .

Ось як виглядає функція ініціалізації порту:
uint16_t init_serial_port(char *port_name) ( COMMTIMEOUTS timeouts; DCB parameters; int result; serial_port_handle = CreateFile(port_name, // "\\\\.\\COMx" GENERIC_READ | GENERIC_WRITE, 0, // Значення наступних портом NULL, OPEN_EXISTING, 0, NULL), if (serial_port_handle == INVALID_HANDLE_VALUE) ( printf("Error opening a serial port!\n"); // // Наступне значеннямножиться на кількість символів, що читаються з порту timeouts.ReadTotalTimeoutMultiplier = 0; // і додається до цього значення, виходить максимальний часвиконання // всієї операції timeouts.ReadTotalTimeoutConstant = 1000; // Значення те саме, що й у попередніх двох параметрів, проте тайм-аут вважається на запис. timeouts.WriteTotalTimeoutMultiplier = 0; timeouts.WriteTotalTimeoutConstant = 1000; result = SetCommTimeouts(serial_port_handle, &timeouts); if (result == 0) ( printf("Error setting timeouts for serial port!\n"); close_serial_port(); return 1; ) // У параметри порту занесені самі прості налаштування- Без контролю // парності, без управління потоком, 1 стоп-біт. memset(¶meters,0,sizeof(parameters)); parameters.DCBlength = sizeof(DCB); GetCommState(serial_port_handle, &parameters); parameters.BaudRate = (DWORD)BAUD_RATE; parameters.ByteSize = 8; parameters.Parity = NOPARITY; parameters.StopBits = ONESTOPBIT; parameters.fAbortOnError = TRUE; parameters.fDtrControl = DTR_CONTROL_DISABLE; parameters.fRtsControl = RTS_CONTROL_DISABLE; parameters.fBinary = TRUE; parameters.fParity = FALSE; parameters.fOutX = FALSE; parameters.fInX = FALSE; parameters.XonChar=(uint8_t)0x00; parameters.XoffChar=(uint8_t)0xff; parameters.fErrorChar = FALSE; parameters.fNull = FALSE; parameters.fOutxCtsFlow = FALSE; parameters.fOutxDsrFlow = FALSE; parameters.XonLim = 128; parameters.XoffLim = 128; result = SetCommState(serial_port_handle, &parameters); if (result == 0) ( printf("Error setting serial port parameters!\n"); close_serial_port(); return 1; ) return 0; )

Як відбувається спілкування з GSM-модулем

Після того, як послідовний порт налаштований, можна відправляти AT-команди. Першою командою має бути послідовність "AT\r" , що дозволяє модулю автоматично налаштувати швидкість передачі по послідовному порту. Відповідь, яку можна отримати після цього з порту, буде виглядати як "AT\r\nOK\r\n" .

Команда є простим рядком із ASCII-символів. Щоб команду сприйняв модуль, в кінці потрібно поставити символ перекладу каретки "r" . У відповідь модуль передасть рядок символів, що складається з двох частин - команди, на яку модуль відповідає і відокремленим від неї символами "r\n" відповіддю, що закінчується символами "n". Щоб було зручніше розбирати відповіді, я створив макрос, який встановлює покажчик на початок відповіді в буфері, що приймає. Якщо ви хочете вивести відповідь у консоль, потрібно додати нульовий символ до кінця прийнятого повідомлення.

Void at_send(char *cmd, uint16_t size) ( uint16_t result; cmd = "\r"; result = puts_serial(cmd, size); return; ) uint16_t at_recv(uint8_t *buffer, uint16_t size (buffer, size); return result;
Приблизно так і виглядають допоміжні функціїдля відправки команди та отримання відповіді.

Ініціалізація модуля

Сама велика функціяу коді відповідає за налаштування модуля. При ініціалізації відправляється багато команд AT. Я опишу їх у порядку посилки модулю. Спеціально не розписую аргументи та варіанти відповідей докладно, бо їх можна знайти у документації.
  • "AT+CPIN=pin-code" Як неважко здогадатися, ця команда розблокує SIM-картку шляхом введення пін-коду. Щоб перевірити, чи потрібний пін-код, можна використовувати команду "AT+CPIN?" .
  • "AT+CREG?" Ця команда повертає статус реєстрації модуля мережі. Потрібно виконувати її, поки модуль не відповість, що у мережі він зареєстрований.
  • "AT+CGATT=1" Примушує модуль підключення до GPRS. Перевірити, чи підключений він, можна командою "AT+CGATT?" .
  • "AT+CIPRXGET=1" Включає отримання даних, переданих через з'єднання, вручну. За замовчуванням цей параметр вимкнено і дані передаються до послідовного порту відразу після отримання. Це не надто зручно, хоча і не критично – можна налаштувати модуль так, щоб разом з даними він передавав і заголовки IP, за якими можна визначити, від кого було отримано пакет. Я вирішив, що дані вручну отримувати простіше і не помилився. Як я зрозумів, дана командасприймається лише GSM-модулями SIM.COM.
  • "AT+CIPMUX=1" За промовчанням модуль може встановлювати лише одне підключення. Цей параметр включає можливість створення кількох підключень. Надсилання та прийом даних будуть відрізнятися тільки на один параметр - індекс підключення.
  • "AT+CSTT="Internet"" APN - Access Point Name, ім'я точки доступу для GPRS. Для мого провайдера має такий вигляд.
  • "AT+CIICR" Встановлює бездротове підключення GPRS. Може зайняти деякий час, тому її потрібно виконувати в циклі і перевіряти відповідь.
  • "AT+CIFSR" Повертає IP-адресу модуля. Я використовую її, щоб перевірити, чи підключений модуль до інтернету.
  • "AT+CDNSCFG="8.8.8.8","8.8.4.4"" Цією командою встановлюються сервера DNS, які використовуватимуть модуль.
  • "AT+CIPSTATUS" Крім даних про стан підключень ця команда дає інформацію про те, чи модуль готовий до встановлення з'єднань. Тож треба перевірити її відповідь.
Після виконання цих команд модуль готовий до роботи. Ну чи не буде. Тут як пощастить.

Встановлення та розрив підключень

Створення підключення здійснюється командою "AT+CIPSTART=index,"mode","address","port"".
  • index вказує порядковий номерпідключення може приймати значення від 0 до 7.
  • mode визначає протокол, який використовуватиметься з'єднанням. Може бути "TCP" або "UDP".
  • address задає адресу сервера. Якщо під час налаштування було вказано DNS-сервер, можна використовувати як IP-адресу, так і доменне ім'я.
  • port визначає порт сервера, з яким буде встановлюватися з'єднання.
Зауважу, що при використанні протоколу UDPза умовчанням датаграми надсилатимуться і прийматимуться лише з однієї адреси. Для того, щоб використовувати UDP на повну котушкуі надсилати/приймати дані з будь-яких адрес, можна використовувати так званий розширений режим UDP, який налаштовується командою "AT+CIPUDPMODE". По подробиці відсилаю до документації.

У відповідь команду можна отримати кілька варіантів відповідей. Якщо все добре, то після стандартного "OK" через невеликий проміжок часу можна отримати одну з трьох відповідей:

  • "index,ALREADY CONNECT" це означає, що підключення із заданим індексом вже встановлено і варто його пошукати.
  • "index, CONNECT OK" тут все очевидно.
  • "index,CONNECT FAIL" означає, що виникли проблеми із встановленням з'єднання.
Розірвати з'єднання можна командою "AT+CIPCLOSE=index" . Розірвати всі з'єднання та деактивувати інтерфейс GPRS можна командою "AT+CIPSHUT" .

Передача даних

Дані передаються командою "AT+CIPSEND=index,length" , де index вказує підключення, яким потрібно передати дані, а length задає довжину пакета даних. До речі, дізнатися MTU для кожного підключення можна за допомогою команди "AT+CIPSEND=?" .

Якщо все добре, то модуль у відповідь на команду видасть запрошення ">", після якого потрібно переслати дані до послідовного порту. Як тільки модуль отримає кількість байт, що дорівнює length, він скаже щось типу "index, SEND OK". Взагалі, можна не використовувати параметр length , однак у такому разі закінчення пакета даних має бути вказано за допомогою символу 0x1A , в терміналі поєднання Ctrl + Z. Для передачі довільних даних такий варіант, мабуть, не підходить.

Як бачите, передача даних – процес не надто складний. Тому переходимо до найцікавішого – прийому даних.

Прийом даних

Як тільки GSM-модуль приймає дані, він сигналізує про це, посилаючи рядок виду "+CIPRXGET:1,index\r\n" у послідовний порт . Я чесно не знаю, що означає одиниця, бо ця функція модуля документована досить слабо, але в мене вона фігурує у всіх повідомленнях про прийом пакета.

Мені не приносила радості думка про те, що доведеться тим чи іншим чином відстежувати повідомлення модуля. Однак, трохи погравшись з дебаггером, я з'ясував, що ніяких інших асинхронних повідомлень модуль не посилає, а також те, що після виконання будь-якої команди AT це повідомлення виявляється на початку буфера. Так як я склав макрос для відділення відповіді від команди шляхом пошуку підрядка "r", мене це жодним чином не зачіпало. Отже, функція прийому даних була реалізована досить просто.

Так ось, приймати дані можна командою "AT+CIPRXGET=2,index,length". Двійка означає режим прийому, даному випадкубайти просто висипаються у послідовний порт. Можна також задати отримання даних у вигляді тексту HEX, мабуть, задля запобігання конфліктам з програмним управлінням потоком . Мені це не знадобилося, бо керування потоком я взагалі не використовую. Параметр length визначає розмір пакета даних, який ми бажаємо отримати за один раз.

У відповідь ми отримаємо щось виду "+CIPRXGET:2,index,received,excess\r\n__DATA__\r\nOK\r\n" . У полі received буде перебувати кількість байт, що у пакеті даних __DATA__ , а поле excess міститиме кількість байт, які очікують своєї черги в буфері модуля. Так що якщо поле received одно нулю, можна з чистою совістю заявляти, що отримувати нічого. Власне, користуючись цим, я й реалізував неблокуючу функцію прийому даних.

На закінчення

Наполегливо рекомендую перед написанням коду освоїтися в AT-командах за допомогою PuTTY, який чудово працює з послідовним портом.

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

Теги:

  • мікроконтролери
  • програмування
  • gsm
  • gprs
Додати теги