Es difícil de creer, pero la Navidad está a solo 6 días y hoy los elfos navideños tienen una pequeña sorpresa con ellos. En los últimos días ha visto muchos proyectos con el Uno R3 Tipo 1 y el Nano V3, ¡pero también algunos proyectos con microcontroladores de la serie ESP32! Hoy se volverá a implementar un pequeño proyecto con el ESP32 Dev Kit C y también se utilizarán componentes de contribuciones navideñas anteriores.
Andreas Wolter ya tiene el sensor barométrico GY-BME280 para temperatura, humedad y presión del aire en su blog navideño presentado y la pantalla LCD de 16x2 con adaptador I2C también se ha utilizado varias veces. El blog de hoy también muestra que el ESP32 Dev Kit C no solo tiene una, sino dos interfaces I2C.
¿Qué se necesita?
- Arduino IDE en la última versión
- Contenido de la puerta Nr. 18
- Cable micro USB
- BME / BMP280
- Pantalla LCD 16x2 con adaptador I2C
- Las bibliotecas Adafruit BME280 Library y LiquidCrystal_I2C con todas las dependencias
La preparación
Inicie el Arduino IDE y abra las preferencias a través de Archivo -> Preferencias, consulte ilustración 1. Si aún no ha instalado el Arduino IDE, hágalo de antemano.
Ilustración 1: Abrir preferencias
Para las URLs adicionales del administrador del foro, agregue la dirección https://dl.espressif.com/dl/package_esp32_index.json, ver ilustración 2.
Ilustración 2: Agregar URL adicional
Es mejor reiniciar el Arduino IDE, incluso si esto no es absolutamente necesario, pero esto puede evitar problemas. Inmediatamente después, abra el administrador de la placa, consulte ilustración 3.
|
Ilustración 3: Abra el administrador de la placa
Utilice la barra de búsqueda para buscar la biblioteca ESP32 e instalar la última versión de esp32 de Espressif Systems, consulte ilustración 4.
Ilustración 4: Instale la biblioteca de placas ESP
Esto completa los preparativos y ahora puede insertar la puerta número 18.
El monitor BME / BMP280
El cableado del monitor BME / BMP280 está en la Ilustración 5. Tenga en cuenta en este punto que queremos utilizar dos interfaces I“C independientes, por lo que el BME / BMP280 y la pantalla LCD están en pines I2C independientes.
Ilustración 5: Cableado de los componentes
Dado que la biblioteca LiquidCrystal_I2C es bastante antigua, solo es posible la interfaz I2C predeterminada para la configuración a través de GPIO 21 y 22. Con el BME / BMP280, podemos configurar libremente los pines del ESP32 Dev Kit C.
El código fuente también es bastante simple, consulte Codigo 1, y con algunos comentarios. De lo contrario, puede derivar la función de las salidas en serie.
//-----------------------------------------------------
// ESP32 Dev Kit C BME/BMP280 monitor
// Autor: Joern Weise
// License: GNU GPl 3.0
// Created: 11. Dec 2020
// Update: 11. Dec 2020
//-----------------------------------------------------iNewView++; #include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <LiquidCrystal_I2C.h>
#define I2C_SDA2 17
#define I2C_SCL2 16
#define SEALEVELPRESSURE_HPA (1013.25)
#define TIMEUPDATESENSOR 30000
#define TIMESWITCHDISPLAY 10000
unsigned long lLastUpdateSensor, iLastSwitchDisplay;
float fTemp, fPress, fHumi, fAlt;
int iNewView;
TwoWire I2Ctwo = TwoWire(1);
Adafruit_BME280 bme; // I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
/*
=================================================================
Function: setup
Returns: void
Description: Needed setup()-function
=================================================================
*/
void setup() {
Serial.begin(115200);
while (!Serial); // time to get serial running
Serial.print("Init BME/BMP280 - Sensor ....");
unsigned status;
I2Ctwo.begin(I2C_SDA2, I2C_SCL2, 400000);
status = bme.begin(0x76, &I2Ctwo);
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(), 16);
while (1) delay(10);
}
Serial.println(" DONE");
Serial.print("Init LCD-Display ....");
lcd.init(); // on error, try lcd.begin();
lcd.backlight();
lcd.clear();
lcd.home();
lcd.print(" BME/BMP280 ");
lcd.setCursor(0, 1);
lcd.print(" Monitoring ");
Serial.println(" DONE");
delay(5000);
Serial.println();
updateSensorData();
iNewView = -1;
}
/*
=================================================================
Function: loop
Returns: void
Description: Needed loop()-function that control sensor
and update display
=================================================================
*/
void loop() {
// Verifique si se necesita actualizar los datos del sensor
//Check if update for sensor-data is needed
if (millis() - lLastUpdateSensor > TIMEUPDATESENSOR)
{
updateSensorData();
lLastUpdateSensor = millis();
}
//Check if new display view is needed
if (millis() - iLastSwitchDisplay > TIMESWITCHDISPLAY)
{
(iNewView >= 2) ? iNewView = 0 : iNewView = 1;
iLastSwitchDisplay = millis();
Serial.println("Update view on display");
updateDisplay(iNewView);
}
}
/*
=================================================================
Function: updateSensorData
Returns: void
Description: Update sensor for the newest sensor-data
=================================================================
*/
void updateSensorData() {
fTemp = bme.readTemperature();
fPress = (bme.readPressure() / 100.0F);
fAlt = bme.readAltitude(SEALEVELPRESSURE_HPA);
fHumi = bme.readHumidity();
Serial.println("----- NEXT UPDATE SENSOR -----");
Serial.println("Temperature = " + String(fTemp) + " *C");
Serial.println("Humidity = " + String(fHumi) + " %");
Serial.println("Pressure = " + String(fPress) + " hPa");
Serial.println("Approx. Altitude = " + String(fAlt) + " m");
Serial.println("------------------------------");
}
/*
=================================================================
Function: updateDisplay
IN iView: Index, which view is needed
Returns: void
Description: Update sensor for the newest sensor-data
=================================================================
*/
void updateDisplay(int iView) {
lcd.clear();
lcd.home();
if (iView == 0) //View temp and humidity
{
lcd.print("Temp: " + String(fTemp) + " *C");
lcd.setCursor(0, 1);
lcd.print("Humi: " + String(fHumi) + " %");
}
else //View pressur and altitude
{
lcd.print("Press: " + String(int(fPress)) + " hPa");
lcd.setCursor(0, 1);
lcd.print("Alt: " + String(fAlt) + " m");
}
}
Código 1: Código para el monitor BME / BMP280 (Descargar)
Con esto ha puesto en funcionamiento la puerta número 18. ¿Le gustaría tener más ideas de proyectos? Entonces aquí hay algunos ejemplos:
Puede encontrar más de mis proyectos para AZ-Delivery en: https://github.com/M3taKn1ght/Blog-Repo.
1 comentario
Klaus Kastrup
Prima Info, tolle ANGEBOTE
UND
Exzellenter Service!
Bitte weiter so!!!!