" title="Написать письмо">Написать письмо

Статистика

Пользователи : 1
Статьи : 1577
Просмотры материалов : 5983357
 
Модуль отправки SMS для Arduino (14.09.2021). Печать E-mail
2021 - Сентябрь
14.09.2021 17:28
Save & Share
В рамках разработки автоматизированной системы защиты от протечек в квартире, требовалась автоматическая отправка SMS вида "тебе конец". Нужно было найти модуль Arduino, который мог бы это сделать.

Речь о серии модулей IOT-(G)A(6/7)(-B). И конкретно о модуле IOT-GA6-B от Goouuu Tech. Оперирует SMS, телефонными разговорами, командами оператора сотовой связи - имея простейшее подключение (за некоторыми особенностями).

Вначале были куплены модули SIM800L, SIM900A. Нужно избегать любых модулей SIM, т.к. их настройка и работоспособность - под очень большим вопросом. Начиная от физического брака чипа (выглядит как б/у) и заканчивая отсутствием обозначений контактов на печатной плате (подключай как хочешь). В итоге, ни один из этих модулей даже аппаратно сеть оператора поймать не смог - были выброшены в помойку после очень долгой возни.

Модуль IOT-GA6-B стоит в 2 раза дороже SIM - 368руб. Однако сразу отмечается его легкость настройки:
- достаточно подать питание - и видно, как светодиод меняет частоту моргания, - значит, сеть обнаружил. Значит, "специальные" SIM-карты и тарифы для умных устройств, которые предлагают мобильные операторы за приличную абонентскую плату, - не более, чем введение в заблуждение;
- выводы подписаны не совсем корректно. Подключение: VCC - 5В, URX - D2 (D2-D12), UTX - D3 (D2-D12), G - GND. GND у модуля, Arduino и источников их питания должны быть общими. Модуль должен работать только от внешнего источника питания (от USB ПК завести не получилось - что странно);
- используемая библиотека: iArduino GSM v.1.0.1;
- программная настройка. SoftwareSerial softSerial(D3, D2). D2 - PORTD 1, DDRD 0. D3 - PORTD 1, DDRD 1. На некоторых версиях (производителях?) модуля отмечается спутанность местами URX и UTX - соответственно, необходим инвертированный вариант настройки;
- даже при необходимости внешнего источника питания, модуль никогда не выходит на пиковое потребление 2А. При включении в сеть - 80мА, поиске сети - 23-72мА (5сек при плохом сигнале), простое - 10-13мА, отправке SMS - 21-55мА, получении SMS - 20-43мА. Функция gsm.pwr(false) не выключает модуль (не работает) - реализовывать отключение нужно через установку транзистора на питающий провод.

У этого модуля одна проблема (для меня прямо критичная): отказывается работать с D0 и D1 - как с аппаратным UART (gsm.begin(Serial)). И, как назло, на печатной плате невозможно поменять местами обвес для Adruino так, чтобы D0 и D1 служили другому устройству. И свободных пинов тоже нет. Как обычно, бочка дегтя в ложке меда.

(добавлено 17.09.2021) Не дружит с любыми сторонними устройствами. Как только к информационным проводам припаивается что-то еще - перестает обмениваться данными.

Если припаять такую же вторую антенну параллельно той, что в комплекте, - усиления сигнала не происходит. В дальнем конце комнаты устройство уже начинает работать с перебоями - внешняя антенна за 50руб просто необходима.

Библиотека iArduino GSM - несколько прожорливая, в то же время и удобная. Не надо использовать функцию F из примера функции SMSsend, если используется String: иначе функция сожрет памяти больше, чем доступно в Arduino Nano (и даже в Arduino Uno).

(добавлено 23.09.2021) Библиотека iArduino GSM - кусок неторта. Примеры работают как часы - но ровно до тех пор, пока не начнешь размещать модуль в большом проекте, где много других модулей и радиоэлементов. Мучился с этим модулем целый день сегодня, ища взаимосвязи:
- если создание объекта SoftwareSerial происходит выше PORTD и DDRD - обмен данными не происходит;
- если создается сторонний объект (SoftwareSerial или Serial) выше SoftwareSerial устройства - обмен данными не происходит;
- условная совместимость с Narcoleptic.delay (могут повреждаться визуальные данные в мониторе порта Serial);
- если статус модуля не GSM_OK - то попытка послать SMS приводит к зависанию Arduino.

Схемотехника модуля - кусок неторта:
- любой транзистор, установленный в питающую цепь модуля, - приводит к невозможности отправки SMS (как будто чуть-чуть не хватает напряжения - и модуль теряет сеть);
- при условии, что модуль без проблем работает от древнего ЗУ 5В/0.3А, при напряжении не более 5.05В, - само устройство с транзисторами несовместимо;
- соответственно, т.к. еще и функция pwr не работает, - устройство невозможно отключить, если оно не нужно. А это, к слову, почти 0.6кВт/год - для одного элемента это адски много;
- последний шанс: попытаться питать от цифрового выхода, которым транзистор управлялся. Может, силы тока и хватит.

(добавлено 24.09.2021) Решение с транзистором - добавление конденсатора ≥1500мкФ параллельно модулю. Тогда работает и с полевыми, и с биполярными транзисторами (тестировалось на BDX33C, FQPF5N60C). Нельзя также включать питание на модуль одновременно с другими модулями: Arduino перезагружается. Возможно, резкий всплеск тока - резко просаживающий напряжение.

Библиотека же продолжает отжигать:
- если перед объектом модуля написать const - модуль перестает работать;
- если сообщение >70 русских символов - модуль зависает напрочь и уносит за собой Arduino. Или может перезагрузиться сам по себе. Только все наладил - но изменение длин сообщения все испортило.

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

Вернуть обратно в исходную не удалось. Только когда укоротил сообщения до нескольких слов - SMS начали приходить. Даже заголовок "Защита от протечек" добавить не могу. То есть, библиотека не может теперь послать даже сообщение меньше 70 русских символов в длину.

Связано это со введением дополнительных проверок. С этой библиотекой потери памяти идут постоянно: вызываешь функцию не в одном месте программы, а в двух - память потерял. Добавил больше проверок для состояний модуля - память потерял. И абсурдная ситуация напоследок: если объект модуля сделать глобальным - глобальной памяти выделяется на 2% меньше.

Решением было бы использовать глобальный стринг длиной 70 символов - чтобы не передавать в параметры функции текстовые строки. Это позволило бы уменьшить потери памяти. Но делать это уже не буду: выдохся. Итоговый скетч готов, итоговый вариант печатной платы сейчас улетит к китайцам. Данная система защиты от протечек - максимум, что можно впихнуть в маленькую Arduino Nano. Вода научится меня бояться!

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



(добавлено 21.02.2022) К сожалению, все оказалось не так радужно. При переходе с напряжения 5.5В на 4.9-5В начались парадоксальные проблемы - хоть и после танцев с бубном были решены:
- при второй попытке отправки SMS (первая - успешно) модуль перезагружал Arduino. Выяснилось, что перезагрузка происходит только тогда, когда USB-разъем Arduino не находится в ПК;
- решил проблему путем установки PORTD для VCC=1, URX=0, UTX=0 (если установить VCC=0 - регистрация сим-карты не работает). А также последовательностью выключения digitalWrite UTX-URX-VCC 0 - то есть, для подачи питания стал задействовать и информационные каналы. Включение - в обратной последовательности 255;
- после этого появилась другая проблема: модуль перестал нормально выключаться, все время подмаргивая. Выяснилось, что даже если провод питания отрезать - модуль сосет силовое питание по информационному разъему UTX. Делитель напряжения 2-мя резисторами 10кОм на канал - проблему не решил. Решилось установкой прямо в разрез проводов UTX и URX резистора 10кОм (при 11кОм тоже работает). Подтягивающий резистор Arduino, судя по всему, избыточного номинала - с ним не вышло;
- из неустранимого: когда есть ошибка в работе модуля - почему-то подается питание на выход D9 (зажигается светодиод) - не имеющий к модулю никакого отношения. Светодиод горит некоторое время - затем гаснет. Перерыл весь исходный код - вообще нет предпосылок на его включение (только в функции, не имеющей к функции отправки SMS никакого отношения и использующей светодиод в виде частого моргания).

(добавлено 24.02.2022) Оказывается, на границу попал. 10кОм - неоднозначный результат, в зависимости от погрешности резистора. 11кОм надо ставить. На 12кОм тоже работает.
Обновлено ( 24.02.2022 17:44 )
 
 

Последние новости


©2008-2022. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).

Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Открыта карта ВТБ для материальной поддержки сайта: 5368 2902 0040 0838.

Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
Top.Mail.Ru