PC-222 multimeter, RS-232 protocol

For a project we needed to read out our PC-222 multimeter. It supports RS-232, but the protocol is not documented at all and the software is proprietary. After a little research on the web, we found some information in a comment on Amazon. With this and a little trial–and–error we found out how it works.

PC-222 multimeter

PC-222 multimeter

The multimeter continuously sends a data package of 14 bytes every second. So, you don’t have to ask for data by a command, just listen. Settings are 2400 baud, 8&nsbp;bit, no parity, 1 stop–bit, and RTS/CTS handshake. The following shows an exemplary package received from the instrument:

0x17 0x27 0x3D 0x45 0x5B 0x67 0x7F 0x8F 0x9F 0xA8 0xB0 0xC0 0xD8 0xE2
Display of PC-222: 028.8 °C

As one may notice, the first nibble (i.e. hex digit) of each byte is just a counter (marked in red). You can use this to find the beginning of a package. The remaining nibbles (marked in green) have different meaning. The very first one and number 10 to 12 have an unknown meaning. Nibbles 2 to 9 (= 8 nibbles) comprise the displayed(!) value. First, these 8 nibbles have to be recombined to 4 bytes:

Recombined bytes: 0x7D 0x5B 0x7F 0xFF
Display: 0 2 8 .8

Every symbol on the display of the instrument is made out of 7 segments. Therefore, the lower 7 bits of each byte represent these segments. The following table shows the encoding of the symbols:

Symbol on display: 0 1 2 3 4 5 6 7 8 9 L (none)
Encoding (hex): 0x7D 0x05 0x5B 0x1F 0x27 0x3E 0x7E 0x15 0x7F 0x3F 0x68 0x00

The first bit is a special indicator for the display of the decimal point, the sign, or the range. For the byte 3 and 4 it represents the decimal point, which is the case in the example from above. For byte 2 it represents x10 (‘XIO’ in the display of the instrument as shown e.g. for LUX 40000 setting). For the very first byte it represents a minus sign. Briefly, multiply the value of the readout by -1, 10, 0.01, or 0.1 for the bit set in byte 1, 2, 3, 4, respectively.

Last, nibble 13 and 14 (recombined to one byte) describe the measured quantity/units. The following table shows the encoding. In the case above, it is 0x82, i.e. ‘°C’.

Quantity: LUX (Light) dBA (Sound) %RH (Humdity) °C (Temperature) °F (Temperature)
Encoding (hex): 0x01 0x41 0x81 0x82 0x84

Maybe, there are other units and quantities for similar instruments from PCE instruments. Finally, we want to share a little ruby script, which can readout the PCE–222 instrument. We hope this little guide and the script come in handy for anyone dealing with this multimeter. That’s it!

PC-222 readout script
PC-222 readout script
2.9 KiB