У меня зазвонил Репка-фон. Делаем телефон на базе Repka Pi 3 с применением модуля SIM868

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

Это четвертая статья серии, посвященной модулю 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 для автоответчика

  • Полезные ссылки

  • Итоги

Сборка макета

Для работы с этой статьей соберите простой макет, подключив модуль 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 к Repka Pi через GPIO.

Вам также потребуется гарнитура с микрофоном. Вставьте ее разъем в модуль, как это показано на рис.1.

Перед подключением модуля GSM/GPRS/GNSS Bluetooth HAT к GPIO Repka Pi установите перемычки желтого цвета на пины B, и вставьте SIM-карту мобильного оператора.

Вам также нужно будет отключить вывод сообщений на UART0 с помощью уилиты repka-config. Для этого запустите repka-config одноимённой командой в консоле или через ярлык на рабочем столе, и, когда появится окно с текущей максимальной частотой процессора, щелкните в нем кнопку Ok. Далее в меню настраиваемых опций выберите Включить / отключить вывод сообщений на UART0. После этого отключите вывод сообщений (рис.2).

Рис. 2. Отключение вывода сообщений на UART0.
Рис. 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. Автоответчик с кассетами.
Рис. 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

Если данная статья Вам понравилась и показалась интересной, то пишите, какие бы ещё модули плат функционального расширения Вы хотели бы попробовать применять или уже применяете и считаете, что об этом нужно рассказывать на Хабре.

Источник: https://habr.com/ru/articles/787704/


Интересные статьи

Интересные статьи

Использование библиотеки MediatR при реализации бизнес-логики в проектах, реализуемых на базе .NETНа просторах интернета появились библиотеки, позволяющие упростить и ускорить построение бизнес-логики...
17-18 сентября в центральном офисе «Яндекса» в Москве прошёл ежегодный фестиваль ретрокомпьютеров «Демодуляция». Традиционно кроме «Яндекс Музея» (организатора мероприятия) в фестивале приняли участие...
Я пробую делать игры. Пишу код, пробую рисовать и хочу научиться делать музыку. Я прорисовал персонажа и мне нужно было сделать так, чтобы ему можно было менять цвет одеж...
Всем привет. Не прошло и полгода как работает мое приложение, в котором Floating Action Button меню было реализовано сторонней библиотекой. В какой-то момент захотелось сделать его более п...
Ты – программист. Я – эффективный менеджер. Ну, ты так считаешь. Может, даже статью про меня напишешь, наберешь кучу плюсов – тема-то благодатная. В статье обязательно слово «эффективный» в кавыч...