我有一个esp32固件,使用4个传感器(DHT11,PIR,漏水,MQ2)。所有传感器工作良好,并提供准确的输出,但当我试图包括Wi连接和Wi客户端,水和mq2传感器提供错误和随机的数据。以前有没有人经历过这个问题?
下面是一个没有Wi的输出示例:
通过with命令,它显示如下:
下面是使用的代码:
#include <DHTesp.h>
#include <WiFi.h>
#include <MQ2.h>
#ifndef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP32 ONLY!)
#error Select ESP32 board.
#endif
const char* ssid = "Mynetwork";
const char* password = "********";
const uint16_t port = 8090;
const char * host = "***********";
const int dhtPin = 18;
const int waterPin = 26;
const int mq2Pin = 2;
const int pirPin = 25;
int factor=0;
DHTesp dht;
MQ2 mq2(mq2Pin);
void setup() {
pinMode(pirPin,INPUT);
pinMode(waterPin,INPUT);
pinMode(mq2Pin,INPUT);
pinMode(pirPin,INPUT);
Serial.begin(115200);
mq2.begin();
dht.setup(dhtPin, DHTesp::DHT11);
factor = analogRead(waterPin);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(2000);
Serial.println("...");
}
}
void loop() {
WiFiClient client;
if (!client.connect(host, port)) {
Serial.println("Connection to host failed");
delay(500);
return;
}
Serial.print("WiFi connected with IP: ");
Serial.println(WiFi.localIP());
float *values= mq2.read(true);
Serial.print("Temperature:\t");
Serial.println(getTemp());
client.println(getTemp());
Serial.print("Humidity:\t");
Serial.println(getHum());
client.println(getHum());
Serial.print("movement:\t");
Serial.println(getPir());
client.println(getPir());
Serial.print("Water state:\t");
Serial.println(getWater());
client.println(getWater());
Serial.print("LPG:\t");
Serial.println(getLPG());
client.println(getLPG());
Serial.print("Smoke:\t");
Serial.println(getSmoke());
client.println(getSmoke());
Serial.print("CO:\t");
Serial.println(getCO());
client.println(getCO());
delay(3000);
}
float getTemp(){
return dht.getTemperature();
}
float getHum(){
return dht.getHumidity();
}
int getWater(){
int sensorValue = analogRead(waterPin)-factor;
int per= (sensorValue*100/4094);
return map(per,0,33,0,100);
}
float getSmoke(){
return mq2.smoke;
}
float getLPG(){
return mq2.lpg;
}
float getCO(){
return mq2.co;
}
int getPir(){
return (digitalRead(pirPin));
}发布于 2020-05-02 01:54:41
ESP32内部有两个ADC,但ADC2在ESP32中的其他资源之间共享。它们被映射为:
ADC1_CH0 -- GPIO36
ADC1_CH1 -- Not available on some ESP32 development board
ADC1_CH2 -- NA
ADC1_CH3 -- GPIO39
ADC1_CH6 -- GPIO34
ADC1_CH7 -- GPIO35
ADC1_CH4 -- GPIO32
ADC1_CH5 -- GPIO33
ADC2_CH0 --- GPIO0
ADC2_CH1 --- Not available on some boards
ADC2_CH2 --- GPIO2
ADC2_CH3 --- GPIO15
ADC2_CH4 --- GPIO13
ADC2_CH5 --- GPIO12
ADC2_CH6 --- GPIO14
ADC2_CH7 --- GPIO27
ADC2_CH8 --- GPIO25
ADC2_CH9 --- GPIO26ADC2引脚在使用WiFi时不能使用。另一方面,即使启用了ADC1,也可以使用WiFi引脚。参考来源。
因此,不要在MQ传感器上使用pin2,而是尝试使用pin 36或34。
此外,ESP32是众所周知的噪音,尝试添加一个10 is和0.1uF电容器之间的3v3和GND。
如果您计划在您的项目中使用ESP32进行模拟测量,您还需要注意的是,ESP32 ADC不是线性的,我在博客中谈到了ESP32模数转换器的非线性以及如何使用对修正非线性的查找表。
https://stackoverflow.com/questions/61552787
复制相似问题