More fixes
This commit is contained in:
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
#i ผู้จัดทำขอขอบคุณครูที่ปรึกษาและครูที่ปรึกษาร่วม นายภาคิน เหรียญทอง และนายวสันต์ สารคำ ที่ได้ให้คำปรึกษาและคำแนะนำวิธีการในการจัดทำโครงงานให้แก่กลุ่มของข้าพเจ้า ช่วยให้ชิ้นงานสำเร็จลุล่วงตามจุดประสงค์ที่ได้ตั้งไว้อย่างราบรื่น และขอขอบคุณวิทยาลัยเทคนิคหนองคายที่ได้ให้โอกาศแก่กลุ่มของข้าพเจ้าในการประดิษฐ์เครื่องยืนยันตัวตนด้วยระบบ NFC นี้ขึ้นมา
|
#i ผู้จัดทำขอขอบคุณครูที่ปรึกษาและครูที่ปรึกษาร่วม นายภาคิน เหรียญทอง และนายวสันต์ สารคำ ที่ได้ให้คำปรึกษาและคำแนะนำวิธีการในการจัดทำโครงงานให้แก่กลุ่มของข้าพเจ้า ช่วยให้ชิ้นงานสำเร็จลุล่วงตามจุดประสงค์ที่ได้ตั้งไว้อย่างราบรื่น และขอขอบคุณวิทยาลัยเทคนิคหนองคายที่ได้ให้โอกาศแก่กลุ่มของข้าพเจ้าในการประดิษฐ์เครื่องยืนยันตัวตนด้วยระบบ NFC นี้ขึ้นมา
|
||||||
|
|
||||||
|
#v(1em)
|
||||||
|
|
||||||
#align(right, grid(
|
#align(right, grid(
|
||||||
columns: 2,
|
columns: 2,
|
||||||
column-gutter: 1em,
|
column-gutter: 1em,
|
||||||
|
|||||||
+7
-7
@@ -55,16 +55,16 @@ Foundation; EFF) ด้วยการสนับสนุนจากนัก
|
|||||||
|
|
||||||
#[
|
#[
|
||||||
#set enum(indent: 6em)
|
#set enum(indent: 6em)
|
||||||
+ ผู้ใช้เชื่อมั่นว่าอุปกรณ์ของตน โฮสต์เบราว์เซอร์ และวิธีการเข้าถึงเบราว์เซอร์นั้นไม่ถูกบุกรุก (กล่าวคือ
|
1. ผู้ใช้เชื่อมั่นว่าอุปกรณ์ของตน โฮสต์เบราว์เซอร์ และวิธีการเข้าถึงเบราว์เซอร์นั้นไม่ถูกบุกรุก (กล่าวคือ
|
||||||
ไม่มีการโจมตีซัพพลายเชน)
|
ไม่มีการโจมตีซัพพลายเชน)
|
||||||
+ ผู้ใช้เชื่อมั่นว่าซอฟต์แวร์เบราว์เซอร์ใช้งาน HTTPS
|
2. ผู้ใช้เชื่อมั่นว่าซอฟต์แวร์เบราว์เซอร์ใช้งาน HTTPS
|
||||||
ได้อย่างถูกต้องพร้อมกับผู้ให้บริการออกใบรับรองที่ติดตั้งไว้ล่วงหน้าอย่างถูกต้อง
|
ได้อย่างถูกต้องพร้อมกับผู้ให้บริการออกใบรับรองที่ติดตั้งไว้ล่วงหน้าอย่างถูกต้อง
|
||||||
+ ผู้ใช้เชื่อมั่นว่าผู้ให้บริการออกใบรับรองจะรับรองเฉพาะเว็บไซต์ที่ถูกต้องตามกฎหมายเท่านั้น (กล่าวคือ
|
3. ผู้ใช้เชื่อมั่นว่าผู้ให้บริการออกใบรับรองจะรับรองเฉพาะเว็บไซต์ที่ถูกต้องตามกฎหมายเท่านั้น (กล่าวคือ
|
||||||
ผู้ให้บริการออกใบรับรองจะไม่ถูกบุกรุกและไม่มีการออกใบรับรองที่ผิดพลาด)
|
ผู้ให้บริการออกใบรับรองจะไม่ถูกบุกรุกและไม่มีการออกใบรับรองที่ผิดพลาด)
|
||||||
+ เว็บไซต์มีใบรับรองที่ถูกต้อง ซึ่งหมายความว่าได้รับการลงนามโดยผู้ให้บริการที่เชื่อถือได้
|
4. เว็บไซต์มีใบรับรองที่ถูกต้อง ซึ่งหมายความว่าได้รับการลงนามโดยผู้ให้บริการที่เชื่อถือได้
|
||||||
+ ใบรับรองระบุเว็บไซต์ได้อย่างถูกต้อง (เช่น เมื่อเบราว์เซอร์เข้าชม https://example.com
|
5. ใบรับรองระบุเว็บไซต์ได้อย่างถูกต้อง (เช่น เมื่อเบราว์เซอร์เข้าชม https://example.com
|
||||||
ใบรับรองที่ได้รับนั้นถูกต้องสำหรับ example.com และไม่ใช่ของหน่วยงานอื่น)
|
ใบรับรองที่ได้รับนั้นถูกต้องสำหรับ example.com และไม่ใช่ของหน่วยงานอื่น)
|
||||||
+ ผู้ใช้เชื่อมั่นว่าเลเยอร์การเข้ารหัสของโปรโตคอล (SSL/TLS) มีความปลอดภัยเพียงพอจากการดักฟัง
|
6. ผู้ใช้เชื่อมั่นว่าเลเยอร์การเข้ารหัสของโปรโตคอล (SSL/TLS) มีความปลอดภัยเพียงพอจากการดักฟัง
|
||||||
]
|
]
|
||||||
|
|
||||||
#iii HTTPS มีความสำคัญอย่างยิ่งต่อเครือข่ายที่ไม่ปลอดภัยและเครือข่ายที่อาจถูกแทรกแซง
|
#iii HTTPS มีความสำคัญอย่างยิ่งต่อเครือข่ายที่ไม่ปลอดภัยและเครือข่ายที่อาจถูกแทรกแซง
|
||||||
@@ -151,7 +151,7 @@ HTTP เริ่มต้นด้วย "http://" และใช้พอร
|
|||||||
#iiiii มีผู้ให้บริการออกใบรับรองเชิงพาณิชย์จำนวนหนึ่งที่เสนอใบรับรอง SSL/TLS
|
#iiiii มีผู้ให้บริการออกใบรับรองเชิงพาณิชย์จำนวนหนึ่งที่เสนอใบรับรอง SSL/TLS
|
||||||
แบบชำระเงินหลายประเภท รวมถึงใบรับรองการตรวจสอบขยาย
|
แบบชำระเงินหลายประเภท รวมถึงใบรับรองการตรวจสอบขยาย
|
||||||
|
|
||||||
#iiiii Let's Encrypt เปิดตัวในเดือนเมษายน 2559 ให้บริการใบรับรอง SSL/TLS
|
#iiiii Let's Encrypt เปิดตัวในเดือนเมษายน 2559 ให้บริการใบรับรอง#jb SSL/TLS
|
||||||
พื้นฐานแบบอัตโนมัติฟรีแก่เว็บไซต์ มูลนิธิ Electronic Frontier Foundation ระบุว่า Let's Encrypt
|
พื้นฐานแบบอัตโนมัติฟรีแก่เว็บไซต์ มูลนิธิ Electronic Frontier Foundation ระบุว่า Let's Encrypt
|
||||||
จะทำให้การเปลี่ยนจาก HTTP เป็น HTTPS "ง่ายดายเพียงแค่ออกคำสั่งหรือคลิกปุ่ม"
|
จะทำให้การเปลี่ยนจาก HTTP เป็น HTTPS "ง่ายดายเพียงแค่ออกคำสั่งหรือคลิกปุ่ม"
|
||||||
ปัจจุบันผู้ให้บริการเว็บโฮสต์และผู้ให้บริการคลาวด์ส่วนใหญ่ใช้ประโยชน์จาก Let's Encrypt
|
ปัจจุบันผู้ให้บริการเว็บโฮสต์และผู้ให้บริการคลาวด์ส่วนใหญ่ใช้ประโยชน์จาก Let's Encrypt
|
||||||
|
|||||||
@@ -163,33 +163,34 @@ IBM อ้างสิทธิ์ก่อนหน้านี้ คอมพ
|
|||||||
|
|
||||||
#iii ณ ปี 2008 มีผู้ขายและสถาปัตยกรรมไมโครคอนโทรลเลอร์จำนวนมาก รวมไปถึง:#jb
|
#iii ณ ปี 2008 มีผู้ขายและสถาปัตยกรรมไมโครคอนโทรลเลอร์จำนวนมาก รวมไปถึง:#jb
|
||||||
|
|
||||||
#block(inset: (left: 5.5em))[
|
#[
|
||||||
+ หน่วยประมวลผล ARM core โดยเฉพาะคอร์ประเภท ARM Cortex-M
|
#set enum(indent: 5.5em)
|
||||||
+ Microchip Technology Atmel AVR (8 บิต), AVR32 (32 บิต), และ AT91SAM (32 บิต)
|
1. หน่วยประมวลผล ARM core โดยเฉพาะคอร์ประเภท ARM Cortex-M
|
||||||
+ คอร์ M8C ของ Cypress Semiconductor's ที่ถูกใช้ใน Cypress PSoC ของพวกเขา
|
2. Microchip Technology Atmel AVR (8 บิต), AVR32 (32 บิต), และ AT91SAM (32 บิต)
|
||||||
+ Freescale ColdFire (32 บิต) และ S08 (8 บิต)
|
3. คอร์ M8C ของ Cypress Semiconductor's ที่ถูกใช้ใน Cypress PSoC ของพวกเขา
|
||||||
+ Freescale 68HC11 (8 บิต) และอื่น ๆ ที่มีรากฐานมาจากครอบครัว Motorola 6800
|
4. Freescale ColdFire (32 บิต) และ S08 (8 บิต)
|
||||||
+ Intel 8051, ซึ่งนอกจาก Intel ก็ถูกผลิตโดย NXP Semiconductors, Infineon, และอื่น ๆ
|
5. Freescale 68HC11 (8 บิต) และอื่น ๆ ที่มีรากฐานมาจากครอบครัว Motorola 6800
|
||||||
|
6. Intel 8051, ซึ่งนอกจาก Intel ก็ถูกผลิตโดย NXP Semiconductors, Infineon, และอื่น ๆ
|
||||||
หลายรายการ
|
หลายรายการ
|
||||||
+ Infineon: 8 บิต XC800, 16 บิต XE166, 32 บิต XMC4000 (ARM based Cortex M4F), 32
|
7. Infineon: 8 บิต XC800, 16 บิต XE166, 32 บิต XMC4000 (ARM based Cortex M4F), 32
|
||||||
บิต TriCore, และ 32 บิต Aurix Tricore Bit microcontrollers
|
บิต TriCore, และ 32 บิต Aurix Tricore Bit microcontrollers
|
||||||
+ Maxim Integrated MAX32600, MAX32620, MAX32625, MAX32630, MAX32650, MAX32640
|
8. Maxim Integrated MAX32600, MAX32620, MAX32625, MAX32630, MAX32650, MAX32640
|
||||||
+ MIPS
|
9. MIPS
|
||||||
+ Microchip Technology PIC, (8 บิต PIC16, PIC18, 16 บิต dsPIC33 / PIC24), (32 บิต
|
10. Microchip Technology PIC, (8 บิต PIC16, PIC18, 16 บิต dsPIC33 / PIC24), (32
|
||||||
PIC32)
|
บิต PIC32)
|
||||||
+ NXP Semiconductors LPC1000, LPC2000, LPC3000, LPC4000 (32 บิต), LPC900,
|
11. NXP Semiconductors LPC1000, LPC2000, LPC3000, LPC4000 (32 บิต), LPC900,
|
||||||
LPC700 (8 บิต)
|
LPC700 (8 บิต)
|
||||||
+ Parallax Propeller
|
12. Parallax Propeller
|
||||||
+ PowerPC ISE
|
13. PowerPC ISE
|
||||||
+ Rabbit 2000 (8 บิต)
|
14. Rabbit 2000 (8 บิต)
|
||||||
+ Renesas Electronics: RL78 16 บิต MCU; RX 32 บิต MCU; SuperH; V850 32 บิต MCU;
|
15. Renesas Electronics: RL78 16 บิต MCU; RX 32 บิต MCU; SuperH; V850 32 บิต MCU;
|
||||||
H8; R8C 16 บิต MCU
|
H8; R8C 16 บิต MCU
|
||||||
+ Silicon Laboratories ไมโครคอนโทรลเลอร์ Pipelined 8 บิต 8051
|
16. Silicon Laboratories ไมโครคอนโทรลเลอร์ Pipelined 8 บิต 8051
|
||||||
และไมโครคอนโทรลเลอร์แบบ ARM-based 32 บิต สัญญาณผสม
|
และไมโครคอนโทรลเลอร์แบบ ARM-based 32 บิต สัญญาณผสม
|
||||||
+ STMicroelectronics STM8 (8 บิต), ST10 (16 บิต), STM32 (32 บิต), SPC5
|
17. STMicroelectronics STM8 (8 บิต), ST10 (16 บิต), STM32 (32 บิต), SPC5
|
||||||
(automotive 32 บิต)
|
(automotive 32 บิต)
|
||||||
+ Texas Instruments TI MSP430 (16 บิต), MSP432 (32 บิต), C2000 (32 บิต)
|
18. Texas Instruments TI MSP430 (16 บิต), MSP432 (32 บิต), C2000 (32 บิต)
|
||||||
+ Toshiba TLCS-870 (8 บิต/16 บิต)
|
19. Toshiba TLCS-870 (8 บิต/16 บิต)
|
||||||
]
|
]
|
||||||
|
|
||||||
#iiii และยังมีอีกมากมาย โดยบางอย่างนั้นถูกใช้ในแอปพลิเคชันที่เจาะจงมาก
|
#iiii และยังมีอีกมากมาย โดยบางอย่างนั้นถูกใช้ในแอปพลิเคชันที่เจาะจงมาก
|
||||||
@@ -206,8 +207,6 @@ dual-core หรือไมโครโปรเซสเซอร์ RISC-V
|
|||||||
ยังรวมส่วนประกอบที่จำเป็นสำหรับการสื่อสารข้อมูลไร้สาย เช่น สวิตช์เสาอากาศในตัว บาลัน RF
|
ยังรวมส่วนประกอบที่จำเป็นสำหรับการสื่อสารข้อมูลไร้สาย เช่น สวิตช์เสาอากาศในตัว บาลัน RF
|
||||||
เครื่องขยายกำลัง เครื่องรับสัญญาณรบกวนต่ำ ตัวกรอง และโมดูลการจัดการพลังงาน
|
เครื่องขยายกำลัง เครื่องรับสัญญาณรบกวนต่ำ ตัวกรอง และโมดูลการจัดการพลังงาน
|
||||||
|
|
||||||
#[
|
|
||||||
// #set par(spacing: 0.75em)
|
|
||||||
#afigure(
|
#afigure(
|
||||||
image("Microcontroller/ESP32-C3_RISC-V_NodeMCU_board.jpg", width: 2in),
|
image("Microcontroller/ESP32-C3_RISC-V_NodeMCU_board.jpg", width: 2in),
|
||||||
alt: "บอร์ดสีดำ มีพิน GPIO ด้านข้างและมีชิพอยู่บริเวณด้านบนบอร์ด",
|
alt: "บอร์ดสีดำ มีพิน GPIO ด้านข้างและมีชิพอยู่บริเวณด้านบนบอร์ด",
|
||||||
@@ -216,12 +215,13 @@ dual-core หรือไมโครโปรเซสเซอร์ RISC-V
|
|||||||
caption: [บอร์ด NodeMCU ที่มี ESP32-C3-32S],
|
caption: [บอร์ด NodeMCU ที่มี ESP32-C3-32S],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#v(0.5em)
|
||||||
|
|
||||||
#iii โดยทั่วไปแล้ว ESP32
|
#iii โดยทั่วไปแล้ว ESP32
|
||||||
จะถูกฝังอยู่บนแผงวงจรพิมพ์เฉพาะอุปกรณ์หรือนำเสนอเป็นส่วนหนึ่งของชุดการพัฒนาที่มีพินและตัวเชื่อมต่อ
|
จะถูกฝังอยู่บนแผงวงจรพิมพ์เฉพาะอุปกรณ์หรือนำเสนอเป็นส่วนหนึ่งของชุดการพัฒนาที่มีพินและตัวเชื่อมต่อ GPIO
|
||||||
GPIO ที่หลากหลาย โดยมีการกำหนดค่าที่แตกต่างกันไปตามรุ่นและผู้ผลิต ESP32 ได้รับการออกแบบโดย
|
ที่หลากหลาย โดยมีการกำหนดค่าที่แตกต่างกันไปตามรุ่นและผู้ผลิต ESP32 ได้รับการออกแบบโดย Espressif
|
||||||
Espressif Systems และผลิตโดย TSMC โดยใช้กระบวนการ 40 นาโนเมตร
|
Systems และผลิตโดย TSMC โดยใช้กระบวนการ 40 นาโนเมตร มันเป็นผู้สืบทอดของไมโครคอนโทรลเลอร์
|
||||||
มันเป็นผู้สืบทอดของไมโครคอนโทรลเลอร์ ESP8266
|
ESP8266
|
||||||
]
|
|
||||||
|
|
||||||
=== Espressif Systems
|
=== Espressif Systems
|
||||||
|
|
||||||
@@ -259,14 +259,15 @@ things (IoT)
|
|||||||
|
|
||||||
=== Name
|
=== Name
|
||||||
|
|
||||||
#iiii Name คือ ชื่อของพาร์ทิชัน ห้ามซ้ำกัน ชื่อนั้นไม่สำคัญต่อระบบและต้องขนาดไม่เกิน 16 ตัวอักษร (ไม่มีอักขระพิเศษ)
|
#iiii Name คือ ชื่อของพาร์ทิชัน ห้ามซ้ำกัน ชื่อนั้นไม่สำคัญต่อระบบและต้องขนาดไม่เกิน 16 ตัวอักษร
|
||||||
|
(ไม่มีอักขระพิเศษ)
|
||||||
|
|
||||||
=== Type
|
=== Type
|
||||||
|
|
||||||
#iiii Type คือ ประเภทของพาร์ทิชัน สามารถเป็น data หรือ app ได้
|
#iiii Type คือ ประเภทของพาร์ทิชัน สามารถเป็น data หรือ app ได้
|
||||||
|
|
||||||
#[
|
#[
|
||||||
#set enum(indent: 6em)
|
#set enum(indent: 9.25em)
|
||||||
+ app คือพาร์ทิชันที่ใช้ในการเก็บแอปพลิเคชัน
|
+ app คือพาร์ทิชันที่ใช้ในการเก็บแอปพลิเคชัน
|
||||||
+ data คือพาร์ทิชันที่ใช้ในการเก็บข้อมูลทั่วไป
|
+ data คือพาร์ทิชันที่ใช้ในการเก็บข้อมูลทั่วไป
|
||||||
]
|
]
|
||||||
@@ -275,46 +276,55 @@ things (IoT)
|
|||||||
|
|
||||||
#iiii SubType คือ ประเภทย่อย ระบุการใช้งานของพาร์ทิชัน data และ app
|
#iiii SubType คือ ประเภทย่อย ระบุการใช้งานของพาร์ทิชัน data และ app
|
||||||
|
|
||||||
#block(inset: (left: 6em))[
|
#[
|
||||||
+ data
|
#set enum(indent: 9.25em)
|
||||||
+ ota คือ พาร์ทัชันเก็บข้อมูล OTA (สำหรับการอัพเดททางอากาศ, Over-the-air update)
|
1. data
|
||||||
โดยหากไม่ใช้งาน OTA สามารถนำออกได้ โดยขนาดของพาร์ทิชันนี้ควรจะมีขนาดที่แน่นอนอยู่ที่ 8
|
#listy(
|
||||||
KiB (0x2000 ไบต์)
|
indent: 10.75em,
|
||||||
+ nvs คือ พาร์ทิชันเก็บข้อมูลทั่วไปเช่น ข้อมูล Wi-Fi, ข้อมูลการสอบเทียบ PHY ของอุปกรณ์,
|
numbering: thai-numbering,
|
||||||
|
[ota คือ พาร์ทัชันเก็บข้อมูล OTA (สำหรับการอัพเดททางอากาศ, Over-the-air update)
|
||||||
|
โดยหากไม่ใช้งาน OTA สามารถนำออกได้ โดยขนาดของพาร์ทิชันนี้ควรจะมีขนาดที่แน่นอนอยู่ที่ 8 KiB
|
||||||
|
(0x2000 ไบต์)],
|
||||||
|
[nvs คือ พาร์ทิชันเก็บข้อมูลทั่วไปเช่น ข้อมูล Wi-Fi, ข้อมูลการสอบเทียบ PHY ของอุปกรณ์,
|
||||||
และข้อมูลอื่น ๆ ที่ต้องถูกเก็บบนหน่วยความจำถาวร (Non-volatile memory)
|
และข้อมูลอื่น ๆ ที่ต้องถูกเก็บบนหน่วยความจำถาวร (Non-volatile memory)
|
||||||
โดยพาร์ทิชันประเภทนี้เหมาะสมสำหรับการเก็บข้อมูลการตั้งค่าเล็กน้อย ใบรองรับคลาวด์ ฯลฯ
|
โดยพาร์ทิชันประเภทนี้เหมาะสมสำหรับการเก็บข้อมูลการตั้งค่าเล็กน้อย ใบรองรับคลาวด์ ฯลฯ
|
||||||
และการใช้งาน NVS อีกอย่างคือการเก็บข้อมูลที่ละเอียดอ่อน เนื่องจาก NVS รองรับการเข้ารหัส
|
และการใช้งาน NVS อีกอย่างคือการเก็บข้อมูลที่ละเอียดอ่อน เนื่องจาก NVS รองรับการเข้ารหัส
|
||||||
และเป็นสิ่งที่แนะนำอย่างมากที่จะมีพาร์ทิชัน NVS ขนาดขั้นต่ำ 12 KiB (0x3000 ไบต์)
|
และเป็นสิ่งที่แนะนำอย่างมากที่จะมีพาร์ทิชัน NVS ขนาดขั้นต่ำ 12 KiB (0x3000 ไบต์)
|
||||||
และหากจำเป็น คุณสามารถขยายขนาดเพิ่มได้ โดยขนาดที่แนะนำนั้นอยู่ระหว่าง 12 KiB และ 64
|
และหากจำเป็น คุณสามารถขยายขนาดเพิ่มได้ โดยขนาดที่แนะนำนั้นอยู่ระหว่าง 12 KiB และ 64
|
||||||
KiB ถึงแม้ว่าคุณจะสามารถขยายให้มันใหญ่กว่านี้ได้ การใช้งานระบบไฟล์เช่น FAT หรือ SPIFFS
|
KiB ถึงแม้ว่าคุณจะสามารถขยายให้มันใหญ่กว่านี้ได้ การใช้งานระบบไฟล์เช่น FAT หรือ SPIFFS
|
||||||
นั้นจะเหมาะสมสำหรับข้อมูลที่ใหญ่กว่า
|
นั้นจะเหมาะสมสำหรับข้อมูลที่ใหญ่กว่า],
|
||||||
+ coredump คือ ประเภทพาร์ทิชันย่อยนี้มีหน้าที่ในการเก็บข้อมูล core dump บนหน่วยความจำแฟลช
|
[coredump คือ ประเภทพาร์ทิชันย่อยนี้มีหน้าที่ในการเก็บข้อมูล core dump บนหน่วยความจำแฟลช
|
||||||
โดย core dump
|
โดย core dump
|
||||||
นั้นคือข้อมูลที่ถูกใช้งานสำหรับการตรวจสอบข้อผิด-พลาดร้ายแรงเช่นการแครชและแพนิค
|
นั้นคือข้อมูลที่ถูกใช้งานสำหรับการตรวจสอบข้อผิด-พลาดร้ายแรงเช่นการแครชและแพนิค
|
||||||
โดยฟังก์ชันนี้จะต้องถูกเปิดในการตั้งค่าโปรเจกต์และตั้งที่หมายในการแฟลช
|
โดยฟังก์ชันนี้จะต้องถูกเปิดในการตั้งค่าโปรเจกต์และตั้งที่หมายในการแฟลช
|
||||||
และพาร์ทิชันนี้มีขนาดที่แนะนำอยู่ที่ 64 KiB (0x10000)
|
และพาร์ทิชันนี้มีขนาดที่แนะนำอยู่ที่ 64 KiB (0x10000)],
|
||||||
+ nvs_keys คือ พาร์ทิชันที่เป็นประเภทย่อยนี้เก็บคีย์การเข้ารหัสของพาร์ทัชัน NVS
|
[nvs_keys คือ พาร์ทิชันที่เป็นประเภทย่อยนี้เก็บคีย์การเข้ารหัสของพาร์ทัชัน NVS
|
||||||
เมื่อการเข้ารหัสถูกใช้งาน โดยมีขนาดอยู่ที่ 4 KiB (0x1000)
|
เมื่อการเข้ารหัสถูกใช้งาน โดยมีขนาดอยู่ที่ 4 KiB (0x1000)],
|
||||||
+ fat คือ กำหนดพาร์ทิชันสำหรับระบบไฟล์ FAT โดยที่จะเหมาะสมสำหรับข้อมูลใหญ่ ๆ
|
[fat คือ กำหนดพาร์ทิชันสำหรับระบบไฟล์ FAT โดยที่จะเหมาะสมสำหรับข้อมูลใหญ่ ๆ
|
||||||
และหากข้อมูลนั้นถูกเปลี่ยนแปลงบ่อย โดยระบบไฟล์ FAT สามารถใช้ฟีเจอร์ wear leveling
|
และหากข้อมูลนั้นถูกเปลี่ยนแปลงบ่อย โดยระบบไฟล์ FAT สามารถใช้ฟีเจอร์ wear leveling
|
||||||
และการเข้ารหัสได้
|
และการเข้ารหัสได้],
|
||||||
+ spiffs คือ กำหนดพาร์ทิชันสำหรับระบบไฟล์ SPIFFS เหมาะสำหรับไฟล์ใหญ่เช่นกันและรองรับ
|
[spiffs คือ กำหนดพาร์ทิชันสำหรับระบบไฟล์ SPIFFS เหมาะสำหรับไฟล์ใหญ่เช่นกันและรองรับ wear
|
||||||
wear leveling อย่างไรก็ตาม ระบบไฟล์นี้ไม่รองรับการเข้ารหัส
|
leveling อย่างไรก็ตาม ระบบไฟล์นี้ไม่รองรับการเข้ารหัส],
|
||||||
+ app
|
)
|
||||||
+ factory คือ พาร์ทิชันเก็บแอปพลิเคชันเริ่มต้น
|
2. app
|
||||||
โปรแกรมบูตโหลดเดอร์จะเลือกพาร์ทิชันนี้เป็นแอปพลิเคชันเริ่มต้นหากไม่มีพาร์ทิชัน OTA
|
#listy(
|
||||||
หรือพาร์ทิชัน OTA นั้นว่างเปล่า หากมีการใช้พาร์ทิชัน OTA พาร์ทิชัน ota_0
|
indent: 10.75em,
|
||||||
สามารถถูกใช้เป็นแอปพลิเคชันเริ่มต้นได้และพาร์ทิชัน factory สามารถถูกนำออกได้
|
numbering: thai-numbering,
|
||||||
+ ota_0 ถึง ota_15 คือ พาร์ทิชัน ota_x นั้นถูกใช้สำหรับอัพเดท OTA โดยฟีเจอร์ OTA
|
[factory คือ พาร์ทิชันเก็บแอปพลิเคชันเริ่มต้น
|
||||||
|
โปรแกรมบูตโหลดเดอร์จะเลือกพาร์ทิชันนี้เป็นแอปพลิเคชันเริ่มต้นหากไม่มีพาร์ทิชัน OTA หรือพาร์ทิชัน
|
||||||
|
OTA นั้นว่างเปล่า หากมีการใช้พาร์ทิชัน OTA พาร์ทิชัน ota_0
|
||||||
|
สามารถถูกใช้เป็นแอปพลิเคชันเริ่มต้นได้และพาร์ทิชัน factory สามารถถูกนำออกได้],
|
||||||
|
[ota_0 ถึง ota_15 คือ พาร์ทิชัน ota_x นั้นถูกใช้สำหรับอัพเดท OTA โดยฟีเจอร์ OTA
|
||||||
นั้นจำเป็นต้องใช้พาร์ทิชัน OTA อย่างน้อย 2 พาร์ทิชัน (โดยปกติคือ ota_0 และ ota_1)
|
นั้นจำเป็นต้องใช้พาร์ทิชัน OTA อย่างน้อย 2 พาร์ทิชัน (โดยปกติคือ ota_0 และ ota_1)
|
||||||
และจำเป็นต้องใช้พาร์ทิชัน ota ด้วยเช่นกันในการเก็บข้อมูลเกี่ยวกับ OTA โดยสามารถมีพาร์ทิชัน
|
และจำเป็นต้องใช้พาร์ทิชัน ota ด้วยเช่นกันในการเก็บข้อมูลเกี่ยวกับ OTA โดยสามารถมีพาร์ทิชัน
|
||||||
OTA ได้สูงสุด 16 พาร์ทิชัน แต่ 2 พาร์ทิชันคือจำนวนขั้นต่ำที่ต้องใช้สำหรับฟีเจอร์ OTA แบบเบสิค
|
OTA ได้สูงสุด 16 พาร์ทิชัน แต่ 2 พาร์ทิชันคือจำนวนขั้นต่ำที่ต้องใช้สำหรับฟีเจอร์ OTA แบบเบสิค],
|
||||||
+ test คือ ใช้สำหรับการทดสอบในโรงงาน
|
[test คือ ใช้สำหรับการทดสอบในโรงงาน],
|
||||||
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
=== Offset
|
=== Offset
|
||||||
|
|
||||||
Offset คือ กำหนดพื้นที่ที่พาร์ทิชันนั้น ๆ เริ่มต้น โดย Offset นั้นถูกกำหนดโดยการรวมค่า Offset
|
#iiii Offset คือ กำหนดพื้นที่ที่พาร์ทิชันนั้น ๆ เริ่มต้น โดย Offset นั้นถูกกำหนดโดยการรวมค่า Offset
|
||||||
และขนาดของพาร์ทิชันก่อนหน้า 0 อย่างไรก็ตาม Offset จะต้องเป็นทวีคูณของ 4 KiB (0x1000)
|
และขนาดของพาร์ทิชันก่อนหน้า 0 อย่างไรก็ตาม Offset จะต้องเป็นทวีคูณของ 4 KiB (0x1000)
|
||||||
และพาร์ทิชันแอพจะต้องจัดตำแหน่งให้มีขนาด 64 KiB (0x10000) โดยหากปล่อยให้ว่าง ค่า Offset
|
และพาร์ทิชันแอพจะต้องจัดตำแหน่งให้มีขนาด 64 KiB (0x10000) โดยหากปล่อยให้ว่าง ค่า Offset
|
||||||
จะถูกคำนวนโดยอัตโนมัติตามตำแหน่งท้ายของพาร์ทิชันก่อนหน้า รวมถึงการจัดตำแหน่งใด ๆ ที่จำเป็น
|
จะถูกคำนวนโดยอัตโนมัติตามตำแหน่งท้ายของพาร์ทิชันก่อนหน้า รวมถึงการจัดตำแหน่งใด ๆ ที่จำเป็น
|
||||||
@@ -323,11 +333,12 @@ Offset คือ กำหนดพื้นที่ที่พาร์ทิ
|
|||||||
|
|
||||||
=== Size
|
=== Size
|
||||||
|
|
||||||
Size คือ ขนาดของพาร์ทิชัน โดยค่านี้สามารถเป็นเลขทศนิยม, ตัวเลข Hex (นำหน้าด้วย 0x), หรือใช้ตัวอักษรต่อท้ายเพื่อบ่งบอกหน่วย K (กิโล) หรือ M (เมกา) เช่น 4096 = 4K = 0x1000
|
#iiii Size คือ ขนาดของพาร์ทิชัน โดยค่านี้สามารถเป็นเลขทศนิยม, ตัวเลข Hex (นำหน้าด้วย 0x),
|
||||||
|
หรือใช้ตัวอักษรต่อท้ายเพื่อบ่งบอกหน่วย K (กิโล) หรือ M (เมกา) เช่น 4096 = 4K = 0x1000
|
||||||
|
|
||||||
=== Flags
|
=== Flags
|
||||||
|
|
||||||
Flags คือ ในปัจจุบันคอลัมน์นี้ใช้เพียงแค่เพื่อบ่งบอกว่าพาร์ทิชันนั้น ๆ ถูกเข้ารหัสหรือไม่
|
#iiii Flags คือ ในปัจจุบันคอลัมน์นี้ใช้เพียงแค่เพื่อบ่งบอกว่าพาร์ทิชันนั้น ๆ ถูกเข้ารหัสหรือไม่
|
||||||
|
|
||||||
|
|
||||||
== littlefs
|
== littlefs
|
||||||
|
|||||||
+8
-2
@@ -76,12 +76,15 @@ Field) สนามแม่เหล็กไฟฟ้าสลับเป็
|
|||||||
|
|
||||||
การสื่อสารเกิดขึ้นระหว่างอุปกรณ์ "ตัวเริ่มต้น" ที่ใช้งานอยู่และอุปกรณ์เป้าหมาย ซึ่งอาจเป็น
|
การสื่อสารเกิดขึ้นระหว่างอุปกรณ์ "ตัวเริ่มต้น" ที่ใช้งานอยู่และอุปกรณ์เป้าหมาย ซึ่งอาจเป็น
|
||||||
|
|
||||||
+ พาสซีฟ โดยอุปกรณ์ตัวเริ่มต้นจะทำหน้าที่เป็นสนามแม่เหล็กพาหะ
|
#[
|
||||||
|
#set enum(indent: 5.5em)
|
||||||
|
1. พาสซีฟ โดยอุปกรณ์ตัวเริ่มต้นจะทำหน้าที่เป็นสนามแม่เหล็กพาหะ
|
||||||
และอุปกรณ์เป้าหมายจะสื่อสารโดยการปรับสนามแม่เหล็กตกกระทบ ในโหมดนี้
|
และอุปกรณ์เป้าหมายจะสื่อสารโดยการปรับสนามแม่เหล็กตกกระทบ ในโหมดนี้
|
||||||
อุปกรณ์เป้าหมายอาจดึงพลังงานจากสนามแม่เหล็กที่ตัวเริ่มต้นจัดหาให้
|
อุปกรณ์เป้าหมายอาจดึงพลังงานจากสนามแม่เหล็กที่ตัวเริ่มต้นจัดหาให้
|
||||||
|
|
||||||
+ คล่องแคล่ว โดยทั้งอุปกรณ์เริ่มต้นและอุปกรณ์เป้าหมายสื่อสารกันโดยการสร้างฟิลด์ของตัวเองสลับกัน
|
2. คล่องแคล่ว โดยทั้งอุปกรณ์เริ่มต้นและอุปกรณ์เป้าหมายสื่อสารกันโดยการสร้างฟิลด์ของตัวเองสลับกัน
|
||||||
อุปกรณ์จะหยุดส่งสัญญาณเพื่อรับข้อมูลจากอีกอุปกรณ์หนึ่ง โหมดนี้กำหนดให้อุปกรณ์ทั้งสองต้องมีแหล่งจ่ายไฟ
|
อุปกรณ์จะหยุดส่งสัญญาณเพื่อรับข้อมูลจากอีกอุปกรณ์หนึ่ง โหมดนี้กำหนดให้อุปกรณ์ทั้งสองต้องมีแหล่งจ่ายไฟ
|
||||||
|
]
|
||||||
|
|
||||||
#figure(
|
#figure(
|
||||||
table(
|
table(
|
||||||
@@ -101,12 +104,15 @@ Field) สนามแม่เหล็กไฟฟ้าสลับเป็
|
|||||||
|
|
||||||
#iii อุปกรณ์ NFC ที่ใช้งานอยู่ทุกเครื่องสามารถทำงานในโหมดใดโหมดหนึ่งหรือหลายโหมดได้
|
#iii อุปกรณ์ NFC ที่ใช้งานอยู่ทุกเครื่องสามารถทำงานในโหมดใดโหมดหนึ่งหรือหลายโหมดได้
|
||||||
|
|
||||||
|
#[
|
||||||
|
#set enum(indent: 5.5em)
|
||||||
+ การจำลองการ์ด NFC ช่วยให้อุปกรณ์ที่รองรับ NFC เช่น สมาร์ทโฟน ทำหน้าที่เหมือนสมาร์ทการ์ด
|
+ การจำลองการ์ด NFC ช่วยให้อุปกรณ์ที่รองรับ NFC เช่น สมาร์ทโฟน ทำหน้าที่เหมือนสมาร์ทการ์ด
|
||||||
ช่วยให้ผู้ใช้ทำธุรกรรมต่างๆ เช่น การชำระเงินหรือการออกตั๋วได้ ดูการจำลองการ์ดโฮสต์
|
ช่วยให้ผู้ใช้ทำธุรกรรมต่างๆ เช่น การชำระเงินหรือการออกตั๋วได้ ดูการจำลองการ์ดโฮสต์
|
||||||
+ เครื่องอ่าน/เขียน NFC ช่วยให้อุปกรณ์ที่เปิดใช้งาน NFC สามารถอ่านข้อมูลที่จัดเก็บไว้ในแท็ก NFC
|
+ เครื่องอ่าน/เขียน NFC ช่วยให้อุปกรณ์ที่เปิดใช้งาน NFC สามารถอ่านข้อมูลที่จัดเก็บไว้ในแท็ก NFC
|
||||||
ราคาไม่แพงที่ฝังอยู่ในฉลากหรือโปสเตอร์อัจฉริยะได้
|
ราคาไม่แพงที่ฝังอยู่ในฉลากหรือโปสเตอร์อัจฉริยะได้
|
||||||
+ NFC เพียร์ทูเพียร์ ช่วยให้อุปกรณ์ที่เปิดใช้งาน NFC
|
+ NFC เพียร์ทูเพียร์ ช่วยให้อุปกรณ์ที่เปิดใช้งาน NFC
|
||||||
สองเครื่องสามารถสื่อสารกันเพื่อแลกเปลี่ยนข้อมูลในลักษณะ เฉพาะกิจ
|
สองเครื่องสามารถสื่อสารกันเพื่อแลกเปลี่ยนข้อมูลในลักษณะ เฉพาะกิจ
|
||||||
|
]
|
||||||
|
|
||||||
แท็ก NFC คือหน่วยเก็บข้อมูลแบบพาสซีฟที่อุปกรณ์ NFC สามารถอ่านและเขียนข้อมูลได้ในบางกรณี#jb
|
แท็ก NFC คือหน่วยเก็บข้อมูลแบบพาสซีฟที่อุปกรณ์ NFC สามารถอ่านและเขียนข้อมูลได้ในบางกรณี#jb
|
||||||
โดยทั่วไปจะมีข้อมูล (ณ ปี 2015 มีขนาดระหว่าง 96 ถึง 8,192 ไบต์)
|
โดยทั่วไปจะมีข้อมูล (ณ ปี 2015 มีขนาดระหว่าง 96 ถึง 8,192 ไบต์)
|
||||||
|
|||||||
+3
-6
@@ -38,13 +38,10 @@ IR แบบสร้างภาพ เซ็นเซอร์ PIR มัก
|
|||||||
โดยปกติแล้วรังสีนี้มองไม่เห็นด้วยตาเปล่าเนื่องจากแผ่รังสีในช่วงความยาวคลื่นอินฟราเรด
|
โดยปกติแล้วรังสีนี้มองไม่เห็นด้วยตาเปล่าเนื่องจากแผ่รังสีในช่วงความยาวคลื่นอินฟราเรด
|
||||||
แต่อุปกรณ์อิเล็กทรอนิกส์ที่ออกแบบมาเพื่อจุดประสงค์นี้ สามารถตรวจจับได้
|
แต่อุปกรณ์อิเล็กทรอนิกส์ที่ออกแบบมาเพื่อจุดประสงค์นี้ สามารถตรวจจับได้
|
||||||
|
|
||||||
#v(1em)
|
|
||||||
|
|
||||||
|
|
||||||
== เครื่องตรวจจับการเคลื่อนไหวแบบ PIR
|
== เครื่องตรวจจับการเคลื่อนไหวแบบ PIR
|
||||||
\
|
|
||||||
#afigure(
|
#afigure(
|
||||||
image("PIR/Motion_detector.jpg", height: image-height),
|
image("PIR/Motion_detector.jpg", height: 2in),
|
||||||
alt: "เครื่องตรวจจับความเคลื่อนไหว ติดตั้งบนเพดาน",
|
alt: "เครื่องตรวจจับความเคลื่อนไหว ติดตั้งบนเพดาน",
|
||||||
attr: [CHG, Public Domain,
|
attr: [CHG, Public Domain,
|
||||||
https://commons.wikimedia.org/w/index.php?curid=6087132],
|
https://commons.wikimedia.org/w/index.php?curid=6087132],
|
||||||
@@ -187,7 +184,7 @@ IR แบบสร้างภาพ เซ็นเซอร์ PIR มัก
|
|||||||
#iiii บางรุ่นผลิตขึ้นโดยใช้กระจกพาราโบลา แบบแบ่งส่วนภายใน เพื่อรวมพลังงานอินฟราเรด
|
#iiii บางรุ่นผลิตขึ้นโดยใช้กระจกพาราโบลา แบบแบ่งส่วนภายใน เพื่อรวมพลังงานอินฟราเรด
|
||||||
ในกรณีที่ใช้กระจก ฝาครอบกระจกพลาสติกโดยทั่วไปจะไม่มีเลนส์เฟรสเนลหล่อขึ้นรูป
|
ในกรณีที่ใช้กระจก ฝาครอบกระจกพลาสติกโดยทั่วไปจะไม่มีเลนส์เฟรสเนลหล่อขึ้นรูป
|
||||||
|
|
||||||
=== PIR ชนิดกระจกแบ่งส่วน
|
#h(12em) 1) PIR ชนิดกระจกแบ่งส่วน
|
||||||
|
|
||||||
#afigure(
|
#afigure(
|
||||||
image("PIR/Front-(mirror_type).jpg", height: 2in),
|
image("PIR/Front-(mirror_type).jpg", height: 2in),
|
||||||
|
|||||||
+5
-5
@@ -48,14 +48,14 @@ Navigator
|
|||||||
+ โดยปกติแล้วเซิร์ฟเวอร์จะระบุตัวตนในรูปแบบของใบรับรองดิจิทัลใบรับรองประกอบด้วยชื่อเซิร์ฟเวอร์ผู้ให้บริการออกใบรับรอง
|
+ โดยปกติแล้วเซิร์ฟเวอร์จะระบุตัวตนในรูปแบบของใบรับรองดิจิทัลใบรับรองประกอบด้วยชื่อเซิร์ฟเวอร์ผู้ให้บริการออกใบรับรอง
|
||||||
(CA) ที่เชื่อถือได้ซึ่งรับรองความถูกต้องของใบรับรอง และคีย์การเข้ารหัสสาธารณะของเซิร์ฟเวอร์
|
(CA) ที่เชื่อถือได้ซึ่งรับรองความถูกต้องของใบรับรอง และคีย์การเข้ารหัสสาธารณะของเซิร์ฟเวอร์
|
||||||
+ ลูกค้าต้องยืนยันความถูกต้องของใบรับรองก่อนดำเนินการต่อ
|
+ ลูกค้าต้องยืนยันความถูกต้องของใบรับรองก่อนดำเนินการต่อ
|
||||||
+ ในการสร้างคีย์เซสชันที่ใช้สำหรับการเชื่อมต่อที่ปลอดภัย ไคลเอนต์จะต้องทำดังนี้:
|
+ ในการสร้างคีย์เซสชันที่ใช้สำหรับการเชื่อมต่อที่ปลอดภัย ไคลเอนต์จะต้องทำดังนี้
|
||||||
+ เข้ารหัสตัวเลขสุ่ม (PreMasterSecret)
|
+ เข้ารหัสตัวเลขสุ่ม (PreMasterSecret)
|
||||||
ด้วยคีย์สาธารณะของเซิร์ฟเวอร์และส่งผลลัพธ์ไปยังเซิร์ฟเวอร์
|
ด้วยคีย์สาธารณะของเซิร์ฟเวอร์และส่งผลลัพธ์ไปยังเซิร์ฟเวอร์
|
||||||
(ซึ่งเฉพาะเซิร์ฟเวอร์เท่านั้นที่จะสามารถถอดรหัสด้วยคีย์ส่วนตัว)
|
(ซึ่งเฉพาะเซิร์ฟเวอร์เท่านั้นที่จะสามารถถอดรหัสด้วยคีย์ส่วนตัว)
|
||||||
จากนั้นทั้งสองฝ่ายใช้ตัวเลขสุ่มเพื่อสร้างคีย์เซสชันเฉพาะสำหรับการเข้ารหัสและถอดรหัสข้อมูลในระหว่างเซสชันในภายหลังหรือ
|
จากนั้นทั้งสองฝ่ายใช้ตัวเลขสุ่มเพื่อสร้างคีย์เซสชันเฉพาะสำหรับการเข้ารหัสและถอดรหัสข้อมูลในระหว่างเซสชันในภายหลังหรือ
|
||||||
+ ใช้การแลกเปลี่ยนคีย์ Diffie--Hellman (หรือรูปแบบ DH ที่เป็นเส้นโค้งวงรี)
|
+ ใช้การแลกเปลี่ยนคีย์ Diffie--Hellman (หรือรูปแบบ DH ที่เป็นเส้นโค้งวงรี)
|
||||||
เพื่อสร้างคีย์เซสชันแบบสุ่มและไม่ซ้ำกันอย่างปลอดภัยสำหรับการเข้ารหัสและถอดรหัส
|
เพื่อสร้างคีย์เซสชันแบบสุ่มและไม่ซ้ำกันอย่างปลอดภัยสำหรับการเข้ารหัสและถอดรหัส
|
||||||
ซึ่งมีคุณสมบัติเพิ่มเติมของการปกปิดแบบส่งต่อ : หากคีย์ส่วนตัวของเซิร์ฟเวอร์ถูกเปิดเผยในอนาคต
|
ซึ่งมีคุณสมบัติเพิ่มเติมของการปกปิดแบบส่งต่อ โดยหากคีย์ส่วนตัวของเซิร์ฟเวอร์ถูกเปิดเผยในอนาคต
|
||||||
จะไม่สามารถใช้คีย์นั้นเพื่อถอดรหัสเซสชันปัจจุบันได้
|
จะไม่สามารถใช้คีย์นั้นเพื่อถอดรหัสเซสชันปัจจุบันได้
|
||||||
แม้ว่าเซสชันนั้นจะถูกดักจับและบันทึกโดยบุคคลที่สามก็ตาม
|
แม้ว่าเซสชันนั้นจะถูกดักจับและบันทึกโดยบุคคลที่สามก็ตาม
|
||||||
]
|
]
|
||||||
@@ -76,7 +76,7 @@ TLS จะล้มเหลวและการเชื่อมต่อจ
|
|||||||
|
|
||||||
#[
|
#[
|
||||||
#set enum(indent: 6em)
|
#set enum(indent: 6em)
|
||||||
+ การเชื่อมต่อเป็นแบบส่วนตัว (หรือมีความลับ) เนื่องจาก มีการใช้
|
1. การเชื่อมต่อเป็นแบบส่วนตัว (หรือมีความลับ) เนื่องจาก มีการใช้
|
||||||
อัลกอริทึมคีย์แบบสมมาตรในการเข้ารหัสข้อมูลที่ส่ง
|
อัลกอริทึมคีย์แบบสมมาตรในการเข้ารหัสข้อมูลที่ส่ง
|
||||||
คีย์สำหรับการเข้ารหัสแบบสมมาตรนี้จะถูกสร้างขึ้นอย่างเฉพาะเจาะจงสำหรับแต่ละการเชื่อมต่อ
|
คีย์สำหรับการเข้ารหัสแบบสมมาตรนี้จะถูกสร้างขึ้นอย่างเฉพาะเจาะจงสำหรับแต่ละการเชื่อมต่อ
|
||||||
และอิงจากความลับร่วมที่เจรจากันไว้เมื่อเริ่มต้นเซสชัน
|
และอิงจากความลับร่วมที่เจรจากันไว้เมื่อเริ่มต้นเซสชัน
|
||||||
@@ -85,8 +85,8 @@ TLS จะล้มเหลวและการเชื่อมต่อจ
|
|||||||
(ความลับที่เจรจากันไว้จะไม่สามารถเข้าถึงได้โดยผู้ดักฟังและไม่สามารถได้รับ
|
(ความลับที่เจรจากันไว้จะไม่สามารถเข้าถึงได้โดยผู้ดักฟังและไม่สามารถได้รับ
|
||||||
แม้แต่โดยผู้โจมตีที่วางตัวเองอยู่ตรงกลางการเชื่อมต่อ) และเชื่อถือได้
|
แม้แต่โดยผู้โจมตีที่วางตัวเองอยู่ตรงกลางการเชื่อมต่อ) และเชื่อถือได้
|
||||||
(ไม่มีผู้โจมตีคนใดสามารถแก้ไขการสื่อสารระหว่างการเจรจาโดยไม่ถูกตรวจพบ)
|
(ไม่มีผู้โจมตีคนใดสามารถแก้ไขการสื่อสารระหว่างการเจรจาโดยไม่ถูกตรวจพบ)
|
||||||
+ การยืนยันตัวตนของฝ่ายที่สื่อสารสามารถยืนยันได้โดยใช้การเข้ารหัสด้วยคีย์สาธารณะการยืนยันตัวตนนี้จำเป็นสำหรับเซิร์ฟเวอร์และเป็นทางเลือกสำหรับไคลเอนต์
|
2. การยืนยันตัวตนของฝ่ายที่สื่อสารสามารถยืนยันได้โดยใช้การเข้ารหัสด้วยคีย์สาธารณะการยืนยันตัวตนนี้จำเป็นสำหรับเซิร์ฟเวอร์และเป็นทางเลือกสำหรับไคลเอนต์
|
||||||
+ การเชื่อมต่อมีความน่าเชื่อถือ (หรือมีความสมบูรณ์)
|
3. การเชื่อมต่อมีความน่าเชื่อถือ (หรือมีความสมบูรณ์)
|
||||||
เนื่องจากข้อความแต่ละข้อความที่ส่งออกจะมีการตรวจสอบความสมบูรณ์ของข้อความโดยใช้รหัสยืนยันข้อความเพื่อป้องกันการสูญหายหรือการเปลี่ยนแปลงข้อมูลที่ไม่ถูกตรวจพบระหว่างการส่งข้อมูล
|
เนื่องจากข้อความแต่ละข้อความที่ส่งออกจะมีการตรวจสอบความสมบูรณ์ของข้อความโดยใช้รหัสยืนยันข้อความเพื่อป้องกันการสูญหายหรือการเปลี่ยนแปลงข้อมูลที่ไม่ถูกตรวจพบระหว่างการส่งข้อมูล
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
+25
-22
@@ -28,18 +28,20 @@ Notation One (ASN.1)
|
|||||||
|
|
||||||
#iiii โครงสร้างของใบรับรองดิจิทัล X.509 v3 มีดังนี้
|
#iiii โครงสร้างของใบรับรองดิจิทัล X.509 v3 มีดังนี้
|
||||||
|
|
||||||
|
#block(inset: (left: 9.25em))[
|
||||||
+ ใบรับรอง
|
+ ใบรับรอง
|
||||||
+ หมายเลขเวอร์ชัน
|
+ หมายเลขเวอร์ชัน
|
||||||
+ หมายเลขซีเรียล
|
+ หมายเลขซีเรียล
|
||||||
+ รหัสอัลกอริทึมลายเซ็น
|
+ รหัสอัลกอริทึมลายเซ็น
|
||||||
+ ชื่อผู้ออก
|
+ ชื่อผู้ออก
|
||||||
+ ระยะเวลาใช้งานไม่ก่อนหรือไม่หลังจากนั้น
|
+ ระยะเวลาใช้งาน โดยระบุเวลาไม่ก่อนและไม่หลังจากนั้น
|
||||||
+ ชื่อเรื่อง
|
+ ชื่อเรื่อง
|
||||||
+ ข้อมูลคีย์สาธารณะของเรื่อง ได้แก่ อัลกอริทึมคีย์สาธารณะ
|
+ ข้อมูลคีย์สาธารณะของเรื่อง ได้แก่ อัลกอริทึมคีย์สาธารณะ
|
||||||
คีย์สาธารณะของเรื่องเช่นรหัสประจำตัวผู้ออก (ไม่จำเป็น)
|
คีย์สาธารณะของเรื่องเช่นรหัสประจำตัวผู้ออก (ไม่จำเป็น) รหัสประจำตัวเฉพาะเรื่อง (ไม่จำเป็น)
|
||||||
รหัสประจำตัวเฉพาะเรื่อง (ไม่จำเป็น) ส่วนขยาย (ไม่จำเป็น)
|
ส่วนขยาย (ไม่จำเป็น)
|
||||||
+ อัลกอริทึมลายเซ็นใบรับรอง
|
+ อัลกอริทึมลายเซ็นใบรับรอง
|
||||||
+ ลายเซ็นใบรับรอง
|
+ ลายเซ็นใบรับรอง
|
||||||
|
]
|
||||||
|
|
||||||
#iiii ฟิลด์ส่วนขยาย (ถ้ามี) จะเป็นลำดับของส่วนขยายใบรับรองอย่างน้อยหนึ่งรายการ
|
#iiii ฟิลด์ส่วนขยาย (ถ้ามี) จะเป็นลำดับของส่วนขยายใบรับรองอย่างน้อยหนึ่งรายการ
|
||||||
แต่ละส่วนขยายมีรหัสประจำตัวเฉพาะของตัวเอง ซึ่งแสดงเป็นตัวระบุวัตถุ (OID)
|
แต่ละส่วนขยายมีรหัสประจำตัวเฉพาะของตัวเอง ซึ่งแสดงเป็นตัวระบุวัตถุ (OID)
|
||||||
@@ -71,38 +73,39 @@ Notation One (ASN.1)
|
|||||||
มีหลายประเภทนามสกุลไฟล์เหล่านี้ยังใช้สำหรับข้อมูลอื่น ๆ เช่น คีย์ส่วนตัวด้วย
|
มีหลายประเภทนามสกุลไฟล์เหล่านี้ยังใช้สำหรับข้อมูลอื่น ๆ เช่น คีย์ส่วนตัวด้วย
|
||||||
|
|
||||||
#[
|
#[
|
||||||
#set enum(indent: 9.75em)
|
#set enum(indent: 9.25em)
|
||||||
+ `.pem` -- (อีเมลอิเล็กทรอนิกส์ที่เพิ่มความเป็นส่วนตัว) ใบรับรอง DER ที่เข้ารหัส Base64
|
1. `.pem` -- (อีเมลอิเล็กทรอนิกส์ที่เพิ่มความเป็นส่วนตัว) ใบรับรอง DER ที่เข้ารหัส Base64
|
||||||
แนบระหว่าง `-----BEGIN CERTIFICATE-----` และ `-----END CERTIFICATE-----`
|
แนบระหว่าง `-----BEGIN CERTIFICATE-----` และ `-----END CERTIFICATE-----`
|
||||||
+ `.cer`, `.crt`, `.der` -- โดยปกติจะอยู่ในรูปแบบไบนารี DER แต่ใบรับรองที่เข้ารหัส Base64
|
2. `.cer`, `.crt`, `.der` -- โดยปกติจะอยู่ในรูปแบบไบนารี DER แต่ใบรับรองที่เข้ารหัส
|
||||||
ก็เป็นเรื่องปกติเช่นกัน (ดู `.pem` ด้านบน)
|
Base64 ก็เป็นเรื่องปกติเช่นกัน (ดู `.pem` ด้านบน)
|
||||||
+ `.p8`, `.p8e`, `.pk8` -- คีย์ส่วนตัวที่ส่งออกตามที่ระบุไว้ใน PKCS\#8 อาจอยู่ในรูปแบบ DER หรือ
|
3. `.p8`, `.p8e`, `.pk8` -- คีย์ส่วนตัวที่ส่งออกตามที่ระบุไว้ใน PKCS\#8 อาจอยู่ในรูปแบบ DER
|
||||||
PEM ที่ขึ้นต้นด้วย `-----BEGIN PRIVATE KEY-----` คีย์ที่เข้ารหัสจะขึ้นต้นด้วย
|
หรือ PEM ที่ขึ้นต้นด้วย `-----BEGIN PRIVATE KEY-----` คีย์ที่เข้ารหัสจะขึ้นต้นด้วย
|
||||||
`-----BEGIN ENCRYPTED PRIVATE KEY-----` และอาจมี `.p8e` เป็นนามสกุลไฟล์
|
`-----BEGIN ENCRYPTED PRIVATE KEY-----` และอาจมี `.p8e` เป็นนามสกุลไฟล์
|
||||||
+ `.p10`, `.csr` -- PKCS\#10 เป็นคำขอลงนามใบรับรอง (CSR) ในรูปแบบ PEM ขึ้นต้นด้วย
|
4. `.p10`, `.csr` -- PKCS\#10 เป็นคำขอลงนามใบรับรอง (CSR) ในรูปแบบ PEM ขึ้นต้นด้วย
|
||||||
`-----BEGIN CERTIFICATE REQUEST-----` แบบฟอร์มเหล่านี้สร้างขึ้นเพื่อส่งไปยังผู้ออกใบรับรอง
|
`-----BEGIN CERTIFICATE REQUEST-----` แบบฟอร์มเหล่านี้สร้างขึ้นเพื่อส่งไปยังผู้ออกใบรับรอง
|
||||||
(CA) แบบฟอร์มประกอบด้วยรายละเอียดสำคัญของใบรับรองที่ร้องขอ เช่น ชื่อสามัญ (/CN), หัวเรื่อง,
|
(CA) แบบฟอร์มประกอบด้วยรายละเอียดสำคัญของใบรับรองที่ร้องขอ เช่น ชื่อสามัญ (/CN), หัวเรื่อง,
|
||||||
องค์กร, รัฐ, ประเทศ รวมถึงคีย์สาธารณะของใบรับรองที่ต้องการให้ลงนาม
|
องค์กร, รัฐ, ประเทศ รวมถึงคีย์สาธารณะของใบรับรองที่ต้องการให้ลงนาม
|
||||||
คีย์เหล่านี้จะได้รับการลงนามโดย CA และใบรับรองจะถูกส่งกลับคืน ใบรับรองที่ส่งคืนคือใบรับรอง
|
คีย์เหล่านี้จะได้รับการลงนามโดย CA และใบรับรองจะถูกส่งกลับคืน ใบรับรองที่ส่งคืนคือใบรับรอง
|
||||||
สาธารณะ (ซึ่งมีคีย์สาธารณะแต่ไม่มีคีย์ส่วนตัว) ซึ่งตัวใบรับรองเองสามารถอยู่ในรูปแบบต่างๆ
|
สาธารณะ (ซึ่งมีคีย์สาธารณะแต่ไม่มีคีย์ส่วนตัว) ซึ่งตัวใบรับรองเองสามารถอยู่ในรูปแบบต่างๆ
|
||||||
ได้หลายรูปแบบ แต่โดยปกติจะเป็น `.p7r`
|
ได้หลายรูปแบบ แต่โดยปกติจะเป็น `.p7r`
|
||||||
+ `.p7r` -- คำตอบ ของ PKCS\#7 ต่อ CSR ประกอบด้วยใบรับรองที่เพิ่งลงนาม และใบรับรองของ CA
|
5. `.p7r` -- คำตอบ ของ PKCS\#7 ต่อ CSR ประกอบด้วยใบรับรองที่เพิ่งลงนาม และใบรับรองของ
|
||||||
เอง
|
CA เอง
|
||||||
+ `.p7s` -- ลายเซ็นดิจิทัล PKCS\#7 อาจมีไฟล์หรือข้อความที่ลงนามต้นฉบับ ใช้ใน S/MIME
|
6. `.p7s` -- ลายเซ็นดิจิทัล PKCS\#7 อาจมีไฟล์หรือข้อความที่ลงนามต้นฉบับ ใช้ใน S/MIME
|
||||||
สำหรับการลงนามในอีเมลกำหนดไว้ใน RFC 2311
|
สำหรับการลงนามในอีเมลกำหนดไว้ใน RFC 2311
|
||||||
+ `.p7m` -- PKCS\#7 (SignedData, EnvelopedData) ข้อความ เช่น ไฟล์ที่เข้ารหัส
|
7. `.p7m` -- PKCS\#7 (SignedData, EnvelopedData) ข้อความ เช่น ไฟล์ที่เข้ารหัส
|
||||||
("enveloped") ข้อความ หรือจดหมายอีเมล MIME กำหนดไว้ใน RFC 2311
|
("enveloped") ข้อความ หรือจดหมายอีเมล MIME กำหนดไว้ใน RFC 2311
|
||||||
+ `.p7c` -- โครงสร้าง SignedData แบบ "certs-only" ของ PKCS\#7 ที่เสื่อมลง
|
8. `.p7c` -- โครงสร้าง SignedData แบบ "certs-only" ของ PKCS\#7 ที่เสื่อมลง
|
||||||
โดยไม่มีข้อมูลใดๆ ให้ลงนาม กำหนดไว้ใน RFC 2311
|
โดยไม่มีข้อมูลใดๆ ให้ลงนาม กำหนดไว้ใน RFC 2311
|
||||||
+ `.p7b` -- โครงสร้าง SignedData ของ PKCS\#7 ที่ไม่มีข้อมูล มีเพียงใบรับรองแบบบันเดิลหรือ CRL
|
9. `.p7b` -- โครงสร้าง SignedData ของ PKCS\#7 ที่ไม่มีข้อมูล มีเพียงใบรับรองแบบบันเดิลหรือ
|
||||||
(ไม่ค่อยเกิดขึ้น) แต่ไม่มีคีย์ส่วนตัว ใช้รูปแบบ DER หรือ BER หรือ PEM ที่ขึ้นต้นด้วย
|
CRL (ไม่ค่อยเกิดขึ้น) แต่ไม่มีคีย์ส่วนตัว ใช้รูปแบบ DER หรือ BER หรือ PEM ที่ขึ้นต้นด้วย
|
||||||
`-----BEGIN PKCS7-----` รูปแบบที่ Windows ใช้สำหรับการแลกเปลี่ยนใบรับรอง รองรับโดย Java
|
`-----BEGIN PKCS7-----` รูปแบบที่ Windows ใช้สำหรับการแลกเปลี่ยนใบรับรอง รองรับโดย
|
||||||
แต่มักใช้นามสกุล `.keystore` แทน ซึ่งแตกต่างจากใบรับรองแบบ `.pem`
|
Java แต่มักใช้นามสกุล `.keystore` แทน ซึ่งแตกต่างจากใบรับรองแบบ `.pem`
|
||||||
รูปแบบนี้มีวิธีที่กำหนดไว้สำหรับการรวมใบรับรองเส้นทางการรับรอง
|
รูปแบบนี้มีวิธีที่กำหนดไว้สำหรับการรวมใบรับรองเส้นทางการรับรอง
|
||||||
+ `.p12`, `.pfx`, `.pkcs12` -- PKCS\#12 อาจมีใบรับรอง (สาธารณะ) และคีย์ส่วนตัว
|
10. `.p12`, `.pfx`, `.pkcs12` -- PKCS\#12 อาจมีใบรับรอง (สาธารณะ) และคีย์ส่วนตัว
|
||||||
(ป้องกันด้วยรหัสผ่าน) ในไฟล์เดียว `.pfx` - _Personal Information eXchange_ PFX
|
(ป้องกันด้วยรหัสผ่าน) ในไฟล์เดียว `.pfx` - _Personal Information eXchange_ PFX
|
||||||
ซึ่งเป็นรุ่นก่อนของ PKCS\#12 (โดยปกติจะมีข้อมูลในรูปแบบ PKCS\#12 เช่น ไฟล์ PFX ที่สร้างใน IIS)
|
ซึ่งเป็นรุ่นก่อนของ PKCS\#12 (โดยปกติจะมีข้อมูลในรูปแบบ PKCS\#12 เช่น ไฟล์ PFX ที่สร้างใน
|
||||||
+ `.crl` -- รายการเพิกถอนใบรับรอง (CRL)
|
IIS)
|
||||||
|
11. `.crl` -- รายการเพิกถอนใบรับรอง (CRL)
|
||||||
หน่วยงานที่ออกใบรับรองจะจัดทำรายการเหล่านี้ขึ้นเพื่อใช้ในการเพิกถอนใบรับรองก่อนหมดอายุ
|
หน่วยงานที่ออกใบรับรองจะจัดทำรายการเหล่านี้ขึ้นเพื่อใช้ในการเพิกถอนใบรับรองก่อนหมดอายุ
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -24,14 +24,3 @@ ASN.1 เช่นเดียวกับ CER การเข้ารหัส
|
|||||||
ในการเข้ารหัสลับและช่วยให้มั่นใจว่าโครงสร้างข้อมูลที่จำเป็นต้องมีการลงนามดิจิทัลจะสร้างการแสดงแบบอนุกรมที่ไม่ซ้ำกัน
|
ในการเข้ารหัสลับและช่วยให้มั่นใจว่าโครงสร้างข้อมูลที่จำเป็นต้องมีการลงนามดิจิทัลจะสร้างการแสดงแบบอนุกรมที่ไม่ซ้ำกัน
|
||||||
DER ถือเป็นรูปแบบมาตรฐานของ BER ตัวอย่างเช่นใน BER ค่าบูลีน true
|
DER ถือเป็นรูปแบบมาตรฐานของ BER ตัวอย่างเช่นใน BER ค่าบูลีน true
|
||||||
สามารถเข้ารหัสเป็นค่าไบต์ที่ไม่ใช่ศูนย์ 255 ค่า ในขณะที่ DER มีวิธีการเข้ารหัสค่าบูลีน true เพียงวิธีเดียว
|
สามารถเข้ารหัสเป็นค่าไบต์ที่ไม่ใช่ศูนย์ 255 ค่า ในขณะที่ DER มีวิธีการเข้ารหัสค่าบูลีน true เพียงวิธีเดียว
|
||||||
|
|
||||||
#pagebreak()
|
|
||||||
|
|
||||||
ข้อจำกัดการเข้ารหัส DER ที่สำคัญที่สุดคือ:
|
|
||||||
|
|
||||||
1. การเข้ารหัสความยาวจะต้องใช้รูปแบบที่แน่นอน
|
|
||||||
- นอกจากนี้ จะต้องใช้การเข้ารหัสที่มีความยาวสั้นที่สุดเท่าที่จะเป็นไปได้
|
|
||||||
2. บิตสตริง อ็อกเท็ตสตริง และสตริงอักขระที่จำกัดต้องใช้การเข้ารหัสแบบดั้งเดิม
|
|
||||||
3. องค์ประกอบของชุดจะถูกเข้ารหัสตามลำดับการเรียงลำดับตามค่าแท็ก
|
|
||||||
|
|
||||||
DER ถูกใช้กันอย่างแพร่หลายสำหรับใบรับรอง ดิจิทัลเช่น X.509
|
|
||||||
|
|||||||
+24
-39
@@ -47,8 +47,11 @@
|
|||||||
|
|
||||||
=== แผนขั้นตอนและวิธีการดำเนินงาน
|
=== แผนขั้นตอนและวิธีการดำเนินงาน
|
||||||
|
|
||||||
|
ตาราง 3.1 ระยะเวลาการดำเนินงาน
|
||||||
|
#v(0.5em, weak: true)
|
||||||
|
|
||||||
#table(
|
#table(
|
||||||
columns: 12,
|
columns: (2fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||||
align: (
|
align: (
|
||||||
left + horizon,
|
left + horizon,
|
||||||
center,
|
center,
|
||||||
@@ -56,16 +59,10 @@
|
|||||||
center,
|
center,
|
||||||
center,
|
center,
|
||||||
center,
|
center,
|
||||||
center,
|
|
||||||
center,
|
|
||||||
center,
|
|
||||||
center,
|
|
||||||
center,
|
|
||||||
center,
|
|
||||||
),
|
),
|
||||||
table.header(
|
table.header(
|
||||||
table.cell(
|
table.cell(
|
||||||
[ขั้นตอนการ\ ดำเนินการ],
|
[ขั้นตอนการดำเนินการ],
|
||||||
rowspan: 2,
|
rowspan: 2,
|
||||||
),
|
),
|
||||||
table.cell(
|
table.cell(
|
||||||
@@ -74,48 +71,30 @@
|
|||||||
),
|
),
|
||||||
table.cell(
|
table.cell(
|
||||||
[พ.ศ.2569],
|
[พ.ศ.2569],
|
||||||
colspan: 8,
|
colspan: 2,
|
||||||
),
|
),
|
||||||
[ต.ค.],
|
[ต.ค.],
|
||||||
[พ.ย.],
|
[พ.ย.],
|
||||||
[ธ.ค.],
|
[ธ.ค.],
|
||||||
[ม.ค.],
|
[ม.ค.],
|
||||||
[ก.พ.],
|
[ก.พ.],
|
||||||
[มี.ค],
|
|
||||||
[เม.ย],
|
|
||||||
[พ.ค.],
|
|
||||||
[มิ.ย.],
|
|
||||||
[ก.ค.],
|
|
||||||
[ส.ค.],
|
|
||||||
),
|
),
|
||||||
[ศึกษาค้นคว้าข้อมูล],
|
[ศึกษาค้นคว้าข้อมูล],
|
||||||
table.cell(arrow, colspan: 3),
|
table.cell(arrow, colspan: 3),
|
||||||
[],
|
[],
|
||||||
[],
|
[],
|
||||||
[],
|
[เสนอหัวข้อ], arrow, [], [], [], [],
|
||||||
[],
|
[เสนอครั้งที่ 1], [], arrow, [], [], [],
|
||||||
[],
|
[ออกแบบและสร้าง], [], table.cell(arrow, colspan: 3), [],
|
||||||
[],
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
[เสนอหัวข้อ], arrow, [], [], [], [], [], [], [], [], [], [],
|
|
||||||
[เสนอครั้งที่ 1], [], arrow, [], [], [], [], [], [], [], [], [],
|
|
||||||
[ออกแบบและสร้าง], [], table.cell(arrow, colspan: 5), [], [], [], [], [],
|
|
||||||
[จัดซื้ออุปกรณ์ทดลอง],
|
[จัดซื้ออุปกรณ์ทดลอง],
|
||||||
[],
|
[],
|
||||||
table.cell(arrow, colspan: 3),
|
table.cell(arrow, colspan: 3),
|
||||||
[],
|
[],
|
||||||
[],
|
[ทดลองการทำงาน], [], [], table.cell(arrow, colspan: 2), [],
|
||||||
[],
|
[ปรับปรุงแก้ไข], [], [], [], [], arrow,
|
||||||
[],
|
[เสนอครั้งที่ 2], [], [], [], arrow, [],
|
||||||
[],
|
[จัดทำรูปเล่ม], table.cell(arrow, colspan: 5),
|
||||||
[],
|
[นำเสนอโครงงาน], [], [], [], [], [],
|
||||||
[],
|
|
||||||
[ทดลองการทำงาน], [], [], table.cell(arrow, colspan: 4), [], [], [], [], [],
|
|
||||||
[ปรับปรุงแก้ไข], [], [], [], [], table.cell(arrow, colspan: 5), [], [],
|
|
||||||
[เสนอครั้งที่ 2], [], [], [], arrow, [], [], [], [], [], [], [],
|
|
||||||
[จัดทำรูปเล่ม], table.cell(arrow, colspan: 11),
|
|
||||||
[นำเสนอโครงงาน], [], [], [], [], [], [], [], [], [], [], [],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
#show: page-theme
|
#show: page-theme
|
||||||
@@ -146,6 +125,8 @@
|
|||||||
|
|
||||||
== ขั้นตอนการประกอบ
|
== ขั้นตอนการประกอบ
|
||||||
|
|
||||||
|
=== การติดตั้งอุปกรณ์
|
||||||
|
|
||||||
โครงงานแบ่งออกเป็น 3 โมดูล
|
โครงงานแบ่งออกเป็น 3 โมดูล
|
||||||
|
|
||||||
+ โมดูลเซนเซอร์ NFC ขาเข้าและบอร์ด ESP32
|
+ โมดูลเซนเซอร์ NFC ขาเข้าและบอร์ด ESP32
|
||||||
@@ -163,12 +144,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
=== โมดูลเซนเซอร์ NFC ขาออก
|
==== โมดูลเซนเซอร์ NFC ขาเข้าและบอร์ด ESP32
|
||||||
|
|
||||||
#i ดำเนินการเจาะรูบริเวณตัวกล่องเพื่อใช้เป็นช่องสำหรับสายไฟ
|
#iiii ทำการเจาะรู
|
||||||
จากนั้นนำสายไฟร้อยผ่านช่องดังกล่าวและต่อเข้ากับเซนเซอร์ NFC ให้เรียบร้อยตามขั้นตอน
|
|
||||||
|
|
||||||
=== การติดตั้งอุปกรณ์
|
==== โมดูลเซนเซอร์ NFC ขาออก
|
||||||
|
|
||||||
|
#iiii ดำเนินการเจาะรูบริเวณตัวกล่องเพื่อใช้เป็นช่องสำหรับสายไฟ
|
||||||
|
จากนั้นนำสายไฟร้อยผ่านช่องดังกล่าวและต่อเข้ากับเซนเซอร์ NFC ให้เรียบร้อย
|
||||||
|
|
||||||
|
==== โมดูลเซนเซอร์ PIR
|
||||||
|
|
||||||
=== การเขียนเฟิร์มแวร์ <writingFirmware>
|
=== การเขียนเฟิร์มแวร์ <writingFirmware>
|
||||||
|
|
||||||
|
|||||||
+75
-6
@@ -1,3 +1,12 @@
|
|||||||
|
#let page-numbering(n) = {
|
||||||
|
let chars = ("ก", "ข", "ค", "ง", "จ", "ฉ", "ช")
|
||||||
|
if n <= chars.len() {
|
||||||
|
chars.at(n - 1)
|
||||||
|
} else {
|
||||||
|
str(n - chars.len()) // fallback to numbers if exceeds available characters
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#let thai-numbering(n) = {
|
#let thai-numbering(n) = {
|
||||||
let chars = ("ก", "ข", "ค", "ง", "จ", "ฉ", "ช")
|
let chars = ("ก", "ข", "ค", "ง", "จ", "ฉ", "ช")
|
||||||
if n <= chars.len() {
|
if n <= chars.len() {
|
||||||
@@ -5,6 +14,7 @@
|
|||||||
} else {
|
} else {
|
||||||
str(n - chars.len()) // fallback to numbers if exceeds available characters
|
str(n - chars.len()) // fallback to numbers if exceeds available characters
|
||||||
}
|
}
|
||||||
|
[)]
|
||||||
}
|
}
|
||||||
|
|
||||||
#let chapter-page(doc) = {
|
#let chapter-page(doc) = {
|
||||||
@@ -38,6 +48,26 @@
|
|||||||
|
|
||||||
#let iiiiii = h(16.85em)
|
#let iiiiii = h(16.85em)
|
||||||
|
|
||||||
|
#let listy(
|
||||||
|
numbering: "1)",
|
||||||
|
indent: 1em,
|
||||||
|
hanging-indent: 0em,
|
||||||
|
body-spacing: .3em,
|
||||||
|
..items,
|
||||||
|
) = context {
|
||||||
|
let nums = range(1, items.pos().len() + 1)
|
||||||
|
let fnums = nums.map(std.numbering.with(numbering))
|
||||||
|
let numwidth = calc.max(..fnums.map(it => measure(it).width))
|
||||||
|
for (num, item) in fnums.zip(items.pos()) {
|
||||||
|
block(inset: (left: hanging-indent), {
|
||||||
|
h(indent - hanging-indent)
|
||||||
|
box(width: numwidth + body-spacing, stroke: none, num)
|
||||||
|
item
|
||||||
|
})
|
||||||
|
v(1em, weak: true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#let page-theme(doc) = {
|
#let page-theme(doc) = {
|
||||||
set page(
|
set page(
|
||||||
paper: "a4",
|
paper: "a4",
|
||||||
@@ -49,7 +79,7 @@
|
|||||||
),
|
),
|
||||||
header: context [
|
header: context [
|
||||||
#h(1fr)
|
#h(1fr)
|
||||||
#counter(page).display(thai-numbering)
|
#counter(page).display(page-numbering)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
set text(
|
set text(
|
||||||
@@ -101,18 +131,57 @@
|
|||||||
}
|
}
|
||||||
show figure.where(kind: "i-figured-table"): set align(start)
|
show figure.where(kind: "i-figured-table"): set align(start)
|
||||||
show figure.where(kind: table): set figure.caption(position: top)
|
show figure.where(kind: table): set figure.caption(position: top)
|
||||||
|
show figure.where(kind: table): t => {
|
||||||
show figure.caption: it => {
|
show figure.caption: it => {
|
||||||
text(weight: "bold")[
|
it.supplement
|
||||||
|
" "
|
||||||
|
it.counter.display(it.numbering)
|
||||||
|
" "
|
||||||
|
it.body
|
||||||
|
}
|
||||||
|
it
|
||||||
|
}
|
||||||
|
show figure.caption.where(position: bottom): it => place(center, it, dy: 2em)
|
||||||
|
show figure.where(kind: "i-figured-image"): i => {
|
||||||
|
show figure.caption: it => {
|
||||||
|
place(
|
||||||
|
center,
|
||||||
|
[
|
||||||
|
#text(weight: "bold")[
|
||||||
#it.supplement
|
#it.supplement
|
||||||
#it.counter.display(it.numbering)
|
#it.counter.display(it.numbering)
|
||||||
]
|
]
|
||||||
it.body
|
#it.body
|
||||||
|
],
|
||||||
|
dy: 2em,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
i
|
||||||
}
|
}
|
||||||
show figure.caption.where(position: bottom): it => place(center, it, dy: 2em)
|
|
||||||
set figure.caption(separator: " ")
|
set figure.caption(separator: " ")
|
||||||
// show figure.where(kind: image): set figure(gap: 2em)
|
|
||||||
show figure.where(kind: image): set block(below: 2.5em)
|
show figure.where(kind: image): set block(below: 2.5em)
|
||||||
set enum(number-align: start + top)
|
set enum(number-align: start + top)
|
||||||
|
show enum.item: it => context {
|
||||||
|
if (it.number == auto) {
|
||||||
|
return it
|
||||||
|
}
|
||||||
|
|
||||||
|
let spacing = enum.indent
|
||||||
|
if spacing == auto {
|
||||||
|
if enum.tight {
|
||||||
|
spacing = par.leading
|
||||||
|
} else {
|
||||||
|
spacing = par.spacing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(
|
||||||
|
h(spacing)
|
||||||
|
+ [#{ str(it.number) + ")" }]
|
||||||
|
+ h(enum.body-indent)
|
||||||
|
+ it.body
|
||||||
|
+ linebreak()
|
||||||
|
)
|
||||||
|
}
|
||||||
set ref(supplement: "หัวข้อ")
|
set ref(supplement: "หัวข้อ")
|
||||||
doc
|
doc
|
||||||
}
|
}
|
||||||
@@ -132,7 +201,7 @@
|
|||||||
),
|
),
|
||||||
header: context [
|
header: context [
|
||||||
#h(1fr)
|
#h(1fr)
|
||||||
#counter(page).display(thai-numbering)
|
#counter(page).display(page-numbering)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
set text(
|
set text(
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
column-gutter: 1fr,
|
column-gutter: 1fr,
|
||||||
it.indented(it.prefix(), it.body()),
|
it.indented(it.prefix(), it.body()),
|
||||||
h(1em),
|
h(1em),
|
||||||
context thai-numbering(counter(page).at(it.element.location()).first()),
|
context page-numbering(counter(page).at(it.element.location()).first()),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user