CNXSoft: บทความนี้เป็นการโพสต์จาก Eicut ที่มาแบ่งปันวิธีเริ่มต้นใช้งานบอร์ดพัฒนา Quectel EC200U 4G TLE Cat 1 IoT โดยใช้ QNavigator และ QuecOpen SDK
ในโปรเจกต์ IoT และโดยรวมในระบบสมองกลฝังตัว (Embedded Systems) — เราได้เห็นความต้องการที่เพิ่มขึ้นของอัตราการแลกเปลี่ยนข้อมูลที่สูงขึ้น ควบคู่ไปกับการรองรับย่านความถี่ที่กว้างขึ้น ความก้าวหน้าเหล่านี้ถือเป็นสิ่งสำคัญต่อการเพิ่มความน่าเชื่อถือของการเชื่อมต่อสื่อสารระหว่างอุปกรณ์กับเครือข่าย ดังนั้นโมดูล 4G ที่สามารถถอยกลับ (fallback) ไปยังเครือข่าย 2G และ 4G ได้ จึงได้กลายเป็นหนึ่งในโซลูชันหลักของวงการ แต่คำถามสำคัญยังคงอยู่ก็คือ: เราควรเลือกใช้โมดูลใดเพื่อใช้ประโยชน์จากเทคโนโลยีนี้ และโมดูลเหล่านั้นมีคุณสมบัติอะไรบ้าง?
โมดูล Quectel EC200U LTE Cat 1 สำหรับ IoT
ในส่วนนี้ของ EC200U tutorial เราจะมาดูรายละเอียด — โมดูล EC200U ของ Quectel ถ้าคุณเคยทำงานกับโมดูล LTE Cat 1 มาก่อน น่าจะเคยพบเจอโมดูลตัวนี้ (หรืออาจจะเคยนำไปใช้พัฒนาผลิตภัณฑ์แล้วด้วยซ้ำ) แต่ถ้าคุณยังใหม่กับ EC200U มีการแนะนำสั้น ๆ
EC200U เป็นซีรีส์โมดูล LTE Cat 1 ที่ถูกออกแบบมาให้เหมาะสมกับงาน M2M (Machine-to-Machine) และ IoT รองรับการถอยกลับไปใช้เครือข่าย 2G เมื่อเครือข่าย 4G ใช้งานไม่ได้ เพื่อให้มั่นใจได้ว่าการเชื่อมต่อยังคงเสถียร โดยสามารถทำความเร็วได้สูงสุด 10 Mbps (ดาวน์โหลด) และ 5 Mbps (อัปโหลด) ผ่าน LTE-FDD (Frequency-Division Duplexing) และทำความเร็วได้สูงสุด 8.96 Mbps (ดาวน์โหลด) และ 3.1 Mbps (อัปโหลด) ผ่าน LTE-TDD (Time-Division Duplexing)
คุณสมบัติเด่นและรุ่นย่อย
- ฟอร์มแฟกเตอร์แบบ Mini PCIe เพื่อรองรับการใช้งานร่วมกับอุตสาหกรรมได้อย่างกว้างขวาง
- มีรุ่นย่อย 3 แบบตามภูมิภาค:
- EC200U-CN (จีน/อินเดีย)
- EC200U-EU (ยุโรป, ตะวันออกกลาง, แอฟริกา, ออสเตรเลีย, นิวซีแลนด์)
- EC200U-AU (ลาตินอเมริกา)
แต่ละรุ่นย่อยรองรับย่านความถี่ที่ตรงกับตลาดเป้าหมาย โดยโมดูลนี้ยังรองรับโปรโตคอลและอินเทอร์เฟซที่หลากหลาย พร้อมไดรเวอร์ USB สำหรับ Windows 8.1/10/11, Linux และ Android ทำให้เหมาะสำหรับการใช้งานในระบบ POS, อุปกรณ์ POC และโซลูชัน IoT อื่น ๆ
นอกเหนือจากการเชื่อมต่อพื้นฐานแล้ว EC200U ยังมีความสามารถเพิ่มเติม ได้แก่:
- รองรับการครอบคลุม LTE & GSM/GPRS ทั่วโลก
- อินเทอร์เฟซสำหรับการพัฒนาแอปพลิเคชันที่หลากหลาย
- รองรับการใช้งาน เสียงแบบแอนะล็อก
- มีระบบ GNSS ในตัว (รองรับ GPS/GLONASS/BeiDou/Galileo)
- ฟังก์ชัน Wi-Fi scanning, Bluetooth และ FOTA (Firmware Over-the-Air updates)
สามเวอร์ชัน: AB vs AA vs AC
EC200U มีด้วยกัน 3 เวอร์ชันย่อย (AB, AA และ AC) ซึ่งเราจะมาเปรียบเทียบรายละเอียดในภายหลัง จุดเด่นคือ ทุกรุ่นใช้ฟุตพรินต์ (footprint) และเลเยอร์ซอฟต์แวร์เหมือนกันทุกประการ ทำให้สามารถสลับใช้งานระหว่างกันในโปรเจกต์ได้โดยไม่เกิดปัญหาความเข้ากันได้
คุณสมบัติ | EC200U-EU AB | EC200U-EU AA | EC200U-EU AC |
---|---|---|---|
LTE Category | Cat 1 | Cat 1 | Cat 1 |
ความเร็วดาวน์โหลดสูงสุด | 10 Mbps | 10 Mbps | 10 Mbps |
ความเร็วอัปโหลดสูงสุด | 5 Mbps | 5 Mbps | 5 Mbps |
รองรับ GNSS | ไม่รองรับ | รองรับ | ไม่รองรับ |
BLE | รองรับ | รองรับ | ไม่รองรับ |
ฟอร์มแฟกเตอร์ | LCC Package | LCC Package | LCC Package |
แพลตฟอร์มการพัฒนา QuecOpen
หนึ่งในคุณสมบัติเด่นของโมดูลนี้ และเป็นหัวใจของซีรีส์บทเรียนนี้ก็คือ QuecOpen ซึ่งมีการทำงานคล้ายกับ OpenCPU (ที่หลายคนอาจคุ้นเคยจากโมดูล 2G ของ Quectel เช่น MC60 และ M66)
ด้วย QuecOpen นักพัฒนาสามารถเขียนเฟิร์มแวร์ของอุปกรณ์ให้รันโดยตรงบนโมดูลได้ โดยไม่จำเป็นต้องใช้ไมโครคอนโทรลเลอร์ภายนอกในหลาย ๆ กรณี วิธีนี้ไม่เพียงแต่ช่วยให้การออกแบบง่ายขึ้น แต่ยังช่วยลดต้นทุนได้อีกด้วยคล้ายกับสิ่งที่เราเคยเห็นในโมดูล 2G ของ Quectel แต่คราวนี้ถูกยกระดับขึ้นมาเพื่อการใช้งานบนเครือข่าย LTE สามารถดูรายละเอียดเต็มเกี่ยวกับสเปคฮาร์ดแวร์และซอฟต์แวร์ของ EC200U สามารถดูได้จาก datasheet
เริ่มต้นใช้งานบอร์ดพัฒนา Quectel EC200U
คุณจะต้องมีแพลตฟอร์มฮาร์ดแวร์ที่อ้างอิงจากโมดูล Quectel EC200U โดยบทเรียนนี้ใช้บอร์ด EC200U Evaluation Board ของ Eicut (ภาพด้านล่าง) แต่คุณก็สามารถใช้ QuecPython EC200U evaluation board อย่างเป็นทางการที่มีหลายบริษัทผลิตซ้ำออกมาได้เช่นกัน ตัวอย่างเช่น C4-P01 board ของ Waveshare
โปรดทราบว่า โมดูล Quectel EC200U mini PCIe จะไม่สามารถใช้ได้ในกรณีนี้เนื่องจากอินเทอร์เฟซขาดอุปกรณ์ต่อพ่วงหลายอย่าง และปุ่ม USB BOOT ไม่ได้ถูกนำออกมาให้ใช้งาน ทำให้ไม่สามารถแฟลชระบบปฏิบัติการ (OS) ได้

EC200U Evaluation Board เป็นแพลตฟอร์มพัฒนาขนาดกะทัดรัดสำหรับโมดูล Quectel EC200U series LTE Cat-1 เหมาะสำหรับการสร้างต้นแบบ (prototyping) ด้าน IoT
อุปกรณ์ต่อพ่วง (peripherals) หลักสำหรับการทดสอบ:
- ช่องใส่ SIM card และ SD card
- ขั้วต่อ IPEX จำนวน 3 จุด สำหรับเสาสัญญาณ 4G และ GNSS, เสาเซรามิก WiFi/Bluetooth
- รองรับโปรโตคอลการสื่อสารหลากหลาย
- pin header 14 พิน พร้อมสัญญาณ UART, I2C, ADC, 5V, GND
การสื่อสารกับโมดูล
นอกจากการใช้งาน QuecOpen (ที่ได้กล่าวถึงไปก่อนหน้านี้) โมดูล EC200U ยังรองรับการสื่อสารผ่าน AT commands ได้ด้วย:
- พอร์ต Serial port (อินเทอร์เฟซหลักสำหรับการสื่อสาร)
- พอร์ต USB
การตั้งค่าเริ่มต้นด้วย QNavigator
สำหรับการทดสอบพื้นฐานและการส่งคำสั่ง AT commands เราจะใช้ QNavigator software ของ Quectel โดย QNavigator ใช้สำหรับทดสอบโมดูลของ Quectel เท่านั้น การใช้เครื่องมือนี้จะช่วยให้คุณคุ้นเคยกับการทำงานของฟังก์ชันหลัก ๆ เช่น การโทร (Call), ข้อความ SMS, TCP/UDP, PPP และ QuceLocator ได้ แม้ว่าคุณจะไม่รู้จักคำสั่ง AT เลยก็ตาม
- ผู้ใช้ Windows: เชื่อมต่อบอร์ดผ่าน USB และเปิดใช้งาน QNavigator ได้ทันที
- ผู้ใช้ Linux: ต้องใช้ Wine เพื่อรันซอฟต์แวร์ที่ทำงานบน Windows
การติดตั้งไดรเวอร์ (เฉพาะ Windows)
เชื่อมต่อโมดูลเข้ากับคอมพิวเตอร์ ถ้าระบบไม่สามารถตรวจจับโมดูลได้อัตโนมัติ:
- แตกไฟล์ไดรเวอร์ Windows ของ Quectel (สามารถติดต่อฝ่ายสนับสนุนของ Quectel เพื่อขอรับไดรเวอร์)
- รันไฟล์ Setup และทำตามขั้นตอนการติดตั้งจนเสร็จสิ้น
การเชื่อมต่อกับโมดูล
- เปิด QNavigator แล้วเลือก พอร์ต COM ที่ถูกต้อง (จะแสดงในหน้าต่างซอฟต์แวร์)
- คลิก Connect — เมื่อเชื่อมต่อสำเร็จ ซึ่งจะเห็นการแลกเปลี่ยนข้อมูลแบบเรียลไทม์ระหว่างซอฟต์แวร์กับโมดูล
เมื่อโมดูลของคุณทำงานได้ถูกต้อง คุณจะเห็นผลลัพธ์ที่คล้ายกับภาพหน้าจอด้านบน โดยมีคำสั่ง AT commands แสดงอยู่ใน serial console หลังจากเสร็จสิ้นการทดสอบพื้นฐานเหล่านี้แล้ว ก็สามารถดำเนินการต่อไปยังขั้นตอนถัดไปของบทเรียนได้เลย
การทดสอบฟีเจอร์หลัก
- การส่ง SMS:
- การโทรออก:
- คำสั่ง AT แบบกำหนดเอง:
ขั้นตอนถัดไป
หลังจากทดสอบโมดูลเรียบร้อยแล้ว ตอนนี้เราพร้อมที่จะเจาะลึกไปที่:
- SDK ของ EC200U
- การพัฒนาด้วย QuecOpen
EC200U Tutorial Part 2 – การตั้งค่า SDK และโปรเจกต์ Hello World
ในตอนก่อนหน้านี้ เราได้พูดถึงพื้นฐานของโมดูล EC200U และวิธีการสื่อสารไปแล้ว คราวนี้เราจะเจาะลึกการใช้งาน SDK ของโมดูล และลองทำโปรเจกต์ง่าย ๆ อย่าง “Hello World” เพื่อช่วยให้คุณคุ้นเคยกับการเขียนโปรแกรมลงบนโมดูลโดยตรง
ข่าวดีคือ Quectel ได้เตรียมทุกอย่างไว้ให้เกือบหมดแล้ว! SDK มาพร้อมกับโค้ดตัวอย่างที่พร้อมใช้งานสำหรับฟีเจอร์หลัก ๆ ของโมดูล เช่น:
ฟังก์ชันการโทรและส่ง SMS
- โปรโตคอลการสื่อสาร (รวมถึง MQTT)
- การอัปเดตเฟิร์มแวร์ระยะไกล
- การจัดการพลังงาน
- และอื่น ๆ อีกมากมาย
หมายเหตุ: บทเรียนนี้ใช้บน Debian Linux แต่ผู้ใช้ Windows ก็สามารถทำตามได้เช่นกันโดยเราจะระบุจุดที่แตกต่างให้ระหว่างทาง
การตั้งค่าสภาพแวดล้อมสำหรับการพัฒนา
Tools You’ll Needเครื่องมือที่คุณต้องใช้:
- SDK – สำหรับเขียนและคอมไพล์โค้ด
- QLoader (Linux) หรือ QFlash (Windows) – สำหรับอัปโหลดโปรแกรมลงบนโมดูล
หมายเหตุ: หากต้องการรับ SDK, QLoader และ QFlash, กรุณาติดต่อฝ่ายสนับสนุนของ Quectel.
คู่มือการตั้งค่าใน Linux
- ดาวน์โหลดและแตกไฟล์ SDK
- เตรียมสภาพแวดล้อมสำหรับการคอมไพล์ (build environment):
12345# Make the build script executablechmod 777 build_all.sh# Edit the script (we're changing the shebang line)nano ./build_all.sh
ตรวจสอบให้แน่ใจว่า บรรทัดแรกแสดงเป็น: #!/bin/bash - คอมไพล์โปรเจกต์ (Build the project)
1./build_all.sh new EC200UEU_AA V01
ผู้ใช้ Windows: คุณสามารถข้ามขั้นตอนที่เฉพาะสำหรับ Linux ด้านบนไปได้ โดยจะอธิบายการตั้งค่าสำหรับ Windows ในส่วนถัดไป
แฟลชโปรแกรมลงบนโมดูล EC200U
สำหรับผู้ใช้ Linux
- ตรวจสอบผลลัพธ์การคอมไพล์
หลังจากคอมไพล์สำเร็จ ให้ตรวจสอบโฟลเดอร์ /EC200UEU_AA_V01 คุณควรจะเห็นไฟล์ต่าง ๆ เช่น:
123456eicut@eicut:~/LTE01R03A04_C_SDK_U/target/EC200UEU_AA_V01$ ls8915DM_cat1_open.elf8915DM_cat1_open_V01_merge.pac <-- This is your flash file8915DM_cat1_open.mapapp/prepack/ - เตรียม QDloader
- ดาวน์โหลดและแตกไฟล์ QDloader
- คอมไพล์โดยรันคำสั่ง make ในโฟลเดอร์ของมัน
- ไฟล์ loader ที่คอมไพล์เสร็จแล้วจะอยู่ในโฟลเดอร์ out/
- แฟลชโมดูล
คัดลอกไฟล์ .pac ไปยังโฟลเดอร์ out/ ของ QDloader รันคำสั่งแฟลช:
1sudo ./QDloader -s /dev/ttyUSB0 -f 8915DM_cat1_open_V01_merge.pac -g EC200U
หมายเหตุ: ปรับค่า /dev/ttyUSB0 ถ้าโมดูลของคุณใช้พอร์ตอื่น
สำหรับผู้ใช้ Windows
- คอมไพล์โปรเจกต์
เปิด Command Prompt ในโหมด Administrator, ไปยังโฟลเดอร์ SDK ของคุณ แล้วรันคำสั่ง:
1build_all.bat new EC200UEU_AA V01
- แฟลชโปรแกรมด้วย QFlash
- เปิดซอฟต์แวร์ QFlash
- โหลดไฟล์ .pac ของคุณ (สร้างขึ้นในโฟลเดอร์ target เช่น 8915DM_cat1_open_V01_merge.pac)
- คลิก “Start” เพื่อเริ่มโปรแกรมลงบนโมดูล
การแก้ไขโค้ดของโมดูล
ตอนนี้เมื่อเราได้ตรวจสอบแล้วว่าการแฟลชโปรแกรมทำงานได้ถูกต้อง เรามาลองแก้ไขโค้ดครั้งแรกกัน:
- ไปที่ไฟล์ ql_int.c:
12cd LTE01R02A05_C_SDK_U/components/ql-application/init/ql_int.ccode . <- To open VScode
ค้นหาและเอาเครื่องหมายคอมเมนต์ออก:
1ql_ledcfg_app_init(); - ไปยังการตั้งค่า LED configuration (ใน VSCode: กด F12 หรือคลิกขวาแล้วเลือก “Go to Definition”) เพื่อเปิดไฟล์ led_cfg_demo.c
โค้ดตัวอย่าง LED (และโค้ดอื่น ๆ เกือบทั้งหมด) ถูกจัดเป็นสามส่วนหลัก:
- การสร้างงานของ OS (OS Task Creation) – อยู่ด้านล่างของไฟล์
- โค้ดหลัก (Main code)
- ส่วนบันทึก (Log Section)
ส่วนแรก เป็นการเริ่มต้นงานของระบบปฏิบัติการ (OS task) :
1 2 3 4 5 6 7 8 9 10 |
void ql_ledcfg_app_init(void) { QlOSStatus err = QL_OSI_SUCCESS; err = ql_rtos_task_create(&ledcfg_task, 1024, APP_PRIORITY_NORMAL, "ql_ledcfgdemo", ql_ledcfg_demo_thread, NULL, 1); if( err != QL_OSI_SUCCESS ) { QL_LEDCFGDEMO_LOG("led config demo task created failed"); } } |
ส่วนถัดไป คือฟังก์ชันที่ OS จะทำงาน:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
static void ql_ledcfg_demo_thread(void *param) { QL_LEDCFGDEMO_LOG("led config demo thread enter, param 0x%x", param); /*** LPG open ***/ ql_pwm_open(PWM_LPG); QL_LEDCFGDEMO_LOG("led config start"); /* set NET_MODE */ ql_pin_set_func(QL_PIN_GPIO1, QL_PIN_GPIO1_FUNC_ZSP_CTS); //Pin126 set zsp_uart_cts, two pins can't set the same GPIO ql_pin_set_func(QL_PIN_NET_MODE, QL_PIN_NET_MODE_FUNC_GPIO); ql_gpio_init(QL_GPIO_NET_MODE, GPIO_OUTPUT, PULL_NONE, LVL_LOW); ql_event_t event; ql_ledcfg_callback_register(_ledcfg_demo_cb); while(1) { if( ql_event_try_wait(&event) != 0 ) { continue; } if ( event.id == QUEC_LEDCFG_EVENT_IND ) { switch( event.param1 ) { case IND_SIM_NOT_INSERT: case IND_SIM_INITIALIZING: case IND_SIM_PIN_LOCK: case IND_SIM_CPIN_READY: case IND_SEARCHING: case IND_CAMP_ON_CELL: case IND_REGISTERING: QL_LEDCFGDEMO_LOG("led config slow twinkle [%d]", event.param1); ql_pwm_lpg_enable(QL_LED_TWINKLE_SLOW_PERIOD, QL_LED_TWINKLE_SLOW_ONTIME); break case IND_STANDBY: case IND_PDP_ACTIVING: case IND_PDP_ACTIVATED: case IND_SOCKET_SET_UP: case IND_PDP_DEACTIVING: QL_LEDCFGDEMO_LOG("led config fast twinkle [%d]", event.param1); ql_pwm_lpg_enable(QL_LED_TWINKLE_FAST_PERIOD, QL_LED_TWINKLE_FAST_ONTIME); break case IND_DATA_TRANSMIT: QL_LEDCFGDEMO_LOG("led config speed twinkle [%d]", event.param1); ql_pwm_lpg_enable(QL_LED_TWINKLE_SPEED_PERIOD, QL_LED_TWINKLE_SPEED_ONTIME); break case IND_DIALING: QL_LEDCFGDEMO_LOG("led config keep on [%d]", event.param1); ql_pwm_lpg_enable(QL_LED_TWINKLE_ON_PERIOD, QL_LED_TWINKLE_ON_ONTIME); break default: QL_LEDCFGDEMO_LOG("led config error!"); break } if ( event.param2 == IND_NET_TYPE_4G ) { QL_LEDCFGDEMO_LOG("led config network is 4G"); ql_gpio_set_level(QL_GPIO_NET_MODE, LVL_HIGH); } otherwise { QL_LEDCFGDEMO_LOG("led config network is not 4G"); ql_gpio_set_level(QL_GPIO_NET_MODE, LVL_LOW); } } } ql_rtos_task_delete(NULL); } |
ส่วนสุดท้ายของโค้ดคือ Log code, SDK มาพร้อมกับ framework สำหรับการบันทึก (logging framework) ที่มีประโยชน์ แมโครเหล่านี้ใช้ควบคุมการแสดงผลข้อความดีบัก (debug output)
1 2 3 |
#define QL_LEDCFGDEMO_LOG_LEVEL QL_LOG_LEVEL_INFO // Set log verbosity #define QL_LEDCFGDEMO_LOG(msg, ...) QL_LOG(QL_LEDCFGDEMO_LOG_LEVEL, "ql_LEDCFGDEMO", msg, ##__VA_ARGS__) #define QL_LEDCFGDEMO_LOG_PUSH(msg, ...) QL_LOG_PUSH("ql_LEDCFGDEMO", msg, ##__VA_ARGS__) |
ปรับแต่งรูปแบบการกระพริบของ LED (LED Blink)
มาลองแก้ไขพฤติกรรมของ NET Status LED กัน วิธีสร้างวงจรกระพริบ 1 วินาที ทำได้โดยแก้ไขฟังก์ชัน main ดังนี้:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
static void ql_ledcfg_demo_thread(void *param) { // Configure NET_MODE pin as GPIO ql_pin_set_func(QL_PIN_NET_MODE, QL_PIN_NET_MODE_FUNC_GPIO); ql_gpio_init(QL_GPIO_NET_MODE, GPIO_OUTPUT, PULL_NONE, LVL_LOW); // Main blink loop while(1) { ql_gpio_set_level(QL_GPIO_NET_MODE, 1); // LED ON ql_rtos_task_sleep_s(1); // 1-second delay ql_gpio_set_level(QL_GPIO_NET_MODE, 0); // LED OFF ql_rtos_task_sleep_s(1); // 1-second delay } } |
การคอมไพล์และแฟลชโค้ดที่แก้ไขแล้ว
- คอมไพล์โค้ด:
ใน Linux:
1./build_all.sh new EC200UEU_AA V01
ใน Windows:
1build_all.bat new EC200UEU_AA V01 - แฟลชโมดูล:
ใน Linux:
1sudo ./QDloader -s /dev/ttyUSB0 -f target/EC200UEU_AA_V01/8915DM_cat1_open_V01_merge.pac -g EC200U
ใน Windows: ใช้ QFlash เหมือนที่ทำไปแล้ว - ตรวจสอบความสำเร็จ: LED NET Status ควรกระพริบด้วยช่วงเวลา 1 วินาที
ขั้นตอนถัดไป
- ลองปรับระยะเวลา sleep เพื่อสร้างรูปแบบการกระพริบที่แตกต่าง
- ทดลองใช้งาน GPIO pins อื่น ๆ
- เพิ่ม log messages เพื่อตรวจสอบการเปลี่ยนแปลงสถานะของ LED
แปลจากบทความภาษาอังกฤษ : Getting Started with Quectel EC200U 4G LTE Cat 1 IoT board using the QNavigator and the QuecOpen SDK

บรรณาธิการข่าวและบทความภาษาไทย CNX Software ได้มีความสนใจในด้านเทคโนโลยี โดยเฉพาะ Smart Home และ IoT