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); } }