Показания датчика давления ESP32 (RFP602 )
Я использую два датчика RFP602. Один подключен к GPIO2, другой к GPIO4, каждый подключен к сопротивлению 1 МОм. Датчик, подключенный к GPIO2, считывает данные так, как мне нужно. Мне приходится немного нажимать, чтобы что-то прочитать, но когда я касаюсь GPIO4, значения подскакивают до огромных значений (1200, 3400 и т. д.). Интересно то, что я переместил датчик с GPIO4 на GPIO2 и начал правильно считывать значения. Я подключил другой датчик к каждому выводу АЦП, но это не сработало. Почему на GPIO2 всё работает так, как мне нужно?
Вот код из Main
#include "SensorDHT11.h"
#include "SensorRFP602.h"
#include "SensorMPU6050.h"
#include "SensorGPS.h"
#include "BluetoothSerial.h"
BluetoothSerial serialBT;
#pragma region Sensors
SensorRFP602 sensorRFP602(4); //Аналоговый вывод D4
SensorRFP602 sensorRFP602No2(2);
SensorGPS sensorGPS(16, 17);
SensorMPU6050 sensorMPU6050;
#pragma endregion Sensors
#pragma region MillisInterval
unsigned long previousMillisDHT11 = 0UL;
unsigned long previousMillisRFP602 = 0UL;
unsigned long previousMillisRFP602_2 = 0UL;
unsigned long previousMillisMPU6050 = 0UL;
unsigned long previousMillisNEO6M = 0UL;
unsigned long DHT11_interval = 5000UL;
unsigned long RFP602_interval = 1000UL;
unsigned long RFP602_interval_2 = 1000UL;
unsigned long MPU6050_interval = 100UL;
unsigned long NEO6M_interval = 5000UL;
#pragma endregion MillisInterval
//Esantionare!!
void setup() {
serialBT.begin("ESP32");
delay(2000);
sensorRFP602.readData();
sensorRFP602No2.readData();
sensorMPU6050.readData();
sensorGPS.readData();
}
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillisRFP602 > RFP602_interval)
{
sensorRFP602.readData();
previousMillisRFP602 = currentMillis;
}
if(currentMillis - previousMillisRFP602_2 > RFP602_interval_2)
{
sensorRFP602No2.readData();
previousMillisRFP602_2 = currentMillis;
}
if(currentMillis - previousMillisMPU6050 > MPU6050_interval)
{
sensorMPU6050.readData();
previousMillisMPU6050 = currentMillis;
}
if(currentMillis - previousMillisNEO6M > NEO6M_interval)
{
sensorGPS.readData();
previousMillisNEO6M = currentMillis;
}
}
А вот метод readDAta().
#include <Arduino.h>
#include <ArduinoJson.h>
#include "BluetoothSerial.h"
#include "SensorRFP602.h"
BluetoothSerial serialBT_RFP602;
SensorRFP602::SensorRFP602(int pin) : pin(pin)
{
this -> pin = pin;
}
void SensorRFP602::readData()
{
StaticJsonDocument<200> docRFP602;
serialBT_RFP602.begin();
int analogPressure = analogRead(pin);
if(isnan(analogPressure))
{
docRFP602["dataRFP602"]["noData"] = "Failed to read data from RFP602 sensor!";
return;
}
docRFP602["sensorType"] = "RFP602";
docRFP602["timeStamp"] = millis();
docRFP602["dataRFP602"]["analogPressureValue"] = analogPressure;
String outputRFP602;
serializeJson(docRFP602, outputRFP602);
//Serial.println(outputRFP602);
serialBT_RFP602.println(outputRFP602);
}
@Toderita Teodor, 👍0
Обсуждение1 ответ
Лучший ответ:
Вы не указали, какую плату ESP32 вы используете, но, как правило, GPIO2 — один из контактов Strapping для загрузки, к которому подключен подтягивающий резистор. На многих платах также установлен светодиод, последовательно подключенный к подтягивающему резистору, для мигания. Если вы считаете, что GPIO2 работает как надо, то, вероятно, это связано с тем, что внешний подтягивающий резистор вместе с RFP602 и упомянутым вами резистором 1 МОм образуют делитель напряжения на входе АЦП.
Выводы GPIO2 и GPIO4 принадлежат АЦП2, который не может использоваться в качестве АЦП при включённом Wi-Fi. Рекомендуется использовать выводы АЦП1 (выводы 32–35).
каждый подключен к сопротивлению 1 МОм
Я подключил другой датчик к каждому выводу АЦП, но это не сработало.
Оба варианта указывают на неправильное подключение датчика. Датчик силы давления (FPS), такой как RFP602, по сути, представляет собой резистор, поэтому для измерения значения с помощью АЦП ему необходим делитель напряжения, настроенный таким образом, чтобы выходное напряжение делителя напряжения, используемого в качестве входа АЦП, находилось в диапазоне АЦП, с которым это напряжение может быть измерено. В руководстве FSR Arduino Tutorial подробно описано, как использовать FPS с Arduino, поэтому я не буду повторяться.
Привет! Спасибо за ответ. Мне удалось решить проблему, подключив резистор 10 кОм между GPIO4 и GND. Измерив сопротивление между GPIO2 и GND, я получил 9,9 кОм, но между GPIO4 и GND оно составило 70 кОм. Поэтому я решил уменьшить его до 9,9 кОм, и это сработало :D, @Toderita Teodor
- Чтение линейного ПЗС-датчика TCD1304
- Когда датчик пыли Nova SDS011 подключен к ESP32, вывод в Serial Monitor тарабарщина.
- esp32 Stack canary watchpoint срабатывает
- Почему функция server.on() из "ESPAsyncWebServer.h" выполняется на стороне setup(), а не на стороне loop()?
- bh1750 lightsesor не будет работать
- Использование YS-IRTM с Arduino Uno
- Онлайн-проблема подключения Arduino к базе данных MySQL
- ESP32 отправляет данные на другой ESP32 без установления соединения Wi-Fi
сократите вашу программу до простейшего кода, который считывает аналоговое напряжение и выводит его на последовательный монитор, @jsotola
Явно настройте контакты GPIO как аналоговые входы в setup()., @liaifat85