Skip to content

A core communication and data processing hub for I2C-based sensors. It provides essential I2C read and write operations, making it easier to integrate various sensor classes for data acquisition and processing.

License

Notifications You must be signed in to change notification settings

styropyr0/SensorHub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SensorHub Library

Overview

SensorHub is a core communication and data processing hub for I2C-based sensors. It provides essential I2C read and write operations, making it easier to integrate various sensor classes for data acquisition and processing. The library supports multi-byte transactions, configurable communication modes, and device connectivity verification. Additionally, it includes I2S support for ADC-based sensors on platforms that support it.

Features

  • I2C Communication Support

    • Read and write operations for single and multi-byte transactions.
    • Support for big-endian and little-endian data formats.
    • Configurable I2C communication mode.
    • Device connectivity verification.
  • I2S Communication Support (Only for SOCs that support ADC over I2S)

    • Configurable word select (WS), bit clock (BCLK), and data pins.
    • Supports stereo, left, and right channel selection.
    • Customizable sampling rate.

Compatibility

The SensorHub library is compatible with:

  • ESP32 (Supports both I2C and I2S communication)
  • Arduino Due (Supports only I2C communication)
  • Other boards with I2C support

Installation

  1. Download the repository or clone it:
    git clone https://github.com/yourusername/SensorHub.git
  2. Copy the SensorHub folder into your Arduino libraries directory:
    Documents/Arduino/libraries/
    
  3. Restart the Arduino IDE.
  4. Include the library in your code:
    #include <SensorHub.h>

Usage

1. Initialize an I2C Sensor

To use an I2C-based sensor, initialize the SensorHub object with the sensor's I2C address:

#include <SensorHub.h>

SensorHub sensor(0x40);  // Example I2C address

void setup() {
    Serial.begin(115200);
    if (sensor.is_sensor_connected()) {
        Serial.println("Sensor connected!");
    } else {
        Serial.println("Sensor not found.");
    }
}

void loop() {
    // Add sensor reading logic here
}

2. Writing Data to an I2C Register

sensor.i2c_execute(0x01, 0xFF); // Write 0xFF to register 0x01

3. Reading Data from an I2C Register

uint8_t data;
sensor.i2c_readByte(0x02, &data, 1);
Serial.print("Register Value: ");
Serial.println(data, HEX);

4. Reading Multi-Byte Data (Little-Endian)

uint16_t value;
sensor.i2c_read_Xbit_LE(0x03, &value, 16);
Serial.println(value);

5. Using I2S-Based Sensors (ESP32 Only)

To initialize an I2S-based sensor:

#ifdef ARDUINO_ARCH_ESP32
SensorHub i2sSensor(25, 26, 27, 16000, I2S_CHANNEL_LEFT);
#endif

API Reference

Constructor

I2C Sensor Initialization

SensorHub(uint8_t addr);
  • addr: I2C address of the sensor.

I2S Sensor Initialization (ESP32 Only)

SensorHub(uint8_t ws, uint8_t bclock, uint8_t data, uint32_t samplingRate, uint8_t channel);
  • ws: Word select pin.
  • bclock: Bit clock pin.
  • data: Data pin.
  • samplingRate: Desired sampling rate.
  • channel: I2S_CHANNEL_LEFT, I2S_CHANNEL_RIGHT, or I2S_CHANNEL_STEREO.

I2C Methods

Write Operations

void i2c_execute(uint8_t reg, uint8_t data);
void i2c_execute_16bit(uint8_t reg, uint16_t data);
  • Writes data to the specified register.

Read Operations

bool i2c_readByte(uint8_t reg, uint8_t *data, uint8_t length);
bool i2c_readByte(uint8_t reg, int8_t *data, uint8_t length);
  • Reads one or more bytes from the given register.

Multi-Byte Read (Little-Endian & Big-Endian)

template <typename T>
bool i2c_read_Xbit_LE(uint8_t reg, T *data, uint8_t length);

template <typename T>
bool i2c_read_Xbit(uint8_t reg, T *data, uint8_t length);
  • Reads a multi-bit value from the register.

I2C Configuration

void set_i2c_mode(uint8_t mode);
  • Sets the I2C communication mode.

Sensor Connectivity Check

bool is_sensor_connected();
  • Returns true if the sensor is detected over I2C.

License

This library is open-source and available under the MIT License.

Author

Developed by Saurav Sajeev.

About

A core communication and data processing hub for I2C-based sensors. It provides essential I2C read and write operations, making it easier to integrate various sensor classes for data acquisition and processing.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages