#1 2022-08-26 13:23:15

taras150162
Учасник
Зареєстрований: 2019-07-03
Повідомлень: 5

Arduino Nano+sim800l+Email+SD

Уважаемые форумчане прошу помощи.
Есть Ардуино Nano, модуль SD карты и sim800l (1418B05SIM800L24). В среде Arduino IDE нужно взять файл из SD-карты прикрепить к email и отправить по GPRS на указанную почту. Что сделано. Файл с SD читается, содержимое можно вывести в монитор порта. Письмо успешно отправляется и  доходит до адресата, доходит и вложенный файл, но проблема в том что он ПУСТОЙ, т.е. не могу заполнить его данными. Если команды запускаю с монитора порта, то любое вводимое значение сохраняется в файл вложения и он успешно доходит до адресата. А вот с программы - никак. Уже "все мозги разбил на части, все извилины заплел".
Мой код:

#include <SoftwareSerial.h>
#include <Sim800L.h>
#include <SD.h>
#include <SPI.h>

-----тут не важно-------------

  sim800l.println("AT+SAPBR=3,1,"APN","Internet"");
  delay(4000);
  sim800l.println("AT+SAPBR=1,1");
  delay(4000);
  //sim800l.println("AT+SAPBR=2,1");
  //delay(4000);
  sim800l.println("AT+EMAILCID=1");
  delay(4000);
  sim800l.println("AT+EMAILTO=30");
  delay(4000);
  sim800l.println("AT+EMAILSSL=1");
  delay(4000);
  sim800l.println("AT+SMTPSRV="smtp.*.*",465");
  delay(4000);
  sim800l.println("AT+SMTPAUTH=1,"email","password"");
  delay(4000);
  sim800l.println("AT+SMTPFROM="email","Arduino"");
  delay(4000);
  sim800l.println("AT+SMTPRCPT=0,0,"email","Denis"");
  delay(4000);
  sim800l.println("AT+SMTPSUB="test"");
  delay(4000);
  sim800l.println(touse);
  delay(4000);
  sim800l.println(msg);
  delay(4000);
  sim800l.println((char ) 26 );
  delay(4000);
  sim800l.println("AT+SMTPFILE=1,"TEST.TXT",0");
  delay(5000);
  sim800l.println("AT+SMTPSEND");
  delay(2000);
  sim800l.println("AT+SMTPFT=25"); //сколько байт передать
  delay(4000);

//========= вот здесь не могу запихнуть 25 байт в sim 800l ================

//1)---- этот кусок не работает-----
char* file_name = "TEST.TXT";
dataFile = SD.open(file_name);
  if (dataFile) {
    Serial.println("Opening the file: "+String(file_name)+" done.");
  }
  else {
    Serial.println("Error opening " + String(file_name));
  }
while(dataFile.available()>0){
sim800l.write(dataFile.read());
}
//1)----------------------------------------
//2)---  этот то же ------------------------
unsigned int var=0;
while(var < 25){
sim800l.write(dataFile.read());
var++;
}
//2)------------------------------------------
dataFile.close();
//===================================================

  sim800l.println("AT+SMTPFT=0");  //завершить передачу
  delay(1000);
  sim800l.println("AT+SAPBR=0,1");

Неактивний

#2 2022-08-30 12:14:12

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 50

Re: Arduino Nano+sim800l+Email+SD

Скорее проблема с символом ". Чтобы его послать как символ, надо перед ним ставить обратный слеш. Так как для компилятора это служебный символ начала и конца строки

sim800l.println("AT+SMTPFILE=1,\"TEST.TXT\",0");

.

И так везде, где этот символ используется внутри строки.

Остання редакція Kino (2022-08-30 12:19:17)

Неактивний

#3 2022-08-31 10:21:50

taras150162
Учасник
Зареєстрований: 2019-07-03
Повідомлень: 5

Re: Arduino Nano+sim800l+Email+SD

Спасибо, исправил, но, к сожалению, не сработало. Приходит на почту вложение TEST.TXT с размером "0". Буду рад любому совету.

Неактивний

#4 2022-08-31 12:20:58

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 50

Re: Arduino Nano+sim800l+Email+SD

Ну варианта два, отслеживать ответ от модема, что он готов принимать файл (+SMTPFT: 2, 25) и по завершению передачи 25-и байт отслеживать ответ ОК.
Или вариант попробовать без карточки послать туда просто любую информацию, например какие-нибудь символы, 25 раз.

Ну или задержку после передачи тоже поставь, может он не успевает сохранить файл на сервере, а ты уже даешь команду на разрыв связи, перед вот этой строкой sim800l.println("AT+SMTPFT=0");  //завершить передачу

Остання редакція Kino (2022-08-31 12:23:51)

Неактивний

#5 2022-08-31 12:23:58

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 412

Re: Arduino Nano+sim800l+Email+SD

Додайте рядок
sim800l.println("\"");
перед
sim800l.println("AT+SMTPFT=0");

Остання редакція Honey (2022-08-31 12:27:55)

Неактивний

#6 2022-08-31 12:25:23

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 50

Re: Arduino Nano+sim800l+Email+SD

Honey пише:

Додайте рядок

Это не обязательно, если вы передали именно сколько запросили. Модем сам хавает.

Неактивний

#7 2022-08-31 13:23:19

taras150162
Учасник
Зареєстрований: 2019-07-03
Повідомлень: 5

Re: Arduino Nano+sim800l+Email+SD

Kino, Вы были правы. Модем не был готов принимать файл (+SMTPFT: 2, 25). После smtpsend приходил ответ OK, а вот +smtpft: 1,1360 не успевал. Увеличил задержку - все заработало. Огромное Вам спасибо.
Может у кого есть пример кода, как анализировать программно ответы от  sim800 (что бы не применять задержки) - буду очень признателен (taras150162@gmail.com).

Неактивний

#8 2022-08-31 15:27:26

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 412

Re: Arduino Nano+sim800l+Email+SD

Приблизно якось так

int8_t sim800l_cmd(char *cmd, char *ok_res, int timeout) {
  String res = "";
  sim800l.println(cmd);
  uint64_t start = millis();
  while (millis() - start < timeout) {
    if (sim800l.available() > 0)
      res += sim800l.readString();
    if (res.indexOf(ok_res) >= 0)
      return 0;
    if (res.indexOf("ERROR") >= 0)
      return -1;
  }
  return -2;
}
if (sim800l_cmd("AT+SMTPSEND", "OK", 5000))
  Serial.println("error or timeout");

Неактивний

#9 2022-09-05 16:02:30

taras150162
Учасник
Зареєстрований: 2019-07-03
Повідомлень: 5

Re: Arduino Nano+sim800l+Email+SD

Honey, большое Вам спасибо, мысль уловил - буду работать.
И, если позволите, последний (вернее крайний) вопрос. Передавать большой текстовый файл получается, а вот бинарное фото - нет.
"Нарыл", что протокол SMTP не умеет работать с бинарным кодом, нужно преобразовать в BASE64. Отсюда вопрос: как в среде Arduino IDE на "железе" NANO реализовать преобразование бинарного файла в BASE64 ? Буду признателен за любые примеры по этому поводу (можно на Си для AтМеги).

Неактивний

#10 2022-09-05 20:55:49

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 412

Re: Arduino Nano+sim800l+Email+SD

https://uk.wikipedia.org/wiki/Base64
https://www.arduinolibraries.info/libraries/base64

Неактивний

#11 2022-09-06 15:52:15

taras150162
Учасник
Зареєстрований: 2019-07-03
Повідомлень: 5

Re: Arduino Nano+sim800l+Email+SD

Большое всем спасибо. Было приятно пообщаться с умными людьми.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму