This commit is contained in:
2022-09-09 16:37:31 +02:00
parent 6848482510
commit f740ee9765
11 changed files with 3029 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
idf_component_register(
SRC_DIRS "."
INCLUDE_DIRS ".")

View File

@@ -0,0 +1,2 @@
COMPONENT_SRCDIRS := .
COMPONENT_ADD_INCLUDEDIRS := .

View File

@@ -0,0 +1,97 @@
/****************************************************************************
* Copyright (C) 2020 by Fabrice Muller *
* *
* This file is useful for ESP32 Design course. *
* *
****************************************************************************/
/**
* @file lab3-3-2_main.c
* @author Fabrice Muller
* @date 2 Sep. 2020
* @brief File containing the lab3-3-2 of Part 1.
*
* @see https://github.com/fmuller-pns/esp32-vscode-project-template
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "esp_err.h"
#include "sensors.h"
static const char* TAG = "MAIN";
extern struct SensorSetStruct defaultSensorSet;
/*
- Use custom functions
*/
/**
* @brief update sensor values with random values
*
* @param sensorSet
*/
void updateSensorValues(struct SensorSetStruct *sensorSet) {
int random = abs(esp_random());
sensorSet->temperature.value.f = (random % 400) / 10;
random = abs(esp_random());
sensorSet->pressure.value.i = 990 + (random % 30);
}
/**
* @brief print sensor values
*
* @param sensorSet
*/
void printSensorValues(struct SensorSetStruct *sensorSet) {
printf("Sensor Informations\n");
printf("%s : %f\n", sensorSet->temperature.name, sensorSet->temperature.value.f);
printf("%s : %d\n", sensorSet->pressure.name, sensorSet->pressure.value.i);
}
/**
* @brief Starting point function
*
*/
void app_main(void)
{
int i;
while (1) {
ESP_LOGI(TAG, "DEFAULT Functions - SENSORS");
for (i=0; i<5; i++) {
// Wait for 1 sec.
usleep(1000000);
updateAndDisplaySensorValues(&defaultSensorSet);
}
ESP_LOGI(TAG, "CUSTOM Functions - SENSORS");
defaultSensorSet.Update = updateSensorValues;
defaultSensorSet.Display = printSensorValues;
for (i=0; i<5; i++) {
// Wait for 1 sec.
usleep(1000000);
updateAndDisplaySensorValues(&defaultSensorSet);
}
// Set Default functions and run again
defaultSensorSet.Update = defaultUpdateSensorValues;
defaultSensorSet.Display = defaultPrintSensorValues;
}
}

View File

@@ -0,0 +1,54 @@
#include "sensors.h"
static const char* TAG = "STRUCT";
/**
* @brief Default update sensor values with random values
*
* @param sensorSet
*/
void defaultUpdateSensorValues(struct SensorSetStruct *sensorSet) {
int random = abs(esp_random());
sensorSet->temperature.value.f = (random % 400) / 10;
random = abs(esp_random());
sensorSet->pressure.value.i = 990 + (random % 30);
}
/**
* @brief Default print sensor values
*
* @param sensorSet
*/
void defaultPrintSensorValues(struct SensorSetStruct *sensorSet) {
ESP_LOGI(TAG, "> %s = %f", sensorSet->temperature.name, sensorSet->temperature.value.f);
ESP_LOGI(TAG, "> %s = %d", sensorSet->pressure.name, sensorSet->pressure.value.i);
}
/**
* @brief Update and Display sensor values
*
* @param sensorSet
*/
void updateAndDisplaySensorValues(struct SensorSetStruct *sensorSet) {
sensorSet->Update(sensorSet);
sensorSet->Display(sensorSet);
}
struct SensorSetStruct defaultSensorSet = {
.temperature=
{
.name="TEMP",
.type=FLOAT,
.value= {.f=0.0}
},
.pressure=
{
.name="PRES",
.type=INT,
.value={.i=0}
},
.Update= defaultUpdateSensorValues,
.Display= defaultPrintSensorValues
};

View File

@@ -0,0 +1,44 @@
#ifndef _SENSORS_H_
#define _SENSORS_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "esp_err.h"
enum SensorValueType {INT, FLOAT, DOUBLE};
union SensorValueUnion {
int i;
float f;
double d;
};
typedef struct SensorStruct
{
char name[10];
enum SensorValueType type;
union SensorValueUnion value;
} Sensor;
typedef struct SensorSetStruct
{
Sensor temperature;
Sensor pressure;
void (* Update)(struct SensorSetStruct *sensorSet);
void (* Display)(struct SensorSetStruct *sensorSet);
} SensorSet;
void defaultUpdateSensorValues();
void defaultPrintSensorValues(struct SensorSetStruct *);
void updateAndDisplaySensorValues(struct SensorSetStruct *);
#endif