У меня зазвонил Репка-фон. Делаем телефон на базе Repka Pi 3 с применением модуля SIM868
Простой 15 мин Python *Разработка робототехники *Разработка на Raspberry Pi *Интернет вещей DIY или Сделай сам Туториал
Это четвертая статья серии, посвященной модулю GSM/GPRS/GNSS Bluetooth HAT, способному добавить в ваше IoT-устройство или другое оборудование функции мобильного телефона.
Настало время превратить модуль GSM/GPRS/GNSS Bluetooth HAT, созданный на базе SIM868, в самый настоящий телефон, способный звонить и принимать звонки. Мы расскажем о том, как это можно делать из программы, составленной на языке Python, а также опишем соответствующие AT-команды. Вы проверите их в работе с помощью терминала minicom.
Также вы научитесь работать с определителем номера вызывающего абонента, создавать белый список номеров, с которых разрешен прием звонков и сообщений SMS, выбирать мелодию, которая будет звучать при вызове и ее громкость. Вы сможете управлять громкостью динамика, подключенного к модулю и чувствительностью микрофона.
Это четвертая статья серии, посвященной модулю GSM/GPRS/GNSS Bluetooth HAT, способному добавить в ваше IoT-устройство или другое оборудование функции мобильного телефона.
Из первой статьи серии, посвященной модулю GSM/GPRS/GNSS Bluetooth HAT, вы узнали, как обмениваться данными между микрокомпьютером Repka Pi с JSON-сервисом, доступным в интернете, по каналу GPRS.
Вторая статья рассматривает такой обмен глубже, на уровне AT-команд, передаваемых в модуль через UART.
В третьей статье подробно рассказано об отправке и приеме коротких текстовых сообщений SMS (Short Message Service). Рассмотрен текстовый режим, а также режим PDU (Protocol Data Unit), в котором можно отправлять и принимать сообщения с символами кириллицы.
У меня зазвонил телефон.
— Кто говорит?
— Слон.
— Откуда?
— От верблюда.
— Что вам надо?
— Шоколада.
К. И. Чуковский, 1924.
Содержание данной статьи:
-
Сборка макета
-
Установка необходимых библиотек
-
Звонок из командной строки через Python
-
Отвечаем на звонок из командной строки
-
Управление на уровне AT-команд
-
Звоним с помощью AT-команды
-
Отвечаем на звонок AT-командой
-
Управление громкостью звука
-
Управление микрофоном
-
Запрет и фильтрация входящих вызовов
-
Обнаружение DTMF для автоответчика
-
Полезные ссылки
-
Итоги
Содержание статьи:
- 1 Сборка макета
- 2 Установка необходимых библиотек
- 3 Звонок из командной строки
- 4 Отвечаем на звонок из командной строки
- 5 Управление на уровне AT-команд
- 6 Звоним с помощью AT-команды
- 7 Отвечаем на звонок AT-командой
- 8 Управление громкостью звука
- 9 Управление микрофоном
- 10 Запрет и фильтрация входящих вызовов
- 11 Обнаружение DTMF для автоответчика
- 12 Полезные ссылки
- 13 Итоги
Сборка макета
Для работы с этой статьей соберите простой макет, подключив модуль GSM/GPRS/GNSS Bluetooth HAT непосредственно к разъему GPIO микрокомпьютера Repka Pi как «шляпу» (плата функционального расширения для 40 pin разъёма, аналогичного на Repka Pi с Raspberry Pi) как показано на рис.1.
Рис. 1. Подключение GSM/GPRS/GNSS Bluetooth HAT к Repka Pi через GPIO.
Вам также потребуется гарнитура с микрофоном. Вставьте ее разъем в модуль, как это показано на рис.1.
Перед подключением модуля GSM/GPRS/GNSS Bluetooth HAT к 40 pin разъёму (разъёму GPIO, как его ещё часто называют) Repka Pi установите перемычки желтого цвета на пины B, и вставьте SIM-карту мобильного оператора.
Вам также нужно будет отключить вывод сообщений на UART0 с помощью уилиты repka-config. Для этого запустите repka-config одноимённой командой в консоле или через ярлык на рабочем столе, и, когда появится окно с текущей максимальной частотой процессора, щелкните в нем кнопку Ok. Далее в меню настраиваемых опций выберите Включить / отключить вывод сообщений на UART0. После этого отключите вывод сообщений (рис.2).
Рис. 2. Отключение вывода сообщений на UART0.
При выходе из программы repka-config перезагрузите Repka OS. Когда Repka OS перезагрузится, включите питание модуля кнопкой PWRKEY, нажав ее примерно на одну секунду. После этого на плате модуля GSM/GPRS/GNSS Bluetooth HAT должны замигать светодиоды красного цвета.
Вам потребуется доступ к консоли Repka OS, установленной на Repka Pi, через сеть или через оконный интерфейс Repka OS. В наших примерах мы будем использовать доступ к консоли через терминал SSH.
Если вы часто работаете в темное время суток, и вам мешает очень яркое мигание синего светодиода на плате Repka Pi, добавьте такую строку в crontab:
@reboot echo 0 > /sys/class/leds/rbs:red:status/brightness
Это можно сделать командой crontab -e
По этой команде откроется окно редактора файла заданий crontab. Добавьте с его помощью указанную выше строку в конец файла и сохраните изменения. Теперь после каждой перезагрузки синий светодиод будет отключаться.
Установка необходимых библиотек
Программы из этой статьи используют библиотеки Python SIM800L и RoverConnect.
Сначала вам нужно установить библиотеку SIM800L, сайт которой находится по адресу https://pypi.org/project/sim800l-gsm-module/1.0.0/. Установка описана здесь https://github.com/Ircama/raspberry-pi-sim800l-gsm-module:
# apt update # apt install python3-pip # python3 -m pip install sim800l-gsm-module
Запустите эти команды с правами пользователя root в консоли SSH, подключившись к микрокомпьютеру Repka Pi с работающей там Repka OS.
Вслед за установкой SIM800L скопируйте в рабочий каталог библиотеки RoverConnect:
# git clone git@github.com:AlexandreFrolov/rover_connect2.git
Если вы работали с библиотекой RoverConnect при чтении предыдущих статей этой серии, выполните клонирование повторно, так как там появились новые функции.
Звонок из командной строки
Чтобы позвонить на заданный телефонный номер из модуля GSM/GPRS/GNSS Bluetooth HAT, установите в этот модуль SIM-карту, а потом запустите программу phone_dial.py (листинг 1).
Листинг 1. https://github.com/AlexandreFrolov/rover_connect2/blob/main/phone_dial.py
import traceback import pdb import serial import time from sim800l import SIM800L from rover_connect import RoverConnect rover = RoverConnect(‘/dev/ttyS0’, ‘internet.mts.ru’) power_status = rover.power_current_status() print(«Питание: » + power_status) creg_status = rover.creg_status() print(creg_status) cpin_stat = rover.cpin_status() print(cpin_stat) #pdb.set_trace() phone_number = input(‘Позвонить на номер телефона (+7XXXXXXXXXX):n’) rc = rover.dial_phone_number(phone_number) print(rc)
После запуска программа проверит, включено ли питание модуля с помощью функции rover.power_current_status, если включено, функция вернет нулевое значение.
Далее программа phone_dial.py проверяет регистрацию SIM-карты в сети функцией creg_status, выдающей в модуль команду AT+CREG:
def creg_status(self): creg_data = self.command_data_ok(‘AT+CREG?’) value_0 = None value_1 = None if creg_data.startswith(«+CREG: «): creg_params = creg_data.split(‘:’)[1].strip() split_result = creg_params.split(‘,’) value_0 = split_result[0].strip() value_1 = split_result[1].strip() return value_0, value_1
Если все нормально, функция вернет значения (0,1). Если SIM-карта зарегистрирована, значение второго параметра будет равно единице. Подробнее о команде AT+CREG мы расскажем ниже, при описании AT-команд, предназначенных для работы со звонками.
Далее программа проверяет, находится ли SIM-карта в состоянии готовности с помощью функции cpin_status:
def cpin_status(self): cpin = self.command_data_ok(‘AT+CPIN?’) status = None if cpin.startswith(«+CPIN: «): pin = cpin.split(‘:’)[1].strip() return pin
Если карта находится в состоянии готовности, функция возвращает ответ READY.
Далее программа выводит на консоль приглашение для ввода номера телефона и вызывает функцию rover.dial_phone_number. При вводе используйте формат +7XXXXXXXXXX:
phone_number = input(‘Позвонить на номер телефона (+7XXXXXXXXXX):n’) rc = rover.dial_phone_number(phone_number)
Функция rover.dial_phone_number использует для вызова команду ATD:
def dial_phone_number(self, phone_number): buf = None rc = self.command_ok(‘ATD’ + phone_number + ‘;’) if(rc): try: while True: while self.ser.inWaiting() > 0: buf = self.ser.readline() buf = buf.decode(‘gsm03.38’, errors=»ignore»).strip() if buf != None: break except KeyboardInterrupt: if self.ser != None: self.ser.close() return(buf)
После того как программа совершит звонок командой ATD, она будет ждать получения строк BUSY или NO CARRIER (соответственно, при отклонении или завершении звонка). Функция rover.dial_phone_number вернет вызывающей программе полученную строку.
Также работу программы можно прервать с клавиатуры комбинацией клавиш Ctrl+C.
Отвечаем на звонок из командной строки
Для приема звонков, поступающих на номер SIM-карты, вставленной в модуль GSM/GPRS/GNSS Bluetooth HAT, мы подготовили программу phone_responce.py (листинг 2).
Листинг 2. https://github.com/AlexandreFrolov/rover_connect2/blob/main/phone_responce.py
import traceback import pdb import serial import time from sim800l import SIM800L from rover_connect import RoverConnect rover = RoverConnect(‘/dev/ttyS0’, ‘internet.mts.ru’) print(«Call waiting…») rc = rover.responce_phone_call() print(«Call from: » + rc)
Эта программа очень простая. После создания объекта класса RoverConnect и установки соединения с модулем она переходит в состояние ожидания звонка, вызывая функцию rover.responce_phone_call:
def responce_phone_call(self): buf = «» phone_number = «» self.ser.flushInput() try: while True: while self.ser.inWaiting() > 0: data = self.ser.readline() buf = data.decode(‘gsm03.38’, errors=»ignore»).strip() if «RING» in buf: break if ‘+CLIP:’ in buf: print(buf) rc = self.command_ok(‘ATA’) split_result = buf.split(‘,’) phone_number = split_result[0].split(‘: ‘)[1].strip(‘»‘) break; while True: data = self.ser.readline() buf = data.decode(‘gsm03.38’, errors=»ignore»).strip() if buf != None: break time.sleep(1) except KeyboardInterrupt: rc = self.command_ok(‘ATH’) if self.ser != None: self.ser.close() return(phone_number)
Когда функция rover.responce_phone_call получает управление, она очищает буфер последовательного порта, а затем ожидает, когда модуль вернет строку RING. Это произойдет, когда на номер SIM-карты поступит телефонный вызов.
Если вызов поступил, функция ищет в прочитанном буфере строку +CLIP: и «снимает трубку» AT-командой ATA. Теперь соединение установлено, а номер вызывающего абонента записан в переменную phone_number.
Если следующий цикл ожидания был прерван при помощи клавиатуры, подключенной к Repka Pi, то функция rover.responce_phone_call прерывает соединение командой ATH.
Управление на уровне AT-команд
Из этого раздела вы узнаете, как использовать AT-команды для того, чтобы позвонить через модуль GSM/GPRS/GNSS Bluetooth HAT или принять звонок, а также настроить многочисленные параметры, имеющие отношение к телефонным звонкам.
Вам будет полезна подробная документация по AT-командам SIM868, которую можно скачать с сайта SIMCom, если там зарегистрироваться. В частности, пригодится файл SIM800 Series_AT Command Manual_V1.12.pdf с руководством SIM800 Series_ AT Command Manual.
Изучение AT-команд мы будем выполнять с помощью терминальной программы minicom. Её можно установить и запустить в Repka OS следующим образом:
# apt install minicom # minicom -D /dev/ttyS0
В консоли SSH появится окно программы minicom для ввода AT-команды и просмотра результатов их выполнения.
При работе над этой статьей удобно включить эхо-режим командой ATE1. Если вы ввели команду AT, увидели ее и в ответ на команду получили OK, значит эхо-режим включен. Команда ATE0 выключает эхо-режим.
Звоним с помощью AT-команды
Когда вы создаете программу, выполняющую звонки через модуль с SIM-картой, то перед попыткой сделать звонок имеет смысл проверить состояние модуля, а также готовность и наличие регистрации SIM-карты.
Проверка питания модуля GSM/GPRS/GNSS Bluetooth HAT
На модуле GSM/GPRS/GNSS Bluetooth HAT имеется кнопка включения питания. Чтобы включить модуль, ее нужно нажать и через секунду отпустить.
С помощью команды AT+CGNSPWR? можно проверить, включился ли модуль:
AT+CGNSPWR? +CGNSPWR: 0
Если команда вернула нулевое значение, питание включено.
Проверка готовности SIM-карты
Ваша SIM-карта может быть заблокирована PIN-кодом. С помощью команды AT+CPIN? можно проверить, требуется ли вводить PIN-код:
AT+CPIN? +CPIN: READY
Если PIN-код введен правильно или не требуется, то карта находится в состоянии готовности и мы получаем ответ +CPIN: READY.
Возможны следующие значения:
-
READY — модуль не ожидает ввода пароля;
-
SIM PIN — нужно ввести код SIM PIN;
-
SIM PUK — нужно ввести код SIM PUK;
-
PH_SIM PIN — нужен пароль от телефона к SIM-карте (функция «антивор»);
-
PH_SIM PUK — нужен код SIM PUK (функция «антивор»).
Если требуется ввести код или изменить его, воспользуетесь такой командой:
AT+CPIN=<pin>[,<новый pin>]
Подробнее о PIN-кодах и командах для смены паролей вы можете прочитать в упомянутой ранее документации SIM800 Series_ AT Command Manual.
Если не предъявляется повышенных требований к безопасности, PIN-код можно не устанавливать.
Проверка регистрации в сети мобильного оператора
Чтобы проверить, зарегистрирована ли ваша SIM-карта, вставленная в модуль GSM/GPRS/GNSS Bluetooth HAT, в сети мобильного оператора, используйте такую команду:
AT+CREG? +CREG: 0,1
Первый параметр, равный нулю, означает, что регистрация в сети была отключена командой AT+CREG=0. Другие возможные значения:
-
0 — автоматическая отправка кодов результатов при регистрации в сети отключена;
-
1 — автоматическая отправка кодов результатов при регистрации в сети включена;
-
2 — автоматическую отправка кодов результатов при регистрации в сети с информацией о местоположении включена
Здесь нас интересует больше всего вторая цифра, равная единице. Вот все возможные значения:
-
0 — не зарегистрирован, устройство в настоящий момент не ищет нового оператора для регистрации;
-
1 — зарегистрирован, домашняя сеть;
-
2 — не зарегистрирован, но устройство в настоящий момент ищет нового оператора для регистрации;
-
3 — регистрация отклонена;
-
4 — состояние регистрации неизвестно;
-
5 — Зарегистрирован, находится в роуминге.
Если SIM-карта зарегистрирована, значение второго параметра будет равно единице.
Совершение звонка
Для того чтобы позвонить по заданному телефонному номеру, используйте команду ATD:
ATD+79251234567; OK
Здесь мы звоним на номер +79251234567 (этот номер приведен только для примера). Не забудьте добавить точку с запятой к номеру абонента.
Если абонент не стал отвечать на звонок, модем возвращает такой ответ:
BUSY
Если же абонент взял трубку, а потом завершил соединение, модуль возвратит строку:
NO CARRIER
Завершение звонка со стороны модуля
Модуль может завершить соединение по своей инициативе с помощью команды ATH:
ATH OK
Когда будете ее тестировать, то сначала установите соединение, введите команду ATH и нажмите клавишу Enter. Соединение будет разорвано.
Повтор предыдущего вызова
Чтобы повторить предыдущий вызов, используйте команду:
ATDL OK
При этом модуль будет звонить на номер, который был задан команде ATD при предыдущем звонке.
Отвечаем на звонок AT-командой
Если позвонить на номер SIM-карты, установленной в модуле, на консоли появятся сообщения вида:
RING +CLIP: «+79251234567″,145,»»,0,»»,0 … RING +CLIP: «+79251234567″,145,»»,0,»»,0
Чтобы ответить на звонок, передайте в модуль команду ATA и нажмите клавишу Enter:
ATA OK
Для завершения звонка воспользуйтесь описанной выше командой ATH.
Определитель номера звонящего абонента
По умолчанию в модуле включен определитель номера звонящего абонента. Этот номер, также его формат передаются через первый и второй параметры после +CLIP:.
Формат написания номера может быть таким:
-
161 — национальный номер;
-
145 — международный номер (+7,+3, и так далее);
-
129 — остальные номера (такие как 8XXX);
-
177 — формат, специфический для данной мобильной сети
Управление идентификацией вызывающего абонента
С помощью команды AT+CLIP? можно узнать, включен ли в вашем модуле определитель номера звонящего абонента (идентификация вызывающего абонента).
Чтобы получить текущий режим идентификации вызывающего абонента, введите команду:
AT+CLIP? +CLIP: 1,1
Первое число в полученной строке указывает, была ли включена идентификации:
-
0 — идентификация отключена;
-
1 — идентификация включена.
Проверяя второе число, можно определить, возможна ли идентификация для SIM-карты, установленной в модеме, и для текущего мобильного оператора:
-
0 — идентификация недоступна;
-
1 — идентификация доступна;
-
2 — нет информации о доступности идентификации (например, если недоступна мобильная сеть).
Чтобы отключить определитель номера, используйте команду:
AT+CLIP=0
После этого при поступлении звонка модуль отправит в терминальную программу только строку RING, без строки +CLIP:.
Для обратного включения определителя введите:
AT+CLIP=1
После этого после строки RING терминалом будет получена строка +CLIP: с номером вызывающего абонента.
Управление громкостью звука
С помощью AT-команд можно управлять громкостью звука в гарнитуре, подключенной к модулю GSM/GPRS/GNSS Bluetooth HAT, а также чувствительностью микрофона.
Отключение звука при вызове
Команда AT+CALM? позволяет определить текущий режим звука, когда абонент звонит по номеру SIM-карты, вставленной в модуль:
AT+CALM? +CALM: 0
Эта команда может вернуть такие значения:
-
0 — нормальный режим;
-
1 — режим тишины.
Для изменения режима воспользуйтесь такой командой:
AT+CALM=<mode>
Здесь режим mode, равный нулю, соответствует обычному режиму, а равный единице — режиму тишины.
Выбор мелодии при вызове
У вас есть возможность выбирать мелодию, которая будет звучать при поступлении вызова в гарнитуре, подключенной к модулю. За это отвечает команда AT+CALS.
С помощью следующей команды можно узнать доступные номера мелодий:
AT+CALS=? +CALS: (0-19),(0,1)
В данном случае можно выбирать из 20 мелодий.
Команда AT+CALS? покажет номер текущей мелодии, а также режим предварительного прослушивания:
AT+CALS? +CALS: 3,0
Здесь при поступлении вызова будет играть мелодия с номером 3.
Чтобы прослушать по очереди доступные мелодии, используйте такую команду:
AT+CALS=4,1
Здесь первый параметр задает номер мелодии, а второй, равный единице, запускает проигрывание мелодии сразу после ввода команды.
Если вам понравилась мелодия, скажем, с номером 19, установите ее так:
AT+CALS=19,0
Теперь она будет проигрываться при поступлении вызова.
Регулировка громкости мелодии вызова
AT-команда AT+CRSL позволяет узнать и отрегулировать громкость мелодии, которая проигрывается в гарнитуре при поступлении вызова. Громкость определяется в виде числа в диапазоне [0, 100].
Команда AT+CRSL? выводит в терминал текущий уровень громкости:
AT+CRSL? +CRSL: 24
Чтобы изменить громкость, задайте новое значение из диапазона [0, 100]:
AT+CRSL=50 OK AT+CRSL? +CRSL: 50
Регулировка громкости динамика
AT-команда AT+CLVL позволяет определять и регулировать уровень громкости динамика. Значение громкости динамика представляется числом в диапазоне [0,100].
Чтобы узнать текущий уровень громкости, используйте команду AT+CLVL?:
AT+CLVL? +CLVL: 50
А так можно установить другой уровень громкости:
AT+CLVL=100
Здесь устанавливается максимальная громкость.
Управление микрофоном
При необходимости вы можете изменять чувствительность микрофона, а также отключать его во время вызова.
Отключение микрофона при вызове
Если при вызове нужно отключить микрофон, то это можно сделать так:
AT+CMUT=1 OK
Чтобы включить микрофон снова, используйте команду:
AT+CMUT=0 OK
Заметим, что обе эти команды работают, если соединение уже установлено.
Регулировка чувствительности микрофона
С помощью команды AT+CMIC? можно узнать текущие значения усиления для каналов, к котором может быть подключен микрофон:
AT+CMIC? +CMIC: (0,6),(1,6),(2,6),(3,6)
В данном случае значение усиления, которое может лежать в диапазоне [0,15], установлено для всех четырех каналов, доступных на SIM868:
-
0 — главный аудиоканал;
-
1 — вспомогательный аудиоканал;
-
2 — главный аудиоканал в режиме hands-free;
-
3 — вспомогательный аудиоканал в режиме hands-free
Ниже приведены доступные значения коэффициента усиления:
-
0: 0dB
-
1: +1.5dB
-
2: +3.0 dB
-
3: +4.5 dB
-
4: +6.0 dB
-
5: +7.5 dB
-
6: +9.0 dB
-
7: +10.5 dB
-
8: +12.0 dB
-
9: +13.5 dB
-
10: +15.0 dB
-
11: +16.5 dB
-
12: +18.0 dB
-
13: +19.5 dB
-
14: +21.0 dB
-
15: +22.5 dB
Чтобы установить уровень усиления для заданного канала, используете такую команду:
AT+CMIC=0,15 OK AT+CMIC? +CMIC: (0,15),(1,15),(2,15),(3,15)
Здесь было установлено максимальное усиление +22.5 dB для всех каналов. Теперь микрофон способен уловить даже очень тихие звуки.
Запрет и фильтрация входящих вызовов
Наверное, вас раздражают рекламные звонки, которые могут поступать на ваш мобильный телефон. Однако если телефон встроен в промышленное оборудование, то нежелательные вызовы могут привести к неприятным последствиям.
С помощью AT-команд вы можете вообще запретить входящие вызовы, или ограничить их белым списком разрешенных номеров.
Режим запрета входящих вызовов
Команда AT+GSMBUSY позволяет запретить поступление любых входящих звонков:
AT+GSMBUSY=1
При попытке сделать звонок на номер SIM-карты, вставленной в модуль, абонент услышит сигнал «занято».
Можно разрешить звонки снова следующим образом:
AT+GSMBUSY=0
Белый список номеров
С помощью команды AT+CWHITELIST можно создать список белых номеров, с которых разрешено поступление звонков, а также сообщений SMS.
По умолчанию белый список отключен:
AT+CWHITELIST? +CWHITELIST: 0
Чтобы его включить, используйте команду AT+CWHITELIST=<param>, где param может принимать одно из значений:
-
0 — отключить белый список вызовов;
-
1 — включить только белый список вызовов;
-
2 — включить только белый список SMS;
-
3 — включить белый список вызовов и SMS
Если нужно включить белый список и добавить в него номер, задайте команде AT+CWHITELIST дополнительно индекс номера в диапазоне [1,30], а также телефонный номер:
AT+CWHITELIST=3,1,»+79251234567″
Здесь мы разрешили прохождение звонков и получение SMS только для номера «+79251234567» (номер приведен только в качестве примера). Попытки позвонить на номер SIM-карты, установленной в модуле, или отправить на этот номер SMS с других номеров, будут отвергнуты.
Отключить белый список можно так:
AT+CWHITELIST=0
Обнаружение DTMF для автоответчика
Возможно, вы еще помните старые автоответчики, в которых для записи входящих и исходящих сообщений использовались кассеты с магнитной лентой (рис.3).
Рис. 3. Автоответчик с кассетами.
Если вы делаете современный автоответчик на базе Repka Pi и SIM868, вам пригодится функция обнаружения двухтоновых многочастотных звуковых сигналов DTMF (Dual-Tone Multi-Frequency). Эти сигналы применяется для ввода команд в автоматизированных голосовых меню и системах голосового ответа.
Вспомните:
— нажмите 1 для соединения с отделом продаж, 2 — для соединения со службой поддержки… и так далее
По умолчанию обнаружение DTMF отключено, что можно определить с помощью следующей команды:
AT+DDET? +DDET: 0,0,0,0
Включите обнаружение DTMF следующим образом:
AT+DDET=1 OK AT+DDET? +DDET: 1,0,0,0
Теперь позвоните с мобильного телефона на номер SIM-карты, установленной в модуле и после появления в терминале строки RING установите соединение командой ATA.
Когда соединение будет установлено, откройте на смартфоне клавиатуру и нажимайте цифры, а также символы # и *. В консоли будут появляться сообщения следующего вида:
+DTMF: 1 +DTMF: 2 +DTMF: 3 … +DTMF: 9 +DTMF: # +DTMF: *
Ваша программа автоответчика может выделять эти цифры и символы из сообщения +DTMF:, запуская, например, для проигрывания соответствующие звуковые файлы.
Подобный автоответчик описан в статье Интерактивный автоответчик на Raspberry Pi и GSM модуле SIM800L.
Полезные ссылки
-
Передаем данные от Repka Pi и Raspberry Pi в интернет по GSM связи через модуль SIM868 и GPRS
-
Изучаем передачу данных через GPRS с помощью SIM868 и Repka Pi (продолжение, часть 2)
-
Отправляем и принимаем SMS с помощью SIM868 на Repka Pi
-
Библиотека SIM800L
-
Проект Raspberry Pi SIM800L GSM module
-
Библиотека RoverConnect
-
Документация по AT-командам SIM868
-
Интерактивный автоответчик на Raspberry Pi и GSM модуле SIM800L
Итоги
Используя одноплатник Repka Pi и модуль GSM/GPRS/GNSS Bluetooth HAT, созданный на базе SIM868 в качестве мобильного телефона и с помощью Python и библиотеки RoverConnect мы смогли звонить по заданному номеру, а также принимать внешние звонки.
Определитель номера, встроенный в модуль, помог вам узнать номер абонента, звонящего на SIM-карту, установленную в GSM/GPRS/GNSS Bluetooth HAT.
С помощью терминала minicom мы с Вами изучили набор AT-команд, предназначенный для выполнения всех основных функций телефона.
Теперь Вы умеете создавать белый список номеров, с которых разрешен прием звонков и сообщений SMS, выбирать мелодию, которая будет звучать при вызове и ее громкость. Также вам доступно управление громкостью динамика, подключенного к модулю и чувствительностью микрофона, а также временное отключение микрофона.
Также вы научились получать сообщения DTMF, что позволит вам создавать собственный автоответчик.
Обладая всеми этими знаниями, вы сможете добавить функции мобильного телефона в свое устройство, оснащенное микрокомпьютером Repka Pi и модулем GSM/GPRS/GNSS Bluetooth HAT.
Использованные изображения
https://commons.wikimedia.org/wiki/File:Waehlscheibe-kurzwahlnummern.jpg
https://commons.wikimedia.org/wiki/File:Dual_endless_cassette_tapes_in_National_Easa-Phone_20130722.jpg
Если данная статья Вам понравилась и показалась интересной, то пишите, какие бы ещё модули плат функционального расширения Вы хотели бы попробовать применять или уже применяете и считаете, что об этом нужно рассказывать на Хабре.
Теги:
- sim868
- at-команды
- телефон
- определитель номера
- автоответчик
- repka
- repka-pi
- repka os
- репка
- sim
Хабы:
- Python
- Разработка робототехники
- Разработка на Raspberry Pi
- Интернет вещей
- DIY или Сделай сам