1 2 3 4 5 6 7 8 9 10 10/10 10,00оценок: 9

Arduino Mega. Контроллер теплицы. Хроники - 3.0

Тема в разделе "Умный дом", создана пользователем Анкор Плюс, 27.04.17.

Статус темы:
Закрыта.
  1. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Всё, на первый взгляд вроде SIM800 работает в ядре:

    screen.png

    Можно настраивать POWERKEY, управление пересбросом при зависании и пр. ништяки. Есть поддержка GPRS, правда, не тестировал ещё MQTT через SIM800, т. к. нет аккаунтов пока в облачных MQTT-сервисах (ну да это дело поправимое, потихоньку оттестируем). Для SIM800 можно забить несколько номеров телефонов, которые будут считаться хозяйскими. Реализована минимальная обвязка, необходимая для работы из логики конкретного проекта, вот выдержка из скетча:

    Код:
    // Событие "Поступил входящий звонок". В первом параметре - номер телефона, второй параметр - сообщает, известный ли это номер телефона,
    // третий - если установлен, то трубка будет положена сразу же.
    //--------------------------------------------------------------------------------------------------------------------------------------
    void ON_INCOMING_CALL(const String& phoneNumber, bool isKnownNumber, bool& shouldHangUp)
    {
      Serial.print(F("Incoming call from: "));
      Serial.print(phoneNumber);
      Serial.print(F("; known number? "));
      if(isKnownNumber)
        Serial.println(F("KNOWN"));
      else
        Serial.println(F("UNKNOWN"));
     
      // кладём трубку
      shouldHangUp = true;
    
      // отправляем СМС в ответ
      #ifdef CORE_SIM800_TRANSPORT_ENABLED
        SIM800.sendSMS(phoneNumber, F("Не звони мне больше, редиска :)"), true);
      #endif
    }
    //--------------------------------------------------------------------------------------------------------------------------------------
    // Событие "Пришло СМС". В первом параметре - номер телефона, с которого пришло СМС, во втором - декодированное сообщение,
    // в третьем - флаг, что сообщение получено с известного номера
    //--------------------------------------------------------------------------------------------------------------------------------------
    void ON_SMS_RECEIVED(const String& phoneNumber,const String& message, bool isKnownNumber)
    {
        Serial.print(F("INCOMING SMS FROM: "));
        Serial.println(phoneNumber);
       
        Serial.print(F("INCOMING SMS TEXT: "));
        Serial.println(message);
    
        // отправляем СМС назад
        #ifdef CORE_SIM800_TRANSPORT_ENABLED
          static int smsCounter = 0;
          smsCounter++;
          String smsText = "Ответочка номер #";
          smsText += smsCounter;
          SIM800.sendSMS(phoneNumber, smsText, true); // последний параметр - flash или обычное смс
        #endif
    }
    //--------------------------------------------------------------------------------------------------------------------------------------
    
    Как видите - всё просто - есть события "поступило СМС" и "поступил входящий звонок". При этом есть информация - это с известного номера или нет. В логике конкретного проекта можно уже делать что-то конкретное с этой инфой ;)

    Короче, получается очень удобно, особенно - когда отлажу по самое не балуй. Всё, нужна передышка на пару дней, считаю, заслужил :)
     
  2. timon2006
    Регистрация:
    09.03.15
    Сообщения:
    959
    Благодарности:
    1.331

    timon2006

    Живу здесь

    timon2006

    Живу здесь

    Регистрация:
    09.03.15
    Сообщения:
    959
    Благодарности:
    1.331
    Дисплей - просто стекло с двумя сдвиговыми регистрами (по X и по Y) и с подсветкой. Контроллер дисплея - такой же аппаратный модуль в МК, как и SPI, I2C, UART и т. д. Видеобуфер - выделенная область во внешней памяти МК. Контроллер перебрасывает страницу видеобуфера в дисплей по параллельной 18-бит шине. Процессорное время не занимается вообще, т. к. все организовано через DMA.
    З. Ы. У меня не Ардуино, программа написана на С.
     
  3. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Вопрос: вводить в ArduinoCore поддержку отправки показаний выбранных датчиков на ThingSpeak?
     
  4. tchernyavsky
    Регистрация:
    27.03.16
    Сообщения:
    473
    Благодарности:
    160

    tchernyavsky

    Живу здесь

    tchernyavsky

    Живу здесь

    Регистрация:
    27.03.16
    Сообщения:
    473
    Благодарности:
    160
    Хуже не будет! Чем больше всего будет поддерживаться - тем лучше! ;)
     
  5. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Нужна схема подключения к DUE без шилда или что то другое?
     
  6. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Прикрутил ThingSpeak, пока тестирую. Завтра в конфигураторе добавлю настройки для этого дела. Заодно предусмотрел автоматическое разделение показаний с датчиков с несколькими показаниями (например, с датчиков влажности): если добавить такой датчик для отсыла на ThingSpeak - то его показания автоматически разделятся на два графика. Это избавляет от необходимости принудительно указывать - что с какого датчика отправлять ;)

    screen.png

    Всё, сегодня уже ничего нового не сделаю - голова не варит :(

    З. Ы. И да - на ThingSpeak уже отправляется и через SIM800, т. е. логика работы написана норм - пашет ;) А это значит, что и MQTT должно работать через SIM800, т. к. транспорт - универсальный, ему пофиг на форматы данных.

    З. З. Ы. Эдак и Народный мониторинг можно будет прикрутить попозжее... (я это вслух сказал? :)]:aga:).
     
  7. tchernyavsky
    Регистрация:
    27.03.16
    Сообщения:
    473
    Благодарности:
    160

    tchernyavsky

    Живу здесь

    tchernyavsky

    Живу здесь

    Регистрация:
    27.03.16
    Сообщения:
    473
    Благодарности:
    160
    Да, Схема "на прямую", и хорошо-бы, подробные пояснения. Судя по фото шилда: https://www.ebay.com/itm/CTE-TFT-LCD-SD-Card-Shield-For-Arduino-DUE-Support-32Pin-40Pin-Version-LCD/112548730404?hash=item1a346d5624:g:bTsAAOSwa3ZZnpey
    это просто переходник, но почему-то без него не работает? :faq:
     
  8. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обновил ядро - введена поддержка публикации на ThingSpeak - как данных с хранилища, так и любых, нужных пользователю:

    screen.png screen2.png

    Пользовательские данные пушатся просто:
    Код:
    // просим отправить на ThingSpeak наше значение в одно из полей канала
      #ifdef CORE_THINGSPEAK_TRANSPORT_ENABLED
        static unsigned long thingSpeakMillis = 0;
        if(millis() - thingSpeakMillis > 5000)
        {
          static int thingspeakData = 0;
          thingspeakData = random(50,500);
    
          // просим опубликовать наше рандомное число в поле номер 3. Допустимые диапазоны полей - 1-8.
          // при очередной публикации в ThingSpeak это рандомное число там появится.
          ThingSpeak.publish(3,String(thingspeakData));
    
          // ну и попросим опубликовать данные о свободной памяти контроллера в поле номер 4
          ThingSpeak.publish(4,String(Core.getFreeMemory()));
         
          thingSpeakMillis = millis();
        }
      #endif // CORE_THINGSPEAK_TRANSPORT_ENABLED
     
  9. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Я уже выкладывал схему в предыдущем посту, возможно не заметили.

    Pin22 - Pin41 - вывод изображения на дисплей.
    PWM2 - PWM6 (Pin2-Pin6) - обслуживание контроллера тачскрина.

    MOSI - Подключение SD памяти
    SPCK - Подключение SD памяти
    MISO_SD - Подключение SD памяти
    AD14 (Pin53) CS - Подключение SD памяти (можно подключить Pin 10 если свободен)
    GND - Общий
    +5 V - питание светодиодов подсветки экрана
    +3,3V - питание дисплея
    F_CS - не подключен
     

    Вложения:

    Последнее редактирование: 13.02.18
  10. shag6119
    Регистрация:
    20.03.17
    Сообщения:
    6
    Благодарности:
    0

    shag6119

    Участник

    shag6119

    Участник

    Регистрация:
    20.03.17
    Сообщения:
    6
    Благодарности:
    0
     
  11. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Дык стоит, и работает даже - через ESP пуляет туда только в путь ;) Вопрос не в этом, а в том, что GPRS - это не локальная сеть, посему я не могу на свой локальный сервер с москитом публиковать топики через SIM800. Впрочем, работоспособность транспорта через SIM800 проверена - данные на ThingSpeak уходят, следовательно - так же будет работать и MQTT.
     
  12. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обновил конфигуратор ядра - добавил кнопочку "Разорвать соединение", а также выбор скорости соединения:

    screen.png

    Теперь можно, указав в прошивке другую скорость работы ядра с Serial - в конфигураторе также коннектиться на этой скорости.
     
  13. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Протестировал работу ядра с облачным MQTT-сервисом:

    screen.png

    Как видно - всё ходит отлично, только указал в настройках нужные адреса/пароли/явки - и всё ;)
     
  14. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
    @DIYMan, Вы разбирались как заставить мигать плитку от payload в даше?
     
  15. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Не, с этим не разбирался. Но как заставить её обновляться по получению топика REPORT, вытаскивая оттуда параметры с помощью JSONPath - разобрался, работает. Правда, в контроллере теплицы топик REPORT пока ещё неформализованный, а в ядре - формализованный, к нему добавляется в название топика имя команды, отправленной к контроллеру - так получилось сильно легче понимать, что именно в топике REPORT лежит. Сейчас думаю, как это дело прикрутить в контроллер теплицы, кстати ;)

    Насчёт мигания - там вроде всё просто: пишете типа такого:

    Код:
    val > 100
    и плитка будет мигать, если значение в payload больше 100. Сейчас проверил - работает.
     
Статус темы:
Закрыта.