# 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),
SENSOR_TYPE_TVOC = (18),
SENSOR_TYPE_VOC_INDEX = (19),
SENSOR_TYPE_NOX_INDEX = (20),
SENSOR_TYPE_CO2 = (21),
SENSOR_TYPE_ECO2 = (22),
SENSOR_TYPE_PM10_STD = (23),
SENSOR_TYPE_PM25_STD = (24),
SENSOR_TYPE_PM100_STD = (25),
SENSOR_TYPE_PM10_ENV = (26),
SENSOR_TYPE_PM25_ENV = (27),
SENSOR_TYPE_PM100_ENV = (28),
SENSOR_TYPE_GAS_RESISTANCE = (29),
SENSOR_TYPE_UNITLESS_PERCENT = (30),
SENSOR_TYPE_ALTITUDE = (31),
} 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_t;
```
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;
float tvoc;
float voc_index;
float nox_index;
float CO2,
float eCO2,
float pm10_std,
float pm25_std,
float pm100_std,
float pm10_env,
float pm25_env,
float pm100_env,
float gas_resistance,
float unitless_percent,
float altitude,
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 whe
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于嵌入式的智能台灯系统 (890个子文件)
libU8g2.a 19.37MB
libFrameworkArduino.a 3.15MB
libWiFi.a 1.89MB
libPubSubClient.a 283KB
libDHT sensor library.a 235KB
libWire.a 191KB
libNTPClient.a 132KB
libSPI.a 132KB
libAdafruit Unified Sensor.a 97KB
target.bin 1.02MB
firmware.bin 977KB
firmware.bin 977KB
firmware.bin 977KB
bootloader.bin 17KB
bootloader.bin 17KB
boot_app0.bin 8KB
boot_app0.bin 8KB
partitions.bin 3KB
partitions.bin 3KB
partitions.bin 3KB
(1112)ESP8266-4M.bin_rep 4MB
(1471)ESP8266-AT_MQTT-1M.bin_rep 1024KB
Ai-Thinker_ESP8266_DOUT_8Mbit_v1.5.4.1-a_20171130.bin_rep 1024KB
bootloader.bin_rep 17KB
bootloader.bin_rep 17KB
u8g2_fonts.c 29.79MB
u8x8_fonts.c 1.53MB
u8g2_d_setup.c 389KB
mui_u8g2.c 64KB
u8x8_d_st75256.c 64KB
u8x8_d_st7567.c 49KB
u8x8_d_st7565.c 47KB
u8g2_font.c 39KB
u8x8_d_ssd1327.c 37KB
u8g2_d_memory.c 34KB
u8x8_d_sh1107.c 29KB
mui.c 27KB
u8x8_d_uc1611.c 26KB
u8x8_d_ssd1322.c 26KB
u8x8_d_ssd1320.c 26KB
u8x8_cad.c 25KB
u8x8_d_t6963.c 22KB
u8x8_d_ssd1607_200x200.c 21KB
u8x8_d_ssd1306_128x64_noname.c 21KB
u8x8_d_sed1330.c 20KB
u8x8_d_uc1608.c 19KB
u8x8_d_lc7981.c 18KB
u8x8_d_ssd1305.c 18KB
u8x8_byte.c 17KB
u8x8_d_ssd1329.c 17KB
u8x8_d_ld7032_60x32.c 17KB
u8x8_d_il3820_296x128.c 17KB
u8x8_d_max7219.c 16KB
u8x8_d_ssd1362.c 16KB
u8x8_d_ssd1325.c 16KB
u8x8_d_uc1628.c 14KB
u8x8_d_st7528.c 14KB
u8x8_d_st7920.c 14KB
u8x8_d_ssd1309.c 14KB
u8x8_d_uc1638.c 14KB
u8x8_d_ssd1606_172x72.c 13KB
u8x8_d_ssd1306_96x40.c 12KB
u8x8_d_st75160.c 12KB
u8x8_8x8.c 12KB
u8x8_d_ssd1306_128x32.c 12KB
u8x8_d_ssd1316.c 11KB
u8g2_setup.c 11KB
u8x8_d_st7571.c 11KB
u8x8_d_ks0108.c 11KB
u8x8_d_ssd1318.c 11KB
u8x8_d_uc1601.c 11KB
u8x8_d_sh1108.c 11KB
u8x8_d_hd44102.c 11KB
u8g2_circle.c 10KB
u8x8_d_gu800.c 10KB
u8x8_d_ssd1306_64x32.c 10KB
u8x8_d_uc1617.c 10KB
u8x8_d_ist3088.c 9KB
u8x8_d_ssd1306_72x40.c 9KB
u8x8_d_ssd1326.c 9KB
u8x8_d_st75320.c 9KB
u8g2_ll_hvline.c 9KB
u8x8_d_st7586s_erc240160.c 9KB
u8x8_d_s1d15e06.c 9KB
u8x8_d_s1d15300.c 9KB
u8x8_d_sh1122.c 9KB
u8x8_d_st7586s_jlx384160.c 9KB
u8x8_d_st7586s_s028hn118a.c 9KB
u8x8_d_uc1610.c 9KB
u8g2_button.c 8KB
u8x8_d_s1d15721.c 8KB
u8x8_d_ssd1317.c 8KB
u8x8_d_sh1106_72x40.c 8KB
u8x8_d_sh1106_64x32.c 8KB
u8x8_d_st7588.c 8KB
u8x8_d_st7586s_ymc240160.c 8KB
u8x8_d_st7586s_jlx320160.c 8KB
u8x8_d_ls013b7dh03.c 8KB
u8x8_d_uc1604.c 8KB
u8x8_d_ssd1306_64x48.c 8KB
共 890 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
释博文
- 粉丝: 784
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 算法竞赛中的离散化 概念总结和基本操作全解
- 算法竞赛位运算(简单易懂)
- 常用一维二维 前缀和与差分算法模板总结
- SAR成像算法+后向投影(BP)算法+星载平台实测数据
- 横向循环焦点轮播图横向循环焦点轮播图横向循环焦点轮播图横向循环焦点轮播图横向循环焦点轮播图横向循环焦点轮播图横向循环焦点轮播图横向循环焦点轮播图横向循环焦点轮播图横向循环焦点轮播图横向循环焦点轮播图横
- 基于Java和HTML的留言墙、验证码、计算器基础项目设计源码
- 基于JAVA C/C++的嵌入式设备组网平台物联网框架设计源码
- 基于Java开发的高性能全文检索工具包jsearch设计源码
- 基于多语言技术的pt遨游助手手机版设计源码
- 基于若依框架的染云盘V1.0.2设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功