Example Code for Arduino-Read Onboard Temperature Sensor

Last revision 2025/12/20

This article guides users through setting up an Arduino system to read onboard temperature sensors using an RS485 shield. It covers hardware and software preparation, offers a sample code, and explains the wiring diagram needed for successful implementation.

Hardware Preparation

  • 1 x Arduino Leonardo (Since RS485 to TTL will occupy one serial port, it is recommended using a device with two or more serial ports like Arduino Leonardo. Arduino Modbus protocol takes up a lot of memory, so we recommend to use Arduino mega2560 board.)
  • 1 x RS485 Shield for Arduino
  • 1 x DC Power Supply (DC 24V)
  • 1 x USB Cable (Connect Arduino board and a PC)

Software Preparation

  • Arduino IDE
  • Open "Library Manager"(Ctrl+Shift+I) in IDE, find and install ArduinoModbus and ArduinoRS485 libraries.
    SEN0310-1

Wiring Diagram

SEN0310-Connection

Other Preparation Work

Install ArduinoModbus and ArduinoRS485 libraries via Arduino IDE's Library Manager.

Sample Code

/**************************************************************************************************************
*This code tests the temperature measurement function of the URM12 ultrasonic sensor(1500cm&RS485)
*@ author : [email protected]
*@ data   : 30.09.2019
*@ version: 1.0
*RX(RS485 Shield) -> TX1/D1 (Arduino Leonardo)  TX(RS485 Shield)-> RX1/D0 (Arduino Leonardo)
**************************************************************************************************************/
#include <ArduinoModbus.h>
#include <ArduinoRS485.h>

#define slave_addr   0x0b

typedef enum
{
  PID,
  VID,
  SLAVE_ADDR,
  COM_BAUDRATE,
  COM_PARITY_STOP,
  DISTANCE,
  INTERNAL_TEMP,
  EXTERN_TEMP,
  CR
} regindex;

uint16_t read_data(uint16_t addr_t, uint16_t reg)
{
  uint16_t data_t;
  if (!ModbusRTUClient.requestFrom(addr_t, HOLDING_REGISTERS, reg, 1))
  {
    Serial.print("failed to read registers! ");
    Serial.println(ModbusRTUClient.lastError());
    data_t = 0xffff;
  }
  else
  {
    data_t =  ModbusRTUClient.read();
  }
  return data_t;
}


uint16_t write_data(uint16_t addr_t, uint16_t reg, uint16_t data)
{

  if (!ModbusRTUClient.holdingRegisterWrite(addr_t, reg, data))
  {
    Serial.print("Failed to write coil! ");
    Serial.println(ModbusRTUClient.lastError());
    return 0;
  }
  else
    return 1;
}

void setup() {
  Serial.begin(9600);
  ModbusRTUClient.begin(19200);
}

volatile float temp;

void loop() {
  temp =  read_data(slave_addr,INTERNAL_TEMP) / 10.0;
  Serial.print("internal temp = ");
  Serial.print(temp,1);
  Serial.println("C");
  delay(500);
}

Result

SEN0310-Temperature Measurement

Was this article helpful?

TOP