(ขอบคุณรูปภาพจาก https://www.semtech.com/)
LoRa เป็นเทคโนโลยีการมอดูเลชั่น หรือการเข้ารหัสสัญญาณทางไฟฟ้าในรูปแบบเฉพาะ การมอตแบบ LoRa เป็นลิขสิทธิ์เฉพาะของบริษัท Semtech ที่ผูกขาดลิขสิทธิ์การมอตแบบ LoRa และเป็นผู้เดียวที่ผลิตชิปไอซีสื่อสารไร้สายที่มีการมอตแบบ LoRa ได้ การใช้งาน LoRa สามารถใช้งานได้แบบเสรี คือหากมีฮาร์ดแวร์ ก็สามารถนำมาใช้ในการสื่อสารได้เลย โดยไม่จำเป็นต้องใช้บริการจากผู้ให้บริการต่าง ๆ
คำว่า “LoRa” ย่อมาจาก Long range มักถูกนำไปใช้เรียกอุปกรณ์ที่ใช้การมอตแบบ LoRa เนื่องจากอุปกรณ์กลุ่มนี้สามารถสื่อสารด้วยกันได้ โดยจะตั้งอยู่บนพื้นฐานของระยะห่างระหว่างตัวรับ และตัวส่ง อัตราขยายของเสาอากาศ กำลังส่ง และสัญญาณรบกวน สิ่งพื้นฐานเหล่านี้ล้วนเป็นตัวแปรที่ทำให้ระยะในการส่งข้อมูลมีมากขึ้นหรือลดลง รวมถึงความเร็วในการสื่อสาร และการตกหล่นของข้อมูล
โมดูลสื่อสารไร้สายกลุ่ม LoRa จะใช้งานชิปไอซีจากบริษัท Semtech เหมือนกันทั้งหมด การสื่อสารกับไมโครคอนโทรลเลอร์จะสามารถทำได้ผ่านบัส SPI การรับส่งข้อมูลระหว่างโมดูล LoRa จะสามารถทำได้ต่อเมื่อมีการเรียกใช้ฟังก์ชันเริ่มการส่งข้อมูลเท่านั้น และหลังจากการส่งข้อมูลแล้ว จะต้องเรียกฟังก์ชันจบการส่งข้อมูลเพื่อคืนทรัพยากรคลื่นความถี่ไปให้กับโมดูลสื่อสารไร้สายอื่น ๆ หากขณะนั้นไม่มีการเรียกใช้ฟังก์ชันเริ่มส่งข้อมูล ตัวโมดูลกลุ่ม LoRa จะทำงานในโหมดรอรับข้อมูล ผู้ใช้สามารถเรียกฟังก์ชันตรวจสอบข้อมูลเข้าใหม่ได้ตลอดเวลา แต่หากมีการส่งข้อมูลเข้ามา แล้วไม่มีการเรียกใช้ฟังก์ชันอ่านข้อมูล จะทำให้พื้นที่ที่จองไว้เต็ม แล้วอาจจะไม่สามารถรับข้อมูลใหม่เข้ามาได้ หรือข้อมูลเก่าที่เก็บไว้จะถูกลบออกไป ดังนั้นการใช้งานจึงควรมีการเรียกฟังก์ชันอ่านข้อมูลอยู่เสมอ และไม่มีควรใช้ฟังก์ชัน delay() นาน ๆ ที่อาจจะทำให้ไม่สามารถรับข้อมูลเข้ามาได้
ในปัจจุบัน (ขณะที่เขียนบทความนี้คือ 08/07/2560) การใช้งานอุปกรณ์สื่อสารไร้สาย สามารถใช้งานได้ในช่วงที่กำหนดไว้เท่านั้น สำหรับโมดูลกลุ่ม LoRa จะแบ่งความถี่ออกเป็น 2 ช่วง คือช่วง 433MHz และช่วง 868MHz หรือ 915MHz สำหรับประเทศไทยจะสามารถใช้งานความถี่ 433MHz ได้ โดยมีข้อกำหนดว่าจะต้องมีความแรงของกำลังส่งไม่เกิน 10mW จึงจะได้รับการยกเว้นการขอใบอนุญาต สำหรับโมดูล LoRa RA-02 ที่เราใช้ในการทดลองครั้งนี้ มีความแรงของกำลังส่งเกิน 10mW (เมื่อคำนวณด้วยเว็บไซต์แปลงหน่วย dBm เป็น W ที่กำหนด 17dBm ได้ 50mW) หากใช้เพื่อการทดลองชั่วคราว สามารถทำได้ แต่ควรคำนึงถึงผลกระทบที่อาจจะเกิดขึ้น เนื่องจากอุปกรณ์ประเภท RC เช่น รถบังคับ เครื่องบินบังคับ หรือกุญแจรถบางรุ่น ได้ใช้คลื่น 433MHz ในการสื่อสาร หากเปิดใช้งานอุปกรณ์กลุ่ม LoRa ที่เต็มกำลังส่ง อาจจะทำให้อุปกรณ์เหล่านั้นไม่สามารถใช้งานได้ตามปกติ
รูปที่ 1 ตารางสรุปความถี่ที่สามารถใช้งานได้โดยไม่ต้องขอใบอนุญาตจาก กสทช.
แม้โมดูลกลุ่ม LoRa จะมีความแรงของสัญญาณเกินกว่าที่กฎหมายกำหนด แต่ก็สามารถปรับลดกำลังส่งของสัญญาณลงมาได้ ทำให้ LoRa สามารถใช้งานได้อย่างถูกกฎหมาย และไม่ไปรบกวนสัญญาณของอุปกรณ์อื่น
สำหรับเอกสารข้อมูลเพิ่มเติมเกี่ยวกับข้อกฎหมายด้าน IoT ในประเทศไทย สามารถกดเข้าไปอ่านได้ที่ การปรับปรุงกฎระเบียบด้านการบริหารคลื่นความถี่และทรัพยากรโทรคมนาคมเพื่อรองรับการพัฒนาของInternet of Things ในประเทศไทย
ข้อมูลล่าสุด กสทช. อนุญาตให้ใช้งาน LoRa ย่านคลื่นความถี่ 920-925 MHz กำลังส่งสูงสุดไม่เกิน 4W อ่านรายละเอียดเพิ่มเติมได้ที่ : มาตรฐานทางเทคนิคของเครื่องโทรคมนาคมและอุปกรณ์ สําหรับเครื่องวิทยุคมนาคมที่ไม่ใช่ประเภท Radio Frequency Identification: RFID ซึ่งใช้คลื่นความถี่ย่าน ๙๒๐ - ๙๒๕ เมกะเฮิรตซ์
โมดูลสื่อสารไร้สาย RA-0x ผลิตและออกแบบโดย AI Thinker มีชื่อเสียงมาจากการผลิตโมดูล ESP8266 สำหรับโมดูลสื่อสารไร้สายกลุ่ม LoRa ที่ AI Thinker ออกแบบและผลิต ปัจจุบันมีด้วยกัน 2 รุ่นดังนี้
รูปที่ 2 หน้าตาของโมดูล LoRa RA-01
เป็นโมดูลสื่อสารไร้สายกลุ่ม LoRa ใช้ชิปไอซีเบอร์ SX1278 สามารถกำหนดความแรงการปล่อยสัญญาณได้สูงสุด 17dBm มีทั้งหมด 16 ขา ระยะห่างแต่ละขา 2 มิลิเมตร ความกว้าง 16 มิลิเมตร เสาอากาศแบบขดลวดจะแถมมาด้วยกับตัวโมดูล ด้านแรงดันไฟฟ้าที่สามารถใช้งานได้คือ 3.3V
รูปที่ 3 Pinout ของโมดูล LoRa RA-01
รูปที่ 4 โมดูล LoRa RA-02
สำหรับรุ่น RA-02 จะมีคุณสมบัติเหมือนกันกับรุ่น RA-01 และมีขาต่อใช้งานที่คล้ายกัน เพียงแต่จะไม่มีเสาอากาศแบบขดลวดมาให้ และการต่อเสาอากาศจะสามารถทำได้ผ่านการใช้คอนเนคเตอร์ IPX แต่เนื่องจากเสาอากาศส่วนใหญ่ใช้คอนเนคเตอร์แบบ SMA จึงจำเป็นต้องใช้สายแปลง IPX เป็น SMA ด้วย
รูปที่ 5 สายแปลงคอนเนคเตอร์แบบ IPX เป็น SMA
สำหรับขาต่อใช้งานให้สังเกตว่าขา 1 โดยปกติแล้วรุ่น RA-01 จะเป็นขาสำหรับต่อเสาอากาศ แต่รุ่น RA-02 ขานี้จะเป็นขา GND แทน
รูปที่ 6 Pinout ของโมดูล LoRa RA-02
โมดูลกลุ่ม LoRa จะมีขาที่ใช้ต่อใช้งานจริง ๆ จำนวน 8 ขา แบ่งเป็นขาบัส SPI ที่จำเป็นต้องต่อเข้ากับไมโครคอนโทรลเลอร์ด้วยขาที่กำหนดเท่านั้น และอีก 3 ขา คือ NSS NRESET และ DIO0 สามารถต่อเข้ากับขาใดก็ได้ และต้องเรียกใช้ฟังก์ชันเพื่อกำหนดขาที่ต่อให้ถูกต้องด้วย
สำหรับวงจรที่ใช้ต่อกับ Arduino Uno R3 / Arduino Pro Mini / Arduino Nano มีดังนี้
สำหรับโมดูล LoRa RA-0x นั้น เนื่องจากเป็นอุปกรณ์แบบ SMD จึงไม่สามารถนำมาต่อใช้งานได้ง่ายมากนัก และเนื่องจากตัว LoRa RA-0x มีระยะห่างของแต่ละระยะขาเท่ากับโมดูล ESP8266 07 08 12 12E 12F 12S จึงสามารถใช้บอร์ดแปลงของ ESP8266 มาใช้กับ LoRa RA-0x ได้เลย แต่จำเป็นต้องถอดตัวต้านทานทั้ง 2 ตัวออกด้วย
รูปที่ 7 Arduino Shield LoRa ที่ผู้เขียนทำขึ้นมา
จากรูปที่ 7 จะเห็นว่า ได้มีการใช้บอร์ดแปลงของ ESP8266 แปลงให้เป็นระยะห่าง 0.1 นิ้วก่อน เพื่อให้สามารถเสียบลงแผ่นปริ้นอเนกประสงค์ทั่ว ๆ ไปได้ จากนั้นจึงนำไปบัดกรีเข้ากับแผ่นปริ้นอเนกประสงค์สำหรับ Arduino Uno / Mega ส่วนด้านล่างจะใช้สายวายแลปในการเชื่อมต่อวงจรให้ถึงกัน
รูปที่ 8 Arduino Shield LoRa ด้านล่าง
การต่อวงจรระหว่างโมดูลกลุ่ม LoRa กับ ESP8266 จะคล้ายกับ Arduino เพียงแต่จะมีความยุ่งยากเรื่องขาต่อใช้งาน เนื่องจาก ESP8266 มีขา GPIO ค่อนข้างน้อย และบางขาไม่สามารถนำมาใช้งานได้ ดังนั้นวงจรจึงควรต่อตามรูปด้านล่างนี้ โดยไม่แก้ขาใด ๆ ก็ตามของวงจรเลย
รูปที่ 9 บอร์ด LoRa32u4
บอร์ด LoRa32u4 เป็นบอร์ดพัฒนา LoRa ที่รวมเอาไอซีไมโครคอนโทรลเลอร์ ATmega32u4 มารวมกับ LoRa RA-02 ไว้บนแผ่นปริ้นแผ่นเดียว ทำให้การพัฒนา และทดสอบ LoRa สามารถทำได้ง่ายมากขึ้น ตัวบอร์ดมาพร้อมกับวงจรชาร์จแบตเตอรี่ในตัว ทำให้หากนำแบตเตอรี่มาเสียบ แล้วนำไปต่อกับเซ็นเซอร์ต่าง ๆ ก็จะสามารถสร้าง IoT Node ได้เลย สะดวกกว่าการต่อวงจรเองมาก
ตัวบอร์ด LoRa32u4 ใช้ Booloader ของ Adafruit Feather ดังนั้นไดร์เวอร์ จึงต้องใช้ของ Adafruit Feather ด้วย การติดตั้งไดร์เวอร์สามารถทำได้โดยเข้าไปโหลดตัวติดตั้งไดร์เวอร์ได้ที่ https://github.com/adafruit/Adafruit_Windows_Drivers/releases/download/1.0.0.0/adafruit_drivers.exe จากนั้นติดตั้งตามขั้นตอนต่อไปนี้
หลังจากดาวน์โหลดไฟล์ไดร์เวอร์มาแล้ว ให้ดับเบิลคลิกเปิดไฟล์ติดตั้งขึ้นมา จากนั้นกดปุ่ม I Agree
ในหน้านี้ จะให้เลือกว่าจะติดตั้งไดร์เวอร์ของบอร์ดอะไรบ้าง ผู้เขียนแนะนำให้เลือกติดตั้งเฉพาะบอร์ด Feather 32u4 โดยกดให้มีเครื่องหมายถูกเฉพาะ Feather 32u4 แล้วกดปุ่ม Install
รอจนกว่าการติดตั้งจะเสร็จสิ้น หากมีขึ้นแจ้งเตือนการติดตั้งไดร์เวอร์ใหม่ ให้กด Install หรือ OK เพื่อยอมรับได้เลย จากนั้นกดปุ่ม Close เพื่อจบการติดตั้งไดร์เวอร์
การเพิ่มบอร์ดจะอาศัยข้อมูลจาก Adafruit เช่นเดียวกัน เมื่อเปิดโปรแกรม Arduino IDE ขึ้นมาแล้ว ให้กดไปที่เมนู File แล้วเลือก Preferences
ในช่อง Additional Boards Manager URLs ให้เพิ่ม https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
ลงไป กรณีมีข้อมูลอยู่แล้ว ให้ใช้เครื่องหมาย , คั่น แล้วเพิ่มลิงค์ลงไป จากนั้นกดปุ่ม OK
กดไปที่เมนู Tool > Board แล้วเลือก Boards Manager…
จากนั้นให้เลือก Type เป็น Contibuted แล้วคลิกที่ Adafruit AVR Boards by Adafruit แล้วกดปุ่ม Install เพื่อติดตั้งบอร์ดได้เลย
หลังจากติดตั้งเสร็จแล้ว จะปรากฏคำว่า INSTALLED ขึ้นมาให้ทราบ สามารถกดปุ่ม Close เพื่อเปิดหน้าต่างไปได้เลย
ใช้สาย USB Type-A to MicroUSB เสียบด้านหัว MicroUSB เข้ากับบอร์ด LoRa32u4 อีกด้านเสียบเข้ากับคอมพิวเตอร์ผ่านช่องเสียบ USB
รูปที่ 10 การเชื่อมต่อสายเพื่ออัพโหลดโปรแกรมลงบอร์ด LoRa32u4
ที่โปรแกรม Arduino IDE ให้เปิดตัวอย่าง Blink ขึ้นมา โดยกดไปที่ File > Examples > 01.Basics เลือก Blink แล้วหน้าต่างโปรแกรม Blink จะเปิดขึ้นมา
เลือกบอร์ด โดยกดไปที่เมนู Tools > Board เลือก Adafruit Feather 32u4
เลือกพอร์ต โดยกดไปที่ Tools > Port สั่งเกตว่าหากเป็นบอร์ด LoRa32u4 จะแสดงคำว่า Adafruit Feather 32u4 ต่อท้ายชื่อพอร์ต
แล้วกดอัพโหลดโปรแกรมได้เลย (หรือกด Ctrl + Shift + U)
เมื่ออัพโหลดเรียบร้อยแล้ว จะปรากฏคำว่า Done uploading. ดังรูป
ผลที่ได้คือ หลอด LED บนบอร์ด LoRa32u4 ติด-ดับทุก ๆ 1 วินาที
ไลบรารี่ Arduino LoRa เป็นหนึ่งในไลบรารี่ที่ใช้งานได้กับแพลตฟอร์ม Arduino และใช้งานได้กับบอร์ด Arduino ทุกรุ่น รวมไปถึง ESP8266 ด้วย มีฟังก์ชันให้ใช้งานที่ไม่ซับซ้อน เข้าใจง่าย มีตัวอย่าง และเอกสารครบกว่าไลบรารี่อื่น ๆ มาก การติดตั้งไลบรารี่สามารถทำได้โดยใช้โปรแกรม Arduino IDE โดยกดไปที่เมนู Sketch > Include Library เลือก Manage Libraries…
จะมีหน้าต่างจัดการไลบรารี่ขึ้นมา ในช่องค้นหา ให้พิมพ์คำว่า LoRa แล้วเลื่อนหาไลบรารี่ LoRa by Sandeep Mistry คลิกเลือก แล้วกดปุ่ม Install
หลังจากติดตั้งเสร็จเรียบร้อยแล้ว จะแสดงคำว่า INSTALLED ดังรูป สามารถกด Close เพื่อออกได้เลย
ในการทดลองนี้ จะใช้เพื่อทดสอบติดต่อกับโมดูลกลุ่ม LoRa ว่าสามารถติดต่อได้ปกติหรือไม่ การทดลองจำเป็นจะต้องเรียกฟังก์ชัน LoRa.setPin(); ขึ้นมา เพื่อกำหนดว่าต่อขา NSS NRESET และ DIO0 ไว้ที่ขาใดของไมโครคอนโทรลเลอร์ สำหรับบอร์ด LoRa32u4 จะต่อไว้ที่ขา 1 4 และ 7 ตามลำดับ ดังนั้นจึงเรียกฟังก์ชัน LoRa.setPin(1, 4, 7); ได้เลย
ที่โปรแกรม Arduino IDE กดไปที่เมนู File > Examples > LoRa เลือก LoRaSender
จากนั้น บรรทัดที่ 11 – 12 ให้เพิ่มการเรียกใช้ฟังก์ชัน LoRa.setPins(1, 4, 7); ขึ้นมา และแก้ไขค่าในฟังก์ชัน LoRa.begin() เป็น 433E6
** กรณีต่อวงจรกับโมดูลกลุ่ม LoRa เอง จะต้องแก้ไขหมายเลขขาในฟังก์ชัน LoRa.setPins(); ให้ถูกต้องด้วย หากต่อวงจรตามหัวข้อ การต่อวงจรใช้งานโมดูลกลุ่ม LoRa ให้กำหนดดังนี้
จากนั้นกดอัพโหลดโปรแกรมลงบอร์ดได้เลย หากกำหนดค่าในฟังก์ชัน LoRa.setPins(); ถูกทั้งหมด ใน Serial Monitor จะแจ้งว่า เริ่มส่งข้อมูลได้แล้ว
การตั้งค่าสื่อสารผ่าน LoRa
อีกข้อดีหนึ่งของโมดูลกลุ่ม LoRa คือฟังก์ชันพิเศษหลาย ๆ อย่างที่เพิ่มความสะดวกในการใช้งานมากขึ้น สำหรับไลบรารี่ Arduino LoRa มีฟังก์ชันต่าง ๆ ให้ตั้งค่าโมดูลกลุ่ม LoRa ดังนี้
ฟังก์ชัน LoRa.setPins() เป็นฟังก์ชันที่ใช้กำหนดขาที่เชื่อมต่ออยู่กับขา NSS NRESET และ DIO0 ของโมดูลกลุ่ม LoRa มีรูปแบบการใช้งานดังนี้
void LoRa.setPins(int ss, int reset, int dio0);
มีรายละเอียดของพารามิเตอร์ดังนี้
และไม่มีค่าที่ส่งกลับ
ฟังก์ชัน LoRa.setTxPower(); เป็นฟังก์ชันที่ใช้กำหนดความแรงของสัญญาณเมื่อส่งข้อมูล มีรูปแบบการใช้งานดังนี้
void LoRa.setTxPower(int txPower);
มีรายละเอียดของพารามิเตอร์ดังนี้
ฟังก์ชัน LoRa.begin() เป็นฟังก์ชันที่ใช้เริ่มต้นการใช้งานการการติดต่อกับโมดูลกลุ่ม LoRa มีรูปแบบการใช้งานดังนี้
int LoRa.begin(long frequency);
มีรายละเอียดของพารามิเตอร์ดังนี้
และมีค่าตอบกลับเป็นข้อมูลชนิด int หากสามารถติดต่อกับโมดูลกลุ่ม LoRa ได้ จะให้ค่าเป็น 1 และหากติดต่อไม่ได้ จะให้ค่าเป็น 0
ฟังก์ชัน LoRa.sleep(); ใช้ตั้งให้โมดูลกลุ่ม LoRa เข้าโหมด Sleep เพื่อประหยัดพลังงาน ไม่มีค่าพารามิเตอร์ และไม่มีค่าตอบกลับ
LoRa มีการทำงานแบบ Helf Duplex ในขณะที่เริ่มต้นการส่งข้อมูล จะไม่สามารถรับข้อมูลเข้ามาได้ ฟังก์ชันที่เกี่ยวข้องกับการส่งข้อมูลมีด้วยกันดังนี้
ฟังก์ชัน LoRa.beginPacket(); ใช้เพื่อเริ่มต้นการส่งข้อมูล ไม่มีค่าพารามิเตอร์ และไม่มีการส่งค่ากลับ ก่อนการส่งข้อมูลจะต้องเรียกฟังก์ชันนี้ขึ้นมาใช้ก่อนเสมอ
ฟังก์ชัน .write(); เป็นฟังก์ชันใช้ส่งข้อมูลออกไปทีละไบต์ มีรูปแบบการใช้งานดังนี้
void LoRa.write(char byte); หรือ void LoRa.write(const char *buffer, int size);
มีรายละเอียดของพารามิเตอร์ดังนี้
และไม่มีค่าที่ส่งกลับ
ฟังก์ชัน LoRa.print(); เป็นฟังก์ชันที่ใช้ส่งข้อมูลออกไปในทุก ๆ ชนิดของข้อมูล สามารถส่งข้อความในตัวแปรชนิด String int char byte long และอื่น ๆ ออกไปได้ทั้งหมด มีรูปแบบการใช้งานดังนี้
void LoRa.print(data);
มีค่าพารามิเตอร์ตัวเดียว มีรายละเอียดดังนี้
และไม่มีค่าตอบกลับ
ฟังก์ชัน LoRa.endPacket(); จะเรียกใช้เมื่อต้องการจบการส่งข้อมูล ซึ่งต้องมีการเรียกใช้ทุกครั้งเมื่อไม่มีการส่งข้อมูลแล้ว เพื่อให้สามารถรับข้อมูลอื่น ๆ เข้ามาได้ต่อไป ไม่มีค่าพารามิเตอร์ และไม่มีค่าที่ส่งกลับ
การรับข้อมูลเข้ามาจะต้องตรวจสอบข้อมูลก่อนว่าขณะนี้มีข้อมูลเข้ามาใหม่หรือไม่ จากนั้นจึงเริ่มอ่านข้อมูลออกมาทีละตัวอักษร หรืออ่านออกมาทั้งข้อความ ในการรับข้อมูลเข้ามาแต่ละครั้ง การอ่านข้อมูลสามารถอ่านได้เมื่อไรก็ได้ ไม่จำเป็นต้องเรียกใช้ฟังก์ชันบางอย่างก่อนอ่าน หรือหลังอ่าน นอกจากนี้เราสามารถเรียกใช้ฟังก์ชันอ่านค่า RSSI เพื่อดูค่าความแรงของสัญญาณของตัวที่ส่งข้อมูลมาได้ด้วย
ฟังก์ชัน LoRa.parsePacket(); เป็นฟังก์ชันที่ใช้ตรวจสอบว่าขณะนี้มีข้อมูลเข้ามาใหม่หรือไม่ มีรูปแบบการใช้งานดังนี้
int LoRa.parsePacket();
ไม่มีค่าพารามิเตอร์ และตอบกลับเป็นความยาวของข้อมูลที่ถูกส่งเข้ามา ในการใช้งานจริงจะต้องเรียกใช้ฟังก์ชันนี้ก่อนอ่านข้อมูลออกมาเสมอ
ฟังก์ชัน LoRa.read(); เป็นฟังก์ชันที่ใช้อ่านข้อมูลออกมาทีละ 1 ไบต์ มีรูปแบบการใช้งานดังนี้
char LoRa.read();
ไม่มีค่าพารามิเตอร์ และตอบกลับมาเป็นข้อมูลที่อ่านได้
ฟังก์ชัน LoRa.readString() เป็นฟังก์ชันที่ใช้อ่านข้อมูลออกมาทั้งข้อความ มักใช้งานเมื่อตัวส่ง ส่งข้อมูลมาเป็นข้อความ (ใช้ฟังก์ชัน .print();) สามารถอ่านข้อมูลออกมาทั้งข้อความได้เลย ทำให้สะดวกต่อการนำข้อมูลไปใช้งานมากขึ้น มีรูปแบบการใช้งานดังนี้
String LoRa.readString();
ไม่มีค่าพารามิเตอร์ และส่งกลับเป็นข้อมูลในรูป String
ฟังก์ชัน LoRa.setTimeout(); เป็นฟังก์ชันใช้กำหนดว่าต้องการให้เรียกใช้ฟังก์ชัน .readString() แล้วให้อ่านข้อมูลเร็วแค่ไหน มีรูปแบบการใช้งานดังนี้
void LoRa.setTimeout(int ms);
มีค่าพารามิเตอร์ 1 ตัว มีรายละเอียดดังนี้
และไม่มีค่าที่ส่งกลับ
ฟังก์ชัน LoRa.packetRssi(); ใช้อ่านค่าความแรงของสัญญาณจากตัวส่งข้อมูล มีรูปแบบการใช้งานดังนี้
int LoRa.packetRssi();
ไม่มีค่าพารามิเตอร์ และส่งกลับข้อมูลเป็นชนิด int เป็นค่าความแรงของสัญญาณในหน่วย dBm
LoRa Node ตัวส่ง – ที่ตัวส่งผู้เขียนได้ใช้ Arduino ในการส่งข้อมูล ซึ่งประกอบไปด้วยอุปกรณ์ทั้งหมดดังนี้
รูปที่ 11 LoRa Node ตัวส่ง
สำหรับโค้ดที่ใช้ในการทดลองที่ตัวส่ง มีดังนี้
หลังจากอัพโหลดแล้ว ให้เปิด Serial Monitor ขึ้นมา จะพบว่าเริ่มมีการส่งข้อความออกไปแล้ว
LoRa Node ตัวรับ – ผู้เขียนได้เลือกใช้บอร์ด LoRa32u4 เป็นตัวรับ ทำให้ใช้อุปกรณ์ที่ฝั่งรับดังนี้
รูปที่ 12 LoRa Node ตัวรับ
และโค้ดที่ใช้ทดลองที่ฝั่งรับมีดังนี้
เมื่อเปิด Serial Monitor ขึ้นมา จะพบว่าสามารถรับข้อมูลจากตัวส่งมาได้แล้ว และแสดงข้อความออกดังรูป พร้อมกับแสดงค่า RSSI ของข้อความนั้น ๆ
ผู้เขียนได้พยายามทดสอบระยะสัญญาณของ LoRa อยู่หลายครั้ง ในแต่ละครั้งมีการเปลี่ยนไมโครคอนโทรลเลอร์ให้แตกต่างกันไป ในการทดลองผู้เขียนได้ออกแบบอุปกรณ์ 2 ตัว ให้มีการทำงานที่ต่างกันดังนี้
ฮาร์ดแวร์ที่ใช้ สำหรับฮาร์ดแวร์ที่ใช้มีรายละเอียดดังนี้
ผลการทดลอง ระยะที่ได้จากการทดลองในครั้งนี้ประมาณ 170 เมตร ค่า RSSI อยู่ที่ประมาณ -118 ค่าเวลาที่รับ – ส่งข้อมูลอยู่ที่ 53mS
รูปที่ 13 ระยะทางที่วัดได้ในครั้งแรก เมื่อนำไปวัดบนแผนที่ Google Map
การทดสอบครั้งที่สอง
ฮาร์ดแวร์ที่ใช้ ในครั้งที่สองนี้ มีการเปลี่ยนแปลงฮาร์ดแวร์ไปใช้ LoRa32u4 บางส่วน ทำให้รายละเอียดรวม ๆ ของการทดลองครั้งนี้ มีดังนี้
ผลการทดสอบ ระยะที่ได้อยู่ในช่วง 500 ถึง 600 เมตร ครั้งนี้ได้ทดสอบสัญญาณใน 2 ทิศทาง พบว่าหากไปทางทิศตะวันออกจะได้ระยะประมาณ 510 เมตร และหากไปทางตะวันตก จะได้ระยะประมาณ 600 เมตร ค่า RSSI อยู่ที่ประมาณ -124 ค่าเวลาที่รับ – ส่งข้อมูลอยู่ที่ 53mS
รูปที่ 14 ระยะทางที่วัดได้ในครั้งที่สองทางทิศตะวันออก เมื่อนำไปวัดบนแผนที่ Google Map
รูปที่ 15 ระยะทางที่วัดได้ในครั้งที่สองทางทิศตะวันตก เมื่อนำไปวัดบนแผนที่ Google Map
ตารางสรุปการทดสอบทั้ง 2 ครั้ง
รายการ |
ครั้งที่ 1 |
ครั้งที่ 2 |
ฮาร์ดแวร์ที่ใช้(Main) |
ESP8266 – RA02 |
Arduino – RA-02 |
ฮาร์ดแวร์ที่ใช้(Node) |
Arduino – RA-02 |
LoRa32u4 (RA-02) |
อัตราขยายของเสา |
3dBi |
|
ความสูงตั้งเสา |
3 เมตร |
7 เมตร |
ระยะที่ได้ |
280 เมตร |
500 – 600 เมตร |
ค่า RSSI ต่ำสุด |
ประมาณ -118 |
ประมาณ -124 |
ค่าเวลาเฉลี่ย |
53mS |
การตั้งเสาที่สูง มีสิ่งกีดขวางที่น้อย จะทำให้ได้ระยะส่งของ LoRa ที่เพิ่มมากขึ้น รวมถึงยังมีเรื่องฮาร์ดแวร์เข้ามาเกี่ยวข้องด้วย หากใช้เสาอากาศที่มีค่าอัตราขยายที่มากขึ้น จะทำให้ได้ระยะส่งที่มากขึ้น แต่ข้อสำคัญคือ หากต้องการเพิ่มอัตราขยายของเสา ควรเพิ่มทั้งตัว Main และตัว Node เนื่องจากหากมีตัวใดตัวหนึ่งมีอัตราขยายน้อยกว่า ก็จะทำให้ส่งข้อมูลไปหาอีกตัวไม่ได้นั่นเอง
เรียงตามลำดับตัว Main และตัว Node ดังนี้
ทั้งนี้ ท่านสามารถนำโค้ดนี้ไปใช้ทดลอง หรือปรับปรุงได้ดีขึ้นได้ต่อไป
สำหรับบทความนี้ก็มีเพียงเท่านี้ พบกันใหม่ในบทความหน้านะครับ ขอบคุณที่ติดตามอ่านมาจนถึงจุดนี้ ขอเพียงมีผู้อ่าน ก็ทำให้ผู้เขียนมีกำลังใจต่อไปแล้วครับ
~ สวัสดีครับ ~