Boa tarde caros colegas desenvolvedores!
Hoje estou enfrentando um problema tanto quanto curioso... Estou desenvolvendo uma automação utilizando Arduíno MEGA para envio de informações de forma automática para um servidor web. Irei explicar o meu layout: É realizada uma leitura das informações gravadas em um arquivo do tipo .CSV no cartão SD(ler linha por linha), após a leitura é realizado o envio das informações via método POST utilizando o módulo SIM800L e utilizo os comandos AT para isso. A minha dificuldade está em achar um método efetivo de programação para enviar estas informações lidas linha por linha contidas neste arquivo .CSV dentro do cartão SD passando pelos comandos AT para enviar cada linha lida, não estou conseguindo realizar tal função de envio das informações. Postarei o código para se alguém tiver condição de me ajudar nesta árdua tarefa! Desde já, muito obrigado!!!
Segue em anexo o arquivo utilizado na leitura.
#include <SoftwareSerial.h>
#include <SD.h>
#include <SPI.h>
/* CSV File Reading */
File file;
int SC = 53; //SC - Pin 53 Arduino Mega
char location;
void envArq();
String Grsp;
SoftwareSerial gsm(10, 11); // RX, TX ()
bool readLine(File &f, char* line, size_t maxLen) {
for (size_t n = 0; n < maxLen; n++) {
int c = f.read();
if ( c < 0 && n == 0) return false; // EOF
if (c < 0 || c == '\n') {
line[n] = 0;
return true;
}
line[n] = c;
}
return false; // line too long
}
bool readVals(float* v1, float* v2, String* loc, String* loc2) {
char line[200], *ptr, *str;
if (!readLine(file, line, sizeof(line))) {
return false; // EOF or too long
}
*v1 = strtod(line, &ptr);
if (ptr == line) return false; // bad number if equal
while (*ptr) {
if (*ptr++ == ',') break;
}
*v2 = strtod(ptr, &str);
while (*ptr) {
if (*ptr++ == ',') break;
}
String a = strtok_r(ptr, ",", &str);
String first(str);
*loc = first;
String let(a);
*loc2 = let;
return str != ptr; // true if number found
}
/* Close CSV File Reading */
void setup()
{
pinMode(53, OUTPUT);
//SD Card Reader Setup
Serial.begin(115200);
if (!SD.begin(SC)) {
Serial.println("begin error");
return;
}
file = SD.open("LOGTESTE.CSV", FILE_READ);
if (!file) {
Serial.println("open error");
return;
}
}
void loop() // run over and over
{
float x, y;
String loc, loc2;
if (Serial.available()) {
envArq();
}
}
void envArq() {
float x, y;
String loc, loc2;
Serial.println("Enviando post request");
delay(2000);
Serial.println("AT+SAPBR=3,1,\"Contype\",\"GPRS\"");
gsm.println("AT+SAPBR=3,1,\"Contype\",\"GPRS\"");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(5000);
Serial.println("AT+SAPBR=3,1,\"APN\",\"claro.com.br\"");
gsm.println("AT+SAPBR=3,1,\"APN\",\"claro.com.br\"");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(5000);
Serial.println("AT+SAPBR=1,1");
gsm.println("AT+SAPBR=1,1");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(6000);
Serial.println("AT+SAPBR=2,1");
gsm.println("AT+SAPBR=2,1");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(5000);
Serial.println("AT+HTTPINIT");
gsm.println("AT+HTTPINIT");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(5000);
Serial.println("AT+HTTPPARA=\"CID\",1");
gsm.println("AT+HTTPPARA=\"CID\",1");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(5000);
Serial.println("AT+HTTPPARA=\"URL\",\"http://www.ekoblokos.com.br/entradados.php\"");
gsm.println("AT+HTTPPARA=\"URL\",\"http://www.ekoblokos.com.br/entradados.php\"");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(5000);
Serial.println("AT+HTTPPARA=\"CONTENT\",\"application/x-www-form-urlencoded\"");
gsm.println("AT+HTTPPARA=\"CONTENT\",\"application/x-www-form-urlencoded\"");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(5000);
while (readVals(&x, &y, &loc, &loc2)) {
String string1 = "sensor=" + String(x);
String string2 = "&sensor1=" + String(y);
Serial.println("AT+HTTPDATA=28,20000");
gsm.println("AT+HTTPDATA=28,20000");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(4000);
Serial.println(string1 + string2);
gsm.println(string1 + string2);
Grsp = gsm.readString();
Serial.println(Grsp);
delay(3000);
Serial.println("AT+HTTPACTION=1");
gsm.println("AT+HTTPACTION=1");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(13000);
}
Serial.println("AT+HTTPTERM");
gsm.println("AT+HTTPTERM");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(2000);
gsm.println("AT+SAPBR=0,1");
Grsp = gsm.readString();
Serial.println(Grsp);
delay(5000);
Serial.println("Finalizado!");
}