arduino+keystudio sim900+ethernet shield
- Войдите на сайт для отправки комментариев
Пнд, 24/07/2017 - 12:37
Здравствуйте, собрал такую штуку, которая при помощи смс проверяет состояние сетевых устройств через 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);
}
}