Add files via upload

This commit is contained in:
Gunar Schorcht 2017-09-14 14:32:43 +02:00 committed by GitHub
parent b8282537c0
commit a0bb27da91
9 changed files with 357 additions and 0 deletions

7
examples/sht3x/README.md Normal file
View file

@ -0,0 +1,7 @@
# SHT3x Driver Examples
This example references two addtional drivers [i2c](https://github.com/kanflo/esp-open-rtos-driver-i2c) and [sht3x](https://github.com/gschorcht/esp-open-rtos/extras/sht3x), which are provided in the `../../extras` folder.
If you plan to use one or both of this drivers in your own projects, please check the main development pages for updated versions or reported issues.
To run this example connect the SHT3x SCL to GPIO5 and SDA to GPIO4.

View file

@ -0,0 +1,3 @@
PROGRAM=SHT3x_Reader
EXTRA_COMPONENTS = extras/i2c extras/sht3x
include ../../../common.mk

View file

@ -0,0 +1,92 @@
/**
* Simple example with one sensor using SHT3x driver using callback function
* to get the results.
*/
#include "espressif/esp_common.h"
#include "esp/uart.h"
#include "FreeRTOS.h"
// include SHT3x driver
#include "sht3x/sht3x.h"
// define I2C interface at which SHTx3 sensor is connected
#define I2C_BUS 0
#define I2C_SCL_PIN GPIO_ID_PIN((5))
#define I2C_SDA_PIN GPIO_ID_PIN((4))
#define SHT3x_ADDR 0x45
static uint32_t sensor;
/**
* Everything you need is a callback function that can handle
* callbacks from the background measurement task of the
* SHT3x driver. This function is called periodically
* and delivers the actual and average sensor value sets for
* given sensor.
*/
static void my_callback_function (uint32_t sensor,
sht3x_value_set_t actual,
sht3x_value_set_t average)
{
printf("%.3f Sensor %d: %.2f (%.2f) C, %.2f (%.2f) F, %.2f (%.2f) \n",
(double)sdk_system_get_time()*1e-3, sensor,
actual.c_temperature, average.c_temperature,
actual.f_temperature, average.f_temperature,
actual.humidity, average.humidity);
}
void user_init(void)
{
// Set UART Parameter
uart_set_baud(0, 115200);
// Give the UART some time to settle
sdk_os_delay_us(500);
// Init I2C bus interface at which SHT3x sensor is connected
i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K);
// Init SHT3x driver
if (!sht3x_init())
{
// error message
return;
}
// Create sensors
if ((sensor = sht3x_create_sensor (I2C_BUS, SHT3x_ADDR)) < 0)
{
// error message
return;
}
// Set the callback function
if (!sht3x_set_callback_function (sensor, &my_callback_function))
{
// error message
return;
}
/*
// Optional: Set the period of measurements (default 1000 ms)
if (!sht3x_set_measurement_period (sensor, 1000))
{
// error message
return;
}
// Optional: Set the weight for expontial moving average (default 0.2)
if (!sht3x_set_average_weight (sensor, 0.2))
{
// error message
return;
}
*/
// That's it.
}

View file

@ -0,0 +1,3 @@
PROGRAM=SHT3x_Reader
EXTRA_COMPONENTS = extras/i2c extras/sht3x
include ../../../common.mk

View file

@ -0,0 +1,85 @@
/**
* Simple example with two sensors connected to two different I2C interfaces
* using SHT3x driver using callback function to get the results.
*/
#include "espressif/esp_common.h"
#include "esp/uart.h"
#include "FreeRTOS.h"
// include SHT3x driver
#include "sht3x/sht3x.h"
// define I2C interfaces at which SHTx3 sensors are connected
#define I2C_1_BUS 0
#define I2C_1_SCL_PIN GPIO_ID_PIN((5))
#define I2C_1_SDA_PIN GPIO_ID_PIN((4))
#define I2C_2_BUS 1
#define I2C_2_SCL_PIN GPIO_ID_PIN((16))
#define I2C_2_SDA_PIN GPIO_ID_PIN((14))
#define SHT3x_ADDR_1 0x44
#define SHT3x_ADDR_2 0x45
static uint32_t sensor1;
static uint32_t sensor2;
/**
* Everything you need is a callback function that can handle
* callbacks from the background measurement task of the
* SHT3x driver. This function is called periodically
* and delivers the actual and average sensor values for
* given sensor.
*/
static void my_callback_function (uint32_t sensor,
sht3x_value_set_t actual,
sht3x_value_set_t average)
{
printf("%.3f Sensor %d: %.2f (%.2f) C, %.2f (%.2f) F, %.2f (%.2f) \n",
(double)sdk_system_get_time()*1e-3, sensor,
actual.c_temperature, average.c_temperature,
actual.f_temperature, average.f_temperature,
actual.humidity, average.humidity);
}
void user_init(void)
{
// Please note: Return values are not considered for readability reasons.
// All functions return a boolean that allows effecitve error handling.
// Set UART Parameter
uart_set_baud(0, 115200);
// Give the UART some time to settle
sdk_os_delay_us(500);
// Init I2C bus interfaces at which SHT3x sensors are connected
// (different busses are possible)
i2c_init(I2C_1_BUS, I2C_1_SCL_PIN, I2C_1_SDA_PIN, I2C_FREQ_100K);
i2c_init(I2C_2_BUS, I2C_2_SCL_PIN, I2C_2_SDA_PIN, I2C_FREQ_100K);
// Init SHT3x driver (parameter is the number of SHT3x sensors used)
sht3x_init();
// Create sensors
sensor1 = sht3x_create_sensor (I2C_1_BUS, SHT3x_ADDR_1);
sensor2 = sht3x_create_sensor (I2C_2_BUS, SHT3x_ADDR_2);
// Set the callback function
sht3x_set_callback_function (sensor1, &my_callback_function);
sht3x_set_callback_function (sensor2, &my_callback_function);
// Optional: Set the period of measurements (default 1000 ms)
sht3x_set_measurement_period (sensor1, 1000);
sht3x_set_measurement_period (sensor2, 5000);
// Optional: Set the weight for expontial moving average (default 0.2)
sht3x_set_average_weight (sensor1, 0.15);
sht3x_set_average_weight (sensor2, 0.25);
// That's it.
}

View file

@ -0,0 +1,3 @@
PROGRAM=SHT3x_Reader
EXTRA_COMPONENTS = extras/i2c extras/sht3x
include ../../../common.mk

View file

@ -0,0 +1,81 @@
/**
* Simple example with one sensor using SHT3x driver in periodic mode
* and a user task.
*/
#include "espressif/esp_common.h"
#include "esp/uart.h"
#include "FreeRTOS.h"
#include "task.h"
// include SHT3x driver
#include "sht3x/sht3x.h"
// define I2C interface at which SHTx3 sensor is connected
#define I2C_BUS 0
#define I2C_SCL_PIN GPIO_ID_PIN((5))
#define I2C_SDA_PIN GPIO_ID_PIN((4))
#define SHT3x_ADDR 0x45
static uint32_t sensor;
/**
* Task that executes function sht3x_get_values to get last
* actual and average sensor values for given sensor.
*/
void my_user_task(void *pvParameters)
{
sht3x_value_set_t actual;
sht3x_value_set_t average;
while (1)
{
sht3x_get_values(sensor, &actual, &average);
printf("%.3f Sensor %d: %.2f (%.2f) C, %.2f (%.2f) F, %.2f (%.2f) \n",
(double)sdk_system_get_time()*1e-3, sensor,
actual.c_temperature, average.c_temperature,
actual.f_temperature, average.f_temperature,
actual.humidity, average.humidity);
// Delay value has to be equal or greater than the period of measurment
// task
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void user_init(void)
{
// Please note: Return values are not considered for readability reasons.
// All functions return a boolean that allows effecitve error handling.
// Set UART Parameter
uart_set_baud(0, 115200);
// Give the UART some time to settle
sdk_os_delay_us(500);
// Init I2C bus interface at which SHT3x sensor is connected
i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K);
// Init SHT3x driver
sht3x_init();
// Create sensors
sensor = sht3x_create_sensor (I2C_BUS, SHT3x_ADDR);
// Optional: Set the period of measurements (default 1000 ms)
// sht3x_set_measurement_period (sensor, 1000);
// Optional: Set the weight for expontial moving average (default 0.2)
// sht3x_set_average_weight (sensor, 0.2);
// Create a task for getting results
xTaskCreate(my_user_task, "my_user_task", 256, NULL, 2, NULL);
// That's it.
}

View file

@ -0,0 +1,3 @@
PROGRAM=SHT3x_Reader
EXTRA_COMPONENTS = extras/i2c extras/sht3x
include ../../../common.mk

View file

@ -0,0 +1,80 @@
/**
* Simple example with one sensor using SHT3x driver using function
* sht3x_get_values triggered by software timers to get the results.
*/
#include "espressif/esp_common.h"
#include "esp/uart.h"
#include "FreeRTOS.h"
#include "timers.h"
// include SHT3x driver
#include "sht3x/sht3x.h"
// define I2C interface at which SHTx3 sensor is connected
#define I2C_BUS 0
#define I2C_SCL_PIN GPIO_ID_PIN((5))
#define I2C_SDA_PIN GPIO_ID_PIN((4))
#define SHT3x_ADDR 0x45
static TimerHandle_t timerHandle;
static uint32_t sensor;
/**
* Timer callback function that executes function sht3x_get_values to get last
* actual and average sensor values for given sensor.
*/
static void my_sensor_timer_cb(TimerHandle_t xTimer)
{
sht3x_value_set_t actual;
sht3x_value_set_t average;
sht3x_get_values(sensor, &actual, &average);
printf("%.3f Sensor %d: %.2f (%.2f) C, %.2f (%.2f) F, %.2f (%.2f) \n",
(double)sdk_system_get_time()*1e-3, sensor,
actual.c_temperature, average.c_temperature,
actual.f_temperature, average.f_temperature,
actual.humidity, average.humidity);
}
void user_init(void)
{
// Please note: Return values are not considered for readability reasons.
// All functions return a boolean that allows effecitve error handling.
// Set UART Parameter
uart_set_baud(0, 115200);
// Give the UART some time to settle
sdk_os_delay_us(500);
// Init I2C bus interface at which SHT3x sensor is connected
i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K);
// Init SHT3x driver
sht3x_init();
// Create sensors
sensor = sht3x_create_sensor (I2C_BUS, SHT3x_ADDR);
// Optional: Set the period of measurements (default 1000 ms)
// sht3x_set_measurement_period (sensor, 1000);
// Optional: Set the weight for expontial moving average (default 0.2)
// sht3x_set_average_weight (sensor, 0.2);
// Create and start a timer that calls sht3x_i2c_timer_cb every 1000 ms
// Timer value has to be equal or greater than the period of measurment
// task above
if ((timerHandle = xTimerCreate("SHT3x Trigger", 1000/portTICK_PERIOD_MS,
pdTRUE, NULL, my_sensor_timer_cb)))
xTimerStart(timerHandle, 0);
// That's it.
}