Помогите отправить команду в Serial, непонятный предел.
- Войдите на сайт для отправки комментариев
Пт, 02/12/2016 - 12:40
Добрый день.
Нужна помощь знающих людей.
Arduino Nano + Sim800L.
Все работает хорошо, кроме того, что не могу передать команду на выполнение модему - обрезается длина строки.
Объявлена переменная char URL[100] = "?api_key=QDGLLN3P678PLY3D&field1=11\"";
Передаю команду модему GSMport.print("AT+HTTPPARA=\"URL\",\"https://api.thingspeak.com/update");
Далее, побайтно, передаю остаток строки из переменной
for (int i=0; i < sizeof(URL); i++) {
GSMport.print(URL[i]);
В итоге, получаю результат: AT+HTTPPARA="URL","https://api.thingspeak.com/update?api_key=QD
Т.о. из требуемой длинны в 36 символов передалось всего 11. В сумме 64 символа.
Как с этим бороться?
Спасибо!
Размер "64 символа" наводит на мысль о переполнении буфера.
Можно либо увеличить длину буфера, либо использовать небуферизованную передачу.
64 символа ? А почитайте про размер буфера последовательного порта, например, https://www.google.com.ua/?gws_rd=ssl#q=arduino+serial+%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80+%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B0
Размер "64 символа" наводит на мысль о переполнении буфера.
Можно либо увеличить длину буфера, либо использовать небуферизованную передачу.
Спасибо за ответ. Длину буфера попытался увеличить переназначив #define buffer с 64 на 128. Не помогло.
А как организовать небуферизированную передачу?
Длину буфера попытался увеличить переназначив #define buffer с 64 на 128. Не помогло.
Это не то, и не там. Найдите в в каталоге Arduino IDE файл HardwareSerial.h, посмотрите там
Длину буфера попытался увеличить переназначив #define buffer с 64 на 128. Не помогло.
Это не то, и не там. Найдите в в каталоге Arduino IDE файл HardwareSerial.h, посмотрите там
Понял. Нашел и подправил вот так:
Чтобы победить, нужно понять, что именно происходит.
Для начала просто распечатать SERIAL_TX_BUFFER_SIZE и SERIAL_RX_BUFFER_SIZE.
Чтобы победить, нужно понять, что именно происходит.
Для начала просто распечатать SERIAL_TX_BUFFER_SIZE и SERIAL_RX_BUFFER_SIZE.
Да, все верно. Я это сделал в предыдущем посте.
И что получили?
И что получили?
К сожалению, все тоже самое :(
Нет в софт-сериале НА ПЕРЕДАЧУ никакого буфера, вообще никакого.
В чем-то другом дело. Покажите больше кода.
То есть 64 - это конечно искуственно вылезающее ограничение, но это размер буфера ПРИЕМА. Какая связь?
И что получили?
К сожалению, все тоже самое :(
Еще раз: какое число выдает в консоль?
Андриано!
Это GSM модуль и Нанка. Подключение возможно исключительно через софт-сериал.
Какое значение имеют размеры буферов хард-сериала? Мы куда-то в дебри полезли, не имеющие отношения к задаче.
Поменял Nano на Uno.
Та же ерунда, уже и не знаю что с этим делать. Не хочет отдавать в модуль строку - хоть убейся!
Значения буфера изменены, вот так:
Вот код. Помогите люди добрые!
Поменял Nano на Uno.
Та же ерунда, уже и не знаю что с этим делать. Не хочет отдавать в модуль строку - хоть убейся!
Значения буфера изменены, вот так:
На всякий случай напомню, что wdrakula утверждает, что этот фрагмент к Вашей задаче никакого отношения не имеет. Спорить с ним не буду, т.к. в данном вопросе даже не пытался разобраться.
Если же Вы считаете, что эти константы для Вас важны, то следует убадиться, какие знеачения они принимают на самом деле. А проще всего это сделать примерно так:
У софтового сериала свой буфер. Править его размер надо в SoftwareSerial.h
Сейчас могу не правильно вспомнить (среды под рукой нет), вроде #define _SS_MAX_TX_BUFF и #define _SS_MAX_RX_BUFF
У софтового сериала свой буфер. Править его размер надо в SoftwareSerial.h
Сейчас могу не правильно вспомнить (среды под рукой нет), вроде #define _SS_MAX_TX_BUFF и #define _SS_MAX_RX_BUFF
а у меня есть под рукой. у софт сериала буфер - только не прием.
Этот ньюанс не помнил)) Посмотрел реализацию write - вывод действительно идет без буфера.
Может это как-то задержки отрицательно сказываются или их время не оптимально? Я тупо не могу понять как это победить... Ведь народ использует эти модули! Я уже грешу на то, что модуль неисправен...
Попробуйте в функции resp(), после 118 строки добавить небольшую задержку, delay(10), например. Возможно, не успевает выдать всю информацию.
И как Вы определяете, что передалась не вся строка? Если по ответу модуля, то в этом случае нужно увеличивать буфер в SoftwareSerial.h, параметр _SS_MAX_RX_BUFF
Еще, в режиме gprs модуль крайне требователен к питанию. Мне помогла припайка проводов питания напрямую, через макетку работало нестабильно, хотя все остальные функции - без проблем были.
Решил проблему или нет?
достучался до сайта thing speak.com?
Я на sim800l отправил данные на этот сайт только через набор команд at-sapbr
Для работы по http протоколу, и модуль твой исправен:))