Skip to content

Instantly share code, notes, and snippets.

@fxprime
Created June 17, 2026 04:47
Show Gist options
  • Select an option

  • Save fxprime/a42ff73e2b0682aa91685df395a4b6f0 to your computer and use it in GitHub Desktop.

Select an option

Save fxprime/a42ff73e2b0682aa91685df395a4b6f0 to your computer and use it in GitHub Desktop.
pht sensor rs485 with esp32 + max485
/* ------------------ PH/TEMP Reading code by ModuleMore.com ----------------- */
/* ------------------------------- วิธีการต่อ ------------------------------- */
/**
* @file main.cpp
* @author ModuleMore.com (paheyisoicus@gmail.com)
* @brief รับค่าจาก PH/TEMP sensor เวอร์ชั่น RS485 โดยใช้ RS485 to TTL (รุ่นมี tx rx และ gnd ของ rs485)
* สื่อสารผ่าน Serial1 (ที่เรา define ขาไว้เป็น RX = 13, TX = 15) ด้วย Library ModbusMaster
*
* Wiring
* ______
*
* ESP32 ---> MAX485 ---> PH sensor rs485
* 3.3V VCC
* 12-24V --- +
* GND GND -
* - RE (ต่อกับDE)
* 4 DE
* 18 RO(RX)
* 19 DI(TX)
* A A
* B B
* @version 0.1
* @date 2026-06-17
*
* @copyright Copyright (c) 2026
*
*/
#include <Arduino.h>
#include <ModbusMaster.h>
// instantiate ModbusMaster object
ModbusMaster node;
#define MAX485_DE 4
void preTransmission() { digitalWrite(MAX485_DE, 1); }
void postTransmission() { digitalWrite(MAX485_DE, 0); }
void setup()
{
//สื่อสารออก Terminal ด้วย baudrate 115200
Serial.begin(115200);
// กำหนดขาที่่ต่อกับ DE ให้เป็น Output
pinMode(MAX485_DE, OUTPUT);
// ตั้งค่าเริ่มต้นให้เป็นโหมดรอรับสัญญาณ
digitalWrite(MAX485_DE, 0);
//ตั้งค่า Hardware serial เป็นแบบ 8bit no parity 1 stop bit, ขา RX=13, TX=15
Serial1.begin(9600, SERIAL_8N1, 18,19);
// เริ่มสื่อสารกับ modbus slaveid = 1 ด้วย HardwareSerial = Serial1
node.begin(1, Serial1);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
void loop()
{
uint8_t result;
uint16_t temperature = 0;
uint16_t ph = 0;
//อ่านค่า address 0x03 (ซึ่งคือการเรียกฟังก์ชัน readHoldingRegisters) เริ่มต้นที่ address 0x00 จำนวน 2 register (register = 2byte = 16bit)
result = node.readHoldingRegisters(0x00, 2);
//อ่านค่าสำเร็จ จะให้ปริ้นออกมาเป็นค่าตาม datasheet
if (result == node.ku8MBSuccess)
{
temperature = node.getResponseBuffer(0);
ph = node.getResponseBuffer(1);
Serial.printf("temperature value = %.1f\npH value = %.1f\n==================\n", temperature/10.0, ph/10.0);
delay(1000);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment