Перейти к содержанию
    

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

 

scheme_jpg.jpg

' Авторская работа. Автор:  Дмитрий Абловацкий.
'Программа для говорящей 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

 

 

Изменено пользователем afudinov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 часов назад, afudinov сказал:

' Авторская работа. Автор:  Дмитрий Абловацкий.
'Программа для говорящей GSM сигнализации на модуле SIM800L.

Все придумано до нас - патент RU 2 308 092 C2 от 2005 года.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, afudinov said:

' Авторская работа. Автор:  Дмитрий Абловацкий.
'Программа для говорящей GSM сигнализации на модуле SIM800L.

И всё это ради одной строки
AT+CREC=4,C:\User\3__.amr,1,100

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 часов назад, Ural сказал:

 Авторская работа. Автор:  Дмитрий Абловацкий.
Программа для говорящей GSM сигнализации на модуле SIM800L.

Нууу, надо как-то свободный от зарплаты благой труд окупать, хоть популярностью.

Изменено пользователем afudinov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

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

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...