Програмований GSM телефон на Raspberry Pi

Колись одного разу...
Якось підшукуючи аксесуари до Raspberry Pi я випадково натрапив на GSM-модуль для Raspberry Pi на основі GSM модуля SIM900 і вирішив побавитись з ним. Як виявилось, цей модуль перетворює Raspberry Pi на повноцінний мобільний телефон, програмований через модемні AT команди.

Найпростішим для мене як для Java-програміста способом працювати з цим всім виявилась Groovy Shell + Java бібліотеки для роботи з послідовним портом (jSSC) та GPIO пінами Raspberry Pi (Pi4J). Все це робилось на Raspberry Pi Model B під OS Raspbian (Debian Wheezy Linux). Отже ділюсь своїм досвідом.

В Україні Raspberry Pi та GMS-модуль можна придбати наприклад на arduino-ua.com.

Що це і з чим його їдять?
Сам модуль являє собою платку котра «насаджується» на GPIO піни Raspberry Pi. Керування модулем відбувається через послідовний порт та GPIO піни для включення/виключення модуля і для «скиду» (reset). Для роботи з GSM мережею потрібна звичайна повнорозмірна SIM-карта. Для вводу/виводу звуку модуль має мікрофонний вхід та лінійний вихід для звичайних 3.5" jack роз'ємів. Також на модулі є пара світлодіодних індикаторів — стану модуля та стану з'єднання із GSM мережею.



До модуля додається C-шна бібліотека і пара сішних демо програм, але все це добро написано досить криво і з коробки не зовсім працює. Логіка підказує що перед використанням SIM карти потрібно ввести PIN код, але можливості це зробити бібліотека не надає. Також немає out-of-the-box можливості вводити будь-які AT команди — хоча невелика модифікація бібліотеки дозволяє витягти в публічний інтерфейс ці методи, в цілому все це досить незручно.

Для експериментування хотілось вводити AT команди інтерактивно, тому, як я вже писав вище, я вирішив використати давно любимий мною інструмент — Groovy Shell. Groovy Shell це інтерактивна консоль для Java/Groovy яка йде в дистрибутиві Groovy (bin/groovysh).

PDF з AT командами для SIM900 вільно доступна на FTP виробника Pi адаптера. Там само можна знайти ще документацію.

Початок — включення
Для програмного включення/виключення та reset-у модуля потрібна бібліотека для роботи з GPIO пінами Raspberry Pi. Для Java існує така бібліотека — Pi4j. Хоча насправді можна обійтись і без неї і включати модуль разом з Raspberry Pi фізично руками. Але якщо вже автоматизувати то автоматизувати. Звичайно, можна спрочатку включити модуль через який-небудь python скріпт для GPIO (використання python з відповідними бібліотеками — типове рішення для роботи з GPIO на Raspberry Pi), але якщо Java то вже Java.

Для доступу до послідовного порта використовувалась бібліотека Java Simple Serial Connector — jSSC

Все це добро разом з депендами було викачане з офіційних сайтів і складене в lib фолдер в дистрибутиві groovy.

Тепер можна запустити GroovyShell (/bin/groovysh), але для доступу до GPIO потрібно робити це через sudo.

Алгоритм та код для включення досить простий — взяти пін, «включити», почекати декілька секунд, «виключити»:
gpio = com.pi4j.io.gpio.GpioFactory.getInstance();
pin = gpio.provisionDigitalOutputPin(com.pi4j.io.gpio.RaspiPin.GPIO_00, "Pin00", com.pi4j.io.gpio.PinState.LOW);
pin.setState(com.pi4j.io.gpio.PinState.HIGH);
Thread.sleep(3000);
pin.setState(com.pi4j.io.gpio.PinState.LOW);


Після цих маніпуляцій індикатор стану на SIM900 має загорітись.

Налаштовуєм SIM — PIN-код та адреса SMS-центру
Почнем з того, що відкриємо доступ до порта та ініціалізуєм модем:

sp = new jssc.SerialPort("/dev/ttyAMA0");
sp.openPort();
sp.setParams(9600, 8, 1, 0);

def readPort(p) { s = p.readString(); while(s!=null) { println s; s= p.readString(); } }

sp.writeString("AT\r");
readPort(sp);


Остання команда має повернути результат:
AT
OK


Тепер, як підказує мануал, для вводу PIN коду потрібно виконати команду AT+CPIN, а для налаштування номеру SMS центру — AT+CSCA. Мій PIN — 1111:
sp.writeString("AT+CPIN=1111\r");
readPort(sp);


Повертає:
AT+CPIN=1111
OK


Виконуєм:
sp.writeString("AT+CSCA=\"+380672021111\"\r");
readPort(sp);


Повертає:
AT+CSCA="+380672021111"
OK


Якщо замість OK повертається ERROR, просто виконайте команду ще раз. Я не впевнений чому, але перший раз буває повертає ERROR.

Після вводу PIN коду зелений світлодіодний індикатор на модулі має змінити частоту свого мерехтіння після того як приєднається до GSM мережі.

Відправляєм та приймаєм SMS
Робота з SMS в модулі може бути відносно складна, адже це по суті повноцінний телефон, який зберігає SMS — чорновики, вхідні, вихідні і т.п. Для простоти використаєм текстовий режим роботи з SMS (див. документацію):
sp.writeString("AT+CMGF=1\r");
readPort(sp);


Відправляєм сам SMS:
sp.writeString("AT+CMGS=\"+38<номер телефону>\"\r");
sp.writeString("Test message"+((char)0x1a));
readPort(sp);


Повертає:
AT+CMGS="+38<номер телефону>"
> Test message


Через деякий час на телефон приходить SMS з текстом «Test message». Вичитаємо ще раз з порту після затримки:
Thread.sleep(3000);
readPort(sp);


Повертає:
+CMGS: 4

OK

З мобільного я відповідаю на SMS текстом «hi».
Тепер вичитаєм вхідний SMS:
sp.writeString("AT+CMGL=\"ALL\"\r");
readPort(sp);


Повертає:
AT+CMGL="ALL"
+CMGL: 1,"REC UNREAD","+38<номер телефону>","","14/07/24,03:15:45+12"
hi

OK


Прибирання — видалимо всі SMS:
sp.writeString("AT+CMGL=\"ALL\"\r");
readPort(sp);


Щє дещо
Перевіряєм стан рахунку:

sp.writeString("ATD*111#\r");
readPort(sp);


Повертає:
ATD*111#
OK


Повторюєм readPort поки не отримаєм результат на кшталт такого:
+CUSD: 0,"Na rahunku: 108.75 grn. Info pro bonusy na *112# i *118#.
Popovniujte bud'-yakyj nomer telefonu za dopomogoju *448#


",64


Епілог
Ось наразі і все. Для більшого «фану» можна ще здійснити дзвінок з/на пристрій, але це все працює приблизно так само як і SMS — команда для вихідного дзвінку, команда для опиту стану дзвінків (чи є вхідні), команда для зняття трубки і т.п. Звичайно, для більш змістовного викоритсання бажано принаймні включити в пристрій колонки чи навушники. Але такі речі вже кращє демонструвати на відео а не описувати в статтях. Тому на цьому завершуєм.

Запрошуємо на .NET TechTalk у Львові

GlobalLogic продовжує серію відкритих TechTalks у Львові і 20 серпня запрошуємо львівську спільноту .Net-розробників на TechTalk. У програмі заходу – зовсім нові доповіді, а також теми, визнані найкращими на провідних міжнародних конференціях.

Олександр Локтев (Senior Developer, GlobalLogiс)
Introduction to CQRS

Скільки часу ви витрачаєте на оптимізацію бази даних? Як домогтися, щоб вона читалась дійсно швидко? Давайте зробимо деякі CQRS!

Ігор Буркович (Senior Developer, GlobalLogiс).
ASP.NET vNext
Доповідь буде присвячена еволюції MVC, Web API і веб-сторінок, структурі ASP.NET vNext веб-додатків, впровадження залежності “з коробки”, ASP.NET vNext, що працює на Mono на Mac і на Linux.

Антон Молдован (Senior Developer, GlobalLogic)
Under the Hood of C#

Якщо ви колись замислювались як працює LINQ, dynamic, async і т.д., то ця доповідь для вас. На цій доповіді ми поринемо у всю ту механіку, яка відбувається під капотом компілятора C#, CLR, DLR. Знання про внутрішні особливості допомагають вам краще розуміти, аналізувати, передбачати поведінку вашого коду, а значить стати трохи кращим програмістом. Антон Молдаван увійшов у трійку найкращих спікерів конференції MS SWIT 2014 з доповіддю Under the Hood of C#, яку презентуватиме у Львові.

Зареєструватися!

Крім виступів спікерів, на вас чекають networking-party з фуршетом та приємні сюрпризи для найактивніших слухачів.

Час та дата: 20 серпня, 19:00
Місце: м. Львів, вул. Шептицьких, 26, офіс GlobalLogic, GL-Club (див. на мапі)
Контактна особа: Юлія Поліковська yuliia.polikovska@globallogic.com

Lviv Loyal Camp 2014 — конференція, присвячена email-маркетингу та програмам лояльності



26 липня у Львові відбудеться перша конференція присвячена email-маркетингу та Lviv Loyal Camp 2014.
Загальновідомо, що для того, щоб залучити нового клієнта потрібно витратити втричі більше, ніж привести назад старого. Сучасні IT методи дозволяють зробити процес постійної комунікації з клієнтами автоматичним і легким.
Email-маркетинг належить до найдешевших типів маркетингових каналів, однак залишається потужним інструментом повторних продажів. Багато підприємців вже оцінили його переваги та активно користуються ними, щоб повідомляти своїм клієнтам про нові товари та послуги.
На конференції розглядатимуть:
* Високоефективні моделі продаючих розсилок;
* Робочі методи email-маркетингу;
* Теорію та практику здійснення розсилок;
* Залучення людей на сторінку підписки;
* Збір статистики та її аналіз, для підвищення ефективності

Сайт події loyalcamp.com.ua/

Панельная дискуссия «Time to innovate: Startups vs Corporations» (Киев)

Приглашаем вас принять участие в панельной дискусии “Time to Innovate: Startups vs Corporations”! Это мероприятие будет посвящено преимуществам и сложностям запуска собственных IT-стартапов, а также альтернативным способам воплощения бизнес-идей.

Меняя работу в большой корпорации на романтику собственного бизнеса, основатели обретают свободу, но вместе с ней — необходимость отвечать на множество вопросов:

  • Перспективна ли моя идея?
  • На сколько хватит накопленных мною денег?
  • Как привлечь единомышленников в команду?
  • Получу ли я инвестиции?
  • Взлетит ли мой стартап?
Зачастую подобные сомнения отпугивают программистов от экспериментов со стартапами. И далеко не все догадываются о существовании альтернативных путей: open-source разработки или стартапов внутри больших успешных корпораций.

Своими соображениями по этим вопросам поделятся Егор Анчишкин (основатель и директор Zakaz.ua), Иван Пасечник (основатель и директор стартапа Ecois.me), Юрий Козий (Project Manager, GlobalLogic) и Владислав Курмаз (Consultant Software Engineer, GlobalLogic). Модератором выступит Дмитрий Лисицкий (генеральный директор, United Online Ventures).

Дата: четверг, 24 июля.
Время: 18:00-21:00.
Место: г. Киев, ул. Николая Гринченко 2/1, Протасов Бизнес Парк, GlobalLogic (корпус Г, 3 этаж, конференц-холл).

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

По всем вопросам относительно регистрации и участия в мероприятии обращайтесь к Дарье Тхоревской: daria.tkhorevska@globallogic.com, +38 099 562-562-7.

Узнайте больше о мероприятии здесь.

Мы объявляем Lviv Euro DrupalCamp!

Lviv Euro DrupalCamp — это одно из самых масштабных Drupal-мероприятий в Восточной Европе, которое состоится уже в третий раз в жемчужине западной Украины — городе Львове в самом начале осени — 6-7 сентября.

Традиционно он собирает участников из Молдовы, Беларуси, Польши, России и Украины на очень интересные и насыщенные выходные:
  • доклады по отдельным направлениям;
  • кофе-брейки в перерывах между докладами;
  • вечеринка для участников;
  • BOF-сессия в неформальной обстановке.

Но в этом году мы пошли еще дальше и мероприятие обещает быть еще веселее и масштабнее:
  • code sprint;
  • динамичный Lazer-tag;
  • жаркий пикник на свежем воздухе;
  • подарки каждому участнику;
  • всякие вкусности и море пива (ну, а как без него?).

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

P.S. И да — до 20 июля можно сэкономить на билете!

Система automation тестів з нуля

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

ІТ у нашому селі

Концепція

ІТ у нашому селі” – подкаст про ІТ індустрію в Україні та в цілому. Останні новинки, жваві дискусії та цікаві гості.

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

  • “ІТ” у назві розшифровується, як і належить, “Інформаційні Технології”, тому тематика випусків не обмежена буднями вітчизняного аутсорсингу, а, навпаки, охоплює як омога ширший спектр предметних областей, що є дотичними до цифрового світу.
  • Ми пробуємо експерементувати з різними форматами, проте одним з принципів подкасту є і буде ведення живої бесіди.
  • Ми намагаємось уникати специфічної термінології, тому контент є максимально дружелюбним до середньостатистичного слухача, який, цілком можливо, з ІТ нічого спільного немає.
  • Тривалість випуску коливається від 45 до 90 хвилин.
  • Новий випуск з’являється щотижнево (зазвичай у середу, але іноді в четвер).

Odessa JS

5-6 июля пройдет конференция для Front-end разработчиков в Одессе- 'OdessaJS#2'.

Воу воу полегче, что это такое?
В прошлом году мы сделали OdessaJS #1 odessajs.org.ua/2013/index.html, где любимые аудиторией спикеры рассказали о Backbone.js, Angular.js, Node.js, CoffeeScript etc

На конференции OdessaJS'2014 будет еще круче:

• Теперь 2 дня общения на технические темы
• Только самое актуальное и полезное в программе конференции
• 2 потока сессий- презентации и практические воркшопы

Участники услышат о новых модных и старых популярных фреймверках и подходах. Мы обсудим тенденции развития современных фреймверков, таких как ReactJS от Facebook, AngularJS от Google, Backbone, D3, EmberJS etc

Как строить архитектуру приложения? Мобильные приложения на JavaScript и HTML5? Разработка игр?

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

Кнференция пройдет в просторных залах отельного комплекса ОК 'Одесса' в 5ти минутах хотьбы от моря.
Следите за новостями. До встречи в Одессе на долгожданной тусовке для Front-end разработчиков!

Сайт: odessajs.org.ua/

Lviv Hadoop User Group

Зустріч №1
З радістю повідомляю, що компанія Epam погодилася надати аудиторію та піцу:) для проведення першої зустрічі нашого комюніті!

Отже, вже 19 червня, о 19:00 запрошую всіх бажаючих на першу зустріч юзер групи за адресою львівського офісу Epam (вул. Олени Степанівни 45, 5й поверх — трейнінг центр).

Заплановані теми доповідей:

«EDW and Hadoop» Yuriy Bodnar
«R on Hadoop» Kostiantyn Kudriavtsev

Free talks and pizza
Для відвідування заходу реєстрація обов«язкова — кількість місць обмежена!!!

Джерело події та реєстрація тут.