ตัวอย่างโค้ดสำหรับ Master บน Arduino IDE เชื่อมต่อกับ X-Bar

ตัวอย่างโค้ดสำหรับ Master บน Arduino IDE เชื่อมต่อกับ X-Bar

เริ่มต้นเนื้อหา

ตัวอย่างโค้ด Arduino IDE สำหรับ Master เพื่อใช้เชื่อมต่อกับ X-Bar 

 

Relay Control
ใช้ฟังก์ชั่น Write Single Coil (Function Code=05)
เขียนรีจิสเตอร์  0-3

ในโค้ด4บรรทัดแรก เป็นการตั้งค่า Serial อย่างง่ายสำหรับ iMicon Mation Series
1. เลือกบอร์ด (ยกเลิกคอมเมนต์เฉพาะอันที่ต้องการ)
2. การเลือกบอร์ดคอลโทรลบนโปรแกรม
– i-Mation Pico Dev Board เลือกเป็น ESP32-S3
– Micromation Dev Board V3 & V3 Lite เลือกเป็น ESP32 Dev Module
– X-Bar | Smart Relay เลือกเป็น ESP32-C3
3.หากพัฒนาเสร็จแล้ว ตั้งค่า #define ENABLE_USB_DEBUG เป็น 0

 

 

ตัวอย่างคำสั่งเปิด-ปิด รีเลย์ เพิ่มเติม

Modbus-RTU Command Table

 

 


 

 

Read Relay Status and Input
ใช้ฟังก์ชั่น Read Holding Registers (Function Code=03)
ในโค้ดตัวอย่างนี้เป็นการอ่านรีจิสเตอร์  11 ซึ่งเป็น digital input 1 [DI1]

ต่อ Digital input ด้วย Digital Sensor แบบ ON/OFF (Binary Output)

การต่อ Digital input ที่ทำงาน Active Low
DI1(GPIO5), DI2(GPIO7) และ DI3(GPIO8) ถูก Pull-Up เป็นค่าเริ่มต้น สามารถเปลี่ยนสถานะด้วยการ ดึงลง GND

ตัวอย่างการต่อ Digital input ด้วย สวิตซ์ switch

ตัวอย่างการต่อ Digital input ด้วย  Active IR

วิธีปรับระยะตรวจจับ (ในกรณีที่ HW-201 มี Potentiometer)
– ลองหมุนทวนเข็มนาฬิกา → ลดระยะตรวจจับ
– ลองหมุนตามเข็มนาฬิกา → เพิ่มระยะตรวจจับ

ตัวอย่างการต่อ Digital input ด้วย Magnetic Switch

การต่อ Digital input ที่ทำงาน Active HIGH
DI1(GPIO5), DI2(GPIO7) และ DI3(GPIO8) ถูก Pull-Up จะต้องคลิก Toggle เป็น ↓ เพื่อ Pull-Down ดึงสถานะเป็น LOW สามารถเปลี่ยนสถานะด้วยการ ดึงขึ้น 3.3V

ตัวอย่างการต่อ Digital input ด้วย Passive IR

วิธีการปรับระยะตรวจจับบนโมดูล PIR

สังเกต Potentiometer บนบอร์ดโดยทั่วไปโมดูล PIR จะมี 2 ตัวปรับ (Potentiometer)
– ตัวหนึ่งใช้ปรับ Sensitivity (ระยะตรวจจับ)
– อีกตัวใช้ปรับ Time Delay (เวลาหน่วงการปิดสัญญาณ)

การปรับระยะตรวจจับ (Sensitivity)
– หมุนทวนเข็มนาฬิกา (Counter-Clockwise) → ลดระยะตรวจจับ → ตรวจจับได้ใกล้ลง
– หมุนตามเข็มนาฬิกา (Clockwise) → เพิ่มระยะตรวจจับ → ตรวจจับได้ไกลขึ้น

 

 

 

วิธีอ่านรีจิสเตอร์ตำแหน่งอื่นๆ เปลี่ยนเพียงคำสั่ง Modbus ที่ใช้การร้องขอ
สามารทดสอบเพื่อรับเฟรมคำสั่งที่สามารถใช้ได้จริงบนเครื่องมือ
HyperSync Modbus-RTU Discover

1.เลือก Preset เป็น Custom
2.ไอดีที่จะอ่าน
3.ใช้ฟังก์ชั่นโค้ด FC03
4.ตำแหน่งรีจิสเตอร์บล๊อกที่จะอ่าน
5.จำนวนบล๊อกที่จะอ่าน (ตัวอย่างนี้ให้อ่าน 1 บล๊อก)
6.คัดลอกรหัสคำสั่งนี้ไปกำหนด byte command ใน void loop บนโปรแกรม Arduino IDE

 


 

 

Read All Register
ใช้ฟังก์ชั่น Read Holding Registers (Function Code=03)
ในโค้ดตัวอย่างนี้เป็นการอ่านแบบหลายรีจิสเตอร์  0-17 พร้อมกัน

 

Serial Monitor: ตัวอย่างค่าอ่านได้จากโค้ดนี้

Sent: 0x1 0x3 0x0 0x0 0x0 0x12 0xC5 0xC7 
Data: R1:OFF, R2:OFF, R3:OFF, R4:OFF, R5:OFF, R6:OFF, R7:OFF, R8:OFF, R9:OFF, BOARD:4, MODE:0, DI1:OFF, DI2:OFF, DI3:OFF, RC1:0, RC2:0, RC3:0, RC4:0

 

 

ความหมายตำแหน่งของรีจิสเตอร์ 0-17

  • Registers 0-8 (9 relays): R1 to R9 สถานะรีเลย์ (CH1–CH9)
  • Register 9: BOARD คือ ประเภทบอร์ด (Read-only)
  • Register 10: MODE คือ พฤติกรรมเริ่มต้น (Reset Mode)
  • Registers 11-13: DI1 to DI3 คือ อินพุตดิจิทัล
  • Registers 14-17: RC1 to RC4 คือ การตั้งค่าการตอบสนอง (Relay Conditions)

 

 


 

X-Bar Modbus Register

รีจิสเตอร์ คำอธิบาย ฟังก์ชันโค้ด Operator ชนิดข้อมูล
0–3 สถานะรีเลย์ (CH1–CH4) FC03, FC05 Read, Write (0xFF00/0x0000) Boolean (16-bit)
9 ประเภทบอร์ด (Read-only) FC03 Read (ค่า 4) 16-bit Integer
10 พฤติกรรมเริ่มต้น (Reset Mode) FC03, FC06 Read, Write (0x0000/0x0001) 16-bit Integer
11–13 อินพุตดิจิทัล (DI1–DI3) FC03 Read (0/1) Boolean (16-bit)
14–17 การตั้งค่าการตอบสนอง (Relay Conditions) FC03, FC06 Read, Write (0–3) 16-bit Integer
256 Slave ID (Default: 1) FC03, FC06 Write (1–255) 16-bit Integer
257 Baud Rate Multiplier (Default: 9600) FC03, FC06 Write (0x01–0x18) 16-bit Integer
  • Baud Rate Default: 9600
    Supported: 4800 (0x01), 9600 (0x02), 19200 (0x04), 38400 (0x08), 57600 (0x0C), 115200 (0x18)

BESTตัวอย่างโค้ดสำหรับ Master บน Arduino IDE เชื่อมต่อกับ X-Bar