หน้าแรก ดูโปรเจกต์ทั้งหมด
Hard

โปรเจกต์ Fairytale

กล่องขนาดเล็กที่ขับเคลื่อนโดย Arduino Uno, Adafruit MP3 Music Maker Shield และ NFC breakout board เพื่อเล่นไฟล์ MP3 ด้วยคำสั่งจาก tag

โปรเจกต์ Fairytale

รายการอุปกรณ์และเครื่องมือ

1x JustBoom IR Remote
🛒 สั่งซื้อ
1x Soldering iron (generic)
-
1x Capacitor 100 µF
-
1x Speaker: 0.25W, 8 ohms
-
1x Adafruit Powerboost 1000c
-
1x Rotary potentiometer (generic)
🛒 สั่งซื้อ
1x Arduino MP3 Shield
🛒 สั่งซื้อ
1x Slide Switch
-
1x 3D Printer (generic)
-
2x Resistor 10k ohm
-
1x Hot glue gun (generic)
-
5x Pushbutton switch 12mm
🛒 สั่งซื้อ
1x SunFounder PN532 NFC Module
🛒 สั่งซื้อ
1x IR Remote Receiver
🛒 สั่งซื้อ

รายละเอียดและวิธีทำ

Fairytale

Introduction

Fairytale คือเครื่องเล่น mp3 ที่ขับเคลื่อนด้วย Arduino ซึ่งออกแบบมาเพื่อเล่น Audiobook (หรือไฟล์ MP3 ใดๆ ก็ตาม) จาก SD Card โดยผู้ใช้สามารถควบคุมการเล่นเพลง ไม่ว่าจะเป็น Audiobook หรืออัลบั้มไหน ผ่าน NFC tags ที่นำไปวางใกล้กับ NFC Reader

แท็กเหล่านี้สามารถนำไปติดกับตุ๊กตาตัวเล็กๆ ได้ เช่น สโนว์ไวท์ หรือจะติดไว้บนลูกเต๋าเล็กๆ หรืออะไรก็ตามที่เหมาะกับคุณ เพียงแต่ต้องจำไว้ว่ากล่องของผมออกแบบมาเพื่อให้ลูกสาววัย 4 ขวบใช้งาน ผมจึงเลือกใช้ตุ๊กตาตัวเล็กๆ

Fairytale ทำงานด้วย Arduino UNO V3 ซึ่งมีการติดตั้ง Adafruit Music Maker Shield ไว้ด้านบน

นอกจากนี้ยังมี Sunfounder PN532 NFC breakout board เชื่อมต่ออยู่ และสุดท้ายคือ Potentiometer

สำหรับควบคุมระดับเสียง และปุ่ม 4 ปุ่มสำหรับ pause/unpause, เลือกแทร็กถัดไป (next) หรือก่อนหน้า (previous) และเอฟเฟกต์ไฟ (สำหรับเปิดและปิด)

และแน่นอนว่าต้องมี LED สำหรับเอฟเฟกต์ไฟ :-) รวมถึงสำหรับแจ้งเตือน Warnings และ Errors ต่างๆ

เนื่องจากเครื่องเล่น MP3 นี้ไม่มีหน้าจอ สถานการณ์บางอย่าง (โดยเฉพาะ Warnings และ Errors) จะถูกแจ้งเตือนผ่านเสียงพูดแทน

Background

หากต้องการอ่านเรื่องราวที่เป็นแรงบันดาลใจเริ่มแรกให้ผมทำโปรเจกต์นี้ สามารถเข้าไปดูได้ที่: https://gist.github.com/wkjagt/814b3f62ea03c7b1a765

ความพยายามครั้งแรกด้วย Raspberry PI

ผมเริ่มโปรเจกต์นี้ด้วย Raspberry PI แต่ก็ล้มเลิกไป โดยมีสาเหตุหลัก 3 ประการ:

1. Raspberry PI ใช้เวลาในการ Startup นานเกินไป

2. ผมไม่สามารถปิดเครื่องทันทีได้เพราะเสี่ยงที่จะทำให้ SD Card เสียหาย

3. ระดับเสียง (Volume) จาก Output ของ Raspberry PI นั้นเบามาก

สรุปคือ แนวทางของ Raspberry PI นั้นไม่ Failsafe พอสำหรับเด็ก 4 ขวบ ผมจึงเลิกใช้และเปลี่ยนมาใช้ Arduino UNO เป็นแพลตฟอร์มหลักแทน แต่ถ้าคุณยังอยากลองแนวทาง Raspberry PI ดู คุณสามารถหาผลงานล่าสุดได้ในโฟลเดอร์ย่อย RASPI-stuff อย่างไรก็ตาม โปรดทราบว่าผมทำมันยังไม่เสร็จและไม่มีคู่มือวิธีสร้างให้

ความพยายามครั้งที่สอง / ครั้งสุดท้ายด้วย Arduino

และนี่คือสิ่งที่ผมนำเสนอที่นี่ เครื่องเล่น Audiobook MP3 ที่ควบคุมด้วย NFC สำหรับลูกสาวของผม โดยใช้พื้นฐานจาก Arduino UNO, Adafruit Music Maker Shield และ Sunfounder PN532 NFC Breakout Board

Hardware design

ส่วนนี้จะอธิบายถึงส่วนประกอบและการจัดวาง Hardware รวมถึงการต่อสายไฟของส่วนประกอบต่างๆ ที่ประกอบขึ้นเป็น Fairytale

Components

  • Arduino UNO V3
  • Adafruit Music Maker Shield
  • Sunfounder PN532 NFC Reader
  • Adafruit Powerboost 1000c
  • ลำโพง 3W - ของผมค่อนข้างใหญ่ตามที่เห็นในรูป แต่คุณสามารถใช้ลำโพงแบบไหนก็ได้ที่เหมาะกับคุณ แค่ตรวจสอบให้แน่ใจว่ามันสามารถรองรับ Output 3 วัตต์จาก Adafruit Music Maker Shield ได้
  • LiPo Battery - ผมใช้แบตเตอรี่ที่มีความจุสูงมาก ซึ่งเป็นเรื่องดีเพราะทำให้เล่นเพลงได้นาน

  • ปุ่มกด 5 ปุ่ม - 4 ปุ่มสำหรับควบคุมการทำงาน และ 1 ปุ่มสำหรับโปรแกรมแท็กใหม่
  • LED 3 ดวง - 1 ดวงสำหรับสถานะการทำงาน (Operations), 1 ดวงสำหรับ Warning และ 1 ดวงสำหรับ Error
  • Potentiometer 1 ตัว สำหรับควบคุมระดับเสียง
  • สายไฟสำหรับเชื่อมต่อทุกอย่างเข้าด้วยกัน
  • กาวร้อน (Hot Glue) สำหรับยึดอุปกรณ์ทั้งหมดไว้ในกล่อง
  • กล่อง - ของผมเป็นกล่องไม้ แต่ผมก็มีโมเดล 3D สำหรับกล่องพลาสติกด้วย

Hardware layout

ส่วนประกอบทั้งหมดถูกใส่ลงในกล่องใบ "เล็ก" ของผมทำจากไม้ซึ่งซื้อมาจากร้านทั่วไป ผมถอดฝาด้านบนออกและเปลี่ยนเป็นแผ่นเรียบขนาดเดียวกันแทน

Speaker

ลำโพงถูกหันลงไปที่ด้านล่าง แต่อยู่เหนือพื้นกล่องเล็กน้อย ประมาณ 1 เซนติเมตร ผมติดลำโพงเข้ากับแผ่นไม้สี่เหลี่ยมที่มีรูขนาดเท่าลำโพง แล้วติดเสา 4 ต้นเพื่อยกระดับแผ่นไม้นี้ขึ้นจากก้นกล่อง ผมยังเจาะช่องที่ก้นกล่องและติดใยไฟเบอร์เพื่อป้องกันลำโพง สุดท้ายผมติดขาตั้ง 4 จุดที่ก้นกล่องเพื่อยกตัวกล่องให้สูงจากพื้น

บอกตามตรงว่า การจัดวางแบบนี้เป็นการตัดสินใจที่ไม่ค่อยดีนัก เพราะเสียงไม่ดังและไม่ใสเท่าที่ควร หากผมหันลำโพงไปด้านหน้า เสียงน่าจะดังกว่าและไม่มัว แต่ผมต้องการให้ปุ่มควบคุมระดับเสียง (ดูด้านล่าง) ยื่นออกมาจากด้านหน้ามากกว่า

NFC Reader

NFC Reader ถูกติดไว้ที่ใต้ฝาด้านบนของกล่อง และฝาด้านบนถูกยึดติดกับกล่องด้วยตะปูตัวเล็กๆ ผมยังเจาะช่องสี่เหลี่ยมผืนผ้าบนแผ่นฝาด้านบนเพื่อเว้นที่สำหรับปุ่มกดทั้ง 4 ปุ่ม โดยปุ่มเหล่านี้จะถูกยึดเข้ากับฝาด้านบนด้วยชิ้นไม้เล็กๆ ที่ทากาวติดไว้ ดูรูปประกอบได้ที่นี่

Adafruit Powerboost 1000c / LiPo Battery

Adafruit Powerboost 1000c ถูกติดกาวไว้ที่ด้านข้างใกล้กับก้นกล่อง และแบตเตอรี่วางแนวตั้งอยู่ที่มุมซ้ายด้านหน้า สำหรับส่วนนี้ผมต้องเจาะช่องเล็กๆ บนแผ่นไม้ที่รองรับลำโพง

Arduino / Music Maker Shield

ฝั่งตรงข้ามกับแบตเตอรี่จะเป็น Arduino UNO พร้อมกับ Adafruit Music Maker Shield ที่ติดกาวไว้กับกล่อง ซึ่งช่วยให้สามารถเจาะช่องเล็กๆ ที่ด้านหลังกล่องได้ ช่องนี้ใช้สำหรับดึงและเสียบ SD card เข้ากับ Music Maker Shield และยังช่วยให้เข้าถึงพอร์ต USB เพื่อโปรแกรม Arduino ได้ โดยไม่ต้องเปิดฝาด้านบนของกล่องออก

Buttons

ปุ่มกด 4 ปุ่ม (ดูด้านล่าง) อยู่บนฝาด้านบน และ Potentiometer ควบคุมระดับเสียงอยู่ที่ด้านหน้า

Lights

ด้านหน้ายังมีไฟสถานะการทำงาน (Operations light) ส่วนไฟ Error (ซึ่งใช้สำหรับแจ้งเตือน LBO ด้วย) จะอยู่ที่ด้านหลัง และ LED สำหรับ Warning จะอยู่ที่ด้านซ้าย คุณสามารถดูการออกแบบได้จากในรูป

Control Buttons

การออกแบบกล่องเครื่องเล่น Audiobook Fairytale มาพร้อมกับ 4 ปุ่มเพื่อควบคุมการทำงาน:

  • pause / unpause - หยุดการเล่นชั่วคราว หรือเล่นต่อจากที่หยุดไว้
  • next - เล่นแทร็กถัดไปในรายการไฟล์ที่เรียงลำดับไว้
  • previous - เล่นแทร็กก่อนหน้าในรายการไฟล์ที่เรียงลำดับไว้
  • light on / off - เปิดหรือปิดฟังก์ชันไฟ Fader สถานะการทำงาน

นอกจากนี้ยังมีปุ่มสำหรับการโปรแกรม (A3 ดูด้านล่าง) ซึ่งจะเปลี่ยนการทำงานของโปรแกรมให้รอรับแท็ก "ใหม่" โดยจะถามหา Directory และหมายเลขแทร็กที่จะจับคู่กับแท็กนี้ และจะอัปเดต TrackDb ตามข้อมูลนั้น (เพื่อให้ฟังก์ชันนี้ทำงานได้ กล่องจะต้องเชื่อมต่อกับ Arduino IDE และ Serial Console ต้องเปิดใช้งานอยู่ ปัจจุบันฟังก์ชันนี้ยังไม่ได้ถูกเขียนโค้ดลงไป)

ปุ่มควบคุมทั้ง 4 ปุ่มเชื่อมต่อกับ Analog Pins เพียงตัวเดียว (ในที่นี้คือ A1) เพื่อแยกแยะว่าปุ่มไหนถูกกด ผมได้ติดตั้ง Resistor ที่มีค่า Ohm ต่างกันในแต่ละปุ่ม โดยผมใช้ค่าดังนี้:

  • 33 Ohm
  • 220 Ohm
  • 330 Ohm
  • 1 KOhm

Volume Control

Potentiometer ที่เชื่อมต่อกับ Analog Input Pins A0 บน Arduino ใช้สำหรับควบคุมระดับเสียง ในขณะที่เล่นเพลง โปรแกรมจะตรวจสอบการเปลี่ยนแปลงของ Potentiometer และคำนวณระดับเสียงที่สอดคล้องกันจากค่าของมัน

Used Pins of the Arduino UNO:

Pins ของ Arduino ถูกใช้งานไปค่อนข้างเยอะ หรือเรียกได้ว่าเกือบทั้งหมด

SPI

- 13 : CLK / PN532_SCK : SPI Clock ใช้งานร่วมกันระหว่าง VS1053, SD card และ NFC breakout board

- 12 : MISO / PN532_MISO : รับข้อมูลจาก VS1053, SD card และ NFC breakout board

- 11 : MOSI / PN532_MOSI : ส่งข้อมูลไปยัง VS1053, SD card และ NFC breakout board

VS1053 Music Maker Shield

- 7 : SHIELD_CS : Pins สำหรับเลือกชิป (Chip Select) ของ VS1053 (Output)

- 6 : SHIELD_DCS : Pins สำหรับเลือก Data/command ของ VS1053 (Output)

- 3 : DREQ : การร้องขอข้อมูลของ VS1053 ซึ่งตามอุดมคติควรเป็น Interrupt Pins

SD Card

- 4 CARDCS : Pins สำหรับเลือกชิป (Chip Select) ของ SD Card

PN532 NFC Reader

- 10 : PN532_SS : Pins สำหรับเลือกชิป (Chip Select) ของ NFC breakout board

LEDs

- 5 : ledPin : Pins ที่เชื่อมต่อกับ LED สถานะการทำงาน

- 8 : warnPin : Pins ที่เชื่อมต่อกับ LED สำหรับ Warning

- 9 errorPin : Pins ที่เชื่อมต่อกับ LED สำหรับ Error (เช่น ใช้สำหรับ LBO ของ Powerboost 1000c)

Input Buttons etc.

- A0 : volumePotPin : Analog Input Pins ที่ใช้สำหรับ Potentiometer

- A1 : btnLinePin : Pins ที่เชื่อมต่อกับสายปุ่มกด (4 ปุ่ม)

- A2 : batLowInputPin : Pins ที่ Powerboost 1000c ใช้ระบุว่าแบตเตอรี่ต่ำ (LBO) - แสดงผลผ่าน errorPin (ยังไม่ได้เขียนโค้ดส่วนนี้)

- A3 : programming : Pins ที่เชื่อมต่อกับปุ่มโปรแกรม (ยังไม่ได้เขียนโค้ดส่วนนี้)

Putting all together

Power line duplicator

เนื่องจาก Arduino มี Pins สำหรับ Output ไฟเลี้ยงและ Ground จำกัด ผมจึงตัดสินใจดึงไฟ +5V, +3V และ Ground จาก Adafruit Powerboost มาเข้า "Power line duplicator" ขนาดเล็ก ซึ่งเป็นแผ่นวงจรเล็กๆ (3ซม. x 1.5ซม.) ที่มี Male Headers ติดไว้ เชื่อมต่อกับ +5V, +3V และ GND ของ Powerboost ทำให้ผมมี Pins สำหรับ +5V 5 ช่อง, +3V 5 ช่อง และ Ground 5 ช่อง

ผมเชื่อมต่อส่วนประกอบภายนอกทั้งหมดที่ต้องการไฟเลี้ยงและ Ground เข้ากับ "Power line duplicator" นี้ เช่น PN532 NFC Reader breakout board หรือไฟเลี้ยงสำหรับปุ่มกดและ Volume Control

Buttons

ผมต้องจำกัดจำนวน Input Pins ที่ใช้สำหรับปุ่มกด เพราะ Digital Pins และ Analog Input Pins ของ Arduino ถูกใช้งานไปเกือบหมดแล้ว

ผมเชื่อมต่อปุ่มควบคุม 4 ปุ่มเข้ากับ Analog Input Pins เพียงตัวเดียว (A1) และใช้ Resistor ที่มีค่าต่างกันเพื่อแยกแยะว่าปุ่มใดถูกกด โดยรับไฟเลี้ยงจากสาย +5V นอกจากนี้ Output ของปุ่มยังถูกต่อลง Ground (ผ่าน Resistor 10KOhm) เพื่อป้องกันสัญญาณลอย (Floating)

Potentiometer สำหรับควบคุมระดับเสียงเชื่อมต่อกับ A0 และต่อลง Ground ผ่าน Resistor 10KOhm เช่นกัน โดยรับไฟเลี้ยงจากสาย +5V

ปุ่มสำหรับการโปรแกรมเชื่อมต่อกับสาย +3V และขาที่สองต่อเข้ากับ A3 โดยไม่มีการเชื่อมต่อกับ Ground

Low Battery Output

Adafruit Powerboost 1000c มาพร้อมกับ LBO (Low Battery Output) ซึ่งปกติจะเชื่อมกับสายบวกของแบตเตอรี่ แต่จะเปลี่ยนเป็น Ground เมื่อแบตเตอรี่ลดระดับลงเหลือประมาณ 3.4V ผมจึงต่อสายไฟจาก Pins LBO ของ Powerboost ไปยัง A2 และต่อลง Ground (ผ่าน Resistor 100KOhm)

คำเตือน: ส่วนนี้ยังไม่พร้อมใช้งาน!!!

Software Design / Operations

โปรแกรม Fairytale จะเล่นอัลบั้ม (Audiobooks หรือเพลง) ที่เก็บไว้ใน SD Card ซึ่งเสียบอยู่ใน Adafruit Music Maker Shield การเลือกอัลบั้มที่จะเล่นทำได้โดยการวาง NFC Tags ที่เกี่ยวข้องลงบน NFC Reader

Track DB - เชื่อมต่อ NFC Tag เข้ากับ Audiobook

เมื่อตรวจพบ NFC Tag โปรแกรมจะอ่าน UID ของแท็กนั้นและนำไปค้นหาในสิ่งที่ผมเรียกว่า TrackDB เพื่อหา Directory ที่ตรงกันเพื่อเล่นเพลง

TrackDB คือรายการไฟล์ใน Directory พิเศษ (SYSTEM00) บน SD Card ไฟล์ใน TrackDB จะอยู่ในรูปแบบ:

taguid:directory:track number

ตัวอย่างเช่น:

46722634231761290:findorie:1

จากตัวอย่างข้างต้น:

  • 46722634231761290 คือ UID ของ NFC Tag
  • findorie คือ Directory ที่จะใช้เล่นไฟล์
  • 1 คือลำดับของแทร็กที่จะเริ่มต้นเล่น

Playback

โปรแกรมจะนำข้อมูลที่ได้จาก TrackDB มาเริ่มรัน For-loop โดยเริ่มจากแทร็กแรกที่ระบุไว้ ไปจนกว่าจะเล่นไฟล์ที่เรียงลำดับไว้จนครบ เมื่อเล่นไฟล์ทั้งหมดจบแล้ว โปรแกรมจะกลับเข้าสู่ Loop หลัก โดยจะหน่วงเวลาประมาณ 15 วินาที (เพื่อให้ผู้ใช้มีโอกาสนำ Tag ที่เพิ่งใช้ออกไปจากเครื่องอ่าน) จากนั้นจะรอจนกว่าจะตรวจพบแท็กถัดไป

ในระหว่างที่เล่นไฟล์ต่างๆ ใน Directory โปรแกรมจะทำการอัปเดตไฟล์ TrackDB ด้วยหมายเลขแทร็กที่กำลังเล่นอยู่ การทำเช่นนี้ช่วยให้สามารถเล่นเพลงต่อเนื่องได้แม้จะมีการหยุดกลางคัน โดยเมื่อนำแท็กออกและวางกลับลงไปใหม่ภายหลัง การเล่นจะเริ่มจากแทร็กสุดท้ายที่เล่นค้างไว้

Restrictions

เพื่อให้ระบบทำงานได้ มีข้อจำกัดบางประการดังนี้:

1. ชื่อไฟล์ทั้งหมดต้องอยู่ในรูปแบบ trackXXX.mp3 โดย XXX คือตัวเลขตั้งแต่ 001 ถึง 127

2. คุณสามารถมีไฟล์ได้สูงสุด 127 ไฟล์ต่อหนึ่ง Directory เนื่องจากผมใช้ตัวแปรแบบ char ในการนับจำนวนไฟล์เพื่อประหยัดหน่วยความจำ

3. ชื่อ Directory ทั้งหมดต้องมีความยาว 8 ตัวอักษรพอดี โดยใช้ตัวอักษร a-z และ 0-9 ผสมกันได้

4. หากมีไฟล์ใดหายไปในลำดับของไฟล์ใน Directory คุณอาจพบอาการหยุดชั่วคราว (สั้นมากๆ) ซึ่งอาจส่งผลให้เสียงสะดุดในขณะที่เครื่องกำลังคำนวณหมายเลขแทร็กถัดไป

5. Directory ทั้งหมดต้องอยู่ที่ Root Directory ของ SD Card เท่านั้น ไม่อนุญาตให้มี Directory ย่อย เนื่องจากผมใช้ Char Array ขนาด 9 ตัวอักษรสำหรับส่วน Directory ของ Path ไฟล์

Lights

ในขณะที่อัลบั้ม (หรือไฟล์) กำลังเล่น ไฟสถานะการทำงานจะค่อยๆ สว่างขึ้นและดับลง (Fading)

เมื่อมี Warning หรือ Error ไฟแจ้งเตือนที่เกี่ยวข้องจะสว่างขึ้นตามลำดับ

Errors and Warnings

มีสถานะคำเตือนหรือข้อผิดพลาดอยู่ 3 รูปแบบ:

1. ข้อมูลสูญหายหรือไม่ถูกต้องสำหรับการเล่นเพลง (Warning)

2. แบตเตอรี่ต่ำ (Warning)

3. อุปกรณ์สูญหายหรือ Hardware ล้มเหลว (Error)

นอกจากนี้ เรายังแยกความแตกต่างระหว่าง Warning และ Error ด้วยเกณฑ์ที่ว่าเราจำเป็นต้องปิดเครื่องหรือไม่

Errors

Error ที่แสดงผ่านไฟ Error (และทำให้ระบบหยุดทำงานจนต้องปิดเครื่อง):

  • ไม่พบ Music Maker Shield
  • Music Maker Shield ไม่ได้เชื่อมต่อกับ Pins ที่รองรับ Interrupt
  • ไม่พบ SD Card
  • ไม่พบ NFC Reader (ปัจจุบันยังไม่ได้ใส่เอฟเฟกต์ไฟ)

Warnings

Warning ที่แสดงผ่านไฟ (Arduino ยังคงทำงานต่อไปได้):

  • ไม่พบ Directory สำหรับ NFC Tag นั้นๆ (เช่น TrackDB ไม่มีข้อมูลสำหรับแท็กนี้)
  • ไม่พบ Directory บน SD Card ที่ตรงกับข้อมูลใน TrackDB ของ NFC Tag
  • ไม่มีไฟล์ใน Directory ที่ระบุไว้
  • มีไฟล์หายไปในลำดับไฟล์ที่ต่อเนื่องกันใน Directory สิ่งนี้อาจเกิดขึ้นในกรณีที่ไฟล์ไม่ได้เรียงลำดับตัวเลขโดยไม่มีช่องว่าง เช่น มี track001.mp3, track002.mp3 หายไป แต่มี track003.mp3 อยู่

นอกจากนี้ หาก Adafruit Powerboost 1000c ตรวจพบระดับแบตเตอรี่ต่ำ (LBO ของ Powerboost ต่อลง Ground) LED สำหรับ Error จะติดสว่าง แม้ว่า Arduino จะดับลงในที่สุด แต่จนกว่าจะถึงตอนนั้นมันจะยังคงทำงานต่อไป

Voice feedback

นอกเหนือจากไฟแจ้งเตือนแล้ว ข้อความบางอย่างจะถูกส่งผ่านเสียงทาง Music Maker Shield ด้วย

ข้อผิดพลาดและคำเตือนที่มีเสียงบอกได้แก่:

  • คำเตือนแบตเตอรี่ต่ำ (จะมีเสียงบอกเฉพาะเมื่อไม่ได้เล่นอัลบั้มอยู่)
  • ไม่พบ Directory สำหรับ NFC Tag (เช่น TrackDB ไม่มีข้อมูลสำหรับแท็กนี้)
  • ไม่พบ Directory บน SD Card ที่ตรงกับข้อมูลใน TrackDB ของ NFC Tag
  • ไม่มีไฟล์ใน Directory บน SD Card
  • PN532 NFC Reader ทำงานผิดปกติ

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: fairytale-77e2fd
2450 บาท
PromptPay QR Code

ประเมิน Project

อยากได้งานคล้ายโปรเจคนี้? กดไปหน้าประเมินราคา

เอาฟอร์มยาวออกจากท้ายหน้า Project แล้ว เหลือเป็นปุ่มให้กดไปกรอกหน้าเดียว ตัวใหญ่ เว้นบรรทัดเยอะ อ่านง่ายกว่า

รีวิวจากคนใช้งานจริง

รีวิวจากลูกค้าและคนที่เคยใช้งาน

ถ้าเคยสั่งงาน เคยอ่านหน้านี้แล้วได้ประโยชน์ หรือมีข้อเสนอแนะ ฝากรีวิวไว้ได้เลย

กำลังโหลดรีวิว...