Почему он показывает, что d2 не был объявлен в области видимости

#define BLYNK_PRINT Serial   
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>
#define BLYNK_PRINT Serial
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS D2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
char auth[] ="your auth token"; 
char ssid[] = "your wifi name"; 
char pass[] = "your wifi password"; 

#define DHTPIN 2    
#define DHTTYPE DHT11     
DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;

void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
 
  Blynk.virtualWrite(V5, h);  //V5 для влажности
  Blynk.virtualWrite(V6, t);  //V6 для температуры
}

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
   
  dht.begin();

  timer.setInterval(1000L, sendSensor);
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);
   sensors.begin();
}

int sensor=0;

void sendTemps()
{
  sensor=analogRead(A0);
  sensors.requestTemperatures();
  float temp = sensors.getTempCByIndex(0); 
  Serial.println(temp);
  Serial.println(sensor);
  Blynk.virtualWrite(V1, temp);
  Blynk.virtualWrite(V2,sensor);
  delay(1000);
}

void loop()
{
  Blynk.run(); 
  timer.run(); 
  sendTemps();
}

, 👍0

Обсуждение

Может быть, это должно быть просто 2 вместо D2?, @KIIV

Пожалуйста, предоставьте полное сообщение об ошибке, включая номер строки. Также вы должны предоставить ссылку на каждую библиотеку, которую вы используете, чтобы другие могли протестировать код самостоятельно (что невозможно, если они не знают, какие именно библиотеки вы использовали на самом деле), @chrisl

Его на линии нет. 10, @09- Salman

#Определить one_wire_bus_ D2, @09- Salman

все перепробовал... помогите плиз, @09- Salman

Вы выбрали NodeMCU в меню «Инструменты»?, @Juraj

Вы пытались изменить D2 только на одну цифру 2? Попробуйте поискать пример arduino onewire. Вы можете обнаружить, что они используют это объявление: #define ONE_WIRE_BUS 2 или подобное., @GMc

Я только что отметил потенциальную новую проблему. У вас есть #define ONE_WIRE_BUS D2, а также #define DHTPIN 2 Предполагая, что D2 (на ESP32) совпадает с контактом цифрового ввода-вывода номер 2, у вас вполне может быть конфликт. Отказ от ответственности: я не изучал вашу программу подробно, но похоже, что вы пытаетесь использовать оба объявления (объявления DHT dht и датчики DallasTemperature), @GMc

@GMc. Это не ESP32, а ESP8266. Логической связи между именами выводов, начинающимися с «Dx», и фактическими именами «GPIOx» нет. Например, вывод, помеченный «D2» на NodeMCU, на самом деле является «GPIO4». Контакт «D4» — это «GPIO2» (также называемый просто «2» в Arduino IDE). Эта запутанная схема объясняется (несколько) [здесь] (https://www.electronicwings.com/nodemcu/nodemcu-gpio-with-arduino-ide), @StarCat


1 ответ


-2

Выводы Arduino определяются только простым числом, за исключением того, что аналоговые выводы также называются от «A0» до «A8» (или сколько аналоговых выводов имеет конкретный процессор). Таким образом, D2 не определен. Если вы имеете в виду контакт 2 Arduino, его имя будет просто «2». Итак:

#define ONE_WIRE_BUS D2 -> #define ONE_WIRE_BUS 2

,

неправильный ответ. Ядро esp8266 имеет константы Dx в заголовке варианта для некоторых плат, чтобы соответствовать меткам на плате. https://github.com/esp8266/Arduino/blob/ca149a23c76ad4da3927d231da8d678484e6fcb9/variants/nodemcu/pins_arduino.h#L40, @Juraj

Джей Роберт, не принимай это на свой счет. комментарий в основном для других читателей. а вы знаете "Правила Крокера"? http://sl4.org/crocker.html, @Juraj

Ааа, нет, не было. Я не полностью подписываюсь под ним, но отзываю свой комментарий в любом случае. .... (прошло)., @JRobert

кстати, ядро STM32 имеет выводы, названные как PB4, @Juraj