СМС розетка

Тема в разделе "Arduino & Shields", создана пользователем Алексей Горбачев, 14 сен 2016.

  1. Добрый день!
    Собрал устройство "СМС розетка" из Iskra Neo, GPRS Shield и Troyka Shield. В данный момент подключено 1 реле в ПИН 5,на плате Troyka, т.к. я новичок с трудом настроил, но все работает. Подскажите пожалуйста как мне добавить ещё 2 реле, чтобы я мог каждым управлять в отдельности.

    // длина сообщения
    #define MESSAGE_LENGTH 160
    // текст сообщения о включении розетки
    #define MESSAGE_ON "On"
    // текст сообщения о выключении розетки
    #define MESSAGE_OFF "Off"
    // текст сообщения о состоянии розетки
    #define MESSAGE_STATE "State"

    // пин, к которому подключено реле
    #define RELAY 5
     
  2. Developer-RU

    Developer-RU Гик

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

    // библиотека для эмуляции Serial порта
    // она нужна для работы библиотеки GPRS_Shield_Arduino
    #include <SoftwareSerial.h>

    // длина сообщения
    #define MESSAGE_LENGTH 160
    // текст сообщения о включении розетки
    #define MESSAGE_ON "On"
    // текст сообщения о выключении розетки
    #define MESSAGE_OFF "Off"
    // текст сообщения о состоянии розетки
    #define MESSAGE_STATE "State"

    // пин, к которому подключено реле
    #define RELAY 5

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

    bool stateRelay = false;

    // создаём объект класса GPRS и передаём ему скорость 9600 бод;
    // с помощью него будем давать команды GPRS шилду
    GPRS gprs(9600);

    void setup()
    {
    // настраиваем пин реле в режим выхода,
    pinMode(RELAY, OUTPUT);
    // подаём на пин реле «низкий уровень» (размыкаем реле)
    digitalWrite(RELAY, LOW);
    // включаем GPRS-шилд
    gprs.powerUpDown();
    // открываем последовательный порт для мониторинга действий в программе
    Serial.begin(9600);
    while (!Serial) {
    // ждём, пока не откроется монитор последовательного порта
    // для того, чтобы отследить все события в программе
    }
    // проверяем, есть ли связь с GPRS-устройством
    while (!gprs.init()) {
    // если связи нет, ждём 1 секунду
    // и выводим сообщение об ошибке;
    // процесс повторяется в цикле,
    // пока не появится ответ от GPRS устройства
    delay(1000);
    Serial.print("Init error\r\n");
    }
    // вывод об удачной инициализации GPRS Shield
    Serial.println("GPRS init success");
    // digitalWrite(RELAY, HIGH);
    }

    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);
    // вызываем функцию изменения состояния реле
    // в зависимости от текста сообщения
    setRelay(phone, message);
    }
    }

    void setRelay(char f_phone[], char f_message[])
    {
    if (strcmp(f_message, MESSAGE_ON) == 0) {
    // если сообщение — с текстом «On»,
    // выводим сообщение в Serial
    // и подаём на замыкаем реле
    Serial.println("OK! Power is On");
    digitalWrite(RELAY, HIGH);
    stateRelay = true;
    // на номер, с которого пришёл запрос,
    // отправляем смс с текстом о включении питания
    gprs.sendSMS(f_phone, "Power is On");
    } else if (strcmp(f_message, MESSAGE_OFF) == 0) {
    // если пришло сообщение с текстом «Off»,
    // выводим сообщение в Serial
    // и размыкаем реле
    Serial.println("OK! Power is Off");
    digitalWrite(RELAY, LOW);
    stateRelay = false;
    // на номер, с которого пришёл запрос
    // отправляем смс с текстом о выключении питания
    gprs.sendSMS(f_phone, "Power is Off");
    } else if (strcmp(f_message, MESSAGE_STATE) == 0) {
    // если пришло сообщение с текстом «State»,
    // отправляем сообщение с состоянием реле
    if (stateRelay) {
    Serial.println("State: Power is On");
    gprs.sendSMS(f_phone, "Power is On");
    } else {
    Serial.println("State: Power is Off");
    gprs.sendSMS(f_phone, "Power is Off");
    }
    } else {
    // если сообщение содержит неизвестный текст,
    // отправляем сообщение с текстом об ошибке
    Serial.println("Error... unknown command!");
    gprs.sendSMS(f_phone, "Error...unknown command!");
    }
    }
     

    Вложения:

    • smart-power.ino
      Размер файла:
      5,1 КБ
      Просмотров:
      184
  4. Developer-RU

    Developer-RU Гик

    скинул на почту смотри изучай
     
  5. Developer-RU

    Developer-RU Гик

    Ну и сюда - сделал на два реле - писать просто лень..
    не проверял - нет шилда - на ошибки тоже - надо библиотеку искать
     

    Вложения:

    • gprs_relay.zip
      Размер файла:
      2,1 КБ
      Просмотров:
      185
  6. Developer-RU

    Developer-RU Гик

    поправил и на три реле... код в том же стиле(copy&paste), хотя если нормально написать - то через switch можно написать дох...на команд типа (on 1-30 //включить реле 1 на 30 минут ) и т.п.

    Прикрепил что есть, мысль к размышлению дал. кому пригодилось ставьте +
     

    Вложения:

    • gprs_relay.zip
      Размер файла:
      2,2 КБ
      Просмотров:
      181