Простая говорящая GSM - сигнализация.

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Простая говорящая GSM - сигнализация.

Сообщение afudinov » 30 сен 2020, 22:02

Программа для говорящей GSM - сигнализации на языке BASCOM-AVR

' Авторская работа. Автор: Дмитрий Абловацкий.
'Программа для говорящей GSM сигнализации на модуле SIM800L.
'SIM800L Revision:1418B04SIM800L24.
'Настройка микроконтроллера Attiny85: фюзы, изменение только LOW на $E2

$regfile = "attiny85.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Portb.0 = Input
Config Portb.1 = Output
Config Portb.2 = Input
Open "comb.3:9600,8,n,1" For Input As #2 'RXD - вход
Open "comb.4:9600,8,n,1" For Output As #1 'TXD - выход

Dim Buffered As String * 300
Dim On_off As Bit
Dim In_str As Byte
Dim I As Byte
Dim I1 As Long
Dim Telephone As String * 12

Config Debounce = 100
Telephone = "registered"

' - - - - - - - - - - -Подготовка модуля - - - - - - - - - -
Reset Portb.1 'выход модуля из спящего режима
Wait 12 ' время для самоподготовки модуля
Print #1 , "AT" ' Проверка на готовность модуля к работе
Input #2 , Buffered ' Ответ
In_str = Instr(buffered , "0")
If In_str = 0 Then
Waitms 250
Print #1 , "ATE0V0+CMEE=0;+CLIP=0" 'Выкл эха, только код ошибки, выключить АОН
Input #2 , Buffered ' Ответ
'Waitms 250
'Print #1 , "AT+CNMI=1,2,0,0,0" ' СМС не сохранять, направлять в микроконтроллер
'Input #2 , Buffered ' Ответ
Waitms 250
Print #1 , "ATS0=0" ' автоответ ручной
Input #2 , Buffered ' Ответ
Waitms 250
Print #1 , "AT+CSCLK=1" ' спящий режим
Input #2 , Buffered ' Ответ
Waitms 250
Print #1 , "AT+CLCC=1" ' установить автоматическое отображение статуса
Input #2 , Buffered ' Ответ
Waitms 250
Print #1 , "AT&W" ' сохранить
Input #2 , Buffered ' Ответ
End If

Print #1 , "AT+CPIN?" ' Готовность модуля к работе с картой
Input #2 , Buffered ' Ответ +CPIN READY или 4- нет карты
In_str = Instr(buffered , "SIM PIN")
Input #2 , Buffered ' Ответ 0 - OK или нет ответа
If In_str <> 0 Then 'если карта есть, но нужен PIN - код
Print #1 , "AT+CPIN=0000" 'PIN - код !Возможно Сим-карта заблокируется после 3 неправильных
Input #2 , Buffered ' Ответ 0 - OK или 4- неправильный PIN - код
Input #2 , Buffered ' Ответ +CPIN READY или нет ответа
Input #2 , Buffered ' Ответ Call Ready или нет ответа
Input #2 , Buffered ' Ответ SMS Ready или нет ответа
End If

Wait 2
For I = 1 To 3
Print #1 , "AT+CPAS" 'Готовность к выполнению команд
Input #2 , Buffered ' Ответ
In_str = Instr(buffered , "0")
If In_str <> 0 Then 'Если модуль готов к работе
Wait 1
Print #1 , "AT+CREG?" ' проверка на регистрацию в сети
Input #2 , Buffered ' Ответ
In_str = Instr(buffered , ",1")
If In_str <> 0 Then ' если зарегистрирован
Goto M1 ' выход , иначе ещё попытки
End If
End If
If I = 2 Then
Wait 1
Print #1 , "AT+CFUN=1,1" 'перезагрузка модуля
Input #2 , Buffered ' Ответ
Wait 5
End If
Wait 5
Next

M1:
Do
' - - - - - - - - - - - PIR датчик - - - - - - - - - -
If Pinb.2 = 1 And On_off = 1 And Pinb.0 = 1 Then ' если 1
Wait 3 ' время для пробуждения SIM800L
For I = 1 To 3 ' три попытки дозвониться
Print #1 , "AT+CCALR?" ' идентификатор готовности совершить звонок
Input #2 , Buffered ' Ответ
Input #2 , Buffered ' Ответ
In_str = Instr(buffered , " 1")
If In_str <> 0 Then ' если готов совершить звонок ' если 2
Wait 1
Print #1 , "ATD" ; Telephone ; ";" ' набор номера
Input #2 , Buffered 'ответ
Input #2 , Buffered 'ответ
Input #2 , Buffered 'ответ ' голосовое соединение
In_str = Instr(buffered , "3,0,0") '
If In_str <> 0 Then ' если голосовое соединение ' если 3

For I1 = 1 To 4000000 ' примерно 40 сек ожидание, если соединение и бездействие до сброса
If Pinb.3 = 0 Then ' если абонент возьмёт трубку или сбросит соединение
Input #2 , Buffered 'ответ

Wait 1
For I1 = 1 To 500000 ' примерно 5 сек ожидание сброса
If Pinb.3 = 0 Then ' если сброс соединения
Input #2 , Buffered 'ответ
Goto M2
End If
Next

In_str = Instr(buffered , "0,0,0")
If In_str <> 0 Then ' если голосовое соединение
Print #1 , "AT+CREC=4,C:\User\3__.amr,1,100" ' передача речевого сообщения
Input #2 , Buffered ' Ответ
Wait 8 'Время речевого сообщения + добавленное
M2:
Waitms 250
Print #1 , "ATH0"
Input #2 , Buffered
Bitwait Pinb.2 , Reset
Goto M1
End If

End If
Next

End If ' 3-End If
End If ' 2-End If
Wait 1
Print #1 , "ATH0"
Input #2 , Buffered
Wait 10
Next

End If ' 1-End If
' - - - - - - - - - - -Проверка на входящий звонок по RING - - - - - - - - - -
If Pinb.0 = 0 Then ' если поступил звонок
' - - - - - - - - - - - включение и выключение сигнализации - - - - - - - - - -
Input #2 , Buffered ' Ответ +CLCC: 1,1,4,0,0,"+7**********",145,""
In_str = Instr(buffered , "+7" )
If Telephone = "registered" Then
Telephone = Mid(buffered , In_str , 12 )
Else
In_str = Instr(buffered , Telephone )
End If
Input #2 , Buffered ' Ответ 2 - первый звонок
Input #2 , Buffered ' Ответ 2 - второй звонок
If In_str <> 0 Then ' если зарегистрированный номер телефона
In_str = Instr(buffered , "1,6,0,0,") ' если сброс
If In_str = 0 Then ' если входящий звонок продолжается
Waitms 250
Print #1 , "ATA"
Input #2 , Buffered ' Ответ
Input #2 , Buffered ' Ответ +CLCC: 1,1,0,0,0,"+7**********",145,""
If On_off = 0 Then
On_off = 1
Wait 1
Print #1 , "AT+CREC=4,C:\User\1__.amr,1,100" ' передача речевого сообщения
Input #2 , Buffered ' Ответ
Wait 8 'Время речевого сообщения + добавленное
Print #1 , "ATH0"
Input #2 , Buffered ' Ответ
Else
On_off = 0
Wait 1
Print #1 , "AT+CREC=4,C:\User\2__.amr,1,100" ' передача речевого сообщения
Input #2 , Buffered ' Ответ
Wait 8 'Время речевого сообщения + добавленное
Print #1 , "ATH0"
Input #2 , Buffered ' Ответ
End If
End If
Else ' если незарегистрированный номер телефона
Wait 1
Print #1 , "ATH0"
Input #2 , Buffered ' Ответ
Bitwait Pinb.0 , Set
End If
End If

Set Portb.1 ' в спящий режим SIM800L
Enable Interrupts
Enable Int0
Enable Pcint0
Idle ' в спящий режим микроконтроллер
Reset Portb.1 ' выход модуля из спящего режима
Disable Interrupts
Disable Int0
Disable Pcint0
Loop
End

Источник https://178654.blogspot.com/p/gsm.html
Вложения
scheme_jpg.jpg
afudinov
 
Сообщения: 1
Зарегистрирован: 30 сен 2020, 21:53

Re: Простая говорящая GSM - сигнализация.

Сообщение Myp » 30 сен 2020, 23:14

А кто говорит? модем сам умеет звук воспроизводить?
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Простая говорящая GSM - сигнализация.

Сообщение Madf » 01 окт 2020, 10:01

Да, да, тот же вопрос. :)

зы: в коде ничего нового не увидел (собственно в схеме тоже).
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5