EEVBlog 121GW

From sigrok
Jump to: navigation, search
EEVBlog 121GW
Eevblog 121gw mugshot.png
Status supported
Source code serial-dmm
Counts 50000
IEC 61010-1 CAT III (600V)
Connectivity BLE, SD card
Measurements voltage, current, power, resistance, capacitance, diode, continuity, frequency, duty cycle, period, temperature
Features autorange, true-rms, auto hold, min/max, 1ms peak, 1kHz lowpass, relative, bargraph, backlight, 3V/15V diode, SD card logging

The EEVBlog 121GW is a 50000 counts, CAT III (600V) handheld digital multimeter with SD card (firmware update, data logging) and BLE connectivity.

The EEVBlog host Dave Jones participated in the design of the device which gets manufactured by UEi. Some features are rare, or their combination has not been seen in other devices (15V diode test, builtin uCurrent to reduce burden voltage in current measurement, open schematics and hackable firmware).

Hold the 1ms PEAK button to enable BLE communication. Make the BLE communication available on a COM port (e.g. by means of the BLE to UART gateway discussed below).


  • HY3131 DMM
  • AD8436 TRMS
  • ADR3412 Reference
  • MAX4238 Opamp (uCurrent)
  • STM32L152ZDT6 MCU
  • BLE122 BLE module
  • NJU6350R RTC, CR1220 battery
  • Split terminals and opamp for plug detection
  • Several 4052/4053 muxes

The Uni-T UT171A and Keysight U1282A meters are said to use the same HY3131 multimeter chipset.

The 121GW meter's schematics is open, as is the source code for the mobile app.

The meter is announced as having "hackable firmware" but its source code is not available and probably never will. Alternative OpenSource firmware is possible but would have to start at square one. There are connector pads to program the MCU and the BLE module.

The STM32 MCU communicates to the HY3131 chip via SPI, and to the BLE112 module via UART. The BLE112 passes the MCU's serial data in verbatim form (cable replacement mode). Which means that one might as well grab the meter's serial output at the MCU to BLE connection.




SD card logging generates CSV style files, with several header lines (non-comments) describing the test setup and start of recording, followed by data lines, and a final (non-comment) line when recording stops.

Example SD card logfile:

 No. ,Func. ,Value,Unit,Func. ,Value,Unit,Func. ,Value,Unit,
 --- 8< --- snip snip --- >8 ---


Several firmware versions implemented different protocol versions, as lessons were learned during development of the BLE communication and apps for mobile devices. Recent versions use packets of 19 bytes each with binary data, to reduce the probability of data loss in the communication, and to slightly increase throughput since BLE is considered "low speed". The "Revised-Packet-Format-Blob-V2" PDF outlines the frame layout.

BLE communication is reported to be slow (some two samples per second), and occassionally flaky (truncated packets, reduced rate including gaps of non-activity, increasing error counts after longer periods of logging). The firmware and the protocol provide basic functionality, but may see some more development before becoming full featured and stable, or before more performance increases are seen.

To enable BLE communication hold the 1ms PEAK button until the BT indicator changes. The meter needs a write trigger before it starts sending subsequent samples by means of notifications (BLE has no common or standard concept of serial communication, like Bluetooth Classic does). This trigger is not needed for each sample (like some serial DMMs do), but it'd be required to re-establish communication after connection was lost (when the meter went to sleep, or BT comm was disabled, or the device went out of the receiver's range).

Each 19-byte packet communicates data for three displays ("main", "sub", and "bar", i.e. the two displays and the bargraph) as well as some "icon" state (indicators).

At the time of this writing sigrok does not support BLE communication. Possible workarounds would involve disguising the BLE communication as a COM port (users are reported to run gateways on ESP or nRF hardware, as well as on RPi or PC machines), or to "replay" recordings of previously observed communication.

Quick experiment, manual inspection of BLE communication:

 $ hcitool lescan
 LE Scan ...
 88:6B:12:34:56:78 (unknown)
 88:6B:12:34:56:78 121GW
 $ gatttool -b DEV_ADDR --char-write-req -a 9 -n 0300 --listen
 Characteristic value was written successfully
 Indication   handle = 0x0008 value: f2 17 80 01 21 01 40 00 15 64 01 00 f0 00 00 0e 40 00 ca f2 
 Indication   handle = 0x0008 value: 17 80 01 21 01 40 00 01 64 01 00 f0 00 00 0e 40 00 de f2 17 
 Indication   handle = 0x0008 value: 80 01 21 01 00 00 1f 64 01 00 ef 00 00 0e 40 00 9f f2 17 80 
 Indication   handle = 0x0008 value: 01 21 01 40 9c f2 17 80 01 21 01 40 00 1d 64 01 00 f0 00 00 
 Indication   handle = 0x0008 value: 0e 40 00 c2 
 Indication   handle = 0x0008 value: f2 
 Indication   handle = 0x0008 value: 17 80 01 21 01 00 00 0f 64 01 00 f0 04 00 0e 40 00 94 
 Indication   handle = 0x0008 value: f2 
 Indication   handle = 0x0008 value: 17 80 01 21 01 40 00 1b 64 01 00 f0 00 00 0e 40 00 c4 
 Indication   handle = 0x0008 value: f2 
 Indication   handle = 0x0008 value: 17 80 01 21 01 00 00 73 64 01 00 f0 00 00 0e 40 00 ec

Python based BLE to UART gateway, using the bluepy Python module:

 (needs permissions to scan for and communicate to the device)
 # pip install pyserial bluepy
 # ./eev121gw-ble-uart-relay -p /dev/ttyUSB1 -v

Using the UART attached 121GW multimeter:

 $ sigrok-cli -d eevblog-121gw:conn=/dev/ttyUSB0 --scan
 The following devices were found:
 eevblog-121gw - EEVblog 121GW with 3 channels: main sub bar
 $ sigrok-cli -d eevblog-121gw:conn=/dev/ttyUSB0 --continuous
 main: 2.1074 V DC AUTO
 sub: 26.9 °C
 bar: 1.8
 main: 1.9905 V DC AUTO
 sub: 26.9 °C
 bar: 1.8 
 main: 1.8712 V DC AUTO
 sub: 26.9 °C
 bar: 1.6 
 main: 1.7528 V DC AUTO
 sub: 26.9 °C
 bar: 1.4 
 main: 1.6335 V DC AUTO
 sub: 26.9 °C
 bar: 1.4 
 main: 1.5142 V DC AUTO
 sub: 27.0 °C
 bar: 1.2 
 $ ./sigrok-meter -d eevblog-121gw:conn=/dev/ttyUSB0 &