# Adafruit Unified Sensor Driver #
Many small embedded systems exist to collect data from sensors, analyse the data, and either take an appropriate action or send that sensor data to another system for processing.
One of the many challenges of embedded systems design is the fact that parts you used today may be out of production tomorrow, or system requirements may change and you may need to choose a different sensor down the road.
Creating new drivers is a relatively easy task, but integrating them into existing systems is both error prone and time consuming since sensors rarely use the exact same units of measurement.
By reducing all data to a single **sensors\_event\_t** 'type' and settling on specific, **standardised SI units** for each sensor family the same sensor types return values that are comparable with any other similar sensor. This enables you to switch sensor models with very little impact on the rest of the system, which can help mitigate some of the risks and problems of sensor availability and code reuse.
The unified sensor abstraction layer is also useful for data-logging and data-transmission since you only have one well-known type to log or transmit over the air or wire.
## Unified Sensor Drivers ##
The following drivers are based on the Adafruit Unified Sensor Driver:
**Accelerometers**
- [Adafruit\_ADXL345](https://github.com/adafruit/Adafruit_ADXL345)
- [Adafruit\_LSM303DLHC](https://github.com/adafruit/Adafruit_LSM303DLHC)
- [Adafruit\_MMA8451\_Library](https://github.com/adafruit/Adafruit_MMA8451_Library)
**Gyroscope**
- [Adafruit\_L3GD20\_U](https://github.com/adafruit/Adafruit_L3GD20_U)
**Light**
- [Adafruit\_TSL2561](https://github.com/adafruit/Adafruit_TSL2561)
- [Adafruit\_TSL2591\_Library](https://github.com/adafruit/Adafruit_TSL2591_Library)
**Magnetometers**
- [Adafruit\_LSM303DLHC](https://github.com/adafruit/Adafruit_LSM303DLHC)
- [Adafruit\_HMC5883\_Unified](https://github.com/adafruit/Adafruit_HMC5883_Unified)
**Barometric Pressure**
- [Adafruit\_BMP085\_Unified](https://github.com/adafruit/Adafruit_BMP085_Unified)
- [Adafruit\_BMP183\_Unified\_Library](https://github.com/adafruit/Adafruit_BMP183_Unified_Library)
**Humidity & Temperature**
- [DHT-sensor-library](https://github.com/adafruit/DHT-sensor-library)
**Humidity, Temperature, & Barometric Pressure**
- [Adafruit_BME280_Library](https://github.com/adafruit/Adafruit_BME280_Library/)
**Orientation**
- [Adafruit_BNO055](https://github.com/adafruit/Adafruit_BNO055)
**All in one device**
- [Adafruit_LSM9DS0](https://github.com/adafruit/Adafruit_LSM9DS0_Library) (accelerometer, gyroscope, magnetometer)
- [Adafruit_LSM9DS1](https://github.com/adafruit/Adafruit_LSM9DS1/) (accelerometer, gyroscope, magnetometer)
## How Does it Work? ##
Any driver that supports the Adafruit unified sensor abstraction layer will implement the Adafruit\_Sensor base class. There are two main typedefs and one enum defined in Adafruit_Sensor.h that are used to 'abstract' away the sensor details and values:
**Sensor Types (sensors\_type\_t)**
These pre-defined sensor types are used to properly handle the two related typedefs below, and allows us determine what types of units the sensor uses, etc.
```c++
/** Sensor types */
typedef enum
{
SENSOR_TYPE_ACCELEROMETER = (1),
SENSOR_TYPE_MAGNETIC_FIELD = (2),
SENSOR_TYPE_ORIENTATION = (3),
SENSOR_TYPE_GYROSCOPE = (4),
SENSOR_TYPE_LIGHT = (5),
SENSOR_TYPE_PRESSURE = (6),
SENSOR_TYPE_PROXIMITY = (8),
SENSOR_TYPE_GRAVITY = (9),
SENSOR_TYPE_LINEAR_ACCELERATION = (10),
SENSOR_TYPE_ROTATION_VECTOR = (11),
SENSOR_TYPE_RELATIVE_HUMIDITY = (12),
SENSOR_TYPE_AMBIENT_TEMPERATURE = (13),
SENSOR_TYPE_VOLTAGE = (15),
SENSOR_TYPE_CURRENT = (16),
SENSOR_TYPE_COLOR = (17)
} sensors_type_t;
```
**Sensor Details (sensor\_t)**
This typedef describes the specific capabilities of this sensor, and allows us to know what sensor we are using beneath the abstraction layer.
```c++
/* Sensor details (40 bytes) */
/** struct sensor_s is used to describe basic information about a specific sensor. */
typedef struct
{
char name[12];
int32_t version;
int32_t sensor_id;
int32_t type;
float max_value;
float min_value;
float resolution;
int32_t min_delay;
} sensor_t1;
```
The individual fields are intended to be used as follows:
- **name**: The sensor name or ID, up to a maximum of twelve characters (ex. "MPL115A2")
- **version**: The version of the sensor HW and the driver to allow us to differentiate versions of the board or driver
- **sensor\_id**: A unique sensor identifier that is used to differentiate this specific sensor instance from any others that are present on the system or in the sensor network
- **type**: The sensor type, based on **sensors\_type\_t** in sensors.h
- **max\_value**: The maximum value that this sensor can return (in the appropriate SI unit)
- **min\_value**: The minimum value that this sensor can return (in the appropriate SI unit)
- **resolution**: The smallest difference between two values that this sensor can report (in the appropriate SI unit)
- **min\_delay**: The minimum delay in microseconds between two sensor events, or '0' if there is no constant sensor rate
**Sensor Data/Events (sensors\_event\_t)**
This typedef is used to return sensor data from any sensor supported by the abstraction layer, using standard SI units and scales.
```c++
/* Sensor event (36 bytes) */
/** struct sensor_event_s is used to provide a single sensor event in a common format. */
typedef struct
{
int32_t version;
int32_t sensor_id;
int32_t type;
int32_t reserved0;
int32_t timestamp;
union
{
float data[4];
sensors_vec_t acceleration;
sensors_vec_t magnetic;
sensors_vec_t orientation;
sensors_vec_t gyro;
float temperature;
float distance;
float light;
float pressure;
float relative_humidity;
float current;
float voltage;
sensors_color_t color;
};
} sensors_event_t;
```
It includes the following fields:
- **version**: Contain 'sizeof(sensors\_event\_t)' to identify which version of the API we're using in case this changes in the future
- **sensor\_id**: A unique sensor identifier that is used to differentiate this specific sensor instance from any others that are present on the system or in the sensor network (must match the sensor\_id value in the corresponding sensor\_t enum above!)
- **type**: the sensor type, based on **sensors\_type\_t** in sensors.h
- **timestamp**: time in milliseconds when the sensor value was read
- **data[4]**: An array of four 32-bit values that allows us to encapsulate any type of sensor data via a simple union (further described below)
**Required Functions**
In addition to the two standard types and the sensor type enum, all drivers based on Adafruit_Sensor must also implement the following two functions:
```c++
bool getEvent(sensors_event_t*);
```
Calling this function will populate the supplied sensors\_event\_t reference with the latest available sensor data. You should call this function as often as you want to update your data.
```c++
void getSensor(sensor_t1*);
```
Calling this function will provide some basic information about the sensor (the sensor name, driver version, min and max values, etc.
**Standardised SI values for sensors\_event\_t**
A key part of the abstraction layer is the standardisation of values on SI units of a particular scale, which is accompli
没有合适的资源?快使用搜索试试~ 我知道了~
(源码)基于Adafruit传感器和ESP32的智能家居监控系统.zip
共97个文件
ino:27个
h:16个
cpp:13个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 172 浏览量
2024-11-14
04:18:30
上传
评论
收藏 1.9MB ZIP 举报
温馨提示
# 基于Adafruit传感器和ESP32的智能家居监控系统 ## 项目简介 本项目是一个基于ESP32的智能家居监控系统,通过MQTT协议与Adafruit传感器(如BME280环境传感器和SGP30二氧化碳传感器)以及摄像头模块进行通信,实现了远程监控和控制环境参数(如温度、湿度、二氧化碳含量)以及图像捕获的功能。项目还具备从SPIFFS(ESP32上的文件系统)读取和写入配置文件的功能,以保存和恢复二氧化碳传感器的基线值。 ## 项目的主要特性和功能 传感器读取通过I2C或SPI接口与BME280环境传感器和SGP30二氧化碳传感器进行通信,读取传感器数据。 MQTT通信使用MQTT协议将传感器数据和摄像头图像上传到MQTT服务器,实现远程监控和控制。 图片捕获通过ESP32的摄像头模块捕获图片,并将其编码为Base64格式后上传到MQTT服务器。 文件操作从SPIFFS文件系统读取和写入配置文件,以保存和恢复二氧化碳传感器的基线值。
资源推荐
资源详情
资源评论
收起资源包目录
(源码)基于Adafruit传感器和ESP32的智能家居监控系统.zip (97个子文件)
TestSubscriber_Python
test_subscriber.py 3KB
ESP32Cam_Myco_Arduino
camera_pins.h 530B
ESP32Cam_Myco_Arduino.ino 20KB
AdafruitIO_Dashboarf.png 140KB
Libraries
Modified
Adafruit_BME280_Library
assets
board.jpg 431KB
Adafruit_BME280.h 12KB
LICENSE 2KB
examples
bme280test
bme280test.ino 3KB
advancedsettings
advancedsettings.ino 5KB
bme280_unified
bme280_unified.ino 2KB
library.properties 343B
Adafruit_BME280.cpp 21KB
README.md 3KB
Adafruit_SGP30_Sensor
Adafruit_SGP30.h 3KB
assets
board.jpg 353KB
Adafruit_SGP30.cpp 9KB
examples
sgp30test
sgp30test.ino 2KB
library.properties 379B
license.txt 1KB
README.md 3KB
code-of-conduct.md 6KB
Adafruit_Unified_Sensor
Adafruit_Sensor.cpp 4KB
LICENSE.txt 11KB
examples
sensortest
sensortest.ino 4KB
library.properties 391B
Adafruit_Sensor.h 8KB
README.md 10KB
Adafruit_BusIO
Adafruit_BusIO_Register.cpp 11KB
Adafruit_I2CRegister.h 238B
Adafruit_I2CDevice.h 1KB
LICENSE 1KB
Adafruit_SPIDevice.h 3KB
examples
spi_register_bits
spi_register_bits.ino 9KB
i2c_registers
i2c_registers.ino 1KB
spi_modetest
spi_modetest.ino 805B
spi_registers
spi_registers.ino 987B
i2corspi_register
i2corspi_register.ino 1KB
i2c_address_detect
i2c_address_detect.ino 477B
i2c_readwrite
i2c_readwrite.ino 1KB
spi_readwrite
spi_readwrite.ino 971B
library.properties 348B
Adafruit_BusIO_Register.h 2KB
Adafruit_SPIDevice.cpp 14KB
Adafruit_I2CDevice.cpp 11KB
README.md 497B
Non-Modified Library.txt 148B
ESP32Cam_Myco
include
README 1KB
lib
Adafruit_BME280_Library
assets
board.jpg 431KB
Adafruit_BME280.h 12KB
LICENSE 2KB
examples
bme280test
bme280test.ino 3KB
advancedsettings
advancedsettings.ino 5KB
bme280_unified
bme280_unified.ino 2KB
library.properties 343B
Adafruit_BME280.cpp 21KB
README.md 3KB
README 1KB
Adafruit_SGP30_Sensor
Adafruit_SGP30.h 3KB
assets
board.jpg 353KB
Adafruit_SGP30.cpp 9KB
examples
sgp30test
sgp30test.ino 2KB
library.properties 379B
license.txt 1KB
README.md 3KB
code-of-conduct.md 6KB
Adafruit_Unified_Sensor
Adafruit_Sensor.cpp 3KB
LICENSE.txt 11KB
examples
sensortest
sensortest.ino 4KB
library.properties 391B
Adafruit_Sensor.h 8KB
README.md 10KB
Adafruit_BusIO
Adafruit_BusIO_Register.cpp 11KB
Adafruit_I2CRegister.h 238B
Adafruit_I2CDevice.h 1KB
LICENSE 1KB
Adafruit_SPIDevice.h 3KB
examples
spi_register_bits
spi_register_bits.ino 9KB
i2c_registers
i2c_registers.ino 1KB
spi_modetest
spi_modetest.ino 805B
spi_registers
spi_registers.ino 987B
i2corspi_register
i2corspi_register.ino 1KB
i2c_address_detect
i2c_address_detect.ino 477B
i2c_readwrite
i2c_readwrite.ino 1KB
spi_readwrite
spi_readwrite.ino 971B
library.properties 348B
Adafruit_BusIO_Register.h 2KB
Adafruit_SPIDevice.cpp 13KB
Adafruit_I2CDevice.cpp 19KB
README.md 497B
.vscode
extensions.json 197B
src
main.cpp 17KB
camera_pins.h 530B
platformio.ini 637B
test
README 515B
.gitignore 99B
Myco_Interfacing.png 110KB
README.md 2KB
共 97 条
- 1
资源评论
t0_54coder
- 粉丝: 2428
- 资源: 4368
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功