Почему я получаю "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.
Пожалуйста, помогите, я начинающий.
@Agent 96, 👍0
2 ответа
Замените три строки сразу после 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.
Вы определили DHT как dht. Так что вам придется заменить эти DHT на dht, и все будет хорошо.
- Невозможно извлечь основные данные с помощью ThingspeakHTTP.
- Последовательный монитор показывает повторяющиеся CIPSEND и CIPCLOSE
- NodeMcu esp 8266 зависает при подключении
- Последовательная связь между узлом-MCU и Arduino Mega
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU