Warm tip: This article is reproduced from serverfault.com, please click

c++-WiFi工作时,你可以使用ESP32的所有GPIO引脚吗?

(c++ - Can you use all the ESP32's GPIO pins when the WiFi is working?)

发布于 2020-12-03 11:41:34

我有一个奇怪的现象,当我添加WiFi库和所有设置时,每3个传感器中就有2个停止工作。当我删除WiFi代码时,它的工作方式就和以前一样。

我有一个esp32 devkit v1开发板,并连接了3个传感器,分别是光敏电阻(ky-018),dht-11和电容性土壤湿度传感器。

  • dht-11已连接到D14(工厂);
  • 连接到D13的光敏电阻(ky-018)(无效);
  • 电容性土壤湿度传感器连接到D15(无效)。

我尝试过换针;没有帮助。

Esp-32开发套件v1

这是代码:

#include "DHT.h"
#include <WiFi.h>

#define DHTPIN 14       // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11   // DHT 11

const char* ssid = "Cgates_E031F1"; // ESP32 and ESP8266 uses 2.4GHZ wifi only
const char* password = "60E541C32F";

DHT dht(DHTPIN, DHTTYPE);
const byte lightPin = 13;
int lightReading;
int lightReadingpercent=0;
const int RELAY_PIN = 15;    // the Arduino pin, which connects to the IN pin of relay
const int AirValue = 4095;   //you need to replace this value with Value_1
const int WaterValue = 2200; //you need to replace this value with Value_2
const int SensorPin = 15;    // Soil moisture

int soilMoistureValue = 0;
int soilmoisturepercent=0;
const int Lightvalue = 0;
const int Darkvalue = 4095;
 

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  // begin Wifi connect
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(2000);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  //end Wifi connect
 
  pinMode(RELAY_PIN, OUTPUT);//relay
  
  Serial.println(F("DHTxx test!")); //dht
  ; 
  dht.begin();
}

void loop() {
  // put your main code here, to run repeatedly:

  lightReading = analogRead(lightPin); //0-4095 12bit -- esp8266 10bit 0-1023 -- arduino 8bit 0-254
 
  Serial.print("Light reading = ");
  
  lightReadingpercent = map(lightReading, Darkvalue, Lightvalue,  0, 100 );
  Serial.print(lightReadingpercent);
  Serial.println(" %");
  Serial.println();
  
  delay(500);

  soilMoistureValue = analogRead(SensorPin);  //put Sensor insert into soil 

  soilmoisturepercent = map(soilMoistureValue, AirValue, WaterValue, 0, 100);

  if (soilmoisturepercent > 100) {
    Serial.println("Soil moisture ");
    Serial.println("100 %");
    delay(500);
  } else if (soilmoisturepercent <0) {
    Serial.println("Soil moisture ");
    Serial.println("0 %");
    delay(500);
  } else if (soilmoisturepercent >=0 && soilmoisturepercent <= 100) {
    Serial.println("Soil moisture "); //go to next line
    Serial.print(soilmoisturepercent);
    Serial.println("%");
    delay(500); // soil end
  }
 
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F(" Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("C "));
  Serial.print(f);
  Serial.print(F("F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("C "));
  Serial.print(hif);
  Serial.println(F("F"));

  delay(500); //wait 0.5seconds
}
Questioner
Lukas Kaščiukevičius
Viewed
0
ocrdu 2020-12-03 22:16:31

根据关于GitHub上此问题的评论,问题可能在于

使用WiFi时,不能使用ADC2引脚。另一方面,即使启用了WiFi,也可以使用ADC1引脚。

这可能是因为ADC2被具有ADC2外设的内核上运行的WiFi固件所使用。

尽管这不能解释为什么GPIO14对你有用,但是你仍然可以尝试仅使用使用ADC1的GPIO引脚,看看它是否对你有用。

而且,WiFi可以吸收大量电流。确保电源供电正常,以免电压下降。