CMT PLL Module Smart V2X
1. ขอบเขตเอกสาร
เอกสารนี้สรุปคำสั่งที่ถูก parse ในไฟล์ CMT_PLL_MODULE_SMART_V2X.ino เป็นหลัก รวมถึงกลไกที่เกี่ยวข้องใน WiFi_Manager_CMT.h, CMT_Smart_Hardware.h และ API ของไลบรารีอ้างอิง CMT-ESP32-PLL_V1.
115200 baud, พิมพ์คำสั่ง 1 บรรทัด แล้วกด Enter (CR หรือ LF ก็ได้) ตัว parser จะ trim และแปลงเป็นตัวพิมพ์เล็กก่อนตรวจสอบ ดังนั้นคำสั่งไม่แยกตัวพิมพ์ใหญ่/เล็ก แต่ข้อความที่ส่งในวงเล็บปีกกาอาจถูกแปลงเป็นตัวพิมพ์เล็กด้วยหน่วยความถี่: ความถี่ RF ใช้ Hz เช่น 430200000 = 430.200 MHz; ความถี่เสียง/โทนใช้ Hz; เวลาใช้ ms; ความเร็ว Morse ใช้ WPM.
2. ภาพรวมการทำงาน
RDA/PLL address
0x71, SDA GPIO11, SCL GPIO10GPIO14, Active LOW; กดแล้วเข้า TX, ปล่อยแล้วกลับ RX
GPIO9 เป็น signal detect; GPIO21 เป็น LED/control
RX/TX 430.200 MHz, RX/TX CTCSS index 12, Volume 8
ตอนบูต firmware บังคับเริ่มที่ RX เพื่อความปลอดภัย จากนั้นตรวจสิทธิ์ช่วงความถี่ด้วย Tier/Service Mode ก่อนเรียก pll.RX() หรือ pll.TX(). ความถี่จริงที่ส่งให้ PLL คือความถี่คำสั่งบวก XTAL offset ที่ตั้งไว้.
3. คำสั่งตั้งความถี่และเปลี่ยนโหมด
| คำสั่ง | รูปแบบ / ตัวอย่าง | การทำงาน | ผลตอบกลับ/ข้อจำกัด |
|---|---|---|---|
| cmt-ftx<freq> | cmt-ftx430200000 | ตั้งค่า TX frequency ในตัวแปรปัจจุบัน ยังไม่ TX ทันที | รับ 10 MHz–1 GHz ก่อน แล้วตรวจ Tier/ช่วงที่อนุญาต |
| cmt-frx<freq> | cmt-frx145500000 | ตั้งค่า RX frequency ในตัวแปรปัจจุบัน ยังไม่เปลี่ยน PLL ทันที | รับ 10 MHz–1 GHz ก่อน แล้วตรวจ Tier/ช่วงที่อนุญาต |
| cmt-tx | cmt-tx | เข้า TX ที่ txFreq, ตั้ง TX CTCSS, รอ 150 ms แล้วเล่น Roger profile 0 | ถ้าผ่านจะแจ้ง READY TO TRANSMIT; ถ้าไม่ผ่านจะแจ้ง RANGE LIMIT/TX failed |
| cmt-rx | cmt-rx | เล่น Roger profile 1, ตั้ง RX CTCSS แล้วเข้า RX ที่ rxFreq | ตรวจช่วงความถี่ก่อนเรียก PLL |
| cmt-dif<offset> | cmt-dif+5000cmt-dif-5000 | ตั้ง repeater/TX offset ใน txOffset และเรียก pll.setTXDIF() | หน่วย Hz; เป็น offset คนละส่วนกับ XTAL tuning |
| cmt-tune<offset> | cmt-tune-1200 | ตั้ง XTAL offset แบบชั่วคราวใน RAM; มีผลกับความถี่ที่ส่งให้ PLL | ยังไม่ถาวรจนกว่าจะใช้ cmt-save |
| cmt-save | cmt-save | บันทึกความถี่, โหมด, CTCSS, Volume, CW, Roger, ช่อง 0–9 และรวม XTAL RAM offset เข้าค่า NVS | ค่าจะคงอยู่หลังรีสตาร์ต |
cmt-ftx/cmt-frx เปลี่ยนค่าตัวแปร แต่ไม่ได้เรียก TX/RX เพื่อ tune ทันที หากต้องการให้ความถี่มีผลกับฮาร์ดแวร์ทันที ให้ตามด้วย cmt-tx หรือ cmt-rx หรือเลือกช่องด้วย cmt-mch<n>.4. CTCSS และเสียง
| คำสั่ง | ตัวอย่าง | รายละเอียด |
|---|---|---|
| cmt-rxctcss<n> | cmt-rxctcss12 | ตั้ง RX CTCSS index 0–39 และเรียก pll.RX_CTCSS() ทันที |
| cmt-txctcss<n> | cmt-txctcss25 | ตั้ง TX CTCSS index 0–39 และเรียก pll.TX_CTCSS() ทันที |
| cmt-volume<n> | cmt-volume8 | ตั้ง Volume 0–15; ตามคอมเมนต์ในโค้ด 0 = ดังสุด, 15 = เบาสุด |
ถ้าใช้ PTT จริง: ตอนกดจะตั้ง TX CTCSS หลังเข้า TX; ตอนปล่อยจะตั้ง RX CTCSS ก่อนกลับ RX.
5. ช่องจำ 10 ช่อง (Memory Channels)
| คำสั่ง | ตัวอย่าง | รายละเอียด |
|---|---|---|
| cmt-mch<n> | cmt-mch3 | เลือกช่อง 0–9, โหลด RX/TX frequency และ CTCSS ของช่องนั้น, บันทึก active channel และ tune PLL ทันทีตามโหมดปัจจุบัน |
| cmt-readch<n> | cmt-readch3 | อ่านค่าออกเป็น CH:3,rx,tx,rxc,txc |
| cmt-writech<n>,<rx>,<tx>,<rxc>,<txc> | cmt-writech3,145500000,145500000,12,12 | เขียนข้อมูลช่อง 0–9; ตรวจสิทธิ์ช่วง RX/TX ก่อนเขียน; ถ้าเป็นช่องที่ active จะอัปเดต PLL ทันที |
cmt-save เพื่อให้ข้อมูลช่องคงอยู่หลังรีสตาร์ต.6. RSSI Monitor และ Frequency Sweep
| คำสั่ง | ตัวอย่าง | การทำงาน |
|---|---|---|
| cmt-rssi-stream | cmt-rssi-stream | เปิด RSSI stream, บังคับ RX ที่ rxFreq และส่งค่า RSSI mV ทาง Serial ทุกประมาณ 50 ms เมื่อ PTT ไม่ถูกกดและ GPIO9 เป็น HIGH |
| cmt-rssi-stop | cmt-rssi-stop | หยุด RSSI stream |
| x | x | คำสั่ง legacy สำหรับหยุด RSSI stream |
| cmt-sweep-on<step> | cmt-sweep-on5000 | เปิด sweep RX รอบ rxFreq; step เป็น Hz, ค่าต่ำกว่า 100 จะถูกปรับเป็น 100; ใช้จุดตั้งแต่ -12 ถึง +12 steps (25 จุด) ตามค่าเริ่มต้น |
| cmt-sweep-off | cmt-sweep-off | ปิด sweep |
ขณะ sweep firmware จะ tune RX ทีละจุด อ่าน pll.CHK_RSSI_MV() แล้วส่งข้อมูลหนึ่งบรรทัดรูปแบบ SWDATA:v1,v2,... จากนั้นกลับไปยังความถี่กลาง. Sweep มีคอมเมนต์ระบุว่า bypass Tier check และเป็น RX-only จึงควรใช้ด้วยความระมัดระวัง.
7. Morse / CW และ Roger Beep
| คำสั่ง | ตัวอย่าง | รายละเอียด |
|---|---|---|
| cmt-morse{ข้อความ} | cmt-morse{HELLO} | ส่งข้อความ CW ด้วย pll.sendCWString(); ความยาว 1–50 ตัวอักษร |
| cmt-cwspeed<wpm> | cmt-cwspeed20 | ตั้งความเร็ว CW 5–40 WPM |
| cmt-cwfreq<hz> | cmt-cwfreq1200 | ตั้งความถี่เสียง CW 300–2000 Hz |
| cmt-rgrdebug | cmt-rgrdebug | แสดง Roger profiles |
| cmt-rgrtest1 / cmt-rgrtest2 | cmt-rgrtest1 | ทดสอบ Roger profile 0/1 ตามลำดับ (ในโค้ดคำสั่งใช้เลข 1 = profile index 0 และเลข 2 = index 1) |
| cmt-rgrspeed<wpm> | cmt-rgrspeed25 | ตั้งความเร็ว Roger Morse 5–50 WPM |
| cmt-rgr1on / cmt-rgr1off | cmt-rgr1on | เปิด/ปิด Roger profile 1; profile 2 ใช้ cmt-rgr2on/off |
| cmt-rgr1{mode,freq,dur,pattern} | cmt-rgr1{2,1800,0,-} | ตั้ง profile 1; profile 2 ใช้ cmt-rgr2{...}. mode 0=OFF, 1=SINGLE_TONE, 2=MORSE_PATTERN |
ค่าเริ่มต้นจากโค้ด: profile 0 = mode 2, 1800 Hz, pattern -; profile 1 = mode 2, 1800 Hz, pattern --; Roger เปิดใช้งานและความเร็ว 25 WPM. Roger profile 0 เล่นตอนเริ่ม TX และ profile 1 เล่นตอนจบ TX.
8. ระบบ, สิทธิ์ และการตรวจสอบ
| คำสั่ง | ตัวอย่าง | รายละเอียด |
|---|---|---|
| cmt- หรือ cmt | cmt- | ทดสอบ parser; ตอบ OK |
| cmt-help | cmt-help | แสดงเมนูคำสั่งใน Serial |
| cmt-status | cmt-status | แสดง Tier, Service, ช่วง VHF/CB/UHF, XTAL offset และ CH/RX/TX ปัจจุบัน |
| cmt-version | cmt-version | แสดงเวอร์ชัน Smart firmware; ค่าที่ define คือ V1.0.4-SMART |
| cmt-id หรือ cmt-get-id | cmt-id | แสดง Serial Number รูปแบบ SN:PLL-<MAC-derived-ID> |
| cmt-check | cmt-check | อ่าน I²C register 0x00 เพื่อตรวจการสื่อสาร; ผ่านจะแสดง SYSTEM CHECK: OK |
| cmt-reg<addr> | cmt-reg00 | อ่าน register I²C โดย address เป็นเลขฐานสิบหก เช่น 00, 1A |
| cmt-reset | cmt-reset | รอ 1 วินาทีแล้ว restart ESP32 |
| cmt-model<tier> | cmt-model4 | ตั้ง Product Tier และบันทึก NVS; 0=ล็อก, 1=VHF, 2=CB, 3=UHF, 4=ALL, 9=GOV; ต้อง restart เพื่อให้ระบบเริ่มต้นใหม่ครบ |
| cmt-setlimits<6 ค่า> | cmt-setlimits144000000,146000000,245000000,246000000,430000000,450000000 | ตั้งช่วง VHF start/end, CB start/end, UHF start/end และบันทึกใน security NVS |
| cmt-service0 | cmt-service0 | ปิด Service Mode |
| cmt-service1-<token> | cmt-service1-SVC-XXXXXXXX | เปิด Service Mode เมื่อ token ตรงกับ token ที่คำนวณจาก Serial Number ของเครื่อง; Service Mode อนุญาต 10 MHz–1 GHz |
| cmt-activate-<token> | cmt-activate-<activation-token> | เปิดใช้งาน module ด้วย activation token ที่ฝังใน firmware; เมื่อสำเร็จจะตั้ง Tier 4 หากเดิมล็อก แล้ว restart |
9. ลำดับใช้งานแนะนำ
- เปิด Serial Monitor ที่
115200. - ตรวจอุปกรณ์ด้วย
cmt-check,cmt-id,cmt-versionและcmt-status. - ตั้ง RX/TX เช่น
cmt-frx145500000และcmt-ftx145500000. - ตั้ง CTCSS ด้วย
cmt-rxctcss12และcmt-txctcss12. - เข้า RX ด้วย
cmt-rx; ทดสอบ TX ด้วยcmt-txเมื่อระบบ/เสาอากาศพร้อม. - ถ้าต้องการจำค่า ให้ใช้
cmt-save.
cmt-check cmt-status cmt-frx145500000 cmt-ftx145500000 cmt-rxctcss12 cmt-txctcss12 cmt-rx cmt-save
10. API ของไลบรารีอ้างอิงที่พบในโครงการ
ส่วนนี้ไม่ใช่คำสั่ง Serial โดยตรง แต่เป็นฟังก์ชัน C++ ของ CMT_ESP32_PLL_V1 ที่สเก็ตช์/ตัวอย่างอ้างอิงสามารถเรียกใช้ได้:
Frequencybegin(), PLL_Initial(), TX(freq), RX(freq), SET_TX_FREQ(freq), SET_RX_FREQ(freq), setTXDIF(), setRXDIF(), autoCalibrateTX(), autoCalibrateRX()
CTCSSTX_CTCSS(), RX_CTCSS(), setupCTCSS(), disableCTCSS(), checkCTCSSDetected(), readDetectedCTCSS(), CHK_CTCSS()
Audio/RSSIsetVolume(), setSquelch(), CHK_RSSI(), CHK_RSSI_MV(), getRawRSSI(), getStatusRSSI(), s_meter_out()
DTMFsendDTMFTone(), sendDTMFSequence(), sendDTMFChar(), sendDTMFString(), setDTMFDuration(), setDTMFGap(), initDTMFDecoder(), availableDTMF()
FSK/AX.25initFSK(), sendFSKBit(), sendFSKByte(), sendFSKString(), sendFSKData(), sendAX25Packet(), sendBell202Tones(), sendFSKTestPattern(), setFSKBaudRate(), setFSKFrequencies()
CW/RogerinitCWTone(), sendCWChar(), sendCWString(), setCWSpeed(), setCWFrequency(), setRogerProfile(), setRogerMode(), playRoger(), enableRoger(), setRgrSpeed()
ref เป็นตัวอย่าง API ของไลบรารี ไม่พบ parser คำสั่ง Serial สำหรับฟังก์ชันเหล่านี้ใน V2X หลัก ดังนั้นไม่ควรสรุปว่า cmt-... รองรับการส่ง DTMF/FSK โดยตรงใน firmware รุ่นนี้.11. จุดที่ควรทราบจากซอร์สโค้ด
cmt-ftxและcmt-frxตรวจช่วง 10 MHz–1 GHz แต่การอนุญาตจริงยังขึ้นกับ Tier/limits และ Service Mode.cmt-tuneเป็น XTAL calibration offset ส่วนcmt-difเป็น TX/repeater offset; เป็นคนละกลไก.- ค่าความถี่ที่แสดงใน log เป็นค่า base ที่ผู้ใช้ตั้ง ส่วน PLL ได้รับค่า base + XTAL offset.
- เอกสาร help ในโค้ดระบุ Roger test แบบหนึ่ง แต่ parser ที่ทำงานจริงรับ
cmt-rgrtest1และcmt-rgrtest2; ให้ยึด parser จริงตามเอกสารนี้. - Wi‑Fi ถูกปิดใน V2X หลักด้วย
ENABLE_WIFI false; โค้ด Web API ที่/และ/api/statusจะใช้งานได้เมื่อเปิด Wi‑Fi ในซอร์สเท่านั้น. - คำสั่งที่ไม่รู้จักจะตอบ
ERROR: Unknown commandและแนะนำให้ใช้cmt-help.
12. แหล่งอ้างอิงในโครงการ
| ไฟล์ | ส่วนสำคัญ |
|---|---|
CMT_PLL_MODULE_SMART_V2X.ino | ตัวแปรระบบ, parser คำสั่ง, PTT, RSSI, Sweep, NVS และลำดับ TX/RX |
WiFi_Manager_CMT.h | Tier, band limits, Service Mode, XTAL offset, NVS security และ Web API |
CMT_Smart_Hardware.h | เวอร์ชัน, token activation, pin mapping และ Serial Number |
ref/CMT-ESP32-PLL_V1/src/CMT-ESP32-PLL_V1.h | รายการ API ของ PLL, CTCSS, RSSI, DTMF, FSK, CW และ Roger Beep |
เอกสารนี้เป็นการถอดพฤติกรรมจากซอร์สโค้ด ไม่ใช่การยืนยันข้อกำหนดทางวิทยุหรือข้อกำหนดใบอนุญาตใช้งานคลื่นความถี่ ผู้ใช้งานต้องตรวจสอบกฎหมายและการต่อโหลด/เสาอากาศให้เหมาะสมก่อน TX.