E-Sensor

Overview

E-Sensor Appearance

E-Sensor is an open-source measurement device designed for the monitoring and analysis of architectural environments. Its USB connectivity enables seamless data acquisition across multiple platforms.

Measurement Items

ItemSensorMeasurement RangeWarm-up
Dry-bulb TemperatureSHT40-40 – 125 °CApprox. 5s
Relative HumiditySHT400 – 100 %Approx. 5s
Wind SpeedIn-house0.0 – 5.0 m/sApprox. 5s
IlluminanceOPT30010.0 – 83865.6 lxInstant
CO2 ConcentrationSTCC4380 – 32000 ppmApprox. 5s

Usage

Mobile (iOS / Android)

Install the dedicated application and connect the device via a USB Type-C cable.

  • iPhone / iPad (USB-C port): Connect directly with a USB-C to USB-C cable.
  • iPhone (Lightning port): Connect via an Apple "Lightning to USB Camera Adapter" or "Lightning to USB 3 Camera Adapter" together with a USB-A to USB-C cable.
    Note: A standard Lightning charging cable cannot be used (iOS will not recognize the device as a USB peripheral).
  • Android (USB-C port): Connect directly with a USB-C to USB-C cable.

PC (Windows / Mac / Linux)

The device is recognized as a standard MIDI interface. Use the Python library for efficient data retrieval.

Obtaining the Device

This is an open-source project. You can either build the hardware yourself using the design data or purchase a pre-assembled unit.

Purchase Finished Product (Amazon: Coming Soon)

Communication Protocol

Communication is performed using MIDI SysEx (System Exclusive Messages). Data payloads are transmitted in 4-bit nibbles (High nibble first, followed by Low nibble) according to MIDI specifications.

[F0] [7D] [Command ID] [Data 0 High] [Data 0 Low] ... [CRC High] [CRC Low] [F7]

Command List

Command IDDir.DescriptionData (Pre-nibble)
0x01D → HSend current sensor readings (Response to 0x02)14 bytes (Sensor Data Structure)
0x02H → DRequest current sensor readingsNone
0x03H → DStart internal sensing processNone
0x04H → DStop internal sensing processNone
0x05H ↔ DTransfer/Save calibration coefficient A20 bytes (float[5]) + CRC(1 byte)
0x06H → DRequest calibration coefficient A from deviceNone
0x07H ↔ DTransfer/Save calibration coefficient B20 bytes (float[5]) + CRC(1 byte)
0x08H → DRequest calibration coefficient B from deviceNone
0x09D → HSend device-specific serial hash value4 bytes (uint32_t)
0x10H → DRequest device-specific IDNone
0x11D → HSend firmware version information3 bytes (Major, Minor, Rev)
0x12H → DRequest firmware versionNone
0x13D → HNotify CO2 calibration offset result2 bytes (int16_t)
0x14H → DExecute forced CO2 calibration with reference2 bytes (uint16_t) + CRC(1 byte)
0x15H → DReset CO2 sensor to factory settingsNone
0x16D → HNotify successful CO2 sensor resetNone
0x17H → DRequest CO2 sensor initial conditioningNone
0x18D → HNotify that CO2 sensor conditioning has startedNone
0x19D → HNotify that CO2 sensor conditioning is complete (takes approx. 22 s)None

Sensor Data Structure (ID: 0x01)

OffsetItemUnitType
0IlluminanceValue × 10 Luxuint32_t
4TemperatureValue × 100 °Cint16_t
6HumidityValue × 100 %uint16_t
8Wind Speedmm/suint16_t
10VoltagemVuint16_t
12CO2 Concentrationppmuint16_t
14Flagbit0: Illum, bit1: Temp/Hum/CO2, bit2: Vel/Voltuint8_t