Домой / Статьи / Программируемый GSM телефон на Raspberry Pi

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


Начало – включение

Для программного включения/выключения reset-у модуля требуется библиотека для работы с GPIO пинами Raspberry Pi. Для Java существует такая библиотека — Pi4j.

Хотя на самом деле можно обойтись и без нее и включать модуль вместе с Raspberry Pi физически руками. Но если уж автоматизировать то автоматизировать.

Конечно, можно сначала включить модуль через какой-либо python скрипт для GPIO (использование python с соответствующими библиотеками — типовое решение для работы с GPIO на Raspberry Pi), но если Java то уже Java. Также рекомендуем сайт по Raspberry Pi 4.

Для доступа к последовательному порту использовалась библиотека 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, «На счете 300 рублей. Информация по бонусу на * 112 # i * 118 #.

Пополняйте счет, пожалуйста, с помощью * 448 #

Эпилог

Вот сейчас и все. Для большего «фана» можно еще осуществить звонок с/на устройство, но это работает примерно так же как и SMS — команда для выходного звонку, команда для опроса состояния звонков (есть входные), команда для снятия трубки и т. п.

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

About admin

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

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

Яндекс.Метрика