Content update

This commit is contained in:
2026-02-27 10:55:24 +07:00
parent 3b1d18b001
commit 9b3e813327
53 changed files with 1549 additions and 698 deletions
+111 -103
View File
@@ -2,13 +2,14 @@
== สร้างไฟล์แอปพลิเคชันด้วยตนเอง
#i โครงงานนี้ใช้แอปพลิเคชันที่สร้างขึ้นมาเอง โดยในการพัฒนาแอปพลิเคชัน
#h(1.7em) โครงงานนี้ใช้แอปพลิเคชันที่สร้างขึ้นมาเอง โดยในการพัฒนาแอปพลิเคชัน
อย่างน้อยต้องมีส่วนประกอบดังกล่าวก่อน
- Flutter
- Git (ซึ่งคุณจะติดตั้งแล้วหากคุณทำตาม@writingFirmware)
#set enum(indent: 1.7em)
1. Flutter
2. Git (ซึ่งคุณจะติดตั้งแล้วหากคุณทำตาม@writingFirmware)
#i อย่างไรก็ตาม Flutter มีข้อจำกัดว่า มีเพียง Android
#h(1.7em) อย่างไรก็ตาม Flutter มีข้อจำกัดว่า มีเพียง Android
เท่านั้นที่ไม่ว่าแพลตฟอร์มไหนก็จะสามารถคอมไพล์ไฟล์ `.apk` ออกมาได้ ดังนั้น
การสร้างแอปพลิเคชันสำหรับ Linux ต้องทำบน Linux เท่านั้น และการสร้างแอปพลิเคชันสำหรับ Windows
ต้องทำบน Windows เท่านั้น
@@ -16,12 +17,13 @@
=== การติดตั้งโปรแกรมเขียนโคด
#iii จริง แล้วนั้น Flutter สามารถทำงานกับโปรแกรมเขียนโคดใดก็ได้
แต่มีโปรแกรมเหล่านี้ที่อาจมีประสบการณ์การพัฒนาที่ดีกว่าโปรแกรมอื่น:
แต่มีโปรแกรมเหล่านี้ที่อาจมีประสบการณ์การพัฒนาที่ดีกว่าโปรแกรมอื่น
- Visual Studio Code (VS Code)
- Android Studio
- JetBrains IntelliJ
- Firebase Studio
#set enum(indent: 4.1em)
1. Visual Studio Code (VS Code)
2. Android Studio
3. JetBrains IntelliJ
4. Firebase Studio
#iii โครงงานนี้ใช้โปรแกรมเขียนโคด Android Studio เป็นหลักเนื่องจากแอปพลิเคชันโครงงานมี
Android เป็นเป้าหมายหลัก และ Android SDK สามารถจัดการได้ง่ายกว่าใน Android Studio
@@ -31,66 +33,64 @@ Code) และการติดตั้งด้วยตนเอง โด
สามารถติดตั้งผ่าน VS Code ได้เลย แต่ก่อนอื่น ต้องทำการติดตั้งโปรแกรมและไลบรารีพื้นฐานที่จำเป็นสำหรับ
Flutter ก่อน
#pagebreak()
=== การติดตั้งโปรแกรมและไลบรารีที่จำเป็น
#[
#set enum(indent: 5.5em)
+ Windows: ติดตั้ง Git สำหรับ Windows ซึ่งคุณสามารถดูขั้นตอนการติดตั้งได้ที่
https://git-scm.com/install/windows หรือเพียงแค่ใช้คำสั่งด้านล่าง
#afigure(
```sh
winget install --id Git.Git -e --source winget
```,
kind: image,
caption: [คำสั่งในการติดตั้ง Git],
)
+ Linux: โปรดดู@flLinuxDetails สำหรับรายละเอียดแพคเกจและคำสั่งที่ต้องใช้สำหรับระบบต่าง
+ macOS: ใช้คำสั่งต่อไปนี้ในการติดตั้งเครื่องมือ Xcode ต่าง รวมถึง Git
#afigure(
```sh
xcode-select --install
```,
kind: image,
caption: [คำสั่งในการติดตั้งเครื่องมือ Xcode],
)
]
1. สำหรับ Windows ติดตั้ง Git สำหรับ Windows ซึ่งคุณสามารถดูขั้นตอนการติดตั้งได้ที่
https://git-scm.com/install/windows หรือเพียงแค่ใช้คำสั่งด้านล่าง
#figure(
```sh
winget install --id Git.Git -e --source winget
```,
kind: image,
caption: [คำสั่งในการติดตั้ง Git],
)
2. สำหรับ Linux โปรดดู@flLinuxDetails
สำหรับรายละเอียดแพคเกจและคำสั่งที่ต้องใช้สำหรับระบบต่าง
3. สำหรับ macOS ใช้คำสั่งต่อไปนี้ในการติดตั้งเครื่องมือ Xcode ต่าง รวมถึง Git
#figure(
```sh
xcode-select --install
```,
kind: image,
caption: [คำสั่งในการติดตั้งเครื่องมือ Xcode],
)
=== การติดตั้งผ่าน Visual Studio Code
#block(inset: (left: 4.5em))[
#set enum(indent: 1em)
+ เปิด VSCode
+ ติดตั้งส่วนขยาย Flutter \
อยู่ภายใต้ ID `Dart-Code.flutter` ทั้งบน Visual Studio Marketplace และ OpenVSX
+ ติดตั้ง Flutter ด้วย VS Code
+ เปิด Command Palette ด้วยเมนู *View* > *Command Palette* หรือกด Ctrl + Shift +
P
+ ใน Command Palette พิมพ์ `flutter`.
+ เลือก *Flutter: New Project*
+ VS Code จะให้คุณเลือก Flutter SDK บนคอมพิวเตอร์ของคุณ เลือก *Download SDK*
+ เมือหน้าไดอะลอก *Select Folder for Flutter SDK* แสดงขึ้น เลือกสถานที่ที่คุณอยากติดตั้ง
Flutter
+ คลิก *Clone Flutter* \
ในระหว่างการดาวน์โหลด VS Code จะแสดงการแจ้งเตือนนี้:
#[
#set enum(indent: 4.1em)
1. เปิด VSCode
2. ติดตั้งส่วนขยาย Flutter ซึ่งอยู่ภายใต้ ID `Dart-Code.flutter` ทั้งบน Visual Studio
Marketplace และ OpenVSX
3. ติดตั้ง Flutter ด้วย VS Code
#listy(
indent: 5.5em,
numbering: thai-numbering,
[เปิด Command Palette ด้วยเมนู _View > Command Palette_ หรือกด Ctrl + Shift +
P],
[ใน Command Palette พิมพ์ `flutter`],
[เลือก _Flutter: New Project_],
[VS Code จะให้คุณเลือก Flutter SDK บนคอมพิวเตอร์ของคุณ เลือก _Download SDK_],
[เมือหน้าไดอะลอก _Select Folder for Flutter SDK_ แสดงขึ้น เลือกสถานที่ที่คุณอยากติดตั้ง
Flutter],
[คลิก _Clone Flutter_ โดยในระหว่างการดาวน์โหลด VS Code จะแสดงการแจ้งเตือนนี้
```
Downloading the Flutter SDK. This may take a few minutes.
```
การดาวน์โหลดนี้จะใช้เวลาสองสามนาที หากคุณเชื่อว่าการดาวน์โหลดหยุดชะงัก คุณสามารถคลิก
*Cancel* แล้วเริ่มต้นการติดตั้งใหม่ได้
+ คลิก *Add SDK to PATH* \
เมื่อเสร็จสิ้น จะมีการแจ้งเตือน
_Cancel_ แล้วเริ่มต้นการติดตั้งใหม่ได้],
[คลิก _Add SDK to PATH_ และเมื่อเสร็จสิ้น จะมีการแจ้งเตือน
```
The Flutter SDK was added to your PATH
```
+ VS Code อาจแสดงการแจ้งเตือนเกี่ยวกับการเก็บข้อมูลของ Google หากคุณยินยอม คลิก *OK*
+ เพื่อความแน่ใจ กรุณาปิดเทอร์มินัลทุกหน้าต่างหรือรีสตาร์ท VS Code เพื่อให้แน่ใจว่า Flutter
จะสามารถใช้ผ่านเทอร์มินัลได้
+ เมื่อเสร็จสิ้น ใช้คำสั่ง `flutter doctor -v` ในเทอร์มินัลที่คุณเลือกเพื่อตรวจสอบการติดตั้ง
Flutter ของคุณ \
หากคำสั่งไม่เจอหรือเกิดข้อผิดพลาดขึ้น ตรวจสอบ
```],
[VS Code อาจแสดงการแจ้งเตือนเกี่ยวกับการเก็บข้อมูลของ Google หากคุณยินยอม คลิก _OK_],
[เพื่อความแน่ใจ กรุณาปิดเทอร์มินัลทุกหน้าต่างหรือรีสตาร์ท VS Code เพื่อให้แน่ใจว่า Flutter
จะสามารถใช้ผ่านเทอร์มินัลได้],
)
4. เมื่อเสร็จสิ้น ใช้คำสั่ง `flutter doctor -v` ในเทอร์มินัลที่คุณเลือกเพื่อตรวจสอบการติดตั้ง
Flutter ของคุณ หากคำสั่งไม่เจอหรือเกิดข้อผิดพลาดขึ้น ตรวจสอบ
https://docs.flutter.dev/install/troubleshoot สำหรับข้อมูลเพิ่มเติม
]
@@ -99,32 +99,38 @@ Flutter ก่อน
#iii แนะนำให้ทำตาม https://docs.flutter.dev/install/manual#install-flutter
เนื่องจากกระบวนการนี้ต้องใช้ข้อมูลที่ใหม่ล่าสุด
1. ดาวน์โหลด Flutter (สามารถหาปุ่มดาวน์โหลดได้จากลิงก์ด้านบน)
2. สร้างโฟลเดอร์สำหรับเก็บ Flutter SDK
3. ทำการแตกไฟล์ที่ดาวน์โหลดมา
4. เพิ่ม Flutter เข้าไปยัง PATH ของคุณ (วิธีการขึ้นอยู่กับระบบปฏิบัติการ)
5. ยืนยันความถูกต้องของการติดตั้งของคุณด้วยคำสั่ง `flutter doctor -v`
#[
#set enum(indent: 4.1em)
1. ดาวน์โหลด Flutter (สามารถหาปุ่มดาวน์โหลดได้จากลิงก์ด้านบน)
2. สร้างโฟลเดอร์สำหรับเก็บ Flutter SDK
3. ทำการแตกไฟล์ที่ดาวน์โหลดมา
4. เพิ่ม Flutter เข้าไปยัง PATH ของคุณ (วิธีการขึ้นอยู่กับระบบปฏิบัติการ)
5. ยืนยันความถูกต้องของการติดตั้งของคุณด้วยคำสั่ง `flutter doctor -v`
]
=== ข้อมูลเฉพาะแพลตฟอร์ม
==== Android <flAndroid>
#iiii ในการพัฒนาแอปพลิเคชัน Android โดยใช้เฟรมเวิร์ก Flutter
#h(7.3em) ในการพัฒนาแอปพลิเคชัน Android โดยใช้เฟรมเวิร์ก Flutter
จำเป็นต้องใช้ส่วนประกอบเครื่องมือพัฒนา Android ดังนี้
- Android SDK (API Level 36 เวลาที่พิมพ์)
- Android SDK Build-Tools
- Android SDK Command-line Tools
- Android SDK Platform-Tools
- Android Emulator (ไม่บังคับ)
#[
#set enum(indent: 7.3em)
1. Android SDK (API Level 36 เวลาที่พิมพ์)
2. Android SDK Build-Tools
3. Android SDK Command-line Tools
4. Android SDK Platform-Tools
5. Android Emulator (ไม่บังคับ)
]
โดยแนะนำให้จัดการและติดตั้งเครื่องมือเหล่านี้ผ่าน Android Studio
#iiii ในการติดตั้ง Android SDK ควรติดตั้ง Android SDK
#h(7.3em) ในการติดตั้ง Android SDK ควรติดตั้ง Android SDK
ล่าสุดถึงแม้ว่าอุปกรณ์ของคุณจะใช้เวอร์ชันที่เก่ากว่านั้น
เพื่อความมั่นใจว่าแอปพลิเคชันจะสามารถใช้กับอุปกรณ์ที่ใหม่ล่าสุดได้
#iiii แอปพลิเคชัน Android จะมี SDK/API level เป้าหมาย (Target SDK/API level) และ
#h(7.3em) แอปพลิเคชัน Android จะมี SDK/API level เป้าหมาย (Target SDK/API level) และ
SDK/API level ขั้นต่ำ (Minimum SDK/API level) โครงงานนี้ เวลาที่พิมพ์ ใช้ API level
เป้าหมาย 36 (Android 16) และ API level ขั้นต่ำ 24 (Android 7) ซึ่งรวมกันแล้ว
แอปพลิเคชัน#jb Android จะสามารถติดตั้งได้บนระบบตั้งแต่ API level ขั้นต่ำจนถึง API level
@@ -133,70 +139,68 @@ SDK/API level ขั้นต่ำ (Minimum SDK/API level) โครงงา
===== Java/Kotlin
#iiiii Java และ Kotlin เป็นภาษาสำคัญสำหรับการพัฒนาแอปพลิเคชัน Android ถึงอย่างไรก็ตาม
#h(11.3em) Java และ Kotlin เป็นภาษาสำคัญสำหรับการพัฒนาแอปพลิเคชัน Android ถึงอย่างไรก็ตาม
แอปพลิเคชัน Flutter นั้นถูกเขียนด้วยภาษา Dart แต่ยังจำเป็นต้องมีโคด Java และ Kotlin
เล็กน้อยเพื่อเริ่มต้นแอปพลิเคชัน Flutter
#iiiii โดยปกติแล้ว Flutter จะสร้างโคดพื้นฐานขึ้นมาให้สำหรับการเริ่มแอปพลิเคชันแบบพื้นฐาน
#h(11.3em) โดยปกติแล้ว Flutter จะสร้างโคดพื้นฐานขึ้นมาให้สำหรับการเริ่มแอปพลิเคชันแบบพื้นฐาน
ดังนั้นจึงไม่จำเป็นต้องมีการเขียนโคด Java หรือ Kotlin เอง แต่ในบางกรณี
อาจต้องเขียนโคดเพิ่มเองหากมีความต้องการเข้าถึงฟีเจอร์พื้นฐานระบบที่ Flutter ไม่มี API
เพื่อให้เข้าถึงได้และไม่มีแพคเกจเพื่อรองรับฟีเจอร์ที่ต้องการ
#iiiii โครงการนี้ใช้ Java 21 (JetBrains Runtime/Azul Zulu OpenJDK)
#h(11.3em) โครงการนี้ใช้ Java 21 (JetBrains Runtime/Azul Zulu OpenJDK)
เป็นหลักในการทำงานกับ Gradle แต่แอปพลิเคชัน Android ที่ผลิตออกมานั้น
เพื่อให้เข้ากับเวอร์ชันที่เก่ากว่าของระบบปฏิบัติการได้ ใช้ Java 11
===== Gradle
#iiiii Gradle เป็นเครื่องมือสร้างระบบอัตโนมัติสำหรับการพัฒนาซอฟต์แวร์หลายภาษา จัดการงานต่าง
เช่น การคอมไพล์ การแพ็คเกจ การทดสอบ การปรับใช้ และการเผยแพร่ ภาษาที่รองรับ ได้แก่ Java
(รวมถึงภาษา Kotlin, Groovy, Scala ที่ใช้ JDK), C/C++ และ JavaScript Gradle
#h(11.3em) Gradle เป็นเครื่องมือสร้างระบบอัตโนมัติสำหรับการพัฒนาซอฟต์แวร์หลายภาษา
จัดการงานต่าง เช่น การคอมไพล์ การแพ็คเกจ การทดสอบ การปรับใช้ และการเผยแพร่ ภาษาที่รองรับ
ได้แก่ Java (รวมถึงภาษา Kotlin, Groovy, Scala ที่ใช้ JDK), C/C++ และ JavaScript Gradle
พัฒนาต่อยอดจากแนวคิดของ Apache Ant และ Apache Maven และนำเสนอภาษาเฉพาะโดเมนที่ใช้
Groovy และ Kotlin ซึ่งต่างจากการกำหนดค่าโครงการที่ใช้ XML ที่ Maven ใช้ Gradle
ใช้กราฟแบบอะไซคลิกกำกับทิศทางเพื่อจัดการการอ้างอิง กราฟนี้ใช้เพื่อกำหนดลำดับของงานที่ควรดำเนินการ
Gradle ทำงานบน Java Virtual Machine
#iiiii Gradle คือเครื่องมือหลักที่ใช้ในการจัดการโปรเจกต์ Java ส่วนใหญ่ รวมถึงโปรเจกต์ Android
โดยในโครงการนี้ จะใช้ Gradle เวอร์ชัน 8.14.3 เป็นหลัก
#h(11.3em) Gradle คือเครื่องมือหลักที่ใช้ในการจัดการโปรเจกต์ Java ส่วนใหญ่ รวมถึงโปรเจกต์
Android โดยในโครงการนี้ จะใช้ Gradle เวอร์ชัน 8.14.3 เป็นหลัก
#iiiii โดยปกติแล้ว ผู้พัฒนานั้นไม่มีความจำเป็นที่จะต้องแตะต้อง Gradle ด้วยตนเอง และ Flutter
#h(11.3em) โดยปกติแล้ว ผู้พัฒนานั้นไม่มีความจำเป็นที่จะต้องแตะต้อง Gradle ด้วยตนเอง และ Flutter
จะทำการจัดการเอง แต่หากมีความจำเป็นต้องใช้คำสั่ง Gradle ด้วยตนเอง จะมีสคริปต์ `gradlew` (หรือ
`gradlew.bat` สำหรับผู้ใช้ Windows) ภายในโฟลเดอร์ `android` ของโปรเจกต์ Flutter
เสมอเพื่อเรียกใช้ Gradle ที่ถูกดาวน์โหลดมาสำหรับโปรเจกต์นั้น
==== Linux <flLinuxDetails>
#iiii เช่นเดียวกับ Android ที่กล่าวไปข้างต้น Flutter
#h(7.3em) เช่นเดียวกับ Android ที่กล่าวไปข้างต้น Flutter
มีการสร้างโคดสำหรับการเปิดแอปพลิเคชันแบบพื้นฐาน แต่สำหรับ Linux แล้วนั้น Flutter ใช้โคด C++
และเฟรมเวิร์ก CMake ในการสร้างรากฐานของแอปพลิเคชัน
#iiii ในการพัฒนาแอปพลิเคชันสำหรับ Linux ต้องติดตั้งโปรแกรมเพิ่มเติม#jb (build dependencies)
ขยายความคือ ด้านบนคือสิ่งที่จำเป็นหากมีระบบอื่นเป็นเป้าหมาย แต่หากต้องการพัฒนาแอปพลิเคชัน Linux
ต้องติดตั้งโปรแกรมในรายการหน้าถัดไปเพิ่ม
#h(7.3em) ในการพัฒนาแอปพลิเคชันสำหรับ Linux ต้องติดตั้งโปรแกรมเพิ่มเติม#jb (build
dependencies) ขยายความคือ ด้านบนคือสิ่งที่จำเป็นหากมีระบบอื่นเป็นเป้าหมาย
แต่หากต้องการพัฒนาแอปพลิเคชัน Linux ต้องติดตั้งโปรแกรมในรายการหน้าถัดไปเพิ่ม
#pagebreak()
#grid(
columns: 2,
column-gutter: 1in,
[
- GTK 3 (ไลบรารีสำหรับการพัฒนา)
- pkg-config
- ไลบรารี GNU Standard C++ v3
],
[
- Clang
- CMake
- Ninja
],
)
#[
#set enum(indent: 7.3em)
1. GTK 3 (ไลบรารีสำหรับการพัฒนา)
2. pkg-config
3. ไลบรารี GNU Standard C++ v3
4. Clang
5. CMake
6. Ninja
]
#iiii การติดตั้งไลบรารีและโปรแกรมที่กล่าวไปข้างต้นจะแตกต่างกันไปแต่ละการแจกจ่าย Linux และ
#h(7.3em) การติดตั้งไลบรารีและโปรแกรมที่กล่าวไปข้างต้นจะแตกต่างกันไปแต่ละการแจกจ่าย Linux และ
Flutter ใช้ไลบรารีพื้นฐานดังกล่าวในการทำงานของแอปพลิเคชัน (runtime dependencies)
- GTK 3
- blkid
- LZMA
#[
#set enum(indent: 7.3em)
1. GTK 3
2. blkid
3. LZMA
]
แต่โดยทั่วไปแล้ว ไลบรารีเหล่านี้ควรถูกติดตั้งมาอยู่แล้วหากคุณใช้ graphical desktop ทั่วไป
@@ -217,6 +221,8 @@ Flutter ใช้ไลบรารีพื้นฐานดังกล่า
caption: [คำสั่งในการติดตั้งรายการแพคเกจต่าง บน Debian],
)
#v(0.5em)
===== Fedora Linux
#afigure(
@@ -251,8 +257,10 @@ Flutter ใช้ไลบรารีพื้นฐานดังกล่า
caption: [คำสั่งในการติดตั้งรายการแพคเกจต่าง บน Arch Linux],
)
#v(0.5em)
==== macOS/iOS
#iiii การพัฒนาแอปพลิเคชันสำหรับ macOS และ iOS นั้นต้องทำบน#jb macOS
#h(7.3em) การพัฒนาแอปพลิเคชันสำหรับ macOS และ iOS นั้นต้องทำบน macOS
เท่านั้นและจำเป็นต้องพึ่งพาเครื่องมือ Xcode แต่เนื่องจากในโครงงานนี้ไม่มีผู้ใช้ macOS
จึงไม่สามารถสร้างไบนารีสำหรับ macOS และ iOS ออกมาได้ และไม่ใช่เป้าหมายของโครงงานนี้เช่นกัน
+261 -123
View File
@@ -12,12 +12,32 @@
คณะผู้จัดทำโครงงานได้ศึกษาข้อมูลเบื้องต้นในการสร้างเครื่องยืนยันตัวตนด้วย NFC
และได้ดำเนินการตามขั้นตอนนี้
+ วางแผนการดำเนินงาน
+ การออกแบบ
+ วัสดุอุปกรณ์
+ ขั้นตอนการประกอบ
+ การทดลอง
+ การวิเคราะห์ข้อมูล
#set enum(indent: 3em)
1. วางแผนการดำเนินงาน
2. การออกแบบ
3. วัสดุอุปกรณ์
4. ขั้นตอนการประกอบ
5. การทดลอง
6. การวิเคราะห์ข้อมูล
#show heading.where(level: 3): it => {
block(
it,
inset: (left: 1.7em),
)
}
#show heading.where(level: 4): it => {
block(
it,
inset: (left: 4.1em),
)
}
#show heading.where(level: 5): it => {
block(
it,
inset: (left: 7.3em),
)
}
== วางแผนการดำเนินงาน
@@ -115,45 +135,69 @@
== การออกแบบ
#figure(
image(
"imgs/ProjectDraft_Modules.png",
alt: "ภาพแสดงการโมเดลโครงงานซึ่งประกอบไปด้วยสามส่วน",
width: 5in,
),
caption: [การออกแบบโครงสร้างเครื่องยืนยันตัวตนด้วย NFC],
)
#v(2em)
== วัสดุอุปกรณ์
+ บอร์ด ESP32 (NodeMCU)
+ กล่องพลาสติก
+ Buzzer
+ เซนเซอร์ PIR
+ เซนเซอร์ NFC 2 ชิ้น
#set enum(indent: 1.7em)
1. บอร์ด ESP32 (NodeMCU)
2. กล่องพลาสติก
3. บัซเซอร์ (Buzzer)
4. เซนเซอร์ NFC (PN532)
// 5. เซนเซอร์ PIR
== ขั้นตอนการประกอบ
=== การติดตั้งอุปกรณ์
โครงงานแบ่งออกเป็น 3 โมดูล
#h(4.1em) โครงงานแบ่งออกเป็น 3 โมดูล
+ โมดูลเซนเซอร์ NFC ขาเข้าและบอร์ด ESP32
+ โมดูลเซนเซอร์ NFC ขาออก
+ โมดูลเซนเซอร์ PIR
#set enum(indent: 4.1em)
1. โมดูลอร์ ESP32
2. โมดูลเซนเซอร์ NFC
// 3. โมดูลเซนเซอร์ PIR
#show heading: it => {
if it.level > 2 {
block(
it,
inset: (left: -3em * (it.level - 2)),
)
} else {
it
}
}
==== โมดูลบอร์ด ESP32
==== โมดูลเซนเซอร์ NFC ขาเข้าและบอร์ด ESP32
#h(7.3em) ทำการเจาะรู 2 รูสำหรับสายและร้อยสายเข้าไปในกล่อง
#iiii ทำการเจาะรู
#figure(
image(
"imgs/MainModuleInternal.jpg",
alt: "ภายในกล่องโมดูลหลัก มีบอร์ดอยู่ภายใน",
height: 2in,
),
caption: [ภายในกล่องโมดูล ESP32],
)
==== โมดูลเซนเซอร์ NFC ขาออก
#v(2em)
#iiii ดำเนินการเจาะรูบริเวณตัวกล่องเพื่อใช้เป็นช่องสำหรับสายไฟ
==== โมดูลเซนเซอร์ NFC
#h(7.3em) ดำเนินการเจาะรูบริเวณตัวกล่องเพื่อใช้เป็นช่องสำหรับสายไฟ
จากนั้นนำสายไฟร้อยผ่านช่องดังกล่าวและต่อเข้ากับเซนเซอร์ NFC ให้เรียบร้อย
==== โมดูลเซนเซอร์ PIR
#figure(
image(
"imgs/NFCSensor_cropped.jpg",
alt: "ภายกล่องโมดูลเซนเซอร์ NFC",
height: 2in,
),
caption: [โมดูลเซนเซอร์ NFC],
)
#v(1.5em)
// ==== โมดูลเซนเซอร์ PIR
=== การเขียนเฟิร์มแวร์ <writingFirmware>
@@ -171,9 +215,15 @@ Windows Terminal อย่างไรก็ตาม เมื่อเปิ
#iii โดยในปัจจุบัน Python เวอร์ชันล่าสุดคือ Python 3.14.2 โดยคุณสามารถติดตั้ง Python และ Git
บน Windows ได้ด้วยการใช้คำสั่งต่อไปนี้
```sh
winget install Python.Python.3.14 Git.Git -e -s winget
```
#figure(
```sh
winget install Python.Python.3.14 Git.Git -e -s winget
```,
kind: image,
caption: [คำสั่งในการติดตั้ง Python 3.14 และ Git],
)
#v(1.5em)
#iii สำหรับระบบปฏิบัติการอื่นนั้น โดยปกติแล้วจะไม่ต้องติดตั้ง Python
เพิ่มเนื่องจากมีติดมากับระบบปฏิบัติการอยู่แล้ว อย่างไรก็ตาม บน Linux อาจต้องมีการติดตั้งการรองรับ
@@ -181,156 +231,244 @@ Virtual Environment แยก โดยแต่ละระบบจะมี
และ Arch สามารถใช้คำสั่งต่อไปนี้ในการติดตั้งทั้ง Python Virtual Environment และ Git
พร้อมกันได้
#pagebreak()
```sh
# Debian
sudo apt install python3-venv git
# Fedora
sudo dnf install python3-virtualenv git
# Arch
sudo pacman -S python-virtualenv git
```
#show raw.where(block: true): set block(below: 2em)
#figure(
```sh
# Debian
sudo apt install python3-venv git
# Fedora
sudo dnf install python3-virtualenv git
# Arch
sudo pacman -S python-virtualenv git
```,
kind: image,
caption: [คำสั่งในการติดตั้ง Virtual Environment และ Git บนการแจกจ่าย Linux ต่าง ],
)
#v(1.5em)
#pagebreak()
==== การติดตั้ง PlatformIO Core ผ่านแพคเกจ
#iiii หากคุณใช้ Fedora Linux หรือ Arch Linux (หรือลูก ของมัน) คุณสามารถติดตั้งแพคเกจ
PlatformIO ได้โดยตรง โดยมีคำสั่งดังนี้:
#h(7.3em) หากคุณใช้ Fedora Linux หรือ Arch Linux (หรือลูก ของมัน) คุณสามารถติดตั้งแพคเกจ
PlatformIO ได้โดยตรง โดยมีคำสั่งดังนี้
```sh
# Fedora Linux
sudo dnf install platformio
# Arch Linux
sudo pacman -S platformio-core
```
- หากคุณติดตั้งแพคเกจ Fedora นั้นแล้ว คุณไม่จำเป็นที่จะต้องติดตั้งกฎ udev ด้วยตนเอง
(ที่จะถูกกล่าวถึงใน@pioudev)
- หากคุณใช้ Arch คุณสามารถติดตั้งแพคเกจกฎ udev ได้โดยตรงโดยไม่ต้องดาวน์โหลดเอง
#figure(
```sh
sudo pacman -S --asdeps platformio-core-udev
```
# Fedora Linux
sudo dnf install platformio
# Arch Linux
sudo pacman -S platformio-core
```,
kind: image,
caption: [คำสั่งในการติดตั้ง PlatformIO Core บน Fedora และ Arch Linux],
)
#v(1.5em)
#set enum(indent: 7.3em)
1. หากคุณติดตั้งแพคเกจ Fedora นั้นแล้ว คุณไม่จำเป็นที่จะต้องติดตั้งกฎ udev ด้วยตนเอง
(ที่จะถูกกล่าวถึงใน@pioudev)
2. หากคุณใช้ Arch คุณสามารถติดตั้งแพคเกจกฎ udev ได้โดยตรงโดยไม่ต้องดาวน์โหลดเอง
#figure(
```sh
sudo pacman -S --asdeps platformio-core-udev
```,
kind: image,
caption: [คำสั่งในการติดตั้งกฎ udev ของ PlatformIO บน Arch Linux],
)
#v(2.5em)
==== การติดตั้ง PlatformIO Core ผ่านสคริปต์
#iiii ถัดไป ในการติดตั้ง PlatformIO Core สามารถทำได้โดยการใช้สคริปต์ติดตั้ง โดยสำหรับ `curl`
สามารถใช้คำสั่งนี้ได้:
#h(7.3em) ถัดไป ในการติดตั้ง PlatformIO Core สามารถทำได้โดยการใช้สคริปต์ติดตั้ง โดยสำหรับ
`curl` สามารถใช้คำสั่งนี้ได้
```sh
curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
```
หรือหากต้องการใช้ `wget`:
```sh
wget -O get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
```
#figure(
```sh
curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
```,
kind: image,
caption: [คำสั่ง `curl` ที่ใช้ในการดาวน์โหลดสคริปต์ติดตั้ง PlatformIO],
)
#pagebreak()
หรือสำหรับ PowerShell, สามารใช้ `iwr` (หรือชื่อเต็มคือ `Invoke-WebRequest`) ได้:
#h(7.3em) หรือหากต้องการใช้ `wget`
```sh
iwr -OutFile get-platformio.py -Uri https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
```
#figure(
```sh
wget -O get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
```,
kind: image,
caption: [คำสั่ง `wget` ที่ใช้ในการดาวน์โหลดสคริปต์ติดตั้ง PlatformIO],
)
#v(1.5em)
#h(7.3em) หรือสำหรับ PowerShell, สามารถใช้ `iwr` (หรือชื่อเต็มคือ `Invoke-WebRequest`)
ได้
#figure(
```sh
iwr -OutFile get-platformio.py -Uri https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
```,
kind: image,
caption: [คำสั่ง `iwr` ที่ใช้ในการดาวน์โหลดสคริปต์ติดตั้ง PlatformIO],
)
#v(1.5em)
(มีการเว้นบรรทัดใหม่เนื่องจากพื้นที่ไม่เพียงพอ โปรดอย่าเว้นบรรทัดเมื่อพิมพ์คำสั่งจริง)
#iiii แล้วดังนั้นจึงใช้คำสั่ง `python3 get-platformio.py`
#h(7.3em) แล้วดังนั้นจึงใช้คำสั่ง `python3 get-platformio.py`
ในการรันสคริปต์ติดตั้งที่ได้ทำการดาวน์โหลดมา โดยค่าเริ่มต้นแล้ว PlatformIO
จะไม่เพิ่มตนเองเข้าไปยังตัวแปรสิ่งแวดล้อม PATH
ซึ่งจำเป็นในการใช้คำสั่งจากที่ใหนก็ได้โดยไม่ต้องกล่าวถึงไฟล์พาธ
#iiii โดยสำหรับ Linux แล้วนั้น คุณต้องเพิ่ม `$HOME/.local/bin/` เข้าไปยัง PATH ของคุณ
โดยหากคุณใช้ Bash คุณสามารถแก้ไข `~/.bash_profile` และเพิ่มบรรทัดนี้เข้าไปได้:
#h(7.3em) โดยสำหรับ Linux แล้วนั้น คุณต้องเพิ่ม `$HOME/.local/bin/` เข้าไปยัง PATH ของคุณ
โดยหากคุณใช้ Bash คุณสามารถแก้ไข `~/.bash_profile` และเพิ่มบรรทัดนี้เข้าไปได้
```sh
export PATH=$PATH:$HOME/.local/bin
```
#figure(
```sh
export PATH=$PATH:$HOME/.local/bin
```,
kind: image,
caption: [โคดที่ต้องใช้ในการเพิ่ม `~/.local/bin` เข้า PATH],
)
#iiii หากคุณใช้ Zsh สามารถใช้โคดเดียวกันได้ เพียงแต่คุณต้องแก้ไขไฟล์ `~/.zprofile` หรือ
#v(1.5em)
#h(7.3em) หากคุณใช้ Zsh สามารถใช้โคดเดียวกันได้ เพียงแต่คุณต้องแก้ไขไฟล์ `~/.zprofile` หรือ
`~/.zshrc` แทน
โดยบน Windows มีขั้นตอนดังนี้:
#h(7.3em) โดยบน Windows มีขั้นตอนดังนี้
+ กด Windows + R
+ พิมพ์ `sysdm.cpl` และกด Enter
+ ในหน้าต่าง *System Properties* คลิกไปยังแท็บ *Advanced*
+ คลิกปุ่ม *Environment Variables*
#[
#set enum(indent: 7.3em)
1. กด Windows + R
2. พิมพ์ `sysdm.cpl` และกด Enter
3. ในหน้าต่าง _System Properties_ คลิกไปยังแท็บ _Advanced_
4. คลิกปุ่ม _Environment Variables_
]
หลังจากนั้น เลือกตัวแปร *Path* ในส่วน *User variables* แล้วจึงกด *Edit* แล้วเพิ่ม
#h(7.3em) จากนั้น เลือกตัวแปร _Path_ ในส่วน _User variables_ แล้วจึงกด _Edit_ แล้วเพิ่ม
`%USERPROFILE%\.platformio\penv\Scripts\` เข้าไปในรายการ
==== 99-platformio-udev.rules <pioudev>
#iiii ผู้ใช้ Linux จำเป็นที่จะต้องติดตั้งกฎ udev โดยสามารถดูไฟล์กฎ udev เวอร์ชันล่าสุดได้ที่
#h(7.3em) ผู้ใช้ Linux จำเป็นที่จะต้องติดตั้งกฎ udev โดยสามารถดูไฟล์กฎ udev เวอร์ชันล่าสุดได้ที่
https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules
*หมายเหตุ:* โปรดตรวจสอบว่า PID และ VID ของบอร์ดคุณอยู่ในไฟล์กฎนั้น โดยคุณสามารถดู PID/VID
และโปรดตรวจสอบว่า PID และ VID ของบอร์ดคุณอยู่ในไฟล์กฎนั้น โดยคุณสามารถดู PID/VID
ของบอร์ดคุณได้ผ่านคำสั่ง `pio device list`
#iiii โดยไฟล์นั้นต้องถูกวางอยู่ที่ `/etc/udev/rules.d/99-platformio-udev.rules`
#h(7.3em) โดยไฟล์นั้นต้องถูกวางอยู่ที่ `/etc/udev/rules.d/99-platformio-udev.rules`
(ตำแหน่งที่ดีที่สุด) หรือ `/lib/udev/rules.d/99-platformio-udev.rules`
(อาจจำเป็นสำหรับบางระบบที่พัง)
โปรดใช้คำสั่งต่อไปนี้ในการดาวน์โหลดและวางไฟล์นั้นไว้ในสถานที่ที่ถูกต้อง:
#h(7.3em) โปรดใช้คำสั่งต่อไปนี้ในการดาวน์โหลดและวางไฟล์นั้นไว้ในสถานที่ที่ถูกต้อง
```sh
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
```
#figure(
```sh
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
```,
kind: image,
caption: [คำสั่งในการดาวน์โหลดไฟล์กฎ `udev`],
)
หรือคุณก็สามารถดาวน์โหลดไฟล์นั้นด้วยตัวเองและคัดลอกมันไปในโฟลเดอร์ที่หมายได้เช่นกัน
#v(1.5em)
```sh
sudo cp 99-platformio-udev.rules /etc/udev/rules.d/99-platformio-udev.rules
```
#h(7.3em) หรือคุณก็สามารถดาวน์โหลดไฟล์นั้นด้วยตัวเองและคัดลอกมันไปในโฟลเดอร์ที่หมายได้เช่นกัน
หลังจากนั้น รีสตาร์ทบริการ udev:
#figure(
```sh
sudo cp 99-platformio-udev.rules /etc/udev/rules.d/99-platformio-udev.rules
```,
kind: image,
caption: [คำสั่งในการคัดลอกไฟล์กฎ `udev` ไปยังสถานที่ที่ถูกต้อง],
)
```sh
sudo service udev restart
```
หรือ:
```sh
sudo udevadm control --reload-rules
sudo udevadm trigger
```
#v(1.5em)
หลังจากติดตั้งไฟล์นี้แล้ว ถอดสายที่เชื่อมต่อระหว่างบอร์ดและคอมพิวเตอร์ของคุณแล้วเสียบมันใหม่
#h(7.3em) หลังจากนั้น รีสตาร์ทบริการ udev
#figure(
```sh
sudo service udev restart
```,
kind: image,
caption: [คำสั่งในการรีสตาร์ทบริการ `udev`],
)
#v(1.5em)
#h(7.3em) หรือทำการรีโหลดและทริกเกอร์กฎ
#figure(
```sh
sudo udevadm control --reload-rules
sudo udevadm trigger
```,
kind: image,
caption: [คำสั่งในการรีโหลดกฎ `udev`],
)
#v(1.5em)
#h(7.3em) หลังจากติดตั้งไฟล์นี้แล้ว ถอดสายที่เชื่อมต่อระหว่างบอร์ดและคอมพิวเตอร์ของคุณแล้วเสียบมันใหม่
==== การดาวน์โหลดโปรเจกต์
#iiii สามารถใช้ Git ในการ clone โปรเจกต์ได้ด้วยคำสั่งต่อไปนี้:
#h(7.3em) สามารถใช้ Git ในการ clone โปรเจกต์ได้ด้วยคำสั่งต่อไปนี้
```sh
git clone https://gitskette.dailitation.xyz/linesofcodes/liteauth-firmware32.git
```
#figure(
```sh
git clone https://gitskette.dailitation.xyz/linesofcodes/liteauth-firmware32.git
```,
kind: image,
caption: [คำสั่งในการโคลนโคดสำหรับเฟิร์มแวร์],
)
#iiii โดย Git นั้นจะทำการโคลนโปรเจกต์ไปที่โฟลเดอร์ `liteauth-firmware32`
#v(1.5em)
#h(7.3em) โดย Git นั้นจะทำการโคลนโปรเจกต์ไปที่โฟลเดอร์ `liteauth-firmware32`
เนื่องจากเป็นชื่อของ Git repository หรือหากไม่ต้องการใช้ Git กรุณาไปที่
https://gitskette.dailitation.xyz/linesofcodes/liteauth-firmware32 และทำการคลิกปุ่ม
*Code* แล้วกด *Download ZIP* หรือ *Download TAR.GZ* แล้วทำการแตกไฟล์ได้ตามปกติ
หลังจากนั้น ไปที่โฟลเดอร์ของคุณในเทอร์มินัลโดยใช้คำสั่ง `cd`
#pagebreak()
_Code_ แล้วกด _Download ZIP_ หรือ _Download TAR.GZ_ แล้วทำการแตกไฟล์ได้ตามปกติ
จากนั้นจึงไปที่โฟลเดอร์ของคุณในเทอร์มินัลโดยใช้คำสั่ง `cd`
==== คำสั่ง PlatformIO เบื้องต้น
#[
#set list(indent: 9.25em)
- `pio run --list-targets`: ดูรายการเป้าหมายคำสั่งรัน
- `pio run upload`: รันเป้าหมายอัพโหลด
#set enum(indent: 7.3em)
1. `pio run --list-targets` เพื่อดูรายการเป้าหมายคำสั่งรัน
2. `pio run upload` เพื่อรันเป้าหมายอัพโหลด
ซึ่งนี่คือคำสั่งที่คุณควรจะใช้ในการเขียนเฟิร์มแวร์ลงบนบอร์ด
- `pio device monitor`: เปิด Serial Monitor
3. `pio device monitor` พื่อเปิด Serial Monitor
]
#iiii *หมายเหตุ:* โปรดใช้คำสั่งประเภท `pio run` ในโฟลเดอร์ของโปรเจกต์
#h(7.3em) และโปรดใช้คำสั่งประเภท `pio run` ในโฟลเดอร์ของโปรเจกต์
#include "BuildApp.typ"
== การทดสอบ
#set enum(indent: 1.7em)
1. เข้าแอพลิเคชัน liteauthconfig
2. ทำการเชื่อมต่อไวไฟที่ต้องการให้อุปกรณ์เชื่อมต่อ (ต้องไม่ใช่ไวไฟ 2.4 GHz)
3. กดปุ่มบวก
4. กดตั้งค่าอุปกรณ์ใหม่ (Setup new device)
5. ตั้งชื่ออุปกรณ์และใส่รหัสผ่านเครือข่าย
6. กดปุ่มติ๊กถูกเพื่อเริ่มการตั้งค่าอุปกรณ์
7. เข้าสู่โหมดลงทะเบียนอุปกรณ์ NFC
8. ทำการแตะอุปกรณ์ NFC (เช่นโทรศัพท์ที่รองรับหรือแท็ก NFC)
9. ออกจากโหมดลงทะเบียน
10. ทำการแตะอุปกรณ์ NFC ที่ลงทะเบียน
11. รอสังเกตุรายการกิจกรรม (Activity Logs)
== การวิเคราะห์ข้อมูล
#h(1.7em) วิเคราะห์จากตารางการทดลองตามความเร็วในการทำงานจริงของเครื่องยืนยันตัวตนด้วย NFC
+5 -5
View File
@@ -18,17 +18,17 @@
node((1, 3), [เชื่อมต่อเครือข่าย]),
edge("-|>"),
node((0, 4), [มีอุปกรณ์ควบคุม\ หลักแล้วหรือไม่], shape: diamond),
node((0, 3.5), [ตั้งค่าเซิร์ฟเวอร์ HTTPS]),
edge("-|>"),
node((0, 5), [มีอุปกรณ์ควบคุม\ หลักแล้วหรือไม่], shape: diamond),
edge("-|>", [ไม่มี]),
edge("d", "-|>", [มี]),
node((1, 4), [สร้างโทเค็นสำหรับการยืนยัน\ อุปกรณ์ควบคุมหลัก]),
edge("-|>"),
node((1, 5), [รออุปกรณ์ควบคุมหลัก\ แตะเซนเซอร์ NFC]),
edge("-|>"),
node((0, 5), [ตั้งค่าเซิร์ฟเวอร์ HTTPS]),
node((1, 5), [รออุปกรณ์ควบคุมหลัก\ ติดต่อกับอุปกรณ์]),
edge("-|>"),
node((0, 6), shape: circle, radius: 1em),
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Before

Width:  |  Height:  |  Size: 2.8 MiB

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB