Отказ работы Iskra Neo на питании от розетки

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем nkYellOw, 19 сен 2016.

Метки:
  1. nkYellOw

    nkYellOw Нерд

    Добрый вечер! Iskra Neo + GPRS Shield + Импульсный блок питания с USB-разъёмом (5 В, 1000 мА) (всё покупалось в амперке).
    Проблема - при заливке скетча от компа, Искра нео работает, все отлично. Когда подключаю к розетке то ничего не происходит.

    Порядок действий:
    При удачном подключении GPRS шилда, он отправляет смс на мой номер что оборудование работает.
    При отправке смс с телефона на оборудование, он читает смс и перезванивает мне на телефон.
    От компа такой порядок работает, при подключении к розетке - нет.

    Что пытался сделать:
    1) поменять питание БП 12В 1А - не помогло
    2) убрать джамперы RX TX при заливке скетча - не помогло.

    Скетч:
    Код (C++):

    // ПРИ ЗАЛИВКЕ СКЕТЧА ДЛЯ РАБОТЫ ИСКРА НЕО ОТ РОЗЕТКИ НУЖНО СДЕЛАТЬ:
    //
    #include <GPRS_Shield_Arduino.h>
    #include <SoftwareSerial.h>

    #define MESSAGE_LENGTH 160
    #define PHONE_NUMBER "+7**********"
    #define GPRS_BUFFER_LENGTH    46
    #define TELEPHONE_NUM_LENGTH  12

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

    GPRS gprs;

    void setup()
    {
      // включаем GPRS-шилд
      gprs.powerUpDown();

      // открываем последовательный порт для мониторинга действий в программе
      Serial.begin(9600);
      while (!Serial) {
        //ждём пока не откроется монитор последовательного порта
        //для того, чтобы отследить все события в программе
      }

      Serial.println("Serial port [OK]");
      Serial.println("");
      Serial.println("Check gprs Connect...");
      // проверяем, есть ли связь с GPRS-устройством
      while (!gprs.init()) {
        // если связи нет, ждём 1 секунду
        // и выводим сообщение об ошибке;
        // процесс повторяется в цикле,
        // пока не появится ответ от GPRS-устройства
        delay(1000);
        Serial.print("Init error\r\n");
      }
      // выводим сообщение об удачной инициализации GPRS Shield
      Serial.println("GPRS Connected [OK]");
      Serial.println("");
      Serial.println("Arduino send SMS message to phone...");
      gprs.sendSMS(PHONE_NUMBER, "Arduino Power is ON and rdy to work!");
    }

    void loop()
    {

      incomingCall();

      delay(500);

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

        if (String(PHONE_NUMBER) == String(phone) && String(message) == "On") {
          gprs.callUp(PHONE_NUMBER);
        }

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

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

        // выводим текст сообщения
        Serial.print("Recieved Message: ");
        Serial.println(message);

      }
    }

    void incomingCall()
    {
      // ожидаем звонка
      if (gprs.ifcallNow()) {
        //gprs.callEnd();

        gprs.isCallActive(incomingPhoneNumber);

        Serial.println(String(incomingPhoneNumber));

        if (!strncmp(incomingPhoneNumber, PHONE_NUMBER, TELEPHONE_NUM_LENGTH)) {

          delay(1000);
          gprs.answer();
          // индикация звонка

        }
        else {

          gprs.callEnd();
        }

        // считываем номер входящего звонка
        //gprs.isCallActive(incomingPhoneNumber);
        //Serial.println(String(incomingPhoneNumber));
        //delay(1000);
        //Serial.println("111");
        // Serial.println(incomingPhoneNumber == PHONE_NUMBER);
        //Serial.println("111");

        //if (!strncmp(incomingPhoneNumber, PHONE_NUMBER, TELEPHONE_NUM_LENGTH)) {

        //delay(1000);
        // gprs.answer();

        // пока не положили трубку, ждем
        //while (!gprs.ifcallEnd()) {
        //  delay(300);
        // }
        //  }
        //else {
        // если нет, кладём трубку
        // gprs.callEnd();
        //}
      }
    }

     
     
    Последнее редактирование: 19 сен 2016
  2. acos

    acos Официальный гик Администратор

    Здравствуйте. А есть уверенность, что gprs shield всё ещё работает, после того как ему подали 12 В? У него 9 максимум.

    Джамперы актуальны только для Uno. Сейчас от компьютера работает?

    При работе от розетки с 5V БП светодиодик L на искре как себя ведёт? Если наблюдать больше минуты - он всё время медленно пульсирует?
    Ещё момент - кабель наш оранжевый от USB? Если GPRS Shield ещё жив, попробуйте БП на 9В
     
  3. nkYellOw

    nkYellOw Нерд

    GPRS Shield работает, т.к. отдельно еще сделал проект смс розетки на ардуино мега 2560 но не через объект GPRS а через SoftwareSerial и управление GPRS Shield'а идет через АТ-команды. Там работает все от компа и от розетки. (в принципе через АТ команды тоже работает на искре нео от компа, если перекинуть RX u TX на 10 и 11 пины).
    В случае с искра нео, по вашему проекту была куплена искра нео, жпрс шилд, импульсный блок питания на 5В 1А. Загрузил скетч, скопированный у вас на сайте (убрал оттуда все лишнее, оставил только приход СМС с телефона на оборудование и отправка смс если пришло смс на оборудование)

    При отправке сообщения с телефона, приходит смс на ардуино и ардуино отправляет его обратно на телефон. (Это если подключено кабелем к компу).

    Если врубаю в розетку, повторяю действие - никаких результатов.

    светодиодик L загорается и тухнет 14 раз (быстро но плавно гаснет и загорается). Если наблюдать больше минуты то он больше не загорался =)
    При этом на GPRS Shield'e не горит светодиод AIR который горит при программном подключении GPRS Shield'а и не горит светодиод "ON" (я так понимаю нет питания на GPRS шилде).
    Кабель не ваш.

    Питание 12В идет на Искра Нео, GPRS Shield стоит сверху бутербродом. Искра питает шилд уже ровными 5В, поэтому ничего не сгорело =)

    • Попробовал запитаться от 9В 1А - ничего не изменилось.

    Рабочий скетч приема смс от телефона и отправка ответного смс ниже.(от кабеля компа работает, от розетки не работает)

    Код (C++):


    // библиотека для работы с 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()
    {
    // включаем 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");

    }

    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);
    delay(1000);

    String newMessage = "prishlo: " + String(message);
    char *cnewMessage = new char[newMessage.length() + 1];
    strcpy(cnewMessage, newMessage.c_str());

    gprs.sendSMS(phone, cnewMessage);

    delete [] cnewMessage;

    }
    }
     
    P.S.

    попробовал дополнительно включить питание программно. Так же - от компа работает, от розетки не врубается жпрс шилд =(((((

    Код (C++):
    // настраиваем пин №2 в режим выхода
      pinMode(2, OUTPUT);
      // проверяем состояние 3 пина
      if (digitalRead(3) != HIGH) {
        printSerial("Arduino Power is OFF");
        // если на нём «низкий уровень»
        // подаём на пин 2 «высокий уровень»
        digitalWrite(2, HIGH);
        // ждём 3 секунды
        delay(3000);
      }
      else {
        printSerial("Arduino Power is ON");
      }
      // подаём на пин 2 «низкий уровень»
      digitalWrite(2, LOW);
     
    Последнее редактирование: 21 сен 2016
  4. acos

    acos Официальный гик Администратор

    Если GPRS Shield наш, то у него свой регулятор напряжения, и он делает себе 5 В самостоятельно, если на Vin что-то есть (параллельно с регулятором искры).
    Но вообще чудеса.
    Хотя есть мысль
    А вот это попробуйте удалить из кода

    Код (C++):

    while (!Serial) {
    // ждём, пока не откроется монитор последовательного порта
    // для того, чтобы отследить все события в программе
    }
     
    у нас же компа нет))
     
    nkYellOw нравится это.
  5. nkYellOw

    nkYellOw Нерд

    ГЕНИАЛЬНО :D :D :D :D :D
    работает! спасибо и извиняюсь за геморой =)))