Отправка температуры на народный мониторинг.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 2 окт 2013.

  1. ИгорьК

    ИгорьК Гуру

    Конечно можно. И конечно придется понять как работает каждая строка кода и как формируется Post на narodmon.ru.
     
  2. 777Andrej

    777Andrej Нуб

    а вот с этим и беда :(
     
  3. swell{d}

    swell{d} Нерд

    Начал смотреть код - показалось слишком сложно. Решил писать свой. У меня Arduino Yun. Вот минимум, который отправляет данные. Как подставить свои значения c датчиков, думаю, разберётесь:

    Код (Text):
    #include <Bridge.h>
    #include <YunClient.h>

    char server[] = "narodmon.ru";
    char mac[] = "#00-00-00-00-00-00"; //ваш мак
    char temp_adr[] = "#00000000000001#"; //имя датчика температуры = ваш мак плюс 01
    char hum_adr[] = "#00000000000002#"; //имя датчика влажности = ваш мак плюс 02
    char pressure_adr[] = "#00000000000003#"; //имя датчика давления = ваш мак плюс 03

    void setup() {
      Bridge.begin();
    }

    void loop() {
      float temp;
      temp = 18; // вместо цифры - показание с вашего датчика
      int hum;
      hum = 50; // вместо цифры - показание с вашего датчика
      int pressure;
      pressure = 760; // вместо цифры - показание с вашего датчика
      httpRequest(temp,hum,pressure);
      delay(300000);
    }

    void httpRequest(float temp, int hum, int pressure) {
      YunClient client;
      if (client.connect(server, 8283)) {
        client.println(mac);
        client.print(temp_adr);
        client.println(temp,1);
        client.print(hum_adr);
        client.println(hum);
        client.print(pressure_adr);
        client.println(pressure);
        client.println("##");
        client.stop();
      }
    }
     
    Последнее редактирование: 5 фев 2014
    owe и ИгорьК нравится это.
  4. ИгорьК

    ИгорьК Гуру

    Переделывать - дело хорошее. Тем более, что совершенству нет предела.
    Вам еще надо добавить паузу между обращениям к серверу минимум 5 минут, иначе забанят по IP.
    Да еще такую приблуду, например, как в правой верхней части странички.
    Удачи!
     
    Последнее редактирование: 5 фев 2014
  5. swell{d}

    swell{d} Нерд

    Там же есть delay на 5 минут
     
  6. Chanov

    Chanov Нерд

    Насколько я помню этот финт - delay(5*60*1000); не работает. Надо хотя бы цикл делать.
     
  7. swell{d}

    swell{d} Нерд

    Возможно, что не работает, я у себя позже исправил на delay(300000);
     
  8. Chanov

    Chanov Нерд

    Это тоже не заработает ))) дилэй не больше 120 секунд вроде только может быть ... не помню точно ...
     
  9. swell{d}

    swell{d} Нерд

  10. Chanov

    Chanov Нерд

    Ну значит 5 минут ещё переваривает.
     
  11. Megakoteyka

    Megakoteyka Оракул Модератор

    Это раньше так было - delay принимал int. Потом на long переделали.
    Но в любом случае блокировать выполнение кода на 5 минут - не очень хорошо.
     
  12. swell{d}

    swell{d} Нерд

    дык если код больше ничего не делает. если бы делал что-то ещё, я бы через millis() как-нибудь сделал...
    цель была показать минимум для передачи данных в "народный мониторинг", т.к. при всём уважении к ТС, разобраться в его коде лично для меня значительно дольше и сложнее, чем написать свой.
    Yun в этом плане попроще.
     
  13. ИгорьК

    ИгорьК Гуру

    Так код со временем усложнялся и усложнялся из-за часов RTC, записи на SD, считывания нескольких датчиков.
    Сейчас к нему добавился вывод температуры на страницу другого сайта, а на сайте возник графический термометр.
    Вы правильно делаете. Я также начинал с чужого (непонятного мне) кода.
    Вот сейчас ковыряю чужой PID регулятор. Вещь то какая полезная, оказывается. (Все коптеры на PID работают, откуда я родом :) )
    На Ардуино есть своя библиотека, она на С++ запускается и в Atmel Studio но без CodeVision. На простом С, с которым CodeVision работает, ардуиновская библиотека не запускается. Изучаю...
     
  14. Megakoteyka

    Megakoteyka Оракул Модератор

    А так почти всегда бывает. Проще сделать заново по-своему, чем разбираться в чужом :)
    Не зря в вакансиях для программистов отдельным пунктом отмечают "умение разбираться в чужом коде".
     
  15. swell{d}

    swell{d} Нерд

    у меня образование - инженер-строитель =)
     
  16. optron

    optron Нуб

    ИгорьК
    Чтото у меня часы DS1307 не идут на той библиотеке что по ссылке из #8 сообщения. Просто на экране 00:00:00. Подключено все верно. На другой библиотеке работают, но у этой команды попроще. К I2C еще прицеплен датчик давления BMP085. Не подскажете в чем может быть причина? Обязательно ли выполнять команду
    Пытаюсь к своей метеостанции прикрутить Ваш код по синхронизации времени NTP. Пока не разбираюсь.
     
  17. ИгорьК

    ИгорьК Гуру

    Рабочая библиотека. Она у меня и в другом проекте нормально работает. Еще раз ссылка на библиотеку. На этой же странице мануал.
    Библиотека эта, мне кажется, компактнее и удобнее. Позволяет получать время как в виде стринга, так и в виде цифр.

    А я знаю почему она у Вас не работает :) Вы наверняка часы соединили с А4 и А5. А надо c контактами D!
    Запустите код - проверьте.

    Код (C):
    // DS1307_LCD (C)2010 Henning Karlsen
    // web: http://www.henningkarlsen.com/electronics
    //
    // A quick demo of how to use my DS1307-library to make a quick
    // clock using a DS1307 and a 16x2 LCD.
    //
    // I assume you know how to connect the DS1307 and LCD.
    // DS1302:  SDA pin  -> Arduino Digital 4
    //          SCL pin  -> Arduino Digital 5
    // LCD:    DB7      -> Arduino Digital 6
    //          DB6      -> Arduino Digital 7
    //          DB5      -> Arduino Digital 8
    //          DB4      -> Arduino Digital 9
    //          E        -> Arduino Digital 10
    //          RS        -> Arduino Digital 11

    #include <LiquidCrystal.h>
    #include <DS1307.h>

    // Init the DS1307
    DS1307 rtc(4, 5);

    // Init the LCD
    LiquidCrystal lcd(11, 10, 9, 8, 7, 6);

    void setup()
    {
      // Set the clock to run-mode
      rtc.halt(false);

      // Setup LCD to 16x2 characters
      lcd.begin(16, 2);

      // The following lines can be commented out to use the values already stored in the DS1307
      //rtc.setDOW(SUNDAY);        // Set Day-of-Week to SUNDAY
      //rtc.setTime(12, 0, 0);    // Set the time to 12:00:00 (24hr format)
      //rtc.setDate(3, 10, 2010);  // Set the date to October 3th, 2010

      // Set SQW/Out rate to 1Hz, and enable SQW
      rtc.setSQWRate(SQW_RATE_1);
      rtc.enableSQW(true);
    }

    void loop()
    {
      // Display time centered on the upper line
      lcd.setCursor(4, 0);
      lcd.print(rtc.getTimeStr());

      // Display abbreviated Day-of-Week in the lower left corner
      lcd.setCursor(0, 1);
      lcd.print(rtc.getDOWStr(FORMAT_SHORT));

      // Display date in the lower right corner
      lcd.setCursor(6, 1);
      lcd.print(rtc.getDateStr());

      // Wait one second before repeating :)
      delay (1000);
    }
     
     
    Последнее редактирование: 7 фев 2014
  18. optron

    optron Нуб

    Спасибо за ответ. Жаль что в моей станции уже разведена плата на А4 и А5. Вечером попробую на макетке проверить. Про компактнее и удобнее - согласен.
     
    Последнее редактирование: 7 фев 2014
  19. optron

    optron Нуб

    Попробовал на макетке с ардуино мини и модулем на DS1307, не завелась. В чем проблема, пока не пойму, мож модуль такой. Еще покопаюсь позже. Синхрон времени по NTP прикрутил с имеющейся библиотекой для часов. Обновлять должно раз в 23 часа. А как добавить еще и установку даты по NTP?
     
  20. ИгорьК

    ИгорьК Гуру

    Дату лучше установить программно. Иначе зачем такие часы нужны :)