Не включается шилд SIM900

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Итак, есть еще мысли на эту тему? Может ли шилд управлять своими gpio посредством смс?

cat5130
Offline
Зарегистрирован: 14.02.2017

https://ru.aliexpress.com/item/Digispark-kickstarter-Micro-development-board-ATTINY85-module-for-Arduino-usb/32584975067.html

Навскидку, можно попробовать прикрутить такого малыша, обмениваются с основным МК, скажем, 1 раз в минуту сообщениями. Если сообщение не пришло, малыш кратковременно щелкает релюшкой. 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Блин.. устройство на устройстве и устройством погоняет..
А если малыш зависнет? Не.. не вариант. Мне кажется SIM900 должна такие вещи уметь..

b707
Offline
Зарегистрирован: 26.05.2017

dr.lmg пишет:
Блин.. устройство на устройстве и устройством погоняет.. А если малыш зависнет? Не.. не вариант. Мне кажется SIM900 должна такие вещи уметь..

Думаю, не прокатит. Предположим, SIM900 имеет такую команду. Но вот вопрос - кто будет извлекать эту команду из СМС? Кто будет проверять , что СМС пришло от нужного номера? Как SIM900 догадается, на какое время включать пин?

Это я все к тому. что кроме просто возможности включения пина, в модеме должен быть некий "язык программирования" со своими командами, почти как в ардуине. Не думаю, что он там есть. Но проверить-то просто - найдите подробный даташит по SIM900 и почитайте. Если такие команды есть - они будут в даташите.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Я уж тоже подумал про даташит. Язык в модуле есть - АТ команды же он обрабатывает.

Alba
Offline
Зарегистрирован: 03.06.2017

YaSerg пишет:

Alba пишет:

YaSerg

Скинь пожалуйста свой проект.

 

Что именно, сфоткать как подключено?

Да,да сфоткать и распиновку что бы видать да скетч нужен,буду благодарен очень тебе!

Alba
Offline
Зарегистрирован: 03.06.2017

Подскажите что делаю не так?

Отправка SMS при нажатии кнопки всё робит

Скетч

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(7, 8);
 
int btnPin = 12;
boolean prevBtn = LOW;
 
void setup()
{
    gprsSerial.begin(19200);
    delay(500);
}
 
void loop()
{
    boolean currBtn = digitalRead(btnPin);
    if (prevBtn != currBtn && currBtn == HIGH) {
        //сразу после нажатия кнопки отправляем "тревожное" сообщение по заданному номеру
        sendTextMessage();
    }
    prevBtn = currBtn;
}
 
/*
 * Функция отправки SMS-сообщения
 */
void sendTextMessage() {
    // Устанавливает текстовый режим для SMS-сообщений
    gprsSerial.print("AT+CMGF=1\r");
    delay(100); // даём время на усваивание команды
    // Устанавливаем адресата: телефонный номер в международном формате
    gprsSerial.println("AT + CMGS = \"+79031034423\"");
    delay(100);
    // Пишем текст сообщения
    gprsSerial.println("ALARM!");
    delay(100);
    // Отправляем Ctrl+Z, обозначая, что сообщение готово
    gprsSerial.println((char)26);
}

А вот Управление светодиодами с помощью SMS

скетч

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(7, 8);
 
//для зелёного светодиода будем использовать второй цифровой вход,
//а для жёлтого - третий
int greenPin = 2;
int yellowPin = 3;
 
void setup()
{
    gprsSerial.begin(19200);
    pinMode(greenPin, OUTPUT);
    pinMode(yellowPin, OUTPUT);
 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    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) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("Green on")) {
                digitalWrite(greenPin, HIGH);
            } else if (!currStr.compareTo("Green off")) {
                digitalWrite(greenPin, LOW);
            } else if (!currStr.compareTo("Yellow on")) {
                digitalWrite(yellowPin, HIGH);
            } else if (!currStr.compareTo("Yellow off")) {
                digitalWrite(yellowPin, LOW);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

 нет питания на 2м и 3м пине при отправке смс с текстом "Green on"  или  "Yellow on" 

b707
Offline
Зарегистрирован: 26.05.2017

Alba пишет:

Подскажите что делаю не так?

в первую - очередь - неправильно выкладываете код на форуме

Alba
Offline
Зарегистрирован: 03.06.2017

Ну это понятно ,а вот по делу помочь ты сможешь?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А Вы сначала "по делу" код разместите.

Как тут сослаться н строку с определенным номером?

Alba
Offline
Зарегистрирован: 03.06.2017

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(7, 8);
 
//для зелёного светодиода будем использовать второй цифровой вход,
//а для жёлтого - третий
int greenPin = 2;
int yellowPin = 3;
 
void setup()
{
    gprsSerial.begin(19200);
    pinMode(greenPin, OUTPUT);
    pinMode(yellowPin, OUTPUT);
 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    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) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("Green on")) {
                digitalWrite(greenPin, HIGH);
            } else if (!currStr.compareTo("Green off")) {
                digitalWrite(greenPin, LOW);
            } else if (!currStr.compareTo("Yellow on")) {
                digitalWrite(yellowPin, HIGH);
            } else if (!currStr.compareTo("Yellow off")) {
                digitalWrite(yellowPin, LOW);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

Ребята я просто заливаю этот скетч и посылаю смс "Green on" или "Yellow on" а вот на 3м и 2м пине не получаю питания,не пойму что делаю не так. Замер произвожу мультиметром соответственно на GND и пинах 2 и 3

cat5130
Offline
Зарегистрирован: 14.02.2017

СМС без кавычек посылаешь?

Alba
Offline
Зарегистрирован: 03.06.2017

Да и так и без них,головная боль. короче тупая голова ногам покоя не даёт

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Поставьте контрольную печать, чтобы проверить, что реально приходит в gprsSerial, и приходит ли вообще.

Alba
Offline
Зарегистрирован: 03.06.2017

andriano 

Спасибо за совет!

Не знаю что было но факт что всё заработало!!!!

Помогите пожалуйста вот с этим скетчам,хочу чтобы по звонку включать и выключать реле. У меня уно.На какие мне пины содить реле?

Скорость порта поменяю на 19200,номер как то тут не так забит вроде?

//#include <SoftwareSerial.h>                 // если программный
//SoftwareSerial gsm(7, 8); // RX, TX
//#define gsm Serial                           // если аппаратный в UNO
#define gsm Serial1                          // если аппаратный в леонардо

#define LED 13
 
#define TELMODE "70001112233"                // !! номер с которого принимаем команду
#define relay A2                             // !! выход на реле
 
#define pinBOOT 9                            // нога BOOT или K на модеме M590, на SIM900 это 9
 /////////////////////////
void setup() {
  delay(1000);                              //// !! чтобы нечего не повисало при включении
  
  gsm.begin(9600);                           /// незабываем указать скорость работы UART модема
//Serial.begin(9600);
  pinMode(LED, OUTPUT);
  pinMode(pinBOOT, OUTPUT);                  /// нога BOOT на модеме
  pinMode(relay, OUTPUT);                    /// нога для реле
 
  delay(1000);                            
  digitalWrite(LED, HIGH);                   //  включаем лед  
                                           ///// включаем модем,
  gsm.println("AT");                         //  смотрим есть ли ответ от модема
  delay(100);
  if (!gsm.find("OK")){                      // если нет, дергаем ногу включения
    digitalWrite(pinBOOT, HIGH);            
    delay(1000);
    digitalWrite(pinBOOT, LOW);
  }
      // нужно дождатся включения модема и соединения с сетью
  delay(2000);    
 
  gsm.println("ATE0");                       // выключаем эхо  
  
  while(1){                                  // ждем подключение модема к сети
        gsm.println("AT+COPS?");
        if (gsm.find("+COPS: 0")) break;
           digitalWrite(LED, LOW);               // блымаем светодиодом
           delay(50);  
           digitalWrite(LED, HIGH);  
           delay(500); 
    }

//Serial.println("Modem OK"); 
   digitalWrite(LED, LOW);               // блымаем светодиодом
   delay(1500);  
   digitalWrite(LED, HIGH);
   delay(250); 
   digitalWrite(LED, LOW);   
  
}

void loop() {   
  
    if(gsm.find("RING")){                    // если нашли RING            
      while(1){                              // в цикле
       if (gsm.find(TELMODE)){               // ищим номер телефона, если нашли
         digitalWrite(relay, !digitalRead(relay));  // переключаем реле
//Serial.print("relay:"); 
//Serial.println(digitalRead(relay)); 
         break;                              // и выходим
       }  
       else{                                 // иначе 
         gsm.println("AT+CPAS");             // спрашиваем состояние модема   
         delay(50);
         if (gsm.find("+CPAS: 0")) break;    // и если он в "готовности", выходим из цикла
                                             //   если звонок в процессе, возвращает +CPAS: 3
          gsm.println("AT+CLCC");            // даем команду для АОН, нужно для SIM900
                                             // и крутимся дальше          
      }
     }
 
        gsm.println("ATH0");                 // сбрасываем вызов 

         digitalWrite(LED, LOW);             // сигнализируем об этом
         delay(500);  
         digitalWrite(LED, HIGH);
         delay(250); 
         digitalWrite(LED, LOW);   
   
    } 
    
}

 

Alba
Offline
Зарегистрирован: 03.06.2017

Не могу прикрутить к этому скетчу что бы  включить  модуль  программно! выдаёт ошибку

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(7, 8);
 
//для зелёного светодиода будем использовать второй цифровой вход,
//а для жёлтого - третий
int nasos1Pin = 2;
int nasos2Pin = 3;
 
void setup()
{
    gprsSerial.begin(19200);
    pinMode(nasos1Pin, OUTPUT);
    pinMode(nasos2Pin, OUTPUT);
 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    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) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("Nasos1 on")) {
                digitalWrite(nasos1Pin, HIGH);
            } else if (!currStr.compareTo("Nasos1 off")) {
                digitalWrite(nasos1Pin, LOW);
            } else if (!currStr.compareTo("Nasos2 on")) {
                digitalWrite(nasos2Pin, HIGH);
            } else if (!currStr.compareTo("Nasos2 off")) {
                digitalWrite(nasos2Pin, LOW);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

Прикрутить надо вот это

void setup()
{
  //Включаем GPRS Shield, эмулируя нажатие кнопки POWER
  pinMode(9, OUTPUT);
  digitalWrite(9, HIGH);    // Подаем High на пин 9
  delay(3000);              // на 3 секунды
  digitalWrite(9, LOW);     // и отпускаем в Low. 
  delay(5000);              // Ждём 5 секунд для старта шилда
}
void loop()
{
  //Пока ничего больше не делаем
}

ОШИБКА ВОТ

C:\Users\User\Downloads\sketch_cmc_works\sketch_cmc_works.ino: In function 'void setup()':
 
sketch_cmc_works:65: error: redefinition of 'void setup()'
 
 void setup()
 
      ^
 
C:\Users\User\Downloads\sketch_cmc_works\sketch_cmc_works.ino:10:6: note: 'void setup()' previously defined here
 
 void setup()
 
      ^
 
C:\Users\User\Downloads\sketch_cmc_works\sketch_cmc_works.ino: In function 'void loop()':
 
sketch_cmc_works:74: error: redefinition of 'void loop()'
 
 void loop()
 
      ^
 
C:\Users\User\Downloads\sketch_cmc_works\sketch_cmc_works.ino:32:6: note: 'void loop()' previously defined here
 
 void loop()
 
      ^
 
exit status 1
redefinition of 'void setup()'
 
obuhanoe
Offline
Зарегистрирован: 18.05.2016

Alba пишет:

Не могу прикрутить к этому скетчу что бы  включить  модуль  программно! выдаёт ошибку

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(7, 8);
 
//для зелёного светодиода будем использовать второй цифровой вход,
//а для жёлтого - третий
int nasos1Pin = 2;
int nasos2Pin = 3;
 
void setup()
{
    gprsSerial.begin(19200);
    pinMode(nasos1Pin, OUTPUT);
    pinMode(nasos2Pin, OUTPUT);
 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    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) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("Nasos1 on")) {
                digitalWrite(nasos1Pin, HIGH);
            } else if (!currStr.compareTo("Nasos1 off")) {
                digitalWrite(nasos1Pin, LOW);
            } else if (!currStr.compareTo("Nasos2 on")) {
                digitalWrite(nasos2Pin, HIGH);
            } else if (!currStr.compareTo("Nasos2 off")) {
                digitalWrite(nasos2Pin, LOW);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

Прикрутить надо вот это

void setup()
{
  //Включаем GPRS Shield, эмулируя нажатие кнопки POWER
  pinMode(9, OUTPUT);
  digitalWrite(9, HIGH);    // Подаем High на пин 9
  delay(3000);              // на 3 секунды
  digitalWrite(9, LOW);     // и отпускаем в Low. 
  delay(5000);              // Ждём 5 секунд для старта шилда
}
void loop()
{
  //Пока ничего больше не делаем
}

ОШИБКА ВОТ

C:\Users\User\Downloads\sketch_cmc_works\sketch_cmc_works.ino: In function 'void setup()':
 
sketch_cmc_works:65: error: redefinition of 'void setup()'
 
 void setup()
 
      ^
 
C:\Users\User\Downloads\sketch_cmc_works\sketch_cmc_works.ino:10:6: note: 'void setup()' previously defined here
 
 void setup()
 
      ^
 
C:\Users\User\Downloads\sketch_cmc_works\sketch_cmc_works.ino: In function 'void loop()':
 
sketch_cmc_works:74: error: redefinition of 'void loop()'
 
 void loop()
 
      ^
 
C:\Users\User\Downloads\sketch_cmc_works\sketch_cmc_works.ino:32:6: note: 'void loop()' previously defined here
 
 void loop()
 
      ^
 
exit status 1
redefinition of 'void setup()'
 

redefinition - переопределение

не нужно в скетч вставлять 2 раза void setup()

Alba
Offline
Зарегистрирован: 03.06.2017

Чёт вроде этого получилось,на исправлял хрен знает что,может что то тут лишнее?

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(7, 8);
 
//для зелёного светодиода будем использовать второй цифровой вход,
//а для жёлтого - третий

int nasos1Pin = 2;
int nasos2Pin = 3;
int PWR_KEY =  9;

//void Gsm_MakeCall(String phone);      
//void Gsm_MakeSMS(String phone,String content);
 
void setup()
{
    gprsSerial.begin(19200);
    digitalWrite(PWR_KEY, LOW);
    pinMode(PWR_KEY, OUTPUT);
    pinMode(nasos1Pin, OUTPUT);
    pinMode(nasos2Pin, OUTPUT);

  delay(1000);                       
   Gsm_Power_On();
   delay(10000);
   //Gsm_Init()
 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    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) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("Nasos1 on")) {
                digitalWrite(nasos1Pin, HIGH);
            } else if (!currStr.compareTo("Nasos1 off")) {
                digitalWrite(nasos1Pin, LOW);
            } else if (!currStr.compareTo("Nasos2 on")) {
                digitalWrite(nasos2Pin, HIGH);
            } else if (!currStr.compareTo("Nasos2 off")) {
                digitalWrite(nasos2Pin, LOW);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

void Gsm_Power_On()
{
  digitalWrite(PWR_KEY, HIGH);                // Du chan PWR_KEY len cao it nhat 1s 
  delay(1500);                                            // o day ta de 1,5s
  digitalWrite(PWR_KEY, LOW);                  // Du chan PWR_KEY xuong thap
  delay(100);                                              // cac ban xem trong Hardware designed sim800C de hieu ro hon
}

НЕ РОБИТ

Alba
Offline
Зарегистрирован: 03.06.2017

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(7, 8);
 
//для зелёного светодиода будем использовать второй цифровой вход,
//а для жёлтого - третий
int nasos1Pin = 2;
int nasos2Pin = 3;
int power = 9 ;
 
void setup()
{
    gprsSerial.begin(19200);
    pinMode(nasos1Pin, OUTPUT);
    pinMode(nasos2Pin, OUTPUT);
    pinMode(power, OUTPUT);
    digitalWrite(power,HIGH); //подали питание
delay(3000); //на 3At сек
digitalWrite(power,LOW); //сняли питание
 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    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) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("Nasos1 on")) {
                digitalWrite(nasos1Pin, HIGH);
            } else if (!currStr.compareTo("Nasos1 off")) {
                digitalWrite(nasos1Pin, LOW);
            } else if (!currStr.compareTo("Nasos2 on")) {
                digitalWrite(nasos2Pin, HIGH);
            } else if (!currStr.compareTo("Nasos2 off")) {
                digitalWrite(nasos2Pin, LOW);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

Проверил,этот РОБИТ!!!

Alba
Offline
Зарегистрирован: 03.06.2017

Временами надо отправлять аж по две смс на включение или выключение.

Кто знает в чём причина???

И как прописать в скетче чтобы приходило ответное смс типа "я включила"

b707
Offline
Зарегистрирован: 26.05.2017

Alba пишет:

И как прописать в скетче чтобы приходило ответное смс типа "я включила"

женится тебе барин надо (с)

Alba
Offline
Зарегистрирован: 03.06.2017

Фобия у меня на алименты!

Alba
Offline
Зарегистрирован: 03.06.2017

Есть готовый скетч с программным включением,надо дополнить его отчётам по смс вкл и выкл реле.Подскажите кто-нибудь!!!!! Что, куда дополнить.

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(7, 8);

int nasos1Pin = 2;
int nasos2Pin = 3;
int power = 9 ;
 
void setup()
{
    gprsSerial.begin(19200);
    pinMode(nasos1Pin, OUTPUT);
    pinMode(nasos2Pin, OUTPUT);
    pinMode(power, OUTPUT);
    digitalWrite(power,HIGH); //подали питание
delay(3000); //на 3At сек
digitalWrite(power,LOW); //сняли питание
 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    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) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("Nasos1 on")) {
                digitalWrite(nasos1Pin, HIGH);
            } else if (!currStr.compareTo("Nasos1 off")) {
                digitalWrite(nasos1Pin, LOW);
            } else if (!currStr.compareTo("Nasos2 on")) {
                digitalWrite(nasos2Pin, HIGH);
            } else if (!currStr.compareTo("Nasos2 off")) {
                digitalWrite(nasos2Pin, LOW);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

 

Alba
Offline
Зарегистрирован: 03.06.2017

ВООБЩЕМ ВОТ ОН!

#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(7, 8);

int powerGSM = 9; // Пин включения GSM
int unit1 = 5; // Пин включения реле №1

void setup()
{
    digitalWrite(powerGSM, HIGH); // Включаю GSM модуль
    delay(1000);
    digitalWrite(powerGSM, LOW);
    delay(5000);
    gprsSerial.begin(19200);
    delay(300);
    pinMode(unit1, OUTPUT);
   
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    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) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("On")) {
                digitalWrite(unit1, HIGH);
                gprsSerial.println("AT + CMGS = \"+7xxxxxxxx\"");
                delay(100);
                gprsSerial.println("Relay is On");
                delay(100);
                gprsSerial.println((char)26);
            } else if (!currStr.compareTo("Off")) {
                digitalWrite(unit1, LOW);
                gprsSerial.println("AT + CMGS = \"+7xxxxxxxx\"");
                delay(100);
                gprsSerial.println("Relay is Off");
                delay(100);
                gprsSerial.println((char)26);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}
 

 

p985850
Offline
Зарегистрирован: 07.07.2017

k2name пишет:

Да бог с ним с этим пином. Реакция не меняется если я убираю совсем управление 9 пином и руками нажимаю кнопку. Сообщение все-равно не шлется. Мне кажется проблема в отправке команды или в самом шилде. На всех видео он после включения и нажатия на кнопку должен включать два светодиода Status и NetLight. Status должен оставаться светящимся. NetLight должен подмаргивать время от времени. У меня же во всех ситуациях оба светодиода гаснут спустя примерно 5 секунд. Из этого я делаю вывод что плата или не смогла прочитать симкарту или не смогла с ее помощью войти в сеть. Можно предположить что симка не читаемая. Я перепробовал новых симок штук 5 уже. У всех работников на конторе брал попробовать. Только на старой забытой симке с включенным пинкодом ситуация была иная. Но пина никто уже не помнит. На всех остальных симках с выключенным запросом оба светодиода гасли через 5 секунд.

 

Уменя такая фигня, буду менять его. Негорит STATUS и с резистором и без и с перемычкой. На комнды не отвечает, как тока не подключал.

p985850
Offline
Зарегистрирован: 07.07.2017

Сергей Сомов пишет:

Я вот такой кусочек нашёл.

Но, как я понимаю, без этого резистора netlight вообще бы не загорался.

Или я не верно читаю?

 

Без этого резистора NETLENGTH горит!. Авот СТАТУС не горит - причину не знаю пока.

p985850
Offline
Зарегистрирован: 07.07.2017

Valera19701 пишет:

спокойно можно питать от отдельного БП, только при подключении модуля все равно земля нужна вместе с TX и RX

 

Валер я так понял ты тут самый умный помоги соеденить GSM + UNO 4 дня с утра до вечера ковыряюсь.

p985850
Offline
Зарегистрирован: 07.07.2017

Комута на заметку (програмное включение). 

Как и все купил этот GSM модуль, оч. долго ковырялся, советы были разные как включать поять..как у меня включилось раскажу: 

этот скетч я не придумывал а взял из спицификации. У меня небыл запаян резистор рядом с "С6" мелко не вижу, кто то советовал что мал замкни отверткой пробовал не работало. Нашел дома рещистор на 5.6 кОм МЛТ 0,125 Вт просто его приставил, запустил скетч и он включился!

 

Схема соеденения такая:

ARDUINO GND -->GSM (желтый J14) ножка по счету 5 от J20 перемычки желтой. (ЭТО ОБЯЗАТЕЛЬНО!!!)

ARDUINO ~9 -->GSM 9 (красный разьем с обратной стороны написано).

void setup()
{
  SIM900.begin(19200);
  Serial.begin(19200);

powerUp(); 

}

// Следующий код включения питания подпрограмма для Arduino при 
// использовании программного обеспечения Тригера:
void powerUp()
{
 pinMode(9, OUTPUT); 
 digitalWrite(9,LOW);
 delay(1000);
 digitalWrite(9,HIGH);
 delay(2000);
 digitalWrite(9,LOW);
 delay(3000);
}

void loop()
{
}

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Соединила 9 пин шилда с 9 пином ардуино нано.

R13 сделала перемычку

  gprs.powerOn();
  /* pinMode(9, OUTPUT);
    digitalWrite(9,LOW);
    delay(1000);
    digitalWrite(9,HIGH);
    delay(2000);
    digitalWrite(9,LOW);
    delay(3000);*/
 gprs.powerOn(); не включает модуль
Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015
void powerOn(){
pinMode(9, OUTPUT);
digitalWrite(9,LOW);
delay(1000);
digitalWrite(9,HIGH);
delay(2000);
digitalWrite(9,LOW);
delay(3000);
}

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Как Вы написали рабтает, это я пробовала. Смысл от gprs.powerOn() какой?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

без понятия, надо видеть весь скетч,

или заглянуть в библиотеку которую вы используете

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

// библиотека для работы с GPRS устройством
#include <GPRSk_Shield_Arduino.h>

#include <SoftwareSerial.h>

// длина сообщения
#define MESSAGE_LENGTH 160

// создаём объект mySerial и передаём номера управляющих пинов RX и TX
SoftwareSerial mySerial(6, 7);

// номер сообщения в памяти сим-карты
int messageIndex = 0;

// текст сообщения
char message[MESSAGE_LENGTH];
// номер, с которого пришло сообщение
char phone[16];
// дата отправки сообщения
char datetime[24];

// создаём объект класса GPRS и передаём в него объект mySerial
GPRSk gprs(mySerial);

void setup()
{
  // открываем последовательный порт для мониторинга действий в программе
  Serial.begin(9600);

  // открываем Serial-соединение с GPRS Shield
  mySerial.begin(9600);

  // ждём пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  while (!Serial) {
  }
  Serial.print("Serial init OK\r\n");


  // включаем GPRS-шилд
  gprs.powerOn();
  // проверяем, есть ли связь с GPRS-устройством
  while (!gprs.init()) {
    // если связи нет, ждём 1 секунду
    // и выводим сообщение об ошибке;
    // процесс повторяется в цикле,
    // пока не появится ответ от GPRS-устройства
    delay(1000);
    Serial.print("GPRS Init error\r\n");
  }
  // выводим сообщение об удачной инициализации GPRS Shield
  Serial.println("GPRS init success");
  Serial.println("Please send SMS message to me!");
}

void loop()
{
  // если пришло новое сообщение
  if (gprs.ifSMSNow()) {
    // читаем его
    gprs.readSMS(message, phone, datetime);

    // выводим номер, с которого пришло смс
    Serial.print("From number: ");
    Serial.println(phone);

    // выводим дату, когда пришло смс
    Serial.print("Datetime: ");
    Serial.println(datetime);

    // выводим текст сообщения
    Serial.print("Recieved Message: ");
    Serial.println(message);
  }
}
/**
Вывод в монитор:
Serial init OK
GPRS init success
Please send SMS message to me!
From number: +79007654321
Datetime: 17/05/07,21:38:00+12
Recieved Message: Hello
*/
Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

эта строка gprs.powerOn(); использует библиотеку, смотрите в библиотекy, я стараюсь избегать библиотеки :)

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

  _pkPin = 9;//pin упарвления sim900

// power Up GPRSk Shield
void GPRSk::powerOn() {
	//delay(1000);
    pinMode(_pkPin, OUTPUT);
    digitalWrite(_pkPin, HIGH);
    delay(3000);
    digitalWrite(_pkPin, LOW);
    delay(5000);
}

// power Off GPRSk Shield
void GPRSk::powerOff() {
    pinMode(_pkPin, OUTPUT);
    digitalWrite(_pkPin, HIGH);
    delay(3000);
    digitalWrite(_pkPin, LOW);
    delay(5000);
}

Это из файла GPRSk_Shield_Arduino.cpp

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

слишком большие задержки, измените вместо 3000 -> 2000 и 5000 -> 3000

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Спасибо. Включается

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

А нужно согласовывать уровни сигналов rx tx ардуино и модуля?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

если подключаете к D7 и D8 gprs модуля то там уже есть согласование

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017
#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(7,8); 
 
void setup()
{
  Serial.begin(9600);
  //Serial.println(“Begin”);
  mySerial.begin(9600);
 
}
 
void loop()
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

При подключении к 0 и 1 пину модуля - а команды отвечает, а если к 7 и 8 - молчит

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Забыла про перемычки

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Подскажите как получить номер смс, чтобы сразу её удалить.

 gprs.readSMS(message, phone, datetime); //получила сообщение,номер телефона, дату

из библиотеки:


    /** read SMS, phone and date if getting a SMS message. It changes SMS status to READ
     *  @param  messageIndex  SIM position to read
     *  @param  message  buffer used to get SMS message
     *  @param  length  length of message buffer
     *  @param  phone  buffer used to get SMS's sender phone number
     *  @param  datetime  buffer used to get SMS's send datetime
     *  @returns
     *      true on success
     *      false on error
     */
    void readSMS(char *message, char *phone, char *datetime);

    /** read SMS if getting a SMS message
     *  @param  buffer  buffer that get from GPRSk module(when getting a SMS, GPRSk module will return a buffer array)
     *  @param  message buffer used to get SMS message
     *  @param  check   whether to check phone number(we may only want to read SMS from specified phone number)
     *  @returns
     *      true on success
     *      false on error
     */
    bool readSMS(int messageIndex, char *message, int length);

    /** delete SMS message on SIM card
     *  @param  index   the index number which SMS message will be delete
     *  @returns
     *      true on success
     *      false on error
     */
    void readSMS();

    bool deleteSMS(int index);

    /** call someone
     *  @param  number  the phone number which you want to call
     *  @returns
     *      true on success
     *      false on error
     */

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

А есть рабочие в наших сетях модули, дешевле SIM900? Нужен только приём и отправка смс.

b707
Offline
Зарегистрирован: 26.05.2017

Irinka пишет:

А есть рабочие в наших сетях модули, дешевле SIM900? Нужен только приём и отправка смс.

а сколько SIM900 стоит?

Neoway M590 - от 3х баксов (но большинство в продаже - БУ из каких-то старых железок в разобранном виде)

Athinker A6 - от 7 баксов (есть свои заморочки, в основном с ПО)

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

797,82 рублей стоит

MaksVV
Offline
Зарегистрирован: 06.08.2015

del

MaksVV
Offline
Зарегистрирован: 06.08.2015

Irinka пишет:

А есть рабочие в наших сетях модули, дешевле SIM900? Нужен только приём и отправка смс.

Sim800L

Он работает от 4В поэтому нужен DC-DC преобразователь

антенна

итого не более 400 р. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Кстати, Sim800l V2.0 уже имеет на борту все согласующие элементы - и по питанию и по интерфейсу.

MaksVV
Offline
Зарегистрирован: 06.08.2015

да, и антенна в комплекте , жаль только DTR не вывели для осущетсвления энергосбережения. А так норм, мне пришёл такой но ещё руки не дошли заценить. 

sim800l v2

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Может опробуете, отпишитесь?)