Почему не компилируется данные скетч? Arduino + DHT11

Тема в разделе "Arduino & Shields", создана пользователем Максим B, 10 янв 2017.

  1. Максим B

    Максим B Гуру

    Уже использовал разные IDE, на данный момент самая последняя 1.8.1
    Код (Text):

    #include <DHT.h>


    #include <SPI.h>
    #include <Ethernet.h>
    #include <SD.h>
    #define REQ_BUF_SZ 20
    #define DHT11_PIN 7
    dht11 DHT;
    File webFile;

    char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
    char req_index = 0; // index into HTTP_req buffer
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
    IPAddress ip(192, 168, 1, 100);

    EthernetServer server(80);

    void setup() {
      Ethernet.begin(mac, ip);
      server.begin();
      SD.begin(4);
    }

    void loop() {
      // listen for incoming clients
      EthernetClient client = server.available();
      if (client) {

        // an http request ends with a blank line
        boolean currentLineIsBlank = true;
        while (client.connected()) {
          if (client.available()) {
            char c = client.read();
            if (req_index < (REQ_BUF_SZ - 1)) {
              HTTP_req[req_index] = c; // save HTTP request character
              req_index++;
            }
            if (c == '\n' && currentLineIsBlank) {

              if (StrContains(HTTP_req, "GET / ")) {
                // send a standard http response header
                client.println("HTTP/1.1 200 OK");

                client.println("Connection: close");

                client.println();
                client.println("<!DOCTYPE HTML>");
                client.println("<html>");
                client.println("<link rel='shortcut icon' href='favicon.ico' type='image/x-icon'>");
                client.println("<meta http-equiv='refresh' content='10'/>");
                client.println("<meta http-equiv='content-type' content='text/html; charset=UTF-8'>");
                client.println("<title>Данные с датчиков</title>");
               
                int smoke_gas = 0; //пин на котором подключен MQ-2
                int sensorReading = analogRead(smoke_gas);
                client.print("<img src='/flame.png'/>Датчик дыма = ");
                client.print(sensorReading);
                client.println("<br />");

                int chk;
                chk = DHT.read(DHT11_PIN);
                client.print("<img src='temp.png' />Температура = ");
                client.print(DHT.temperature);
                client.print(" °C<br/>");
                client.print("<img src='humid.png /'>Влажность = ");
                client.print(DHT.humidity);
                client.print(" %");
                client.print("</br>");
                client.print("</br>");
                client.print("<form action='http://tehnopage.ru 'target='_blank'><button type='submit' >Tehnopage.ru</button></form>");

                client.println("</html>");
              } else if (StrContains(HTTP_req, "GET /temp.png")) {
                webFile = SD.open("temp.png");
                if (webFile) {
                  client.println("HTTP/1.1 200 OK");
                  client.println();
                }
              }
              else if (StrContains(HTTP_req, "GET /humid.png")) {
                webFile = SD.open("humid.png");
                if (webFile) {
                  client.println("HTTP/1.1 200 OK");
                  client.println();
                }
              }
              else if (StrContains(HTTP_req, "GET /flame.png")) {
                webFile = SD.open("flame.png");
                if (webFile) {
                  client.println("HTTP/1.1 200 OK");
                  client.println();
                }
              }
              else if (StrContains(HTTP_req, "GET /favicon.ico")) {
                webFile = SD.open("favicon.ico");
                if (webFile) {
                  client.println("HTTP/1.1 200 OK");
                  client.println();
                }
              }
                if (webFile) {
                while (webFile.available()) {
                  client.write(webFile.read()); // send web page to client
                }
                webFile.close();
              }
             
              req_index = 0;
              StrClear(HTTP_req, REQ_BUF_SZ);
              break;
            }
            if (c == '\n') {
              // you're starting a new line
              currentLineIsBlank = true;
            }
            else if (c != '\r') {
              // you've gotten a character on the current line
              currentLineIsBlank = false;
            }
          }
        }
        // give the web browser time to receive the data
        delay(1);
        // close the connection:
        client.stop();
      }
    }

    void StrClear(char *str, char length)
    {
      for (int i = 0; i < length; i++) {
        str[i] = 0;
      }
    }

    char StrContains(char *str, char *sfind)
    {
      char found = 0;
      char index = 0;
      char len;

      len = strlen(str);

      if (strlen(sfind) > len) {
        return 0;
      }
      while (index < len) {
        if (str[index] == sfind[found]) {
          found++;
          if (strlen(sfind) == found) {
            return 1;
          }
        }
        else {
          found = 0;
        }
        index++;
      }
      return 0;
    }
     

    Код (Text):

    DHTtester:9: error: 'dht11' does not name a type

     dht11 DHT;

     ^

    C:\Users\Maks\AppData\Local\Temp\arduino_modified_sketch_810731\DHTtester.ino: In function 'void loop()':

    C:\Users\Maks\AppData\Local\Temp\arduino_modified_sketch_810731\DHTtester.ino:41:45: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

               if (StrContains(HTTP_req, "GET / ")) {

                                                 ^

    DHTtester:62: error: expected primary-expression before '.' token

                 chk = DHT.read(DHT11_PIN);

                          ^

    DHTtester:64: error: expected primary-expression before '.' token

                 client.print(DHT.temperature);

                                 ^

    DHTtester:67: error: expected primary-expression before '.' token

                 client.print(DHT.humidity);

                                 ^

    C:\Users\Maks\AppData\Local\Temp\arduino_modified_sketch_810731\DHTtester.ino:74:59: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

               } else if (StrContains(HTTP_req, "GET /temp.png")) {

                                                               ^

    C:\Users\Maks\AppData\Local\Temp\arduino_modified_sketch_810731\DHTtester.ino:81:58: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

               else if (StrContains(HTTP_req, "GET /humid.png")) {

                                                              ^

    C:\Users\Maks\AppData\Local\Temp\arduino_modified_sketch_810731\DHTtester.ino:88:58: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

               else if (StrContains(HTTP_req, "GET /flame.png")) {

                                                              ^

    C:\Users\Maks\AppData\Local\Temp\arduino_modified_sketch_810731\DHTtester.ino:95:60: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

               else if (StrContains(HTTP_req, "GET /favicon.ico")) {

                                                                ^

    Несколько библиотек найдено для "SD.h"
     Используется: C:\Program Files (x86)\Arduino\libraries\SD
    Не используется: C:\Users\Maks\Documents\Arduino\libraries\arduino_281218
    exit status 1
    'dht11' does not name a type
     
     
  2. rkit

    rkit Гуру

    Всё написано.
     
  3. Unixon

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

  4. Максим B

    Максим B Гуру

    Я понимаю, что объявление DHT не правильное, но во многих примерах в интернете - так и делается (((
     
  5. Максим B

    Максим B Гуру

    А как тогда должно быть?
     
  6. Максим B

    Максим B Гуру

    У меня правда arduino uno v3 + Ethernet shield w5100 , забыл просто указать
     
  7. Максим B

    Максим B Гуру

    sketch_jan10a:8: error: no matching function for call to 'DHT::DHT()'

    DHT sensor = DHT();

    ^

    C:\Users\Maks\AppData\Local\Temp\arduino_modified_sketch_802961\sketch_jan10a.ino:8:18: note: candidates are:

    In file included from C:\Users\Maks\AppData\Local\Temp\arduino_modified_sketch_802961\sketch_jan10a.ino:1:0:
     
  8. rkit

    rkit Гуру

  9. Максим B

    Максим B Гуру

  10. Максим B

    Максим B Гуру

    Сделал такой скетч
    Код (Text):

    /*
      Скетч для вывода в Монитор порта теспературы в Цельсиях и Влажности
      с датчика DHT22 и отправки их по MQTT в брокер и MajorDoMo.
    */
    #include <SPI.h>                 // Библиотека SPI шины
    #include <Ethernet.h>            // Ethernet библиотека
    #include <PubSubClient.h>        // Библиотека MQTT
    #include <DHT.h>                 // Библиотека для датчиков DHT11/22

    #define DHTPIN A0                 // Номер пина, к которому подсоединен датчик
    #define DHTTYPE DHT11            // Задаём тип DHT датчика
    DHT dht(DHTPIN, DHTTYPE);

    #define UNUSED(expr) do { (void)(expr); } while (0) /*Безсмысленный цикл для callback
                                                          убирающий предупреждение
                                                          с компилятора*/

    // Задаём mac и ip адреса в Локальной сети
    byte mac[]    = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
    IPAddress ip{192, 168, 1, 100};      //ip Адрес Ethernet Shild'a Arduino
    IPAddress server{192, 168, 1, 237};  //ip Адрес для MQTT Брокера

    // Шапка Функции Callback для объявления и Инициализации PubSubClient
    void callback(char* topic, byte* payload, unsigned int length);

    EthernetClient ethClient;                                 // Инициализируем Ethernet клиент
    PubSubClient client(server, 1883, callback, ethClient);   // Инициализируем MQTT клиент


    // Функция Callback
    void callback(char* topic, byte* payload, unsigned int length)
    {
      //Используем идентификатор UNUSED для устранения Warning'а при компиляции
      UNUSED(topic);
      client.publish("home/data/status/sensor", payload, length);
    }


    void setup()
    {
      // 1 бод равно 0.8 бит/сек
      // 1 бит/сек равно 1.25 бод
      Serial.begin(9600);                  // Задаём скорость порта в БОД'ах.
      Serial.println(F("DHT22 test!"));    // Тестовое сообщ. при откр. Монитора порта

      dht.begin();                    // Инициализируем dht
      Ethernet.begin(mac, ip);        // Инициализируем mac, ip
    }

    void reconnect() {
      // Повторяем, пока не переподключимся
      while (!client.connected()) {         // Логическое НЕ "!" - Если клиент не подкл....
        // Попытка подключиться
        if (client.connect("DHTClient")) {  // Если DHTClient клиент подключен...
          Serial.println(F("connected!"));     // Выводим сообщ., что подключено!
        } else {
          Serial.print(F("failed connected - ")); // Ощибка соединения
          Serial.println(F("Jdem 5 seconds"));    // Ждём 5 секунд
          delay(5000);
        }
      }
    }


    void loop() {

      if (!client.connect("DHTClient")) {   //Если DHTClient клиент не подключен...
        reconnect();                        //Запускаем функцию перезепуска
      }
      client.loop();


      int h = dht.readHumidity();      // Переменная типа int для Влажности
      int t = dht.readTemperature();   // Переменная типа int для Температуры

      // Преобразуем переменные для отправки по MQTT в Брокер.
      // В обоих случаях используем с запасом массив символов из 7 элементов (char_temp[7]).
      static char char_temp[7];        // Переменная для перевода из int в char
      itoa(t, char_temp, 10);          // Перевод из int в char

      static char char_hum[7];
      itoa(h, char_hum, 10);

      // Отправка данных в Монитор порта.
      Serial.print(F("Humidity: "));        // Обёртываем в макрос F() для экономии ОЗУ
      Serial.print(h);
      Serial.print(F(" %\t"));
      Serial.print(F("Temperature: "));
      Serial.print(t);
      Serial.println(F(" *C"));

      //Отправка данных по MQTT в Брокер
      client.publish("home/data/status/sensor/temp", char_temp);  //Температура
      client.publish("home/data/status/sensor/hum", char_hum);    //Влажность
      delay(2000);              // Отправка данных в Брокер раз в 2 секунды
    }


     
    Скомпилился, но данные не приходят ((( Что можно исправить для DHT11?
     
  11. Unixon

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

    Отлаживайте по частям.
     
  12. Jedi

    Jedi Гик

    А ничего, что цифровой датчик по скетчу подключен к А0?
    Да и с типами... DHT11 или DHT22?
     
    Последнее редактирование: 10 янв 2017
  13. Максим B

    Максим B Гуру

    Да к A0 подключен, и DHT11
     
  14. Jedi

    Jedi Гик

    Ну если DHT11, то поправили бы в комментариях в скетче.
    Просветите меня, пожалуйста, А0 это порт ведь, да? А какой, аналоговый или цифровой; ввода, вывода, ввода-вывода?
     
  15. Unixon

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

    Цифровой [пин] ввода-вывода с функцией АЦП :)
     
  16. rkit

    rkit Гуру

    Нет, это пин.
     
  17. Jedi

    Jedi Гик

    Пин, точно. Спасибо. Меня что-то заклинило после праздников.
     
    Последнее редактирование: 10 янв 2017
  18. Unixon

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

    Да, при этом возможность сделать analogRead() у вас не пропадает. Константа A0 и так равна 14.
     
  19. Jedi

    Jedi Гик

    Спасибо :) Сегодня руки впереди головы у меня что-то...