Почему я получаю "expected primary-expression before '.' token"?

Я знаю, что это распространенный вопрос, но правда в том, что все коды разные. Иногда сложно применить концепцию к коду, она не работает. Пожалуйста, помогите мне. Что не так с этим кодом? Я получил его с GitHub. Сначала я пытаюсь скомпилировать его, прежде чем внести небольшие изменения, он отправляет данные о температуре и влажности на облачные серверы ThingSpeak.

#include <DHT.h>  // Включаем библиотеку для dht
#include <ESP8266WiFi.h>

String api_key = "YOUR API KEY"; // Введите свой ключ API записи из ThingSpeak
const char *ssid = "YOUR WIFI SSID"; // замените на ваш Wi-Fi ssid и ключ wpa2
const char *pass = "YOUR WIFI PASSWORD";
const char* server = "api.thingspeak.com";

#define DHTPIN 1 // контакт, к которому подключен dht11
DHT dht;

WiFiClient client;

void setup() {
  Serial.begin(115200);
  delay(10);
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  Serial.println("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
}

void loop() {
  int chk = DHT.read(DHTPIN);
  float hum = DHT.humidity;
  float temp = DHT.temperature;
  if (isnan(hum) || isnan(temp)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  if (client.connect(server, 80)) {
    // "184.106.153.149" или api.thingspeak.com
    String data_to_send = api_key;
    data_to_send += "&field1=";
    data_to_send += hum;
    data_to_send += "&field2=";
    data_to_send += temp;
    data_to_send += "\r\n\r\n";
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: " + api_key + "\n");
    client.print("Content-Type: application/x-www-form-
    urlencoded\n");
    client.print("Content-Length: ");
    client.print(data_to_send.length());
    client.print("\n\n");
    client.print(data_to_send);
    delay(1000);
    Serial.print("Temperature: ");
    Serial.print(temp);
    Serial.print(" degrees Celcius, Humidity: ");
    Serial.print(hum);
    Serial.println("%. Send to Thingspeak.");
  }
  client.stop();
  Serial.println("Waiting...");
  // ThingSpeak требуется минимальная 15-секундная задержка между обновлениями, я установил ее на 30 секунд
  delay(10000);
}

При компиляции я получаю эту ошибку,

  Arduino: 1.8.10 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E 
  Module), 80 MHz, Flash, 
  Legacy (new can return nullptr), All SSL ciphers (most 
  compatible), 
 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

    C:\Users\Agent 96\Desktop\thingspeak\thingspeak.ino: In function 'void loop()':

   thingspeak:37:20: error: expected primary-expression before '.' token

  int chk = DHT.read(DHTPIN);

                ^

  thingspeak:38:22: error: expected primary-expression before '.' token

  float hum = DHT.humidity;

                  ^

  thingspeak:39:23: error: expected primary-expression before '.' token

  float temp = DHT.temperature;

                   ^

  Multiple libraries were found for "DHT.h"
  Used: C:\Users\Agent
  Not used: C:\Users\Agent
  Multiple libraries were found for "ESP8266WiFi.h"
  Used: C:\Users\Agent
  exit status 1
  expected primary-expression before '.' token

  This report would have more information with
  "Show verbose output during compilation"
   option enabled in File -> Preferences.

Пожалуйста, помогите, я начинающий.

, 👍0


2 ответа


1

Замените три строки сразу после loop() на следующие:

  int chk = dht.read(DHTPIN);
  float hum = dht.humidity;
  float temp = dht.temperature;

Замените 'DHT' буквами нижнего регистра. DHT — это класс, а dht — объект класса DHT.

Также у вас есть несколько копий этих библиотек: DHT.h и Esp8266WiFi.h. Проверьте текущий каталог, где находится код Arduino, а также каталог Documents->Arduino->Libraries. Эти библиотеки должны находиться в каталоге Documents->Arduino->Libraries.

,

1

Вы определили DHT как dht. Так что вам придется заменить эти DHT на dht, и все будет хорошо.

,