Vypra
Member
Уважаемый CodeNameHawk, Вы наверное не поняли сути проблемы, которую я выше описал. Скетч рабочий. Отладки не требует.Накидайте в программу отладочных Serial.println и узнаете в каком месте затык.
Для начала - Зашел в Setup - вышел.
И так в каждую функцию, в той что подвисает, дополнительно после "важных" операторов.
enjoynering прав. Я изменил скетч и обращаюсь к SIM800 переключением Serial.swap(); на пины SIM800 и обратно на пины монитора порта.
Код:
String _response = ""; // Переменная для хранения ответа модуля
long lastUpdate = millis(); // Время последнего обновления
long updatePeriod = 60000; // Проверять каждую минуту
bool hasmsg = false; // Флаг наличия сообщений к удалению
void setup()
{
Serial.begin(9600);
pinMode(15, OUTPUT);
pinMode(13, INPUT);
//sendATCommand("AT&F", true); // Сброс до заводских
sendATCommand("AT+CFUN=1,1", true); // перезагрузка модуля при запуске
delay (2000);
delay (2000);
sendATCommand("AT", true); // Отправили AT для настройки скорости обмена данными
send_Email("5", "HELLO"); // 1 - количество символов в теле сообщения, 2 - сообщение
}
void loop()
{}
void send_Email(String num, String message)
{
//Настройки интернет соединения
sendATCommand("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"", true); // задаем команду выхода в интернет
delay (2000); // без паузы не работает
delay (2000);
sendATCommand("AT+SAPBR=3,1,\"APN\",\"internet\"", true); // настройки APN Vodafone
delay (2000); // без паузы не работает
delay (2000);
sendATCommand("AT+SAPBR=1,1", true); // To open a GPRS context. установить GPRS соединение
delay (2000); // без паузы не работает
delay (2000);
//Настройки для отправки e-mail :
sendATCommand("AT+EMAILCID=1", true); // Установка CID параметра для email сессии.
delay (2000);
sendATCommand("AT+EMAILTO=30", true); // Set EMAIL timeout Установка таймаута для SMTP и POP серверов.
delay (2000);
sendATCommand("AT+EMAILSSL=1", true); // Set EMAIL begin encrypt transmission with encrypt port
delay (2000);
sendATCommand("AT+SMTPSRV=\"SMTP.GMAIL.COM\"", true); // Установка адреса и порта SMTP почтового сервера.
delay (2000);
sendATCommand("AT+SMTPAUTH=1,\"*******@gmail.com\",\"****\"", true); // Аутентификация (e-mail адрес, и пароль от e-mail)
delay (2000);
sendATCommand("AT+SMTPFROM=\"*****@gmail.com\",\"*****\"", true); //от кого письмо (почтовый адрес, имя отправителя)
delay (2000);
sendATCommand("AT+SMTPSUB=\"Test\"", true); //тема письма
delay (2000);
sendATCommand("AT+SMTPRCPT=0,0,\"******@gmail.com\",\"******\"", true); // кому письмо (почтовый адрес, имя получателя)
delay (2000);
sendATCommand("AT+SMTPBODY=\"" + num + "\"", true); // задаем сколько символов в письме
delay (2000);
sendATCommand(message + "\r\n" + (String)((char)26), true); //После получение ответа от модуля DOWNLOAD. вводим текст письма длиной n символов.
//Для отправки в конце сообщения отправляем символ SUB ( (char)26 или Cntrl+Z)
delay (2000);
delay (2000);
sendATCommand("AT+SMTPSEND", true); // Отправка Email
delay (2000); // без паузы не работает
delay (2000);
delay (2000);
sendATCommand("AT+SAPBR=0,1", true); // разорвать GPRS соединение
}
// Ответы:
// 1 – письмо успешно отправлено
// Некоторые ошибки:
// 61 – ошибка соединения
// 63 – ошибка подключения SMTP TCP
// 64 – время сессии истекло
// 65 - отклонено сервером (в Gmail нужно разрешить доступ к аккаунту небезопасным приложениям)
// 67 – ошибка аутентификации
//***************************************************************************************************************
String sendATCommand(String cmd, bool waiting)
{
Serial.println(cmd); // Пишем команду в монитор порта ПК для себя
delay (300);
Serial.swap(); // Переключаемся на пины SIM800
delay (300);
String _resp = ""; // Переменная для хранения результата
Serial.println(cmd); // Даем команду SIM800
if (waiting) // Если необходимо дождаться ответа...
{
_resp = waitResponse(); // ... ждем, когда будет передан ответ
}
else
{
Serial.swap();
delay (300);
}
return _resp; // Возвращаем результат.
}
//***************************************************************************************************************
String waitResponse() // Функция ожидания ответа и возврата полученного результата
{
String _resp = ""; // Переменная для хранения результата
unsigned long _timeout = millis() + 4000; // Переменная для отслеживания таймаута (10 секунд)
do
{ delay(0);
if (millis() > _timeout )
{
Serial.swap(); // Переключаемся на монитор порта ПК
delay (300);
Serial.println("Timeout..."); // печатаем Timeout... в монитор порта ПК
break;
}
if (Serial.available())
{
_resp = Serial.readString(); // читаем ответ SIM 800
_response = _resp;
Serial.swap(); // Переключаемся на монитор порта ПК
delay (300);
Serial.println(_resp); // печатаем ответ SIM 800 в монитор порта ПК
break;
}
}
while (1) ; // Просто событие, которое не наступит
return _resp; // ... возвращаем результат. Пусто, если проблема
}
Хотя в мониторе порта вижу
Код:
AT+SMTPBODY="5"
DOWNLOAD
HELLO
OK
AT+SMTPSEND
OK