Т.к. это прототип и не является полноценным проектом, то выкладываю код тут. Послужит некоторым примером. Однако код далеко не оптимизирован , это не коммерческая версия, хотя и полностью рабочая. Код предоставлен исключительно в образовательных целях, будут какие то конкретные вопросы - отвечу. Подробного разжевывания подключения не будет, т.к. предполагается, что основные знания у смотрящих присутствуют.
Коротко о подключении:
EEPROM подключается по i2c к А4 и А5 c подтяжкой этих линий резисторами 4.7 к +5в
GSM модуль используется SIM800L, он требует весьма качественного и ровного питания. Подключается по softserial c преобразованием уровня к 8 и 9 пинам. Из необычного через NPN транзистор , который управляется с 7 го пина выход resrt подключен к земле, что позволяет перегрузить модуль GSM в случае необходимости.
Реле обычное 5-вольтовое, модулем, подключено к 6-му пину.
Карта SD подключена по стандартному SPI интерфейсу, CS выведен на 10 пин.
Задумка того как это работает:
На внешней EEPROM хранится белый список номеров телефонов в таком формае: по 0-му адресу 2 байта занимает количество номеров телефона. Далее по 11 байт хранятся номера телефонов в формате 79123456789, список номеров должен быть обязательно отсортирован в порядке возрастания, т.к. на этом принципе основан поиск. При входящем звонке определяется номер телефона и звонок сбрасывается. Если входящий номер есть в белом списке - то на короткое время срабатывает реле. Если номера нет, то по определенному номеру (мастер-номер) отправляется смс с уведомлением.
Данные о поступившем звонке и совершенном действии записываются в лог файл на карте SD:
Чему можно научиться:
Работать с внешней памятью EEPROM, поиску по памяти.
Получать номер входящего звонка, отправлять CMC, настраивать связь
Получать время звонка из сети GSM
Читать данные с карты, записывать, дописывать логи. Считать объем данных на карте.
Как записывать дату и время изменения в свойства файла - иначе дата и время будет у всех файлов одни и те же, какие то начальные с нулями.
Посмотреть как работает вочдог.
Посмотреть функцию, которая отображает кол-во свободной памяти.
Часть кода взято из инета и была несколько доработана.
Чего нет:
Не объясняю как записывал начальные данные во внешнюю память, варианты могут быть разные.
Нет разных коммерческих штучек. И не будет.
Нет схемы подключения. Если не понимаете как подключить, то возможно Вам это еще рано.
Ограничения. Функция работы с картой памяти для вычисления общего объема рекурсивна, и требует определенного объема свободной памяти. В случае с нано можно быстро упереться в ограничения . Данная программа работает без сбоев, но любые доработки и добавления, требующие больше ОЗУ могут нарушить ее работоспособность. Лично я перешел на мегу.
Данное устройство может служить дополнением к воротам и шлагбаумам doorhan или подобны устройствам, которые могут открываться по замыканию 2-х контактов.
Коротко о подключении:
EEPROM подключается по i2c к А4 и А5 c подтяжкой этих линий резисторами 4.7 к +5в
GSM модуль используется SIM800L, он требует весьма качественного и ровного питания. Подключается по softserial c преобразованием уровня к 8 и 9 пинам. Из необычного через NPN транзистор , который управляется с 7 го пина выход resrt подключен к земле, что позволяет перегрузить модуль GSM в случае необходимости.
Реле обычное 5-вольтовое, модулем, подключено к 6-му пину.
Карта SD подключена по стандартному SPI интерфейсу, CS выведен на 10 пин.
Задумка того как это работает:
На внешней EEPROM хранится белый список номеров телефонов в таком формае: по 0-му адресу 2 байта занимает количество номеров телефона. Далее по 11 байт хранятся номера телефонов в формате 79123456789, список номеров должен быть обязательно отсортирован в порядке возрастания, т.к. на этом принципе основан поиск. При входящем звонке определяется номер телефона и звонок сбрасывается. Если входящий номер есть в белом списке - то на короткое время срабатывает реле. Если номера нет, то по определенному номеру (мастер-номер) отправляется смс с уведомлением.
Данные о поступившем звонке и совершенном действии записываются в лог файл на карте SD:
Если вдруг происходит зависание стоит вочдог, который перегружает полностью систему вместе с GSM модулем21/01/17,02:06:00 79511223344 OPEN
21/01/17,02:06:12 71234567890 SMS!
Чему можно научиться:
Работать с внешней памятью EEPROM, поиску по памяти.
Получать номер входящего звонка, отправлять CMC, настраивать связь
Получать время звонка из сети GSM
Читать данные с карты, записывать, дописывать логи. Считать объем данных на карте.
Как записывать дату и время изменения в свойства файла - иначе дата и время будет у всех файлов одни и те же, какие то начальные с нулями.
Посмотреть как работает вочдог.
Посмотреть функцию, которая отображает кол-во свободной памяти.
Часть кода взято из инета и была несколько доработана.
Чего нет:
Не объясняю как записывал начальные данные во внешнюю память, варианты могут быть разные.
Нет разных коммерческих штучек. И не будет.
Нет схемы подключения. Если не понимаете как подключить, то возможно Вам это еще рано.
Ограничения. Функция работы с картой памяти для вычисления общего объема рекурсивна, и требует определенного объема свободной памяти. В случае с нано можно быстро упереться в ограничения . Данная программа работает без сбоев, но любые доработки и добавления, требующие больше ОЗУ могут нарушить ее работоспособность. Лично я перешел на мегу.
Данное устройство может служить дополнением к воротам и шлагбаумам doorhan или подобны устройствам, которые могут открываться по замыканию 2-х контактов.
Вложения
-
7.3 KB Просмотры: 46
Изменено: