Підключаємо телефон Siemens до контролера AVR
Напевно у багатьох вдома завалявся старий сіменс з монохромним екраном. Викидати його начебто шкода, але в той же час для дзвінків його використовувати не хочеться. Такому телефону можна знайти застосування, наприклад в GSM сигналізації або використовувати його в якості GPRS модему, а так само забивати цвяхи і колоти горіхи. Під катом піде розповідь про підключення такого телефону до мікроконтролеру AVR і роботи з ним. Все що тут написано справедливо для моделі A60 (тому що перевірялося на ньому). Але я думаю що працювати буде з більшістю телефонів Siemens.
Під час експериментів жоден телефон не постраждав :)
Для початку трохи теорії. Для обміну інформацією з зовнішнім світом у телефону існує послідовний інтерфейс (читай UART). Щоб наказати телефону зробити щось (зателефонувати, відправити смс ітд) потрібно відправити йому відповідну команду до цього інтерфейсу. Обмін інформацією може відбуватися на різних швидкостях тому у телефону є автодетект швидкості. Я цілком успішно працював на швидкостях 9600, 19200, 56000 і 115200. Команд для управління телефоном ДУЖЕ багато, але зазвичай вистачає лише кількох. Взагалі дуже зручно вивчати ці команди підключивши телефон до кого порту комп'ютера і через термінальну програму експериментувати. Безпосередньо до COM порту звичайно ж підключати не можна, потрібно використовувати перетворювач логічних рівнів. Максимальна напруга яке можна подати на вхід телефону - 3.3 вольта. Про це слід пам'ятати інакше є ризик спалити телефон. Тому юзаем резисторний дільник або резистор і стабілітрон (якщо це необхідно). До микроконтроллеру я підключав свій мобільник так
Важливо знати що введення команди повинен закінчуватися символом перекладу рядка! Я вбив майже 20 хвилин поки зрозумів, що популярна програма Terminal, що не додає цей символ до введеної команді після натискання кнопки Send. Тому команди краще писати в самому нижньому текстовому полі, і новий рядок робити вручну. Тепер перейдемо безпосередньо до командам:
AT - найпростіша команда. Чи не робить абсолютно нічого. Такий собі nop. Якщо телефон справний і правильно підключений, то після введення цієї команди і натискання enter апарат повинен відповісти OK.
ATD x; - І ти також телефон набрати номер x. Якщо дзвінок не відбувся (наприклад немає сигналу базової станції) то телефон відповідає NO DIALTONE.
AT + CPAS - ця команда потрібна для того щоб дізнатися про стан телефону в певний момент часу. На цю команду телефон відповідає + CPAS: х де х код стану. Х може приймати кілька значень: 0 - Телефон в режимі очікування дзвінка, 3 - вхідний дзвінок, 4 - йде розмова. Ця команда корисна коли потрібно знати взяв абонент трубку після того як ми набрав його номер командою ATD.
ATA - прийняти виклик. Після її виконання телефон «бере трубку». Якщо підпаяти до висновків гарнітури, то цілком можна передавати якусь аудиоинформацию звонящему. До речі сам факт дзвінка легко визначити. Телефон під час дзвінка періодично посилає слово RING.
AT + CHUP - Відхилити виклик. Еквівалент натискання червоної трубки на клавіатурі апарату.
AT + CLCC - Дозволяє дізнатися номер абонента, що викликається. Буває корисно коли потрібно приймати дзвінки тільки від певного номера або від групи номерів. Природно використовувати цю команду має сенс тільки після отримання RING від телефону. В іншому випадку телефон просто відповість ОК і все.
AT + CBC - запит рівня заряду батареї телефону. Телефон відповість рядком виду
+ CBC: х де х рівень заряду помноживши на 100 можна отримати цю величину у відсотках.
Тепер найцікавіше, і мабуть саме часто використовується - робота з СМС повідомленнями. Почнемо з відправки. Перед відправкою, смс повідомлення повинні бути перекодовані в хитрий формат PDU. Повідомлення в цьому форматі вже містить номер одержувача, текст повідомлення і трохи службової інформації: кодування, довжина повідомлення, номер смс центру ітд. Поки я осягав пристрій цього формату, я прийшов до висновку що він був придуманий наркоманами під якийсь надзвичайно Ядрена травою. Його описувати тут я не буду, так як для перекодування я написав невелику програму:
Якщо кому цікаво опис PDU формату - внизу сторінки є пара слушних посилань. Робота з програмою гранично проста: Вводимо номер одержувача і текст смс, тиснемо кнопку і отримуємо готову смску в потрібному нам форматі. Розмір обмежений 70 символами, але я думаю, що для сигналізації наприклад, цього достатньо.
AT + CMGS = <довга повідомлення в форматі PDU> - команда відправляє СМС
Після відправки цієї команди потрібно передати символ перекладу рядка. Телефон відповість символом «>». Тепер можна передавати безпосередньо повідомлення. Повідомлення повинно закінчуватися символом з кодом 0x1A.
Hint: Щоб ввести цей символ в термінал потрібно натиснути ctrl + z
AT + CNMI = 1,1 - команда включає відображення номера прийшла СМСки. Це дуже зручно тому знатимемо коли повідомлення прийшло і плюс його номер для того щоб прочитати або видалити повідомлення. Після виконання цієї команди, телефон після отримання повідомлення видаватиме рядок виду + CMTI: «MT», <номер смски> Цей номер ми будемо використовувати в наступних двох командах.
AT + CMGR = <номер смски> - видає смс повідомлення із заданим номером. Телефон передасть два рядки:
+ CMGR: <статус> ,, <довга PDU>
<Повідомлення в PDU форматі>
Статусможет бути двох видів: 0 - непрочитані, 1 - прочитані.
AT + CMGD = <номер смски> Видалення смски з пам'яті телефону.
пишемо софт
Софт для управління мобільником нічого хитрого з себе не представляє. Ініціалізіруем UART і передаємо через нього потрібні команди або отримуємо їх від телефону. Я написав демонстраційний приклад який відсилає смску при включенні контролера.
І що далі?
А тепер можна зробити на основі цього мобільника що завгодно! Можна створити віддалене управління навантаженнями по СМС, охорону для гаража, підслуховуючий пристрій включається віддалено та й ще багато чого була б тільки фантазія.
посилання
демонстраційний приклад
моя прога для створення повідомлень у форматі PDU
PDUspy - відмінна програма для роботи з PDU форматом.
АТ команди телефонів сіменс S35i, C35i, M35i (основні команди будуть працювати у всіх моделях)
Про PDU формат