arduino+keystudio sim900+ethernet shield

Нет ответов
verda
Offline
Зарегистрирован: 24.07.2017

Здравствуйте, собрал такую штуку, которая при помощи смс проверяет состояние сетевых устройств через icmp запрос. Например, отправляю смс команду, ардуино с помощью сим900 принимает и отправляет этот запрос на сетевое устройство, полученная информация записывается в буфер, а буфер отправляется в смске обратно. Это работает. А теперь вопрос, а как записать ответы от несколько устройств в одну смс, чтобы не отправлять по 5 смс, а одной смской все проверить.  Пробовал через char, string с последующим переводом в char, но что то не получается, не могу понять почему. Объясните, кто знает. Буду благодарен.

 
#include <SoftwareSerial.h>
#include <sim900.h>
#include <GPRSk_Shield_Arduino.h>
#include <Ethernet.h> 
#include <ICMPPing.h> 

SoftwareSerial gprsSerial(2,3);
GPRSk gprs(gprsSerial);

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // max address for ethernet shield 
byte ip[] = {10,20,1,117}; // ip address for ethernet shield 

SOCKET pingSocket = 0;
byte pingAddr1[] = {10,20,1,251}; // ip address to ping 
byte pingAddr2[] = {10,20,1,145}; // ip address to ping 
byte pingAddr3[] = {10,20,1,77}; // ip address to ping 
byte pingAddr4[] = {10,20,1,194}; // ip address to ping 
byte pingAddr5[] = {10,20,1,5}; // ip address to ping 

char buffer[250]; 


void setup()
{
gprsSerial.begin(19200);
Ethernet.begin(mac, ip); 
Serial.begin(9600); 
     
     gprsSerial.print("AT+CMGF=1");
    delay(300);
    gprsSerial.print("AT+IFC=1, 1\r");
    delay(300);
    gprsSerial.print("AT+CPBS=\"SM\"\r");
    delay(300);
    gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
    delay(500);
}
 
String currStr = "";
// Переменная принимает значение True, если текущая строка является сообщением
boolean isStringMessage = false;
 
void loop()
{
    if (!gprsSerial.available())
        return;
 
    char currSymb = gprsSerial.read();    
    if ('\r' == currSymb) {
        if (isStringMessage) {
if (!currStr.compareTo("ping1")) {
               ICMPPing ping(pingSocket); 
               ping(4, pingAddr1, buffer);          
               gprs.sendSMS("+77081450125", buffer);
               delay(5000); 
                 
            }
  if (!currStr.compareTo("ping2")) {
               ICMPPing ping(pingSocket); 
               ping(4, pingAddr2, buffer); 
                Serial.println(buffer);
               gprs.sendSMS("+77081450125", buffer);
               delay(5000); 
            } 
            
               if (!currStr.compareTo("ping3")) {
               ICMPPing ping(pingSocket); 
               ping(4, pingAddr3, buffer); 
               gprs.sendSMS("+77081450125", buffer);
               delay(5000); 
            } 
            
               if (!currStr.compareTo("ping4")) {
               ICMPPing ping(pingSocket); 
               ping(4, pingAddr4, buffer); 
               gprs.sendSMS("+77081450125", buffer);
               delay(5000); 
            } 

               if (!currStr.compareTo("ping5")) {
               ICMPPing ping(pingSocket); 
               ping(4, pingAddr5, buffer); 
               gprs.sendSMS("+77081450125", buffer);
               delay(5000); 
            } 
            
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}