SIM800L, DTMF управление, голосовое меню.

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

Добрый день.

 

Это не совсем проект, это скорей заготовка. Задача была изначально - следить за температорой и напряжением в загородном доме. И при понижении ниже какого-то уровня, а также при пропадании внешнего питания (отключили 220), звонить хозяину и сообщать об этом. В коде до этого руки так и не дошли :))

 

Потом пришла идея добавить датчик движения и получится небольшой охранный комплекс.

 

Самое интересное было организовать голосовое меню, т.е. тыт звонишь на номер, нажимаешь кнопки и что-то не просто исполняется, а еще и говорит в ответ. Например "Команда выполнена" или "Нет такой команды".

 

Для загрузки в память SIM800L голосовых файлов понадобится утилита - http://simcom.ee/documents/SIM800x/Sim800%20Series%20ArmFile%20Download%20v1.00.rar

 

Если кому интересно, то подробности тут - https://github.com/slacky1965/alarm

kostyamat
Offline
Зарегистрирован: 16.11.2017

http://arduino.ru/forum/programmirovanie/progovarivanie-float дарю, может пригодится.
Для проговаривания лучше использовать не модем, а библиотеку https://github.com/TMRh20/TMRpcm гибче и возможностей больше, к тому же доп.аппаратуры не требует. Замечательно то, что эта либа жрет очень мало ресурсов. А звучит на линии очень достойно (она даже на музыке в стерео, при правильном фильтре и нормальном усилке не плохо звучит).

А сд-шку можно вот так приделать
https://m.geektimes.ru/post/255648/

Пс.Сейчас что-то аналогичное делаю. Задача использовать только голосовой вызов и емайлинг по гпрс (используя api pushingbox.com)
Но при этом использовать самые дешёвые комплектующие, вплоть до 590-го модема (тот что 1.5€ купить можно). Или фейковый китайский А6, который тоже ни дтмф ни встроенного емайл клиента, как 800-ый, не имеет. Но на порядок стабильнее и надёжнее в работе, как ни странно, чем тот же 800-тый, к тому же питается четко от +5 и толерантен к 5-ти вольтовым выводам ардуино.

Вот либа для софтового ДТМФ https://forum.arduino.cc/index.php?topic=121540.0

Дерзайте. И я буду дерзать (правда у меня не стоит задача алярма, у меня задача недоавтоматики, - четыре входа, четыре выхода, уведомлять о изменении на входах, и предлагать включать любое реле на одном из четырех выходов, на большее ни ресурсов контроллера, ни надобности пока нет).

ПС. Мне тут все советуют, гуру наши, не пользоваться String ни при каких обстоятельствах. Почитайте полемику в моём топике. Я вам передаю их мнение. Я тоже до последнего патрона за String отстреливался. Но, победили доводы бывалых. В чем то они правы. Char это даже интересно, и готовит вас до чистого с#. А это полезно, имхо. ))

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

kostyamat, спасибо за инфу, но у меня была задача отказаться от микрофонного входа. Как бы я не изголялся, он все равно источник помех. А в моем случае все происходит внутри SIM800L и микрофонный входв в принципе можно вообще на массу посадить ...

Не понимаю, зачем нужен софтовый декодер DTMF, когда сам SIM800L прекрасно с этим справлятся ...

А изначально у меня голос вообще MP3 плеер проигрывал на вход микрофона :)))

kostyamat
Offline
Зарегистрирован: 16.11.2017

Чтобы избавится от шума по микрофону нужно сделать несколько вещей:
Накрыть модуль модема экраном (хоть из жестяной банки вырезать); накрыть отдельным экраном саму ардуино отдельно от модема (это в любом случае нужно делать, иначе ардуино может сбоить при дозвоне, вплоть до зависания); поставит на питание модема керамику 100нФ, то же самое и для ардуино; поднять уровень сигнала на микрофонном входе каскадом на транзисторе, но при этом уменьшить чувствительность микрофона до самого минимума (есть такая AT, могу глянуть даташит, если сами не найдете); и самое главное - звук на мик.вход подавайте через кабель в оплётке, как можно короче, но перед этим сделайте единственный виток через ферритовое кольцо любого подходящего размера (если выполнить этот и придедущий пункты, то шума практически нет даже без экранов); неплохо шунтировать мик.вход керамикой 1-2.2 нф - 1000-2200 пФ.; родная антенна-спиралька - фуфло, нужна такая
http://s.aliexpress.com/biE36fIb и выносить ее подальше, сколько кабель позволяет, при этом ориентировать перпендикулярно плоскости платы или, что ещё лучше - попкой антенны к торцу платы (как в рациях, вот сложно объяснить, надеюсь поняли что я имею в виду).
Если нужна прослушка объекта, лучше вот это http://s.aliexpress.com/NJNnIJJ7 на выносном кабеле (не забыть мотнуть кабель через ферритовое кольцо), запаянное в отдельный экран из жести.

Все описанное проделывал сам, - результат гарантирую.
Ещё одно, делая все это на макете, объединил все дорожки под ардуино (она и модем в колодке на плате сидят) в импровизированный полигон-масса, накрыть экраном и припаять к этому полигону, лучше все углы, если нет возможности, то два по диагонали.

kostyamat
Offline
Зарегистрирован: 16.11.2017

"Не понимаю, зачем нужен софтовый декодер DTMF, когда сам SIM800L прекрасно с этим справлятся ...

А изначально у меня голос вообще MP3 плеер проигрывал на вход микрофона :)))"

Вы не внимательны!
1) "Но при этом использовать самые дешёвые комплектующие, вплоть до 590-го модема (тот что 1.5€ купить можно). Или фейковый китайский А6, который тоже ни дтмф ни встроенного емайл клиента, как 800-ый, не имеет. Но на порядок стабильнее и надёжнее в работе, как ни странно, чем тот же 800-тый, к тому же питается четко от +5 и толерантен к 5-ти вольтовым выводам ардуино."
Задача - недоавтоматика за 5$, максимум 10$ в производстве, вместе с БП и коробкой. В конце будет плата с дискретным Atmega328 в DIP корпусе.
2) зачем плеер, если Библа для него жрет ресурсов не на много меньше чем звуковая + sd библы, которые я выложил выше.

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

Я Вас понял. Но у меня другой план :))

SIM800L(H) понимает файлы WAV, но их положить некуда, они много весят. Но у модуля есть возможность рабоатть с SD. Вот ее я и хочу подключить к модулю. Думаю качество будет отличным ...

Про String согласен, можно и переписать код, ничего сложного не вижу в этом ...

А вот заморачиваться с реальным экранированием, ферритовыми колечами и прочим - никакго желания :))

kostyamat
Offline
Зарегистрирован: 16.11.2017

Ну, я вам своё видение навязывать не собираюсь. Ваше детище, и вам решать как и на чем его реализовать.
Просто вы описали проблему с шумами, я предлагаю решение.

Ещё одна подсказка по коду - запоминать номера в массив и в Еепром ардуино совершенно не обязательно. Для этого есть память СИМ-карты. К тому же, если включена функция АОН, модем выдаёт строку с номером телефона и именем звонящего, если номер записан в СИМ + цифровое значение по которому можно узнать много интересного про входящий. Организовать проверку не "пустое ли имя" или расшифровать цифровое значения и мы уже знаем, что номер "свой".

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

Не, за советы спасибо, чужое мнение всегда интересно. Про запоминание в SIM - не хочу. Так симку выбросил, вставил другую и все.

kostyamat
Offline
Зарегистрирован: 16.11.2017

Хотел спросить по модему: SIM800L поддерживает только amr, или wav тоже?

Там есть какое-то ограничение на длительность одной записи?

Есть ли ограничения на количество файлов?
На названия, они должны быть только цифрами, или буквами тоже?

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

kostyamat пишет:
Хотел спросить по модему: SIM800L поддерживает только amr, или wav тоже?

0 AMR

1 WAV

2 WAV_ADPCM

kostyamat пишет:
Там есть какое-то ограничение на длительность одной записи?

Не знаю, у меня секунд 30 глаголит, нормально. Больше не пробовал ...

 
kostyamat пишет:
Есть ли ограничения на количество файлов?
 
Там FAT со всеми вытекающими.
 
kostyamat пишет:
На названия, они должны быть только цифрами, или буквами тоже?
 
Нет, 8.3 ...
kostyamat
Offline
Зарегистрирован: 16.11.2017

Спасибо.
Смотрел ваш код - красиво. )

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

kostyamat пишет:
Спасибо. Смотрел ваш код - красиво. )

Спасибо, но ничего необычного. Тем более, что я никак не связан с программированием по жизни, это так, хобби ...

Исправляю этот код на предмет убирания из него класса String. Переписываю на старый добрый Си. Осталось только парсинг СМС переписать ...

Logik
Offline
Зарегистрирован: 05.08.2014

//Вот либа для софтового ДТМФ https://forum.arduino.cc/index.php?topic=121540.0

Она не очень. Медленная т.к. на плавающей точке. И константы в ОЗУ. Есть либа без этого. Там вобщем только функция Герцеля интересна, она декодирует.  Но у хорошей либы другая проблема, на фиксированой частоте семплирования она, которая не факт что совпадает с наше. Потому делаю так - в первой либе расчитываю коэффициенты, вывожу в сириал и копипащу в хорошую либу как массив в PROGMEM.

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

Гурам arduino посвящается :)))

Ну переписал я код, убрав все String и заменив все на char[], char* и динамическим выделением памяти malloc и realloc. Не понял в чем выигрыш - при использовании String оперативной памяти для локальных переменных оставалось 900 с копейками, так и без использования String тоже остается 900 с копейками.

В чем выигрыш?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

А хз в чем выигрыш ( сейчас рисую проект для себя типа по уму с правильными char - и че то все хреново - 2кб памяти для обработки банальных SMS уже 60 %занято (

kostyamat
Offline
Зарегистрирован: 16.11.2017

Я не гуру, соответственно вопрос не ко мне, но так как мне гуру объяснили, и то, что понял сам, краткая выжимка:
Если использовать char, компилятор четко и конкретно может посчитать количество занятой памяти. При использовании класса String, ни компилятор, ни программист, никто не может предусмотреть количество памяти, которая реально понадобится при выполнении программы. По тому, как String порождает сущности, которые не могут быть высчитаны в момент компиляции, мы, новички, считаем что выигрыша нет. На самом же деле, это не так, String жрет очень много динамической памяти, плохо за собой убирая. Как результат, память может кончится в любой момент, что может привести к крешу программы в любой момент, замедлению выполнения кода и вообще глюкам, которые невозможно отловить.
Как-то так. (
Мне, как начинающиму, вез String вообще вешалка. Я из за этого даже как то в дипресиию свалился и немного кодить забросил. То что со String ясно и понятно и пишется в одну строку, с char превращается в пытку. Но основную мысль Гуру я понял, придётся теперь жить с этим.
Второй момент - "путь Джидая". Не используя стринг, мы идём путем С, и готовим себя к любому типу контроллеров, не привязываясь к Ардуино, как таковой.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Нет, все гораздо проще - char просто приучает к порядку в голове и в коде - хорошая зарядка для ума, но сильно выигрыша в тяжёлых задачах не получить я думаю.

ЗЫ. Вспоминаю древнюю историю как на первых спутника с сильно ограниченным количеством памяти делали запись видео - все реально - надо только мозг включить 

kostyamat
Offline
Зарегистрирован: 16.11.2017

К порядку говорите? Вот есть у меня проект (был наверное) на String, все было просто и понятно, после перехода на char, он вдруг перестал компилироваться. Ни одной ошибки компилятора нет (варнинги есть, куда уж без них), но просто в последний момент вылет со словами - "не под вашу плату". Я уже умолкаю о том, что я сам, свой же код, теперь без словаря читать не могу.

Из этого всего сделал вывод - нафиг устаревшие дуины с килограммом ОЗУ. Жить подсказывает - не отказывай себе в хорошем. Есть String, значит пользуйся. Просто возьми что-то более современное, с большим объемом памяти, как той, так и этой.
Жду ESP32, буду на нее переводить свои поделки. (Esp8266 глюконавт редкостный, не срослось.)
Есть уже и STM32F407 за вменяемые деньги. На eBay за 7€ купить можно такое - Мега просто плачет.
А с возможностью многопоточности rtos, вообще идеально.
Да, String реально опасен (сам с этим встретился, гуру правы, в прочем - как всегда), но опасен он только для убогих микроконтроллеров, 15-ти летней давности, с очень скудными ресурсами.

Во, красавица https://m.ebay.es/itm/Cortex-M4-STM32-STM32F407VET6-Development-Board-NR...

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

В общем переписал я код, убрал все String.

https://github.com/slacky1965/alarm

Logik
Offline
Зарегистрирован: 05.08.2014

Гурии ардуины будут удовлетворены ;)

ПС. https://habrahabr.ru/post/345988/ совсем свежый (и не мой) текст философской направлености разясняющий чего блин эти "гуры" такие вредные.

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

Logik пишет:

Гурии ардуины будут удовлетворены ;)

ПС. https://habrahabr.ru/post/345988/ совсем свежый (и не мой) текст философской направлености разясняющий чего блин эти "гуры" такие вредные.

Прочитал по ссылке весь текст. Монстр :)) Меня в далеком детстве в школе отвадили от Толстова Л.Н. Меня сейчас под страхом смерти не заставишь его читать :))

Да, читал форум, набрел на обсуждение millis(). Понял, что накосячил, ибо складывал. Переписал на вычитание. Спасибо форуму.

Загрузил Atmel Studio 7. Пока не понял, нужна она мне? Ибо пока так и не понял, как из main.cpp вывести что-то в Serial - ругается ... Но светодиодом моргает :))

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017
По мере изучения спецификации на SIM800H/L пришел к выводу, что SD просто так не подключить. Точнее подключить, но работать не будет, ибо в описании PCM интерфейса есть такая строка
 
Note: Multiplexing function need different software supply.
 
Я это понимаю, как под разные задачи нужны разные прошивки модуля. Скорей всего именно по этому на команду AT+CPCMCFG? отвечает нормально. А вот на команду AT+SD2PCM? отвечает ERROR. Скорей всего это и происходит, что прошивка про SD ничего не знает и такой команды у нее попросту нет.
 
В связи с этим есть мысль подать звук на PCM audio интерфейс (ибо он по умолчанию и есть в этой прошивке).
 
Но я пока такого устройства не нашел. Нужно устройства, типа DFPlayer mini, но только чтобы был PCM audio интерфейс. 
 
Может кто знает? Спасибо.
Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

Ну и как? Пришла? Поигрались?

kostyamat
Offline
Зарегистрирован: 16.11.2017

Slacky пишет:

Ну и как? Пришла? Поигрались?


Я ее не пока не заказывал. Задач под не было. Да и не мой уровень ещё. Мне бы пока ещё с платами попроще разобраться. Но слюни текут. )

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

kostyamat пишет:

Я ее не пока не заказывал. Задач под не было. Да и не мой уровень ещё. Мне бы пока ещё с платами попроще разобраться. Но слюни текут. )

А я заказал. https://ru.aliexpress.com/item/STM32F407VET6-Development-Board-M4-STM32-Core-Board-ARM-Development-Board-Modules-Cortex-M4/32754169388.html?spm=a2g0s.9042311.0.0.lze3ON

У меня и задача есть. Хочу PCM Audio на ней замутить и проверить в связке с SIM800 ...

kostyamat
Offline
Зарегистрирован: 16.11.2017

Стесняюсь спросить, - а зачем было ее дороже заказывать, к тому же на eBay она навороченней, вроде? Или я чего-то не понял/не знаю?

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

kostyamat пишет:
Стесняюсь спросить, - а зачем было ее дороже заказывать, к тому же на eBay она навороченней, вроде? Или я чего-то не понял/не знаю?

Да не дороже вроде, тут бесплатная пересылка, там платная, а разница в 50 рублей при заказе одной штуки не существенна. Ну еще и привычка ...

По поводу "навороченней", вроде нет, но точнее уже не скажу, Ваша ссылка устарела ...

 

К тому же, это всего-лишь "полигон". Конечное устройство будет (если будет) собираться самостоятельно ...

kostyamat
Offline
Зарегистрирован: 16.11.2017

В смысле "ссылка устарела"? Ссылка вполне активна, если, конечно, тыкнуть в оригинал в моём сообщении, а не в покоцанную в цитировании. Хотя визуально вроде платы одинаковы. Но доставка с эбея для меня, в ЕС, бесплатно. Короче, купили и купили. Интересно будет ваше мнение о ней почитать где-то. Если им поделитесь, скиньте ссылку на него, пожалуйста.

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

kostyamat пишет:
В смысле "ссылка устарела"? Ссылка вполне активна, если, конечно, тыкнуть в оригинал в моём сообщении, а не в покоцанную в цитировании. Хотя визуально вроде платы одинаковы. Но доставка с эбея для меня, в ЕС, бесплатно. Короче, купили и купили. Интересно будет ваше мнение о ней почитать где-то. Если им поделитесь, скиньте ссылку на него, пожалуйста.

Да, каюсь, тыкал в цитирование. Очень похоже, что эти платы из одной "бочки" :))

Да какое у меня мнение, я делитант ...

Тут же как все устроено - чем проще, тем лучше. У меня на ESP8266 кое-что не получалось. Наслушавшись на одноименном форуме, что 8266 прошлый век. А вот у RTL8710 все хорошо. И что? А ничего. По USB RTL прошить нельзя. Нужен JTAG. Пока разберешься во всех тонкостях, делать что-то расхочется. В результате я на ESP все-таки все сделал, как хотел. Вот RTL пока и лежит без дела. Кто-то скажет - ха, чайник. А я и не скрываю. Это всего-лишь хобби. Да и времени катастрофически на все не хватает ...

Если интересно, могу в личку написать, как пощупаю, но докладов на дцать страниц не обещаю :))

kostyamat
Offline
Зарегистрирован: 16.11.2017

Для RTL уже и бутлоадер есть, и середа для ардуино ид. Правда первый раз таки нужно шить джитагом, чтобы лодыря вдуть.
Мне вот другое жить не даёт. Сам не потяну, а кого-то просить надоело. Чет никто не видит перспективы, хотя она очевидна.
На данный момент не существует "народного" брелка, с поддержкой двустороннего обмена и кодирования сигнала. Вся эта китайщина на 315 - 430Мгц не в счёт. Вскрывается она на раз, даже без ПК, есть под это даже проекты на ардуино.
По соотношению цена/качество/энергопотребление/возможности, лучше всего подходит nRF24LE1, совместимая с 24L01 и микроконтроллером C8051 на борту, а также кучей GPIO. Есть пропетарный (но бесплатный) СДК, есть с открытым кодом, поддержка в среде Keil, но ничего похожего на ней никто не делал. А я сам даже среду правильно не развернуто, знаний не хватит, не то чтобы в чистом С что-то писать. А платка знатная, я покупал по 6€ за пару, размер платки около 2х2см, от батарейки 2032 должна около полутора лет жить. Так и лежат пока. ((

Вот, интереснейший проект на сабже https://github.com/fryefryefrye/Open-Source-RKS но даже тут нет шифрования.

pasha413
Offline
Зарегистрирован: 27.11.2016

Slacky пишет:

Добрый день.

Самое интересное было организовать голосовое меню, т.е. тыт звонишь на номер, нажимаешь кнопки и что-то не просто исполняется, а еще и говорит в ответ. Например "Команда выполнена" или "Нет такой команды".

Для загрузки в память SIM800L голосовых файлов понадобится утилита - http://simcom.ee/documents/SIM800x/Sim800%20Series%20ArmFile%20Download%20v1.00.rar

Если кому интересно, то подробности тут - https://github.com/slacky1965/alarm

Здравствуйте. У меня SIM800l, попробовал загрузить в него вашти аудиофайлы и залить скетч в ардуину, но при звонке файлы не проигрываются (хотя по монитору порта файлы видит). подскажите на каком модеме вы это делали?

Slacky
Slacky аватар
Offline
Зарегистрирован: 16.11.2017

pasha413 пишет:

Здравствуйте. У меня SIM800l, попробовал загрузить в него вашти аудиофайлы и залить скетч в ардуину, но при звонке файлы не проигрываются (хотя по монитору порта файлы видит). подскажите на каком модеме вы это делали?

Вот тут покупал для экспериментов ...

https://ru.aliexpress.com/item/Free-Shipping-Smallest-SIM800L-GPRS-GSM-Module-MicroSIM-Card-Core-BOard-Quad-band-TTL-Serial-Port/32597031133.html?spm=a2g0s.9042311.0.0.274233edOi8YNE

pasha413
Offline
Зарегистрирован: 27.11.2016

Вообщем выяснил я, с прошивкой 1308.. не работает голосовое меню, хотя файлы заливаются, при попытке воспроизвести ошибка. На прошивке 1418..все работает!!!