

ตอนทำตัวอย่างอ่าน analog เราอาจเริ่มจากให้บอร์ดอ่านค่าแล้วพิมพ์ออก serial จนดูเหมือนส่วนเซนเซอร์พร้อมใช้งานแล้ว จากนั้นค่อยเพิ่ม Wi-Fi เพื่อส่งข้อมูลไปเก็บ แต่เมื่อรวมสองส่วนเข้าด้วยกัน กลับมีรอบที่อ่านไม่สำเร็จหรือได้ข้อมูลที่นำไปใช้ต่อไม่ได้
หากรีบมองว่าเป็นเซนเซอร์เสีย ก็อาจวนเปลี่ยนสายหรือแก้สูตรทั้งที่ปัญหาอีกแบบหนึ่งอยู่ที่ทรัพยากรภายในชิป สำหรับ ESP32 รุ่นเดิม ADC บางส่วนเกี่ยวข้องกับการทำงานของ Wi-Fi จึงต้องดูว่าขาที่เลือกผูกกับหน่วยใดและ driver จัดการการใช้ร่วมอย่างไร
ก่อนแปลงค่าดิบเป็นแรงดัน จึงควรตรวจว่าการอ่านรอบนั้นสำเร็จจริงก่อนครับ เพราะสูตรที่ถูกต้องไม่สามารถทำให้ผลอ่านที่ไม่ผ่านกลับกลายเป็นข้อมูลวัดที่ใช้ได้
คำว่าเป็นขา analog ยังไม่บอกว่าขานั้นอยู่บน ADC หน่วยใด ต้องดู mapping ของชิปรุ่นที่ใช้ รวมถึงสิ่งที่บอร์ดต่อไว้แล้ว ไม่อาศัยเพียงเลขขาที่เห็นในตัวอย่างจากอินเทอร์เน็ต เพราะตัวอย่างอาจใช้โมดูลหรือบอร์ดคนละแบบ
ในเอกสาร GPIO ของ ESP32 รุ่นเดิมมีข้อจำกัดเกี่ยวกับ ADC2 ขณะใช้งาน Wi-Fi ส่วนเอกสาร ADC oneshot อธิบายว่ามีการป้องกันการใช้ทรัพยากรร่วมระหว่าง driver ที่เกี่ยวข้อง จึงต้องอ่านทั้งข้อจำกัดฮาร์ดแวร์และพฤติกรรม API ของรุ่นที่เลือก
ข้อมูลนี้ไม่ควรถูกขยายไปว่า ESP32 ทุกชื่อมีขาและข้อจำกัดเหมือนกันทั้งหมด ชิปรุ่นย่อยต่างกันอาจมีจำนวนหน่วย การจัดขาและการแบ่งทรัพยากรต่างกัน ควรระบุรุ่นจริงตั้งแต่ตอนตรวจ ไม่ใช้คำว่า ESP32 กว้างๆ เป็นผังวงจรแทน datasheet

สำหรับ ADC oneshot ใน ESP-IDF5.4 ฟังก์ชันอ่านอาจคืน ESP_ERR_TIMEOUT เมื่อไม่สามารถใช้ทรัพยากรตามเงื่อนไขได้ และเอกสารระบุว่าผล raw ในกรณีนั้นไม่ถูกต้อง จึงต้องตรวจสถานะก่อนใช้ตัวเลขที่อยู่ในตัวแปรปลายทาง
หากตัวแปรยังมีค่าจากรอบก่อน การพิมพ์เฉพาะตัวเลขอาจดูเหมือนเซนเซอร์นิ่ง ส่วนถ้ากำหนดเริ่มต้นเป็นศูนย์แล้วไม่แยก error ก็อาจสร้างค่าศูนย์ปลอมเข้าในประวัติ ทั้งสองกรณีทำให้ dashboard ดูเหมือนมีข้อมูลครบ ทั้งที่บางจุดไม่เคยได้ผลอ่านสำเร็จ
รูปแบบข้อมูลที่ส่งต่อจึงควรมีสถานะ ความสดและค่าที่วัดสำเร็จตามที่งานต้องใช้ เมื่ออ่านไม่ผ่านอาจเก็บค่าสุดท้ายไว้แสดงพร้อมบอกเวลาเดิม หรือแสดงว่าไม่พร้อมตามนโยบาย แต่ไม่อัปเดตเวลาวัดให้ใหม่ทั้งที่ใช้ค่าเก่าอยู่
ชุดตรวจพื้นฐานควรบันทึกรุ่นชิป บอร์ด GPIO หน่วยและ channel ของ ADC รวมถึงรุ่น SDK กับโหมดอ่าน แล้วเปรียบเทียบการทำงานที่ยังไม่เปิด Wi-Fi กับเส้นทางที่เปิดใช้งานภายใต้เงื่อนไขที่ควบคุมได้ โดยเก็บทั้งค่ากับผลของการเรียก API
จุดประสงค์ไม่ใช่ปิด Wi-Fi ไปแล้วถือว่าแก้ระบบส่งข้อมูลเสร็จ แต่เพื่อแยกว่าความต่างสัมพันธ์กับการใช้ทรัพยากรร่วมหรือไม่ หากการอ่านยังล้มเหลวตั้งแต่ไม่มีการใช้ร่วม ก็ต้องย้อนตรวจการตั้งค่าและการต่อก่อน ไม่โทษข้อจำกัด ADC2 ทุกกรณี
ถ้าการอ่านสำเร็จแต่ตัวเลขแกว่งเมื่อเริ่มสื่อสาร ก็เป็นอาการอีกแบบหนึ่งที่ต้องดูวงจรกับไฟเลี้ยงเพิ่มเติม การใช้วิทยุเปลี่ยนสภาพโหลดได้ แต่ผลอ่านที่มี noise กับการเรียก API ไม่สำเร็จไม่ควรถูกยุบเป็นปัญหาเดียวกันเพียงเพราะเกิดใกล้เวลาเปิด Wi-Fi

ตอนเก็บหลักฐานควรแยกด้วยว่าล้มเหลวที่การสร้างหน่วย ADC การตั้ง channel หรือการอ่าน เพราะผลจากคนละขั้นต้องตามคนละเงื่อนไข การพิมพ์ว่าอ่านไม่ได้เพียงข้อความเดียวทำให้เราแยกการเริ่มต้นไม่สำเร็จออกจากการแย่งทรัพยากรระหว่างทำงานได้ยาก
บน ESP32 รุ่นเดิม การพิจารณาย้ายไปขาที่อยู่บน ADC1 เป็นทางหนึ่งตามข้อจำกัดที่เอกสาร GPIO ชี้ไว้ แต่ต้องตรวจว่าขานั้นถูกใช้งานอย่างอื่นอยู่หรือไม่ รองรับสัญญาณและการดึงระดับที่ต้องการหรือเปล่า และบอร์ดนำขาออกมาให้ใช้จริงไหม
การย้ายขาไม่ใช่การแก้คุณภาพ analog ทั้งหมด เรื่องช่วงแรงดัน attenuation ความสัมพันธ์ของวงจรแบ่งแรงดัน และการคาลิเบรตยังต้องตรวจตามเดิม ไม่ถือว่าอ่านผ่านแล้วจะได้แรงดันแม่นตามที่คาดทันที
หากทรัพยากรในชิปไม่พอกับการใช้งานที่ต้องการ อาจต้องพิจารณาโครงสร้างอื่น เช่น อุปกรณ์แปลงสัญญาณภายนอกที่ตรงข้อกำหนด แต่การเพิ่มชิ้นส่วนก็มีเรื่องช่วงสัญญาณ บัส เวลาและต้นทุนดูแลเพิ่ม ไม่ควรเสนอเป็นคำตอบที่ทำให้ทุกปัญหาหายโดยไม่อ่านเงื่อนไขของงาน
เอกสาร ADC oneshot ระบุว่าฟังก์ชันอ่านใช้กลไกป้องกันการใช้ร่วมและไม่ควรถูกเรียกใน ISR หากต้องเริ่มอ่านจากเหตุการณ์ทางขา ก็ควรให้ส่วนรับเหตุการณ์ส่งงานมายังบริบทที่รองรับ แทนการย้ายคำสั่งเดิมเข้า interrupt ตรงๆ
หากมีหลาย task ใช้ ADC ร่วมกัน ควรจัดเจ้าของการตั้งค่าและขั้นทำงานให้ชัด แม้บางฟังก์ชันจะ thread-safe ก็ไม่ได้แปลว่าลำดับการตั้งค่า อ่าน และใช้ผลของทุก task จะตรงกับความตั้งใจโดยไม่ต้องออกแบบส่วนร่วม
การเก็บจำนวนรอบที่อ่านสำเร็จกับไม่สำเร็จตามช่วงเวลาช่วยให้เห็นคุณภาพของทางรับข้อมูล แต่ต้องเป็นข้อมูลที่เก็บจริงและไม่ใส่ค่าปลอมทดแทนเงียบๆ บทนี้ยังไม่มีผลทดสอบบอร์ดหรือเซนเซอร์ของผู้ใช้ จึงไม่อ้างว่าเปลี่ยน GPIO ใดแล้วตรวจผ่านแน่นอน
หากนำหลายรอบมาหาค่าเฉลี่ย ต้องนับเฉพาะข้อมูลที่ผ่านเงื่อนไขพร้อมรักษาจำนวนที่อ่านไม่สำเร็จไว้ประกอบ การหารด้วยจำนวนรอบที่ตั้งใจอ่านทั้งที่บางรอบไม่มีค่า จะเปลี่ยนผลคำนวณอย่างไม่มีความหมายทางการวัด และการมีค่าเฉลี่ยเพียงค่าเดียวก็ไม่ควรซ่อนช่วงที่ข้อมูลขาด
อาการอ่าน analog ไม่ผ่านหลังเพิ่ม Wi-Fi ควรถูกตรวจจากรุ่นชิป หน่วย ADC และผลของ API ก่อนแก้สูตร การแยกข้อมูลที่อ่านได้จริงออกจาก error ช่วยรักษาความหมายของประวัติ ส่วนทางเลือกอย่างย้ายไป ADC1 ยังต้องดูวงจรและการใช้ขาร่วมด้วย เพื่อให้แก้ข้อจำกัดทรัพยากรโดยไม่ทิ้งปัญหาคุณภาพสัญญาณไว้ข้างหลัง