Объясни в какой сериал ты посылаешь команды в строках 20-22?
Почему строка 97 стоит после того как уже пообщался с модемом?
20-22 активирует gprs.
sendATCommand это функция для отправки at команд.
Вроде явных ошибок нет. (в части переключения serial)
Наверное что то скетч выводит в монитор порта?
Ещё раз. В какой сериал (у тебя их три) отправляются команды?
Присоединюсь к выше написанному совету “выбирай контроллер под задачу”
Я тоже недавно долго бился со связью ESP-01 и Ардуино Нано по софту. Была куча странных проблем. И это только с одним SoftwareSerial. Большая часть решилась выбором других библиотек.
Но второе устройство я собрал на ESP-32. Да, у меня есть кучка Нанок и Esp-01, но нервы дороже.
Всем спасибо, кто участвовал в данном вопросе. Скетч с применением listen() удалось запустить.
В функцию sendATCommand добавил переменную String answer, куда записывал ответы от модема, а потом через переменную выводил в монитор порт и о чудо - заработало.
По правде не совсем понял, почему его не устроило прямой вывод ответа на монитор порт…
Вот обновленная функция:
String sendATCommand(String cmd) {
String answer;
if (!sim.isListening()) {
Serial.println("--- Listen 'Sim' ---");
sim.listen();
}
sim.println(cmd);
while (!sim.available()) {};
if (sim.available()) {
answer = sim.readString();
}
Serial.println(answer);
}
Кажется все же дело было в return в конце sendATCommand. Без return зависает. Т.е. вот рабочая функция:
String sendATCommand(String cmd) {
String answer;
if (!sim.isListening()) {
Serial.println("--- Listen 'Sim' ---");
sim.listen();
}
sim.println(cmd);
while (!sim.available()) {};
if (sim.available()) {
answer = sim.readString();
}
Serial.println(answer);
return answer;
}