Difficile à croire, mais Noël n'est qu'à 6 jours et aujourd'hui encore, les elfes de Noël ont une petite surprise avec eux. Ces derniers jours, vous avez vu de nombreux projets avec l'Uno R3 Type 1 et le Nano V3, mais aussi déjà quelques projets avec les microcontrôleurs de la série ESP32 ! Aujourd'hui, nous voulons réaliser un petit projet avec le ESP32 Dev Kit C et utiliser également des pièces d'articles de Noël passés.
Andreas Wolter a déjà présenté le capteur barométrique GY-BME280 pour la température, l'humidité et la pression atmosphérique dans son blog de Noël. L'écran LCD 16x2 avec adaptateur I2C a également été utilisé à plusieurs reprises. Le blog d'aujourd'hui montre en outre que le ESP32 Dev Kit C possède non seulement une, mais deux interfaces I2C.
Ce qui est necessaire?
- IDE Arduino dans la dernière version
- Contenu de la porte n ° 18
- Câble micro USB
- BME / BMP280
- Écran LCD 16x2 avec adaptateur I2C
- Les bibliothèques Bibliothèque Adafruit BME280 et LiquidCrystal_I2C avec toutes les dépendances
La préparation
Démarrez le IDE Arduino et ouvrez les presets via Fichier -> Presets (voir Figure 1). Si vous n'avez pas encore installé le IDE Arduino, veuillez le faire au préalable.
Illustration 1: Ouvrir les préférences
Ajoutez l'adresse aux URL d'administrateur du forum supplémentaires https://dl.espressif.com/dl/package_esp32_index.json ajouter (voir Figure 2).
Illustration 2: Ajouter un URL supplémentaire
La meilleure chose à faire est de redémarrer l'IDE Arduino, même si ce n'est pas absolument nécessaire, mais cela peut éviter des problèmes. Immédiatement après, ouvrez le gestionnaire de tableau (voir figure 3).
|
Illustration 3: Administrateur du forum ouvert
Utilisez la barre de recherche pour rechercher la bibliothèque ESP32 et installer la dernière version d'esp32 par Espressif Systems (voir Figure 4).
Illustration 4: Installer la bibliothèque de cartes ESP
Les préparatifs sont terminés et vous pouvez maintenant insérer la porte numéro 18.
Le moniteur BME / BMP280
Le câblage du moniteur BME/BMP280 est illustré à la figure 5. Gardez à l'esprit que nous voulons utiliser deux interfaces I "C séparées, donc disposez le BME/BMP280 et l'écran LCD sur des broches I2C séparées.
Figure 5 : Câblage des composants
Comme la bibliothèque LiquidCrystal_I2C est assez datée, seule l'interface I2C par défaut fonctionne pour la configuration via les GPIO 21 et 22. Sur le BME/BMP280, nous pouvons configurer librement les broches du ESP32 Dev Kit C.
Le code source est également assez simple (voir le code 1) et avec quelques commentaires. Sinon, vous pouvez dériver la fonction à partir des sorties série.
//-----------------------------------------------------
// ESP32 Dev Kit C BME/BMP280 monitor
// Autor: Joern Weise
// License: GNU GPl 3.0
// Created: 11. Dec 2020
// Update: 11. Dec 2020
//-----------------------------------------------------void loop() { #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
=================================================================
*/
//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++;
(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");
}
}
Code 1 : Code pour le moniteur BME/BMP280 (téléchargement)
Avec cela, vous avez mis en service la porte numéro 18. Vous voulez d'autres idées de projets ? Voici donc quelques exemples :
Vous trouverez d'autres de mes projets AZ Delivery sur le site https://github.com/M3taKn1ght/Blog-Repo.
1 commentaire
Klaus Kastrup
Prima Info, tolle ANGEBOTE
UND
Exzellenter Service!
Bitte weiter so!!!!