Created
June 17, 2026 04:47
-
-
Save fxprime/a42ff73e2b0682aa91685df395a4b6f0 to your computer and use it in GitHub Desktop.
pht sensor rs485 with esp32 + max485
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* ------------------ 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