

เวลาเลือกเซนเซอร์ บางรุ่นมีให้ใช้ได้ทั้ง I2C กับ SPI อย่าง BME280 ที่ datasheet ระบุสอง interface ไว้ การตัดสินใจจึงอาจไม่ได้จบแค่ว่าอุปกรณ์นี้ต่อกับบอร์ดได้หรือไม่ แต่ต้องดูว่าทางที่เลือกเข้ากับอุปกรณ์ส่วนอื่นของโปรเจกต์อย่างไรด้วย
ถ้ามองแค่จำนวนสาย I2C ดูใช้ขาน้อยกว่า แต่พอมีหลายตัวบน bus ก็มีเรื่อง address และลักษณะสัญญาณร่วมเข้ามา ส่วน SPI ใช้แนวเลือกอุปกรณ์อีกแบบ และมักมีพื้นที่ให้จัดรูปแบบการส่งข้อมูลต่างกัน การมีชื่อ interface ในรายการคุณสมบัติจึงยังไม่เลือกแทนเราได้ครบ
จุดเริ่มที่ช่วยให้คิดเป็นลำดับคือดูงานที่จะอ่านกับอุปกรณ์ที่ต้องอยู่ร่วมกันก่อนครับ แล้วค่อยอ่านข้อกำหนดของชิป บอร์ด breakout และไลบรารีที่ใช้ให้ตรงกัน ไม่ตัดสินจากคำว่าเร็วหรือสายสั้นในภาพตัวอย่างเพียงอย่างเดียว
เซนเซอร์ที่อ่านค่าขนาดเล็กเป็นช่วงๆ มีความต้องการต่างจากจอภาพที่ต้องส่งข้อมูลจำนวนมากต่อเนื่อง หาก bus ส่งข้อมูลของงานได้ภายในช่วงเวลาที่ต้องใช้ การเลือกจากความเร็วสูงสุดอย่างเดียวอาจไม่ได้เพิ่มประโยชน์เท่าการจัด bus ให้ดูแลง่าย
ควรนับทั้งขนาดข้อมูล ความถี่อ่าน เวลารอภายในอุปกรณ์ และงานอื่นที่ใช้ bus เดียวกันด้วย การเลือก interface ที่ส่งบิตเร็วกว่าไม่ได้ทำให้เซนเซอร์วัดสภาพแวดล้อมเสร็จเร็วขึ้นตามสัดส่วนเสมอไป เพราะขั้นแปลงค่ามีข้อกำหนดของมันเอง
ตัวอย่าง BME280 มี register และขั้นอ่านข้อมูลตามที่ชิปกำหนด ไม่ได้เปลี่ยนเป็นเซนเซอร์คนละความสามารถเพียงเพราะเลือก SPI แทน I2C หากจะเปรียบเทียบเวลาใช้จริง ต้องวัดวงจรอ่านทั้งหมดภายใต้การตั้งค่าการวัดเดียวกัน ไม่เทียบเลข clock บน bus เป็นผลลัพธ์สำเร็จรูป

เมื่อรู้เวลาที่งานยอมใช้ได้แล้ว จะเลือกได้ว่าต้องแบ่ง bus หรือปรับลำดับการอ่านหรือไม่ และยังมีพื้นที่ให้ตัดสินจากจำนวนขา ความเข้ากันได้ของไลบรารี และข้อจำกัดทางไฟฟ้าโดยไม่เสียความต้องการหลักของงาน
I2C ใช้สายข้อมูล SDA กับสาย clock SCL ร่วมกันตามลักษณะ bus และมี pull-up ที่ต้องสอดคล้องกับระบบ การเพิ่มอุปกรณ์จึงต้องดู address ที่แต่ละตัวใช้และตัวเลือกเปลี่ยน address ที่ชิปหรือบอร์ดนำมาให้
หากมีเซนเซอร์ชนิดเดียวกันหลายตัวและ address เลือกได้น้อย อาจต้องวางแผนแยก bus หรือใช้กลไกเลือกเส้นทางที่เหมาะสม เรื่องนี้ควรตรวจตั้งแต่จำนวนอุปกรณ์ที่ต้องใช้ ไม่รอให้ต่อครบแล้วเห็นจาก scan เพียงบางตัว
ส่วนคุณภาพสัญญาณเกี่ยวข้องกับ pull-up, capacitance และรูปแบบการเดินสาย การที่ต่อเพิ่มบนสองสายเดิมได้ไม่ได้แปลว่าจะยืดออกไปไกลหรือเพิ่มตัวได้เรื่อยๆ โดยไม่เปลี่ยนเงื่อนไข ต้องอ้างข้อกำหนดของ controller กับอุปกรณ์ที่ร่วมอยู่ด้วย
สำหรับ ESP32 ตามเอกสาร ESP-IDF 5.4 ที่ใช้เป็นฐานของบทนี้ ควรเลือกความถี่ภายใต้ขอบเขตของ controller และชิปปลายทางทั้งคู่ ไม่เห็น sensor รองรับโหมดหนึ่งใน datasheet แล้วสรุปว่าบอร์ดกับ driver ที่เลือกจะรองรับได้เท่ากันทุกกรณี
ใน SPI แบบที่ใช้กันทั่วไป อุปกรณ์ร่วมสัญญาณ clock กับ data ตามทิศที่กำหนด และมี chip select แยกเพื่อเลือกตัวที่สื่อสารด้วย จึงไม่ได้ใช้ address บน bus แบบเดียวกับ I2C แต่ก็ต้องเตรียมขาและดูพฤติกรรมอุปกรณ์ที่ไม่ได้ถูกเลือกด้วย
นอกจาก clock frequency ยังมี mode และรายละเอียด transaction เช่น ช่วงส่งคำสั่ง address และข้อมูลที่อุปกรณ์กำหนด ไลบรารีต้องจัดลำดับกับการเลือก CS ให้ตรง ไม่ใช่ใช้เพียงชื่อ SPI แล้วให้ทุกชิปอ่าน byte แบบเดียวกัน

SPI มีรูปแบบหลายชนิด เช่น จำนวนสายข้อมูลกับวิธีส่งที่ต่างกัน ต้องอ่านรุ่นที่อุปกรณ์รองรับจริง ตัวอย่างชิปที่ระบุ SPI ไม่ได้ยืนยันว่าใช้โหมดข้อมูลหลายเส้นของ controller ได้ทุกแบบโดยอัตโนมัติ
เมื่อใช้งานร่วมกับจอหรือ storage ยังต้องแบ่งเวลาการเข้าถึงและจัด configuration รายอุปกรณ์ให้ถูกด้วย ข้อดีเรื่องส่งข้อมูลได้ตามงานจึงต้องมาพร้อมการดูแล bus กับไลบรารีที่ใช้ร่วมกัน ไม่ยกเป็นคำรับรองว่าเลือก SPI แล้วทุกอย่างจะเร็วและเสถียรกว่าเสมอ
Datasheet ของชิปบอกความสามารถระดับชิป แต่บอร์ดที่ซื้อมาหรือมีอยู่แล้วอาจต่อขาบางส่วนไว้ตายตัว มีตัวต้านทานเลือกโหมด หรือมีวงจรแปลงระดับสัญญาณที่ต้องพิจารณาเพิ่ม จึงต้องอ่าน schematic หรือข้อมูลของบอร์ดนั้นประกอบ
ตัวอย่าง BME280 ไม่ได้หมายความว่า breakout ทุกยี่ห้อวางขาและการตั้งโหมดเหมือนกัน การเห็นขาที่เขียน SDA/SCL กับชื่อที่ชิปใช้ร่วมในอีกโหมดต้องตรวจจากเอกสารจริงก่อนต่อ ไม่เดาจากบอร์ดหน้าตาคล้ายกัน
ด้านไฟเลี้ยงกับระดับ logic ก็ต้องแยกจากชื่อ bus อุปกรณ์สองตัวพูด I2C เหมือนกันยังอาจใช้เงื่อนไขไฟฟ้าต่างกัน และการมีขาไฟบนโมดูลที่รับช่วงแรงดันกว้างไม่ได้รับรองว่าทุกขาสัญญาณรับระดับเดียวกันโดยตรง
ภาพในบทนี้จึงใช้แสดงบทบาทของเส้นทาง ไม่ใช่ pinout สำหรับลงสายจริง ก่อนต่ออุปกรณ์ต้องใช้เอกสารรุ่นและ revision ของบอร์ดที่อยู่ตรงหน้า เพื่อไม่ให้การเลือก interface ถูกต้องแต่ต่อขาหรือระดับสัญญาณผิดไปอีกชั้น
ถ้าไลบรารีรองรับทั้งสอง interface ให้ดูว่าส่วน configuration ต้องกำหนดอะไรต่างกัน และมีข้อจำกัดเมื่อใช้หลาย device หรือหลาย task หรือไม่ การย้าย bus อาจต้องเปลี่ยนจุดเริ่มอุปกรณ์กับการส่ง register ขณะที่ส่วนแปลงค่าหรือ calibration ยังต้องตรง datasheet เหมือนเดิม
ในขั้นลอง เริ่มจากอุปกรณ์เดียว อ่านข้อมูลระบุตัวหรือสถานะที่คู่มือรองรับ แล้วอ่านค่าตามกระบวนการที่ถูกต้อง ก่อนเพิ่มอุปกรณ์อื่นกลับเข้ามาทีละส่วน จะช่วยแยกปัญหาของ interface จากการชนกันในระบบรวม
หากต้องเลือกจากเวลาและพลังงานจริง ค่อยเก็บเงื่อนไขบอร์ด clock ความถี่อ่าน และการวัดทั้งหมดให้เทียบกันได้ การที่โค้ดตัวอย่างเปิดอ่านค่าได้เป็นหลักฐานการทำงานเบื้องต้น ยังไม่ใช่ผลเปรียบเทียบว่าแบบใดประหยัดหรือเร็วกว่าในโปรเจกต์นั้น
การเลือก I2C หรือ SPI ควรเริ่มจากรูปแบบข้อมูลและอุปกรณ์ที่ต้องอยู่ร่วมกัน แล้วตรวจเงื่อนไข address, chip select, สัญญาณ และไลบรารีตามบอร์ดจริง เมื่อใช้ความต้องการของงานเป็นฐาน เราจะเลือก interface ที่จัดการต่อได้ชัดและรองรับทั้งระบบ โดยไม่เอาความเร็วสูงสุดหรือจำนวนสายเพียงข้อเดียวมาแทนคำตอบทั้งหมด