Здравствуйте! У меня не работает GSM модуль SIM800L. Пробовал переподключать разными способами, мигает нормально, но на AT не отвечает. всякая чушь выходит в виде квадратиков. Что делать? Код (C++): #include <SoftwareSerial.h> SoftwareSerial SIM800(0, 1); // 0 - RX Arduino (TX SIM800L), 1 - TX Arduino (RX SIM800L) void setup() { Serial.begin(9600); // Скорость обмена данными с компьютером Serial.println("Start!"); SIM800.begin(9600); // Скорость обмена данными с модемом SIM800.println("AT"); } void loop() { if (SIM800.available()); // Ожидаем прихода данных (ответа) от модема... Serial.write(SIM800.read()); // ...и выводим их в Serial if (Serial.available()); // Ожидаем команды по Serial... SIM800.write(Serial.read()); // ...и отправляем полученную команду модему }
Код легко проверить. Отключаете модем от Ардуины, а провода RX и TX идущие от Ардуины замыкаете между собой. Дальше проверяете: то, что набираете в строке отправить, должно появляться на прием.
Скоростями играйте, обычно SIM800L по умолчанию на 57600 работают. Ну и проверяйте правильность подключения, конечно. И да - на скоростях выше 9600 надо использовать только аппаратный UART для связи с модемом, SoftwareSerial не прокатит.
Как обычно. В чём проблема-то - подключить модуль к аппаратному UART ардуины и из кода общаться с ним? Проверить работоспособность модуля (а также подобрать скорости и т.п.) можно, имея USB-TTL-converter, эта железка обязана быть в наличии, если работаете с модулями, общающимися посредством UART. Подключаете SIM800 через конвертер к компу, открываете любую терминальную программу - и общаетесь с ним, ардуина тут не нужна. Через терминальную программу удобно перешить скорость общения с устройством, с помощью AT-команды, что в дальнейшем даст вам возможность юзать SoftwareSerial на стороне ардуины.
Наберитесь терпения и проверьте все стандартные скорости обмена с модулем перекомпилируя скетч. Другого выхода у вас просто нет. Или используйте USB-COM конвертор, чтоб не морочить ардуину. Или ПК с аппаратным СОМ - портом. ...исправил. На мой взгляд лучше введите строковую переменную, в которую сначала считываете из одного порта, и из которой потом отправляете в другой порт. Код "разложенный на кирпичики" работает медленнее, но артефакты компилятора реже проявляются.