Это четвертая статья серии, посвященной модулю 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.
Содержание данной статьи:
Сборка макета
Для работы с этой статьей соберите простой макет, подключив модуль GSM/GPRS/GNSS Bluetooth HAT непосредственно к разъему GPIO микрокомпьютера Repka Pi как «шляпу» (плата функционального расширения для 40 pin разъёма, аналогичного на Repka Pi с Raspberry Pi) как показано на рис.1.
Вам также потребуется гарнитура с микрофоном. Вставьте ее разъем в модуль, как это показано на рис.1.
Перед подключением модуля GSM/GPRS/GNSS Bluetooth HAT к 40 pin разъёму (разъёму GPIO, как его ещё часто называют) Repka Pi установите перемычки желтого цвета на пины B, и вставьте SIM-карту мобильного оператора.
Вам также нужно будет отключить вывод сообщений на UART0 с помощью уилиты repka-config. Для этого запустите repka-config одноимённой командой в консоле или через ярлык на рабочем столе, и, когда появится окно с текущей максимальной частотой процессора, щелкните в нем кнопку Ok. Далее в меню настраиваемых опций выберите Включить / отключить вывод сообщений на UART0. После этого отключите вывод сообщений (рис.2).
При выходе из программы 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).
Если вы делаете современный автоответчик на базе 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)
Интерактивный автоответчик на 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
Если данная статья Вам понравилась и показалась интересной, то пишите, какие бы ещё модули плат функционального расширения Вы хотели бы попробовать применять или уже применяете и считаете, что об этом нужно рассказывать на Хабре.