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

โปรเจกต์ Lichess Link

เชื่อมต่อ Arduino Uno ที่มี WiFi เข้ากับ lichess.org API เพื่อเล่น online chess ในรูปแบบดั้งเดิม

โปรเจกต์ Lichess Link

วิดีโอสาธิต

Video

▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์

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

1x Arduino UNO Wifi Rev.2
🛒 สั่งซื้อ
1x 16 * 2 LCD Shield
-
}

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

Online chess, the old fashioned way

เบื่อไหมกับการโดนปั่นประสาทออนไลน์ขณะที่กำลังแพ้ให้กับเด็กอายุ 13 ที่มารยาทไม่ดี? อยากเล่นหมากรุกบนกระดานจริงโดยไม่มีสมาร์ทโฟนหรือแล็ปท็อปมารบกวนหรือเปล่า? อยากเล่นเกมแบบโต้ตอบทางไกล (correspondence games) กับเพื่อน หรือเชื่อมต่อกับคู่ต่อสู้แบบสุ่มไหม?

ถ้าใช่ lichess link คือคำตอบสำหรับคุณ! โปรเจกต์นี้เชื่อมต่อ Arduino Uno WiFi Rev 2 เข้ากับ lichess.org application programming interface (API) เพื่อให้คุณสามารถรับและส่งการเดินหมากรุกได้โดยใช้ Arduino และ LCD Shield พร้อมปุ่มกดอินพุต

How it works

ขั้นแรก ให้คุณเชื่อมต่อ Arduino ของคุณเข้ากับอินเทอร์เน็ตโดยกรอก SSID และ Password ของเครือข่ายลงใน Module secrets.h คุณสามารถเข้าถึงบัญชี lichess.org ได้โดยการกรอก personal API token ของคุณลงใน Module secrets.h

MODE 0: Connect to ongoing game.

เมื่อเชื่อมต่อแล้ว lichess link จะค้นหาเกมที่คุณกำลังเล่นค้างอยู่ก่อน หากมีเกมที่กำลังดำเนินอยู่ ระบบจะทำการเชื่อมต่อ หากถึงตาเดินของคุณ ระบบจะแสดงการเดินหมากล่าสุดของคู่ต่อสู้และขอให้คุณใส่ตาเดินของคุณ หากเป็นตาเดินของคู่ต่อสู้ ระบบจะแสดงตาเดินล่าสุดของคุณ และหน้าจอจะรีเฟรชทุกๆ 5 วินาทีเพื่ออัปเดตหากคู่ต่อสู้มีการเดินหมาก

Move input: คุณสามารถใส่ตาเดินโดยใช้ UCI format ตัวอย่างเช่น ในตอนเริ่มเกม "e2e4" จะเป็นการเดินเบี้ยสีขาวจากตำแหน่ง e2 ไปยัง e4 หากคุณต้องการขอเสมอ ให้ใส่ "d d " และหากต้องการยอมแพ้ให้ใส่ "g g " โดยเบี้ยที่เลื่อนขั้น (promoted pawn) จะกลายเป็นควีน

Multiple ongoing games: ผมไม่แนะนำให้ใช้ lichess link สำหรับการเล่นหลายเกมพร้อมกัน เพราะจะทำให้สับสนได้ง่ายว่าคุณกำลังเล่นในเกมไหนอยู่ (ข้อมูลเกมจะแสดงเพียงครั้งเดียวเมื่อคุณเชื่อมต่อกับเกมที่กำลังดำเนินอยู่) หากคุณมีหลายเกมที่เล่นค้างไว้ lichess link จะเชื่อมต่อกับเกมที่ lichess.org พิจารณาว่า 'เร่งด่วน' ที่สุด ซึ่งในความเป็นจริงหมายถึงเกมที่เป็นตาเดินของคุณและมีเวลาในนาฬิกาเหลือน้อยที่สุด

If the game ends: หากมีเกมที่เล่นอยู่เพียงเกมเดียวและเกมจบลงไม่ว่าจะด้วยเหตุผลใดก็ตาม lichess link จะแสดงผู้ชนะ (ถ้ามี) และเหตุผล ให้กดปุ่ม select เพื่อไปยังการแสดงผลถัดไป

MODE 1: Create a correspondence game

หากไม่มีเกมที่กำลังดำเนินอยู่ คุณจะได้รับการแจ้งเตือนให้เลือกระหว่างสองโหมดเกม Mode 1 คือการสร้างเกมแบบโต้ตอบทางไกล (ที่มีเวลาไม่จำกัดสำหรับผู้เล่นแต่ละคน) หากคุณเลือกโหมดนี้ คุณจะถูกขอให้ใส่ Username เพื่อส่งคำขอท้าดวลเกมแบบโต้ตอบทางไกลไปให้ หากส่งคำขอสำเร็จ หน้าจอจะอัปเดตและรีเฟรชทุกๆ 5 วินาทีจนกว่าคำขอจะได้รับการตอบรับหรือปฏิเสธ ไม่ว่าในกรณีใด โปรแกรมจะกลับไปที่ Mode 0

Username input: คุณสามารถใส่ Username ได้ยาวสูงสุด 16 ตัวอักษร โดย Username ต้องไม่มีช่องว่างหรืออักขระที่ไม่ใช่ตัวเลขและตัวอักษรภาษาอังกฤษ

MODE 2: Create a game with a random opponent.*

Mode 2 จะสร้างเกมแบบจำกัดเวลาแข่งกับผู้ใช้ทั่วไปใน lichess.org คุณจะถูกขอให้ระบุเวลา (ค่าระหว่าง 60 ถึง 180 นาที) และ increment (ค่าระหว่าง 0 ถึง 180 วินาที) ของเกม เลือกสี และใส่ Pre-move

หากพบเกม โปรแกรมจะกลับไปที่ Mode 0 หากไม่พบ คุณจะถูกถามให้เลือกระหว่าง Mode 1 และ Mode 2 อีกครั้ง

Pre-move input: เนื่องจากความล่าช้า (time delay) ในการรับข้อมูลเกม คุณจึงจำเป็นต้องใส่ตาเดินแรกก่อนที่เกมจะเริ่ม ตาเดินนี้จะถูกเดินแทนคุณในตอนเริ่มเกมไม่ว่าคุณจะเล่นเป็นสีขาวหรือสีดำ สิ่งสำคัญคือต้องเป็นตาเดินที่ถูกต้อง เพราะการเดินที่ผิดกติกาอาจทำให้เกมถูกยกเลิกได้

*Currently you must also connect to the game on your laptop or smartphone. หากคุณเล่นผ่าน Arduino เพียงอย่างเดียว คู่ต่อสู้จะสามารถกดรับชัยชนะได้หลังจากผ่านไป 90 วินาที เนื่องจาก lichess server จะเชื่อว่าคุณขาดการเชื่อมต่อจากเกม นี่คือข้อจำกัดที่หวังว่าจะได้รับการแก้ไขในซอฟต์แวร์เวอร์ชันถัดไป!

ERROR MESSAGES

ขณะใช้งาน lichess link คุณอาจได้รับข้อมูลหรือข้อความแสดงข้อผิดพลาดบางอย่างบนหน้าจอ โดยสามารถตีความได้ดังนี้:

Wififailed: Arduino ของคุณไม่สามารถเชื่อมต่อ WiFi ได้ ตรวจสอบการตั้งค่าการเชื่อมต่อของคุณแล้วลองอีกครั้ง

Server failed: Arduino ของคุณไม่สามารถติดต่อ lichess.org server ได้ คุณควรเพิ่มปุ่ม "reset" บน LCD Shield

HTTP failed: Arduino ของคุณไม่สามารถอ่านการตอบสนองต่อคำขอ HTTP ได้ หากมีข้อความ Bad Request ร่วมด้วย แสดงว่าคุณได้รับการตอบกลับแบบ 400 ซึ่งมักจะเกิดขึ้นหากคุณเดินหมากผิดกติกาหรือพยายามสตรีมเกมที่จบลงแล้ว หลังจากการล้มเหลวของ HTTP ใดๆ Arduino ของคุณจะรีเซ็ตโดยอัตโนมัติ ดังนั้นจึงไม่จำเป็นต้องทำอะไร หากคุณได้รับข้อความ HTTP fails ซ้ำๆ อาจเป็นเพราะเวลาหน่วงระหว่างการส่งและการประมวลผลคำขอนั้นน้อยเกินไป คุณสามารถเพิ่มได้โดยการปรับค่า Variable delayTime ในโค้ด (ค่าเริ่มต้นคือ 5000)

Assembling the lichess link

ขั้นตอนนี้ค่อนข้างง่าย ให้ติดตั้ง library ต่อไปนี้โดยใช้ library manager ใน Arduino IDE ของคุณ: ArduinoJson (v.6.), WifiNINA และ Adafruit_RGBLCDShield

Lichess-link ใช้ SSL client ในการส่งคำขอ HTTP ซึ่งกำหนดให้คุณต้องเพิ่ม SSL root certificate สำหรับ lichess.org ลงใน Module WifiNINA คลิกที่นี่เพื่อดูบทช่วยสอนเกี่ยวกับวิธีการทำสิ่งนี้ใน Arduino IDE

ติดตั้ง LCD Shield เข้ากับ Arduino ของคุณ กรอกข้อมูลส่วนตัวของคุณลงใน Module arduino_secrets.h และอัปโหลดโค้ด lichess-link.ino จาก github เพียงเท่านี้ Lichess-link ก็น่าจะพร้อมใช้งานแล้ว

Acknowledgements

โปรเจกต์นี้เกิดขึ้นได้ด้วยเอกสารและตัวอย่างที่ยอดเยี่ยมของสอง library และ lichess.org API

1. Arduino Json. Library นี้ถูกใช้ทั่วทั้งโค้ดเพื่อ deserialize ข้อมูล json จาก lichess API หลังจากส่งคำขอ HTTP โดย Library นี้ช่วยให้คุณสามารถสตรีมข้อมูลผลลัพธ์ลงใน json document ได้โดยตรง นอกจากนี้ยังมี เครื่องมือที่ยอดเยี่ยมนี้ ซึ่งช่วยคำนวณความต้องการหน่วยความจำของข้อมูล json

2. Wifi NiNa. Library นี้ใช้เพื่อเชื่อมต่อกับ lichess.org server และส่งคำขอ HTTP โค้ดส่วนใหญ่ของ lichess link ถูกนำมาดัดแปลงจากตัวอย่างใน Library นี้

3. Lichess.org API. API นี้ใช้เพื่อสื่อสารกับ lichess.org ในโปรแกรมนี้ผมมีการใช้คำขอแบบ GET สามประเภท และคำขอแบบ POST สามประเภท

  • GET #1 : /api/account - เพื่อดึง Username ของผู้ใช้ปัจจุบัน
  • GET #2: /api/account/playing - เพื่อสตรีมเกมที่กำลังเล่นอยู่ (mode 0)
  • GET #3: /api/board/game/stream/ - เพื่อระบุผลลัพธ์ของเกมที่จบลงแล้ว
  • POST #1: /api/board/game/ - เพื่อส่งข้อมูลตาเดิน
  • POST #2: /api/challenge/ - เพื่อสร้างการท้าดวลแบบโต้ตอบทางไกล (mode 1)
  • POST #3: /api/board/seek - เพื่อสร้างการท้าดวลแบบสุ่ม (mode 2)

Contribute/Feedback

ขณะนี้โปรเจกต์นี้ยังเป็นเวอร์ชัน alpha นี่เป็นครั้งแรกที่ผมเขียนโปรแกรมเกี่ยวกับการทำงานผ่านอินเทอร์เน็ต ดังนั้น ผม คาด ว่า น่า จะ มี หลาย วิธี ที่ โปรเจกต์ นี้ จะ สามารถ ถูก ปรับปรุง ให้ ดี ขึ้น ได้! ติดต่อหรือคอมเมนต์หากคุณมีข้อเสนอแนะเกี่ยวกับวิธีทำให้โปรแกรมมีประสิทธิภาพมากขึ้น ผมได้อัปโหลดโค้ดไว้บน GitHub เพื่อให้คุณสามารถ fork repository และแก้ไขตามที่คุณต้องการได้

If you decide to create a lichess link, I hope it brings you peace and allows you to enjoy online chess in a new way.

Code

🔒 ปลดล็อก Code

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

รหัสอ้างอิงโปรเจกต์: lichess-link-d54b85
1120 บาท
PromptPay QR Code