Arduino Nano+A6mini gsm/gprs
- Войдите на сайт для отправки комментариев
Господа, добрый день.
Помогите пожалуйста советом, пытаюсь научить дуню принимать/отправлять смс через gsm-модуль.
По usb-uart модуль работает корректно, цепляю его на объявленный Softwareserial 10,11 пины, пытаюсь через println отправить в модуль команду хотя бы чтобы позвонить (ATD+7xxxxxx) в ничего не происходит.
Пытаюсь позвонить на модуль чтобы дуня узнала об этом и сравнила номер звонящего с тем что в переменной записан - тоже тишина. И модуль, и Дуня настроены на одну и ту же скорость 115,2кбод, и заодно com-порт на эту скорость настроил.
Уже по-всякому пробовал- реакции никакой.
Причем, даже в мониторе порта тишина, хотя специально сделал чтобы прочитав, дуня в ком-порт кидала то что прилетело с модуля.
Еще параллельно вопрос - в инете полно примеров с использованием модуля sim800l, в этих примерах для отправки смс используется библиотека SIM900 (обычно в скетчах обзывается sendsms.h), но в ней я не смог найти процедуру для смс, как и в библиотеке А6.
Как отправлять смс без этих библиотек, если после инициализации команды и указания номера необходимо дождаться когда появится приглашение для ввода текста, т.е. ">" а потом еще и символ char26 в конец строки запихать?
Заранее большое спасибо!
....
И модуль, и Дуня настроены на одну и ту же скорость 115,2кбод
Softwareserial на 115200 бод не работает, максимум 38400
....
И модуль, и Дуня настроены на одну и ту же скорость 115,2кбод
Softwareserial на 115200 бод не работает, максимум 38400
Хм, попробую понизить скорость на модуле. Спасибо за совет.
что касается отправки СМС - код по большому счету одинаковый для любого модема, так что ищите любую библиотеку с такой функцией. "подпилить напильником" для А6 будет несложно
Наберите прям здесь на форуме в поиске A6, и в первых четырех-пяти ссылках будут ответы на ваши вопросы. А также много примеров кода. Никаких специальных библиотек для работы с модулем не нужно.
Господа, всем добрый день.
Проконсультируйте пожалуйста как быть с приобретенным мною чудом китайской мысли под названием A6_mini GSM/GPRS модуль.
На просторах всемирной, в т.ч. и тут на форуме вычитал что расторопные кЕтайцы в своем желаниии заработать соорудили модуль, в котором насмерть зашита часть переменных, изменить которые можно только в сеансе до следующей перезагрузки модуля. В чило этих переменных входит как раз и скорость порта. Т.е. как ни пытайся сменить его скорость на любую другую, стоит ему перезагрузиться, он снова начинает вещать на 115,2к. И если с другими параметрами более-менее понятно (как например формат сообщений PDU, или кодировка по умолчанию HEX) - их можно поменять прямым объявлением, то вот что делать со скоростью - я так и не нашел ответа. Т.е. чтобы поменять скорость вещания модуля на приемлимую для Дуни, необходимо сначала поднять соединение на 115,2; отправить модулю команду AT+IPR=9600, и только потом переключить SoftwareSerial на вещание на 9600бод.
собственно, вопрос - существуют какие-то способы сделать это, учитывая что дуня не умеет поднимать соединение по UART на скорости больше чем 38400бод? Существуют ли аналогичные дуне платы разработки (м.б. Digispark), в которых исправлен этот изъян и они способны нормально общаться с подключенными устройствами на высоких скоростях?
P.S. понимаю что самый простой вариант решить эту задачу - не страдать фигней и купить нормально работающий SIM800L, в котором таких косяков нету, но быстро его купить не получится (только с али ждать), да и этот выкидывать не хотелось бы...
Заранее большое спасибо за советы!
Levinsoft - не знаю, где вы это вычитали, но явно не у нас на форуме. Никакой проблемы нет. Модем и правду всегда стартует на скорости 115200 и изменить это поведение невозможно. Однако это и не нужно - "умные китайцы" встроили в модем автоопределение скорости. То есть, для того, чтобы поменять скорость последовательного интерфейса модема - команда AT+IPR вообще не нужна, достаточно лишь несколько секунд подряд долбить модем любыми командами на выбранной скорости.
Я до этих ваших модемов пока не дошел (хотя и планирую), поэтому может что-то неправильно понимаю. Но, в начале года, RS485 over SoftSerial я мучал на разных скоростях, но недолго. На 57600 обычная Nano с ПК общалась вроде как бодро и без обрывов. На 115200 уж не помню.
Тут тоже написано, что библиотечка на 115200 работает: https://www.arduino.cc/en/Reference/SoftwareSerial
Мне кажется, что если где-то и есть проблема высокоскоростной работы с SoftSerial, то это на этапе приёма или при долговременной эксплуатации. Отправка короткой строки же, полагаю, на 115200 должна осуществляться с легкостью. Поэтому пока что я не вижу проблемы в том, чтобы выплюнуть в модем команду переключения скорости, а потом переконфигурировать порт через повторный begin() (судя по коду, опасности в повторном вызове нет).
P.S. Кстати, какие нынче модели GSM-модемов/шилдов считаются беспроблемными? Чтобы и питались без дополнительного диода и с согласователями уровней прыгать не нужно? SIM800L всё еще держит пальму первенства или есть что-то интересней? Задач особых нет, просто для опытов.
Levinsoft, обясните, почему Вы игнорируете совершенно сдравый совет "Наберите прям здесь на форуме в поиске A6, и в первых четырех-пяти ссылках будут ответы на ваши вопросы. А также много примеров кода. "?
Вы думаете что столкнулись с уникальной, ранее никому не известной проблемой и поис безполезен? Нет, все уже разжовывалось много раз, в т.ч. и мной и про переключение скорости и про софтсириал и про смс. Нет смысла повторять.
Новая версия софтваре сериал работает и на 115200, но если проц плотно юзает прерывания, то могут быть проблеммы. А параллельный процесс хардвавре сериал, на большой скорости именно частенько сидит в прерываниях.
RS485 over SoftSerial я мучал на разных скоростях.
Вот на 485-м какраз и не заметите основную проблему - невозможность вести прием и передачу одновременно. Остальное проявляется вероятностно и заметно при больших объемах. Откройте код софтсириала - все поймете на время передачи или приема байта блокируется все, включая прерывания. Потому работает или прием или передача или остальная программа. Лучше забудте что софтсириал в природе есть. Есть альтетнативные варианты, немного лучше.
Тут тоже написано, что библиотечка на 115200 работает: https://www.arduino.cc/en/Reference/SoftwareSerial
оно "работает" - то есть пару символов, наверно, передать можно. Но ничего более. При попытке работать по СофтСериалу на скорости 115200 лезут спрошные крокозябры.
это просто не нужно - см. мой предыдущий пост
Беспроблемных не существует. Но у меня как раз описанный в этой теме A6 - и он мне очень нравится. Если не нужно ничего специального, только звонки, СМС и GPRS - ИМХО, А6 наголову лучше SIM800. Он экономичнее (легко работает вместе с дуней от USB без внешнего питания), толерантен к 5в и не требует согласования уровней. Дешев и мало брака в продаже. Но есть, конечно, и минусы - у него нет UDP и поддержки DTMF
Про отсутствие UDP - не уверен. по описанию
Ai-Thinker Inc A6_A7_A6C_A20 模组 AT 命令集 V1.03
Про отсутствие UDP - не уверен. по описанию
1. “UDP” connection is not support yet.
2. 1156 name resolution is not support, so you can only connect with IP address.
В моем описании такого примечания нету, а в параметрах команды UDP присутствует.
Не думаю что вопрос с UDP закрыт. Даже если по факту не работает, а в описании есть но с примечанием "не поддерживается", то вероятно будет добавлен в новой версии прошивки. Иначе с чего его вобще упоминать.
Levinsoft - не знаю, где вы это вычитали, но явно не у нас на форуме. Никакой проблемы нет. Модем и правду всегда стартует на скорости 115200 и изменить это поведение невозможно. Однако это и не нужно - "умные китайцы" встроили в модем автоопределение скорости. То есть, для того, чтобы поменять скорость последовательного интерфейса модема - команда AT+IPR вообще не нужна, достаточно лишь несколько секунд подряд долбить модем любыми командами на выбранной скорости.
Ув, b707, информацию о том что у него присутствует автоопределение я, безусловно, давным давно нашел, однако, может быть у меня руки (скорее всего) не оттуда, может то что мне приехало из поднебесной - кривое, но тот экземпляр что у меня - напрочь игнорирует долбление его командой "АТ" на нужной мне скорости и в случае с, например, 38400 модем хоть что-то гадит в консоль, а если долбить его на 9600 - вообще тишина.
Ув. Logik, поверьте на слово, если бы на первых 3-4 страницах поиска удалось бы найти внятный ответ на вопрос как бороться с этим модемом, уж никак мне в голову не пришло бы задавать столь тупые вопросы. А поиск то и выдает кучу тем с одними и теми же проблемами у людей - не отправляет смс, не принимает смс и т.п. и, кстати, ни в одной из этих тем, где народ выкладывает примеры своего кода, я не увидел чтобы кто-то циклом долбил модем и слушал когда он ответит "ОК". отсюда и закрадываться стали сомнения по поводу юзабельности данного модема.
Если есть возможность и знаете в какую тему посмотреть где есть внятное описание по взаимодействию с этим девайсом, не сочтите за труд - ткните пожалуйста носом. Буду Вам безмерно благодарен.
ни в одной из этих тем, где народ выкладывает примеры своего кода, я не увидел чтобы кто-то циклом долбил модем и слушал когда он ответит "ОК". отсюда и закрадываться стали сомнения по поводу юзабельности данного модема.
Если есть возможность и знаете в какую тему посмотреть где есть внятное описание по взаимодействию с этим девайсом, не сочтите за труд - ткните пожалуйста носом. Буду Вам безмерно благодарен.
http://arduino.ru/forum/apparatnye-voprosy/gsm-modem-a6-v-rezhime-tcp
Код в начале темы. "Долблю модем "в цикле loop стр.720-727, проверка получения ответа - стр 50-56.
если честно, был неколько поражен Вашим кодом в целом.
я пытаюсь вот так заставить дуню стучаться в модем:
void loop () { gprsSerial.print("AT"); if (!gprsSerial.available()) { return; } // если нет ответа от модуля то выходим из текущего прогона и снова заходим в loop() char currSymb = gprsSerial.read(); // записываем что упало от модуля. Serial.print(currSymb); if ('OK' == currSymb){ // если прилетел ОК, значит модуль отозвался, можно закидывать настройки } gprsSerial.print("AT+ICF=3,3\r"); // устанавливаем настройки передачи 8/0/1, четность - нет. delay(500); // gprsSerial.print("AT+CLIP=1\r"); // включаем АОН delay(1000); // gprsSerial.print("AT+GSMBUSY=0\r"); // Разрешаем входящие звонки delay(1000); // gprsSerial.print("AT+CMGF=1\r"); // устанавливаем текстовый режим смс-сообщения delay(1000); // gprsSerial.print("AT+CSCS=GSM\r"); // устанавливаем кодировку GSM delay(1000); //Либо еще вот так пробую, так хоть обратно что-то валится с модема
#include <SoftwareSerial.h> SoftwareSerial mySerial(10,11); void setup() { Serial.begin(9600); mySerial.begin(9600); }; void loop() { mySerial.println("AT"); if (mySerial.available()) { Serial.write(mySerial.read()); } if (Serial.available()) { mySerial.write(Serial.read()); } }поправьте меня пожалуйста, если я где-то неправ.
Еще вопрос - как то не обращал внимания на модем, т.к. ноги к нему припаял таким образом что симка получилась сверху, а сам чип и светодиоды снизу платы, он у меня в макетку воткнут. дык вот если подключить его к USB_UART, красный светодиод горит постоянно и ровно, синий моргает когда модем что-то передает. а вот если его к дуне подключить, причем даже если только 5в и землю, красный светик начинает моргать тусклее-ярче. в даташите сказано что модем может моргать (я так понял полностью выкл\полностью вкл) если не инициализирован. у моей версии кнопки нету, т.е. надо накинуть 5в и на pwr-пин, но реакции никакой не происходит.
Мож я Вам тут, уважаемые, зря мозги парю своими вопросами?! как его включить то без кнопки и почему через UART он сам включается?
И что, вот это работает: if ('OK' == currSymb) ?
Сложно сказать работает ли это. По идее должно. Если на дуне замкнуть Тх и Rx и кинуть в сериал что-нибудь, то Serial.read() считывает данные корректно, а потом их можно и в текстовом виде сравнить, мне так кажется.
Работает ли это на модеме - не знаю. до меня только вчера ночью дошло что у меня модуль от Дуньки не включается. При этом, по USB-UART включается и нормально функционирует, т.е. звонит, шлет смс и т.п.
я вчера уже взял от UART накинул питание на моудль, а tx-rx взял с Softwareserial от дуины - один хрен, модуль не включился. какова &*^#$# ему надо - пока не понял. Причем, у меня версия шилда вот такая, у него нету кнопки включения, но пин выведен. в мануале сказано что надо кратковременно подать на этот пин +5В, но ниче не происходит. он как блинкал светиком, так и блинкает.
Еще, кстати вчера заметил - если с UART взять не 5в а 3,3 и подать на VCC, то светик то не блинкает а горит ровно, но и модуль не запускается. на 5в запускается самостоятельно. а в даташите сказано что рабочее напряжение у него 3,3-4,3в, а никак не 5. чудеса, короче с этим чудо-девайсом...
Сложно сказать работает ли это. По идее должно. Если на дуне замкнуть Тх и Rx и кинуть в сериал что-нибудь, то Serial.read() считывает данные корректно
Считывает то оно считывает, но вот это "if('Ok' == currSymb){" не сработает никогда. О чем выше тонко намекнули.
Еще, кстати вчера заметил - если с UART взять не 5в а 3,3 и подать на VCC, то светик то не блинкает а горит ровно, но и модуль не запускается. на 5в запускается самостоятельно. а в даташите сказано что рабочее напряжение у него 3,3-4,3в, а никак не 5. чудеса, короче с этим чудо-девайсом...
Ни каких чудес. Питание на модуле идет через диод. Соответственно 3.3v на нем просаживается ниже требуемоей чипу границы.
Сложно сказать работает ли это. По идее должно.
да не будет это работать. И не должно. currSymb - это один символ, а в строке "ОК" их как минимум два. Так что это равенство никогда не будет истинным. Ну и вообще по вашему коду сразу видно, что программируете вы, прям скажем, так себе. Это ваш код "очень странный", а не код Logic-а.
Так что проблема-то не в модеме... И большинстве тех примеров. что вы в обилии находите в сети - "не отправляется СМС, не принимается СМС " - виноват не модем, а криво написанные программы. Советую искать в сети не вопросы о проблемах, писанные дилетантами, а отчеты о реальных проектах с рабочим кодом. Могу сказать, что мне очень помогло изучение кода Logic. когда я осваивал А6
Ув. b707, я очень за Вас рад что Вы, видимо программируете очень хорошо. так уж сложилось исторически что это не моя стезя. и разбираться мне приходится исходя из того что на форумах то ли дилетанты, то ли профи ваяют. я и не настаивал на своей правоте относительно верности приведенного мною равенства, т.к. проверить до конца не было возможности.
вот скажите мне, как профи дилетанту - сколько надо знать и программить чтобы разобраться в том коде, который привел Logic? если бы Вы, уважаемый, внимательно читали что пишут другие а еще и периодически вставали на место тех самых дилетантов, от Ваших постов было бы, как мне кажется, куда больше пользы.
И если уж на то пошло,
Так что проблема-то не в модеме... И большинстве тех примеров. что вы в обилии находите в сети - "не отправляется СМС, не принимается СМС " - виноват не модем, а криво написанные программы. Советую искать в сети не вопросы о проблемах, писанные дилетантами, а отчеты о реальных проектах с рабочим кодом.
я для того и пришел на этот форум чтобы попросить помощи, т.к. сам не смог разобраться, а то что в обилии находится поиском, в т.ч. и на этом форуме, как раз и сводится к одним и тем же ошибкам, решения которых то нету, потому что Гуру не позволяют себе снизойти до того чтобы потратить 1 раз 15 минут своего времени и написать ровно 1 пост, в котором явно был бы разобран, например, данный вопрос. И попросить модератора прикрепить этот пост в шапку чтобы нубы, приходящие на форум по 10 штук в день, не задавали одни и те же тупые вопросы, а читали матчасть.
Таким нехитрым способом, Вы бы, например, куда больше респекта заработали, нежели генерация бессмысленных сообщений в теме.
Почитал я про ваш A6 (без документации, с разными прошивками, пр, др) и понял, что столько времени не готов вычеркнуть из жизни, тем более, что зарабатываю не на этом ))
Возьму всё же SIM800L v2 - судя по фотографиям у него на борту уже собран level shifter и "понижатель" напруги.
Levinsoft, знать нужно много и программить не переставая всю жизнь. Вы же не надеетесь без постоянных или хотя бы минимальных тренировок пробежать стометровку за 10 секунд, просто узнав, как вставать в низкий старт и передвигать ноги?
Почитал я про ваш A6 (без документации, с разными прошивками, пр, др) и понял, что столько времени не готов вычеркнуть из жизни, тем более, что зарабатываю не на этом ))
sadman - а можно кратенько для интереса. что именно отпугнуло? Просто весной был на вашем месте, почитал отчеты о разных модемах и совершенно сознательно выбрал А6 - и не пожалел. На примерах кода Logic и других энтузиастов у меня все завелось просто с пол-пинка. Никаких проблем с А6 вообще нет. Документации достаточно - есть подробный список команд (ПДФ на 100+ страниц) и краткое описание. Модем, конечно, не для чайников, так как к нему нет нормальных библиотек, но вас-то это вряд ли отпугнет...
Levinsoft, знать нужно много и программить не переставая всю жизнь. Вы же не надеетесь без постоянных или хотя бы минимальных тренировок пробежать стометровку за 10 секунд, просто узнав, как вставать в низкий старт и передвигать ноги?
я с Вами даже не пытаюсь спорить, но у меня потребность, практически, одноразовая, т.к. решить надо всего 1 задачу. Согласитесь, странно бесцельно упражняться в программировании всю жизнь в надежде что однажды появится задача которую накопленный опыт позволит решить...
К слову, узнав как ПРАВИЛЬНО встать в низкий старт, да еще и прочитав комментарии тех кто беганием на жизнь зарабатывает, чему-то да научишься. Это мое ИМХО.
вот скажите мне, как профи дилетанту - сколько надо знать и программить чтобы разобраться в том коде, который привел Logic? если бы Вы, уважаемый, внимательно читали что пишут другие а еще и периодически вставали на место тех самых дилетантов, от Ваших постов было бы, как мне кажется, куда больше пользы.
к чему этот поток слов? Я вам сначала подсказал, как поменять скорость соединения, а потом указал на ошибку в коде. Это не конкретная помощь? Вам надо все разжевать и в рот положить?
На форуме уже давно все разжевано. Ищите лучше.
Вот в этом треде, например, готовый код установки скорости (сообщение №27) : http://arduino.ru/forum/apparatnye-voprosy/gsm-a6-vopros-pro-ring
И вот полезно почитать - но тут примерами пользуйтесь с осторожностью, уровень авторов не очень , чуть выше вашего... зато код будет понятней. чем у Logic :) http://arduino.ru/forum/programmirovanie/problema-s-softwareserial-i-gsm-modulem-a6?page=3
sadman - а можно кратенько для интереса. что именно отпугнуло? Просто весной был на вашем месте, почитал отчеты о разных модемах и совершенно сознательно выбрал А6 - и не пожалел. На примерах кода Logic и других энтузиастов у меня все завелось просто с пол-пинка. Никаких проблем с А6 вообще нет. Документации достаточно - есть подробный список команд (ПДФ на 100+ страниц) и краткое описание. Модем, конечно, не для чайников, так как к нему нет нормальных библиотек, но вас-то это вряд ли отпугнет...
Не отпугнет, конечно, но и свои ресурсы я не переоцениваю - у меня кроме ардуины еще несколько опенсорц проектов из совершенно другой области и кидаться с головой в эксперименты на незнакомом поле на данный момент времени не особо много. Поэтому хочу взять то, что работает даже у чайников - потыкать легонечко, оценить перспективы и пр.
Отпугнуло что ? Ну вот эти танцы с дополнительными транзисторами для PowerOn, Reset; СМС-ками, которые валят как попало (читал темы диагонально, правда). Вобщем, сложилось, впечатление чего-то сыренького, что должно еще немного повариться, перейти в стадию Release v2.
я с Вами даже не пытаюсь спорить, но у меня потребность, практически, одноразовая, т.к. решить надо всего 1 задачу. Согласитесь, странно бесцельно упражняться в программировании всю жизнь в надежде что однажды появится задача которую накопленный опыт позволит решить...
вы не поверите, сколько раз мы уже читали на форуме такие слова. Звучит вроде бы логично - а на деле это выливается в то, что раз вам самому "странно бесцельно упражняться" - то выходит ваш код кто-то должен написать за вас.
я с Вами даже не пытаюсь спорить, но у меня потребность, практически, одноразовая, т.к. решить надо всего 1 задачу. Согласитесь, странно бесцельно упражняться в программировании всю жизнь в надежде что однажды появится задача которую накопленный опыт позволит решить...
Не соглашусь. Некоторые люди жизнь проживают ради одного какого-то момента. А решение одной задачи при осознании бесцельности усилий более результативно через финансовые инструменты.
И от того, что вы научитесь чем-то от бегунов, стометровку пробегать быстрее вы не станете. Только тренировки. Только ежедневный бег.
Отпугнуло что ? Ну вот эти танцы с дополнительными транзисторами для PowerOn, Reset; СМС-ками, которые валят как попало (читал темы диагонально, правда).
для PowerOn транзистор не нужен, для ресет нужен - но насколько я знаю, он нужен и на Сим900. С СМС у меня проблем нет.
Зато почитайте, сколько возни просто с авто-включением шилда Сим900 - все форумы забиты воплями чайников. Тоже читал по диагонали, вроде там надо какой-то резистор перепаивать...
Не, я не уговариваю, но для моих нужд А6 оптимален.
Привет Всем знающим A6!
При наборе в терминале команды ATS0=3 ответ ok
Но A6 категорически отказывается поднимать трубку.
У SIM800L все работает!
Как заставить A6 автоматически поднимать трубку?