Примитивная и автономная GSM сигнализация с использованием GSM\GPRS модемом NEOWAY M590 и Arduino, ниже схема подключения и код из видео
Итог этого проекта >> тут <<.
Как все подключено:
И я таки дописал работу с энергосбережением, старый код в самом низу под спойлером. Для работы со «sleep mode» используется библиотека LowPower.h, взять её можно на гитхабе или скачать с сайта. Она в цикле выключает ардуину на 8 секунд.
Также не забываем что с платы должны быть удален (выключен) светодиод питания, он потребляет ~10мА, что сравнимо с потреблением микроконтроллера. Лучше не использовать платы UNO, nano или другие с интерфейсом USB, USB-TTL конвертер также потребляет электричество, а выключить мы его не можем, лучше использовать микроконтроллер с минимальной обвязкой или версию pro mini, купить GSM модем можно тут.
Код:
#include <LowPower.h> #include <SoftwareSerial.h> SoftwareSerial gsm(7, 8); // RX, TX //#define gsm Serial1 #define LED 13 #define pinBOOT 5 // нога BOOT или K на модеме #define wakeUpPin 2 /// нога на растяжку #define TELLNUMBER "ATD+70001112233;" // номер на который будем звонить boolean flag = 0; void modemOFF(){ digitalWrite(pinBOOT, HIGH); delay(10); gsm.println("AT+CPWROFF"); } void modemON(){ digitalWrite(pinBOOT, LOW); delay(10); while(!gsm.find("+PBREADY")); } void setup(){ Serial.begin(9600); gsm.begin(9600); /// незабываем указать скорость работы UART модема Serial.println("ard_start"); pinMode(LED, OUTPUT); pinMode(pinBOOT, OUTPUT); /// нога BOOT на модеме pinMode(wakeUpPin, INPUT_PULLUP); /// нога на растяжку digitalWrite(pinBOOT, LOW); /// включаем модем, для проверки. /// !!! при подачи питания, нужно надавить на ресет ардуины, /// !!! модем при включении может просадить питание и ардуина не стартанет while(!gsm.find("+PBREADY")); /// при включении ждем готовность модема gsm.println("ATE0"); // выключаем эхо Serial.println("modemOFF"); modemOFF(); /// и выключаем модем } void loop() { // выключаем ардуину на 8 сек LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); digitalWrite(LED, HIGH); /// можно закомментировать, показываем что не висим. delay(25); digitalWrite(LED, LOW); ///////////// if (digitalRead(wakeUpPin) && flag == 0){ /// проверяем и если оборвали растяжку modemON(); /// включаем модема while(1){ // ждем подключение модема к сети gsm.println("AT+COPS?"); if (gsm.find("+COPS: 0")) break; delay(500); } delay(100); /////////////////////// звоним по указаному номеру gsm.println(TELLNUMBER); delay(100); if (gsm.find("OK")) Serial.println("ATD+OK!"); while(1){ // проверяем готовность модема, ждем сброс вызова gsm.println("AT+CPAS"); if (gsm.find("0")) break; delay(100); } delay(10000); Serial.println("FULL_OFF!"); modemOFF(); /// выключаем модем, flag = 1; /// останавливаем прогу } } //////
#include <SoftwareSerial.h> SoftwareSerial gsm(7, 8); // RX, TX void modemOFF(){ digitalWrite(5, HIGH); delay(10); gsm.println("AT+CPWROFF"); } void modemON(){ digitalWrite(5, LOW); delay(10); while(!gsm.find("+PBREADY")); } void setup(){ Serial.begin(9600); gsm.begin(115200); /// незабываем указать скорость работы UART модема pinMode(5, OUTPUT); /// нога BOOT на модеме pinMode(2, INPUT_PULLUP); /// нога на растяжку digitalWrite(5, LOW); /// включаем модем, для проверки. /// !!! при подачи питания, нужно надавить на ресет ардуины, /// !!! модем при включении может просадить питание и ардуина не стартанет while(!gsm.find("+PBREADY")); /// при включении ждем готовность модема modemOFF(); /// и выключаем модем } void loop() { if (digitalRead(2)){ /// если оборвали растяжку modemON(); /// включаем модема while(1){ // ждем подключение модема к сети gsm.println("AT+COPS?"); if (gsm.find("0")) break; delay(500); } /////////////////////// звоним по указаному номеру gsm.println("ATD+79991112233;"); delay(100); if (gsm.find("OK")) Serial.println("ATD+OK!"); while(1){ // проверяем готовность модема, ждем сброс вызова gsm.println("AT+CPAS"); if (gsm.find("0")) break; delay(100); } /////////////////// и\или отправляем SMS /* gsm.println("AT+CMGF=1"); delay(100); gsm.println("AT+CSCS=\"GSM\""); delay(100); gsm.println("AT+CMGS=\"79991112233\""); // даем команду на отправку смс delay(100); gsm.print("111"); // отправляем текст gsm.print((char)26); // символ завершающий передачу Serial.println("SMS ok"); delay(100); while(1){ // проверяем готовность модема gsm.println("AT+CPAS"); if (gsm.find("0")) break; delay(100); } */ delay(10000); Serial.println("FULL_OFF!"); modemOFF(); /// выключаем модем, while(1); /// останавливаем прогу } if (gsm.available()) Serial.write(gsm.read()); if (Serial.available()) gsm.write(Serial.read()); } ///+PBREADY
.