// ERRORE non va Serial3 del modem // Test for GEVINO automotive v1.0 // 25/02/2021 Giorgio Evangelista #include "gevino_automotive.h" #define __APN "AT+SAPBR=3,1,\"APN\",\"apn.fastweb.it\"" //#define APN apn.fastweb.it "AT+SAPBR=3,1,\"APN\",\"mobile.vodafone.it\"" void WaitForOk(String cWait); #define SIM808 Serial3 //#define TestSIM808 #define NoMail String risposta; // Install https://github.com/sandeepmistry/arduino-CAN/Also from Arduino Library Manager // Change on MCP2515.h byte MCP2515_DEFAULT_CS_PIN = 27; byte MCP2515_DEFAULT_INT_PIN = -1; #include byte CanOk = 0; //// RTC //#include //#include //DS3231 clock; //RTCDateTime dt; // TEST_SD 3 for FAT16/FAT32 and exFAT. #include #include "SdFat.h" #include "sdios.h" SdFs sd; FsFile file; int TestResult; void setup() { pinMode(1, OUTPUT); // Serial1_Tx RS485 pinMode(0, INPUT_PULLUP); // RX Serial1 SerialUSB.begin(115200); SIM808.begin(9600); RS485.begin(115200); RS485_1.begin(115200); while(!SerialUSB) gevino_automotive_setup(); // testIO(); // TEST_SD - Write file on SD card. // if (!sd.begin(SD_CS, 12000000)) SerialUSB.println("SD FAIL"); // else SerialUSB.println("SD OK"); //// Test RTC // TestResult = clock.begin(); // TestResult = clock.isReady(); // if( TestResult ) SerialUSB.println("RTC OK"); // else SerialUSB.println("RTC FAIL"); // if (!CAN.begin(500E3)) SerialUSB.println("CAN FAIL"); // else{ // SerialUSB.println("CAN Ok"); // CanOk = 1; // } //// Test ESP // Serial.println("AT"); // delay(500); // Serial.println("ATI"); // delay(500); // Serial.println("AT+GMR"); #ifdef TestSIM808 // Change baud at SIM808 SerialUSB.println("Test SIM808"); SIM808.println("AT"); WaitForOk("OK"); SIM808.println("ATE1"); // Accendo ECHO WaitForOk("OK"); // SIM808.begin(115200); // SIM808.println("AT"); // WaitForOk("OK"); SIM808.println("AT+IPR=0"); WaitForOk("OK"); SIM808.println("AT&W"); WaitForOk("OK"); SIM808.println("AT+CGPSPWR=1"); // Accendo GPS WaitForOk("OK"); SIM808.println("AT+CPIN=?"); // Controllo Sim e Pin WaitForOk("OK"); SerialUSB.println("0-98 segnale, 0.7 As RXQUAL values"); SIM808.println("AT+CSQ"); // Segnale WaitForOk("OK"); #ifndef NoMail sendMail(); #endif #endif } unsigned long TimerForSec; byte ff[12]; void loop() { byte tmp; // if (!CAN.begin(500E3)) SerialUSB.println("CAN FAIL"); // else{ // SerialUSB.println("CAN Ok"); // CanOk = 1; // } // delay(300); if( In1 ){ if( !ff[1] ){ SerialUSB.println("In1 on"); ff[1] = 1; } }else{ if( ff[1] ){ SerialUSB.println("In1 off"); ff[1] = 0; } } if( In2 ){ if( !ff[2] ){ SerialUSB.println("In2 on"); ff[2] = 1; } }else{ if( ff[2] ){ SerialUSB.println("In2 off"); ff[2] = 0; } } if( In3 ){ if( !ff[3] ){ SerialUSB.println("In3 on"); ff[3] = 1; } }else{ if( ff[3] ){ SerialUSB.println("In3 off"); ff[3] = 0; } } if( In4 ){ if( !ff[4] ){ SerialUSB.println("In4 on"); ff[4] = 1; } }else{ if( ff[4] ){ SerialUSB.println("In4 off"); ff[4] = 0; } } if( In5 ){ if( !ff[5] ){ SerialUSB.println("In5 on"); ff[5] = 1; } }else{ if( ff[5] ){ SerialUSB.println("In5 off"); ff[5] = 0; } } if( In6 ){ if( !ff[6] ){ SerialUSB.println("In6 on"); ff[6] = 1; } }else{ if( ff[6] ){ SerialUSB.println("In6 off"); ff[6] = 0; } } if( In7 ){ if( !ff[7] ){ SerialUSB.println("In7 on"); ff[7] = 1; } }else{ if( ff[7] ){ SerialUSB.println("In7 off"); ff[7] = 0; } } if( In8 ){ if( !ff[8] ){ SerialUSB.println("In8 on"); ff[8] = 1; } }else{ if( ff[8] ){ SerialUSB.println("In8 off"); ff[8] = 0; } } if( In9 ){ if( !ff[9] ){ SerialUSB.println("In9 on"); ff[9] = 1; } }else{ if( ff[9] ){ SerialUSB.println("In9 off"); ff[9] = 0; } } while( Serial.available() ) SerialUSB.write(Serial.read()); while( Serial1.available() ) SerialUSB.write(Serial1.read()); // while( SIM808.available() ) SerialUSB.write(SIM808.read()); while( SerialUSB.available()){ tmp = SerialUSB.read(); Serial.write(tmp); Serial1.write(tmp); } if( millis() - TimerForSec > 1000 ){ static char AlternoSerial = 0; TimerForSec = millis(); if(AlternoSerial){ set_RS485_TxEn; RS485.println("Serial"); AlternoSerial = 0; }else{ set_RS485_1_TxEn; RS485_1.println("Serial1"); AlternoSerial = 1; } #ifdef TestSIM808 // SIM808.println("AT+CGPSINF=0"); // WaitForOk("OK"); SIM808.println("AT+CGPSSTATUS?"); WaitForOk("OK"); #endif //// if(CanOk){ //// CAN.beginPacket(0x12); //// CAN.write('h'); //// CAN.write('e'); //// CAN.write('l'); //// CAN.write('l'); //// CAN.write('o'); //// CAN.endPacket(); //// } } if (SERCOM0->USART.INTFLAG.bit.TXC){ //Remove Tx Enable when the last character has been sent out. res_RS485_1_TxEn; SERCOM0->USART.INTFLAG.bit.TXC = 1; } if (SERCOM5->USART.INTFLAG.bit.TXC){ //Remove Tx Enable when the last character has been sent out. res_RS485_TxEn; SERCOM5->USART.INTFLAG.bit.TXC = 1; } } //------------------------------------------------------------------------------------- void sendMail(void){ SerialUSB.println("Invio mail in corso "); SIM808.println("AT+IPR=0"); WaitForOk("OK"); SIM808.println("AT E1"); WaitForOk("OK"); SIM808.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\""); WaitForOk("OK"); SIM808.println(__APN); WaitForOk("OK"); SIM808.println("AT+SAPBR=1,1"); // open GPRS context WaitForOk("OK"); SIM808.println("AT+SAPBR=2,1"); WaitForOk("OK"); if ( risposta.indexOf("+SAPBR: 1,1,")>0 ) SerialUSB.println("GPRS Connection Ok"); else SerialUSB.println("GPRS Connection Fail"); SIM808.println("AT+EMAILCID=1"); //set email parameters WaitForOk("OK"); SIM808.println("AT+EMAILTO=30"); WaitForOk("OK"); SIM808.println("AT+SMTPSRV=\"mail.gevaelettronica.it\",25"); WaitForOk("OK"); SIM808.println("AT+SMTPAUTH=1,\"allarme@gevaelettronica.it\",\"AllarMEVA02=\""); WaitForOk("OK"); SIM808.println("AT+SMTPFROM=\"allarme@gevaelettronica.it\",\"allarmi\""); WaitForOk("OK"); SIM808.println("AT+SMTPRCPT=0,0,\"g.evangelista@gevaelettronica.it\",\"Allarmi\""); WaitForOk("OK"); SIM808.println("AT+SMTPSUB=\"Test Scheda con modem\""); WaitForOk("OK"); SIM808.print("AT+SMTPBODY="); SIM808.println(strlen("Test Scheda con modem")); WaitForOk("DOWNLOAD"); SIM808.println("Test Scheda con modem"); SIM808.println((char)26); WaitForOk("OK"); SIM808.println("AT+SMTPSEND"); WaitForOk("+SMTPSEND: 1"); } //------------------------------------------------------------------------------------- void WaitForOk(String cWait) // Attende un OK o altro messaggio contenuto in cWait dal modem { int nTentativi=0; risposta=""; while(1) { nTentativi +=1; risposta += SIM808.readString(); // Tests per interruzione ciclo attesa if (nTentativi>50 || risposta.indexOf(cWait)>0 || risposta.indexOf("ERROR")>0 || risposta.indexOf("404")>0 || risposta.indexOf("408")>0 || risposta.indexOf(".")>0) { SerialUSB.println(nTentativi+" "+risposta); break; } delay(50); } }