กลับไปหน้ารวมไฟล์
mkr-wan-1310-meets-the-things-network-07e629.md

MKR WAN 1310 ปะทะ The Things Network!

เพิ่งถอย MKR WAN 1300 หรือ MKR WAN 1310 มาใหม่แล้วยังมึนๆ กับการ Setup ครั้งแรกอยู่ใช่ไหม? มาถูกที่แล้วน้อง! เดี๋ยวพี่จะพาไปลุยเรื่องการใช้งานร่วมกับเทคโนโลยี LoRaWAN ที่ช่วยให้ของของน้องคุยกับ Internet ได้โดยไม่ต้องง้อ WiFi หรือ 3G / 4G เลยว่ะ

จุดเด่นของมันคือส่งได้ไกลโคตร กินไฟต่ำ แต่แลกมาด้วย Bandwidth ที่น้อย ซึ่งแม่งโคตรเหมาะกับงาน IoT เลย! เครือข่าย LoRaWAN ระดับโลกที่ดังที่สุดก็คือ The Things Network (หรือเรียกย่อๆ ว่า TTN) มันเป็นเครือข่ายแบบช่วยกันทำ มี Gateway วางอยู่ทั่วโลกเป็นหมื่นๆ ตัว และในโปรเจกต์นี้เราจะใช้ Public Community Network ของ TTN นี่แหละ จัดไปวัยรุ่น!

สิ่งที่ต้องมี

ก่อนจะซ่าได้ น้องต้องเช็คก่อนว่าบริเวณที่น้องอยู่มีสัญญาณของ TTN Gateway หรือเปล่า

เช็คระยะสัญญาณได้จากแผนที่ของ TTN เลย (ลองหาดูในหน้าแรกของเว็บ TTN นะ):

แต่ถ้าแถวนั้นไม่มีสัญญาณเลย... น้องก็ต้องสร้าง Gateway ของตัวเองขึ้นมานะ (แต่ขอโทษทีว่ะ บทความนี้ไม่ได้สอนเรื่องสร้าง Gateway ไว้โอกาสหน้าละกัน)

สร้าง Account และ App แรกบน TTN

เปิด Browser ไปที่เว็บ www.thethingsnetwork.org แล้วกดปุ่ม Sign Up เลย:

กรอกข้อมูลให้ครบทุกช่อง อย่าให้หลุด:

พอเสร็จแล้วก็ Login เข้าไปที่หน้า Console ซะ

หลักๆ ใน Console น้องจะทำได้ 2 อย่าง:

  • Register Gateway: ลงทะเบียน Gateway ของตัวเอง หรือจะแอบใช้ของคนอื่นที่มีอยู่ทั่วโลกแบบ ฟรีๆ ก็ได้!
  • Create Applications: อันนี้คือที่สำหรับรวมร่างข้อมูลจาก Device หลายๆ ตัว เพื่อเอาไปใช้งานต่อกับพวก Tools อื่นๆ หรือที่เขาเรียกว่าการทำ Integration นั่นแหละ

เป้าหมายเราวันนี้ไม่ใช่การ Setup Gateway เพราะฉะนั้นกดเลือกที่ APPLICATIONS ไปเลยน้อง!

หน้านี้จะโชว์ Application ทั้งหมดของน้อง คราวนี้มาสร้างอันแรกกัน กดที่ลิงก์ "add application" หรือ "Get started by adding one!" ได้เลย

กรอกแค่ 2 ช่องแรกพอ:

  • ช่องแรกคือ ID ของ App: ต้องเป็นตัวพิมพ์เล็กเท่านั้นและห้ามมีช่องว่างนะน้อง
  • ช่องที่สองคือ Description: อันนี้ใส่คำอธิบายไปเลยตามใจชอบ ไม่มีกฎกติกา

กรอกเสร็จแล้วก็กดปุ่ม "Add application" ที่มุมขวาล่างซะ

หลังจากนั้นน้องจะเห็นหน้า Overview ของ App ที่เพิ่งสร้าง มาดูแต่ละส่วนกันหน่อย:

  • Application Overview + Application EUIs: เวลาจะใช้งาน App นี้ น้องต้องใช้ Application ID และพวก EUIs เหล่านี้แหละ

EUI คือเลขรหัสเฉพาะตัวที่ใช้ระบุ Network, Gateway, App และ Device ในระบบ LoRaWAN ทั้งหมด เพื่อให้ Server มันไม่งงว่าใครเป็นใคร

  • Devices: หน้านี้ไว้จัดการ Device ที่เชื่อมอยู่ (เช่น Arduino MKR WAN 1300 หรือ MKR WAN 1310 ของน้อง) หรือจะลงทะเบียนตัวใหม่ก็ทำที่นี่แหละ
  • Collaborators: ไว้ดูว่ามีใครมาช่วยทำ App นี้บ้าง น้องสามารถดึงเพื่อนมาช่วยงานได้โดยกำหนดสิทธิ์การเข้าถึงให้แตกต่างกันไป
  • Access keys: อันนี้สำคัญสุดๆ มันคือ "กุญแจ" เข้าถึง App ของน้อง เก็บรักษาไว้ให้ดีล่ะ ห้ามหลุดเด็ดขาด! ข้างๆ จะมีปุ่มเล็กๆ ให้กดก๊อปปี้รหัสได้

ลงทะเบียน MKR WAN 1300 หรือ MKR WAN 1310 ครั้งแรกบน TTN

ได้เวลาเอา Arduino มาเชื่อมต่อกับ TTN แล้ว น้องต้องอัปโหลดโค้ดลง Board ซึ่งมี 2 ทางเลือก:

  • ใช้ Arduino Web Editor (พี่จะใช้อันนี้สอนนะ)
  • ใช้ Arduino IDE แบบติดตั้งลงคอมพิวเตอร์ตามปกติ

เสียบสาย Arduino เข้ากับ USB Port แล้วเช็คให้ชัวร์ว่าเลือก Board และ Port ถูกต้องนะจ๊ะ ห้ามช็อตนะตัวนี้!

โค้ดตัวแรกที่ต้องอัปโหลดคือตัวอย่างจาก Library ที่ชื่อ MKRWAN โดยให้เลือก Sketch ที่ชื่อ FirstConfiguration

บรรทัดเดียวที่น้องต้องแก้ในโค้ดตัวอย่างคือเรื่องความถี่ (Frequency):

... // เปลี่ยนเป็นความถี่ตามภูมิภาคของน้อง (เช่น AS923 สำหรับไทย)
 if (!modem.begin(AS923)) {    ...

น้องต้องเลือกความถี่ให้ตรงกับประเทศที่น้องใช้งานนะ (ประเทศไทยใช้ AS923 นะน้อง จำไว้!)

พออัปโหลด Sketch เสร็จแล้ว เปิด Serial Monitor ขึ้นมา น้องจะเห็นข้อความประมาณนี้:

Your module version is: ARD-078 1.1.9
Your device EUI is: a8xxxxxxxxxxxx0a
Are you connecting via OTAA (1) or ABP (2)?

ก่อนจะไปต่อ กลับไปที่หน้า TTN เพื่อลงทะเบียน Device ตัวใหม่ก่อน ไปที่หน้า "Register Device" โดยกดลิงก์ในส่วนหัวของ Devices

ในหน้าถัดมา กรอกแค่ 2 ช่องพอ:

  • ช่องแรกคือ ID ของ Device: ต้องตัวพิมพ์เล็ก ห้ามมีช่องว่าง และต้องไม่ซ้ำใคร พี่แนะนำให้ใช้ชื่อ Board ต่อด้วยเลขท้าย EUI ก็ได้ เท่ดี
  • ช่องที่สองคือ EUI: อันนี้แหละสำคัญ! เอาเลข Device EUI ที่โผล่ใน Serial Monitor มาวางใส่ลงไปซะ

พอกดปุ่ม Register น้องจะเห็นหน้า Device Overview ซึ่งจะมีข้อมูลครบถ้วนสำหรับไป Setup ใน Arduino ต่อ

กลับมาที่ Serial Monitor มันจะถามหา:

  • Activation mode (เลือก 1 สำหรับ OTAA)
  • Application EUI
  • App Key

ก๊อปปี้ข้อมูลพวกนี้จากหน้า TTN (ที่มีไอคอนเล็กๆ ให้กดก๊อปปี้) มาใส่ใน Serial Monitor ได้เลย

Your module version is: ARD-078 1.1.9
Your device EUI is: a8xxxxxxxxxxxx0a
Are you connecting via OTAA (1) or ABP (2)?
Enter your APP EUI
Enter your APP KEY

ถ้าทำถูกต้องทุกอย่าง น้องจะเห็นข้อความสวรรค์ประทานว่า:

Message sent correctly!

และในหน้า Device บน TTN สถานะก็จะเปลี่ยนเป็นสีเขียวหล่อเท่แบบนี้:

เริ่มใช้งาน MKR WAN 1300 หรือ MKR WAN 1310 บน TTN

ตอนนี้เราทดสอบการเชื่อมต่อผ่านแล้ว ต่อไปคือการลองรับส่งข้อมูลจริงๆ ให้เลือกอัปโหลด Sketch ที่ชื่อ LoraSendAndReceive จาก Library เดิมนั่นแหละ

โค้ดนี้ต้องเข้าไปกรอกข้อมูลใน Tab ที่ชื่อ Secret ด้วยนะ:

  • ใส่ SECRET_APP_EUI และ SECRET_APP_KEY ที่ได้มาจากหน้า TTN

เสร็จแล้วก็เบิร์นโค้ดลง Board เลย ใน Serial Monitor จะขึ้นว่า:

Your module version is: ARD-078 1.1.9
Your device EUI is: a8xxxxxxxxxxxx0a
Enter a message to send to network
(make sure that end-of-line 'NL' is enabled)

คราวนี้มาทำความเข้าใจคำศัพท์สายช่างกันหน่อยคือ Uplink และ Downlink

การส่งข้อมูลจาก Device ไปหา TTN เราเรียกว่า Uplink ส่วนการส่งจาก TTN กลับมาหา Device เราเรียกว่า Downlink

เปิดไปที่ส่วน Data ในหน้า Device ของน้อง น้องจะเห็นข้อความวิ่งเข้าวิ่งออกเพียบเลย

ไอคอนรูปสายฟ้าคือการ Activation (เช่น ตอนเปิดเครื่องหรือกด Reset) คราวนี้ลองส่ง Uplink ดู พิมพ์อะไรก็ได้ใน Serial Monitor เช่น "Hello TTN!" แล้วกด Send

ใน Serial Monitor จะขึ้นว่า:

Sending: Hello TTN! - 48 65 6C 6C 6F 20 54 54 4E 21 
Message sent correctly!
No downlink message received at this time.
Enter a message to send to network

แป๊บเดียวข้อมความก็จะไปโผล่ที่หน้า APPLICATION DATA บน TTN เลย!

น้องจะเห็นแถบ 2 บรรทัดสำหรับทุุกๆ Uplink:

  • แถบล่างคือตัว Uplink เอง (สังเกตไอคอนลูกศรชี้ขึ้น) ข้อมูลจะอยู่ในส่วน "payload"
  • แถบบนคือ Downlink (ลูกศรชี้ลง) ที่ส่งกลับมาเพื่อยืนยันว่าได้รับข้อมูลแล้ว

สังเกตไหมว่าเราส่ง "Hello TTN!" แต่ที่ได้รับมันเป็นเลขฐานสิบหก (Hex) ถ้าอยากรู้ว่ามันคืออะไร น้องเอาเลขพวกนั้นไปใส่ในเครื่องมือออนไลน์พวก ASCII to Hex ดูสิ แล้วน้องจะเห็นว่ามันแปลงกลับมาเป็นข้อความที่อ่านออกได้เหมือนเดิมเด๊ะ

คราวนี้ลองส่ง Downlink จาก TTN กลับมาที่ Board บ้าง ไปที่หน้า Device Overview เลื่อนไปล่างสุดที่ส่วน Downlink ลองใช้เครื่องมือเดิมแปลงข้อความ "Hi MKR WAN!" เป็น Hex จะได้ "48 69 20 4d 4b 52 20 57 41 4e 21" แล้วเอาไปใส่ในช่อง Payload ตั้งค่าตามนี้:

  • Scheduling: replace
  • Payload (type): bytes
  • Fport: 1
  • Confirmed: yes

แล้วกด Send เลย!

Downlink จะไปเข้าคิวรออยู่ มันจะถูกส่งมาที่ Board ของน้องก็ต่อเมื่อน้องส่ง Uplink รอบถัดไปเท่านั้น (มันจะอาศัยจังหวะที่ช่องสัญญาณเปิดตอนส่งนั่นแหละ)

พอน้องส่งข้อความใหม่จาก Board น้องจะได้รับ Downlink ทันที:

Sending: Hello again! - 48 65 6C 6C 6F 20 61 67 61 69 6E 21 
Message sent correctly!
Received: 48 69 20 4D 4B 52 20 57 41 4E 21

TIP (เคล็ดลับ): ถ้าอยากให้มันโชว์เป็นข้อความที่อ่านออกได้เลยบน Serial Monitor ให้เพิ่มโค้ด 3 บรรทัดนี้ลงไปในส่วนท้ายของ Loop:

for (unsigned int j = 0; j < i; j++) {
   Serial.print(rcv[j]);
 }
 Serial.println();

มันจะแปลงให้เสร็จสรรพ หล่อๆ แบบนี้:

Message sent correctly!
Received: 48 69 20 61 67 61 69 6E 20 4D 4B 52 20 57 41 4E 21 
Hi again MKR WAN!

การทำ Payload Decoding บน TTN

ถ้าอยากให้หน้าเว็บ TTN อ่านออกด้วย ก็ทำได้นะ! ไปที่หน้า Application แล้วเลือกหัวข้อ "Payload Format"

ก๊อปปี้โค้ด JavaScript ตัวนี้ไปใส่แทนที่ของเดิม:

function Decoder(bytes, port) {
 var result = ""; 
 for (var i = 0; i < bytes.length; i++) { 
   result += String.fromCharCode(parseInt(bytes[i])); 
 } 
 return { payload: result, };
}

เสร็จแล้วกดเซฟซะ! ทีนี้เวลาส่งข้อมูลมา น้องจะเห็นข้อความภาษาคนโผล่มาข้างๆ เลข Hex แล้ว สะดวกสุดๆ เวลาเอาไปเชื่อมต่อกับ Service อื่น

การประหยัด Bandwidth (เรื่องนี้สำคัญนะน้อง)

เครือข่าย LoRaWAN เขามีกฎที่เรียกว่า Fair Access Policy เพราะเราแชร์คลื่นกับคนอื่น:

  • Uplink ห้ามเกิน 30 วินาทีต่อวันต่อ Device
  • Downlink ห้ามเกิน 10 ครั้งต่อวันต่อ Device

เพราะฉะนั้นอย่าส่งพร่ำเพรื่อนะน้อง:

  • พยายามทำให้ Payload เล็กที่สุด
  • ปิดการร้องขอ Confirmation ถ้าไม่จำเป็น โดยแก้บรรทัด modem.endPacket(true); ให้เป็น false ซะ

จัดไปวัยรุ่น!

ตอนนี้ของน้องก็พร้อมลุยแล้ว ลองไปศึกษาเรื่อง Integration หรือ SDK/Libraries อื่นๆ ต่อได้เลย ขอให้สนุกกับโลกของ LoRaWAN นะน้อง!


EXPANDED TECHNICAL DETAILS

การเชื่อมต่อแบบ Long Range (LoRa)

โปรเจกต์นี้เป็นการเชื่อมต่อ Arduino MKR WAN 1310 ที่กินไฟต่ำมากเข้ากับเครือข่าย The Things Network (TTN) โดยใช้เทคโนโลยี LoRaWAN

  • Gateway Protocol: ตัว Board จะส่ง Packet ข้อมูลที่เข้ารหัสไว้ผ่านคลื่นความถี่ Sub-GHz (บ้านเราใช้ AS923) ไปยัง Gateway แถวๆ นั้น แล้ว Gateway จะยิงข้อมูลต่อไปยัง Cloud ของ TTN อีกที
  • Authentication: เราใช้ระบบ OTAA (Over-The-Air Activation) ซึ่งมีความปลอดภัยสูงมาก โดยต้องมี DevEUI, AppEUI และ AppKey ที่ถูกต้องถึงจะเข้าบ้านเขาได้

ตรรกะของ IoT

  • Payload Formatting: เนื่องจาก LoRaWAN มัน Bandwidth แคบ เราเลยไม่ส่งข้อมูลบวมๆ แบบ JSON แต่จะส่งเป็น Binary (Hex) แทนเพื่อความรวดเร็วและประหยัดพลังงาน
  • Power Optimization: ตัว Firmware ถูกออกแบบมาให้ส่งข้อมูลเป็นช่วงๆ (เช่น ทุก 30 นาที) แล้วหลับลึก (Deep Sleep) ทำให้ Device ของน้องอยู่ได้เป็นปีๆ ด้วยถ่านเพียงก้อนเดียว! สู้งานนะน้อง!

ข้อมูล Frontmatter ดั้งเดิม

title: "MKR WAN 1310 Meets The Things Network!"
description: "This guide is aimed to help you on the very first setup of your MKR WAN 1300 and MKR WAN 1310 boards with TTN."
author: "Arduino_Genuino"
category: "Internet of Things, BT & Wireless"
tags:
  - "ttn"
  - "mkrwan"
  - "lorawan"
views: 22811
likes: 7
price: 2450
difficulty: "Easy"
components:
  - "1x Arduino MKR WAN 1300"
  - "1x Arduino MKR WAN 1310"
tools: []
apps:
  - "1x The Things Network"
  - "1x Arduino Web Editor"
downloadableFiles: []
documentationLinks: []
passwordHash: "158494b7c16dbe1387dd8b7b22e8ebad2867f30eef9c686df20a2740dcf1d237"
encryptedPayload: "U2FsdGVkX186Gyq14OhShgyiUQ2zjDH0eyEOvPq9RWOk28JK/85PVbVZElE2wK92OgcMvFG6XOpxeah/eTMmxrQQmOyW/j3ZZ5EF2BqmXTYU9kacYpktxhMP6qAjgXlDCp2W61B2ncoe77io4plr8g=="
seoDescription: "Complete guide for the first-time setup of MKR WAN 1300 and MKR WAN 1310 boards with The Things Network (TTN)."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/mkr-wan-1310-meets-the-things-network-07e629_cover.jpg"
lang: "th"