Победил через ардуину. Вопрос остается. Терминалы все в какой-то своей кодировке вещают Хотелось бы через usb-ttl тоже общаться. Как ??
Подключаю через СР2102. Использую Terminal V1.9 Только так удалось изменить первоначальную скорость на 9600 (AT+IPR=9600$0D) $0D надо вводить в конце каждой команды.
Купи любой нормальный шилд например на http://amperka.ru или на http://adafruit.com. Просто используй толко команды для СМС.
Можно за 50-60р купить чип у китайцев дапаять кое чего и нормально. Я так делал с SIM808 отлично всё работает!
Где то встречал код, где красиво было реализовано получение serial rx без delay Код (C++): if (mySerial.available()) { //есть данные от GSM модуля delay(200); //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана while (mySerial.available()) { //сохраняем входную строку в переменную val ch = mySerial.read(); val += char(ch); delay(10); } что то не получается красиво сделать. может кто подскажет?
нашел решение Код (C++): char ch; while(gsmSerial.available()) { ch = gsmSerial.read(); if(ch == '\r') continue; if(ch == '\n') { GotLine(line); line = ""; } else line += ch; } я не автор но работает отлично.
Это то же самое только для короткой строки. Если же в ней больше 5-8 символов, то без delay(200) получите огрызок. Ну или скорость порта увеличить раз в несколько.
Разве чтение не из буфера происходит? На сколько я понимаю, данные приходят в буфер, а мы читаем из буфера. Если так то причем тут скорость порта?
Для этого и delay(200) чтобы данные успели попасть в буфер. Принимать из буфера начинает сразу после первого байта и выкачивает то что успело туда попасть, причем быстрее чем попадает новое, затем решает что прием закончен и все остальное откусывается.
у меня m590 почему то криво работает. поэтому я и начал искать варианты и причины. например в секции setup половина команд работает, половина выводится в консоль обрезанными ... игра в делей ничего не меняет. не пойму в чем проблема.
Скорость порта какую ставили? И еще непропайка очень часто глючит вот так, пройдитесь по контактам еще разок.
38400 на software serial, но на 9600 аналогично. с usb ttl все команды залетают отлично, а через скетч - как повезет. например AT+CSQ в сетапе никогда не работает, куда бы ее не ставил, но внутри loop легко сработает с первого раза. я не пойму что за аномалии. буду проверять спасибо
Код (C++): gsmSerial.println("AT+CLIP=1"); delay(300); gsmSerial.println("AT+CMGF=1"); delay(300); gsmSerial.println("AT+CSCS=\"GSM\""); delay(300); gsmSerial.println("AT+CPBS=\"SM\""); delay(300); Код (C++): AT+CLIP=1 OK AT+CMGF=1 OK AT+CSCS="GSM" OK AT+CPBS="SM если сделать gsmSerial.println("AT+CSQ"); то будет AT+CS но если внутри кода сделать gsmSerial.println("AT+CSQ"); то едет отлично
подскажите, не смог нагуглить, можно ли отправить смс сразу на несколько номеров за один раз? как это делается в телефоне? или же все равно нужно этот процесс делать много раз по 1 номеру за раз, и между ними я так понял еще и выжидать время ...
На сколько я понимаю - телефон так и делает, запускает процесс отправки несколько раз. Просто для пользователя это автоматизированно. Здесь эту автоматизацию делаете вы сами.
А как вычислить сколько времени нужно ждать между этими отправками? Только методом подбора? Подряд отправить я так понял нельзя, получается какая то каша и он плюет ошибку ERROR. Методом подбора найти интервал через который он хавает их все?
Главное чтобы успевало отправить раньше, чем накидывает. Попробуйте 500мс между отправками для начала.
Приобрел вот этот модуль http://s.aliexpress.com/zy2MZNvU, запитал от отдельного БП, стабильно SIM работает только от 5 вольт, хотя написано Рабочее напряжение: 3.7-4.2 В 2, менее 5 вольт теряется симка. Уровни согласованы плохо, жду из поднебесной плату согласования. Возникает один вопрос плата на 5 - 3.3 а на SIM 2.85 ,как с этим быть? Пока отвечает через раз, а то и 10 с кракозябрами.