Here are the details about the protocol of the serial communication between Argus Monitor and the Argus Controller hardware.

As long as this protocol is respected, you can develop and use a completely different hardware than our Arduino example together with Argus Monitor.


Argus Monitor request

Argus Controller answer


AA 02 01 crc8

C5 <byteCnt> 01 <DEVICE_ID> <TEMP_COUNT> <FAN_COUNT> crc8


AA 02 20 crc8

C5 <byteCnt> 20 <tempCount> temp0_H temp0_L temp1_H temp1_L temp2_H temp2_L temp3_H temp3_L crc8


AA 02 30 crc8

C5 <byteCnt> 30 <fanCount> rpm0_H rpm0_L rpm1_H rpm1_L crc8


AA 03 31 <channel> crc8

C5 <byteCnt> 31 <channel> <pwm> crc8


AA 04 32 <channel> <pwm> crc8

C5 <byteCnt> 32/FF crc8    # answer byte2: 32 = ok, FF = error


AA 04 40 <addrH> <addrL> crc8

C5 <byteCnt> 40 <VALUE_COUNT> <val> crc8


AA 05 41 <addrH> <addrL> <value> crc8

C5 <byteCnt> 41/FF crc8    # answer byte2: 41 = ok, FF = error

Only for the ProbeDevice command, Argus Monitor expects the answer from the device within 200 msec.

This has to do with internal initialization constraints within the HW monitoring modules.

If you write your own software for an Argus Controller device, please make sure you answer the ProbeDevice query fast enough.

Data formats:

Temperature: int16_t, Celsius, scaled by 10

RPM: uint16_t

PWM: uint8_t [0..100 %]

Communication parameters:

57600 Baud, 8N1

CRC8 calculation:

uint8_t crc8(uint8_t crc, uint8_t data) {

crc = crc ^ data;

for (uint8_t i = 0; i < 8; i++) {

if (crc & 0x01)

crc = (crc >> 1) ^ 0x8C;


crc >>= 1;


return crc;