C หรือที่เรียกว่า *I-squared-C* เป็นโปรโตคอลที่รองรับการสื่อสารแบบหลายตัวควบคุมและหลายอุปกรณ์ต่อพ่วง โดยอุปกรณ์ที่เชื่อมต่อสามารถทำหน้าที่เป็นตัวควบคุมหรืออุปกรณ์ต่อพ่วงที่สื่อสารผ่านบัส I²C (ชื่อของระบบการสื่อสารที่ใช้ในการถ่ายโอนข้อมูล) ข้อมูลจะถูกส่งในรูปแบบของแพ็กเก็ตที่มีการระบุที่อยู่ของอุปกรณ์ที่เชื่อมต่อซึ่งเป็นเป้าหมายของข้อมูลนั้น
> 💁 โมเดลนี้เคยถูกเรียกว่า master/slave แต่คำนี้กำลังถูกเลิกใช้เนื่องจากมีความเกี่ยวข้องกับการเป็นทาส [Open Source Hardware Association ได้เปลี่ยนมาใช้คำว่า controller/peripheral](https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/) แต่คุณอาจยังพบการอ้างอิงถึงคำเดิมในบางที่
อุปกรณ์จะมีที่อยู่ (address) ที่ใช้เมื่อเชื่อมต่อกับบัส I²C ซึ่งมักจะถูกกำหนดไว้ล่วงหน้าในอุปกรณ์ ตัวอย่างเช่น เซ็นเซอร์ Grove แต่ละประเภทจาก Seeed จะมีที่อยู่เดียวกัน เช่น เซ็นเซอร์วัดแสงทั้งหมดจะมีที่อยู่เดียวกัน และปุ่มทั้งหมดจะมีที่อยู่ที่แตกต่างจากเซ็นเซอร์วัดแสง บางอุปกรณ์สามารถเปลี่ยนที่อยู่ได้โดยการปรับตั้งค่าจัมเปอร์หรือการบัดกรีขาเข้าด้วยกัน
I²C มีบัสที่ประกอบด้วยสายหลัก 2 เส้น พร้อมกับสายไฟอีก 2 เส้น:
| สาย | ชื่อ | คำอธิบาย |
| ---- | --------- | ----------- |
| SDA | Serial Data | สายนี้ใช้สำหรับส่งข้อมูลระหว่างอุปกรณ์ |
| SCL | Serial Clock | สายนี้ส่งสัญญาณนาฬิกาที่มีอัตราที่กำหนดโดยตัวควบคุม |
| VCC | Voltage common collector | แหล่งจ่ายไฟสำหรับอุปกรณ์ ซึ่งเชื่อมต่อกับสาย SDA และ SCL เพื่อจ่ายไฟผ่านตัวต้านทาน pull-up ที่จะปิดสัญญาณเมื่อไม่มีอุปกรณ์ใดเป็นตัวควบคุม |
| GND | Ground | ให้กราวด์ร่วมสำหรับวงจรไฟฟ้า |

ในการส่งข้อมูล อุปกรณ์หนึ่งจะเริ่มต้นด้วยการออกสัญญาณเริ่มต้น (start condition) เพื่อแสดงว่าพร้อมที่จะส่งข้อมูล จากนั้นจะกลายเป็นตัวควบคุม ตัวควบคุมจะส่งที่อยู่ของอุปกรณ์ที่ต้องการสื่อสารด้วย พร้อมกับระบุว่าต้องการอ่านหรือเขียนข้อมูล หลังจากส่งข้อมูลเสร็จสิ้น ตัวควบคุมจะส่งสัญญาณหยุด (stop condition) เพื่อบอกว่าการส่งข้อมูลเสร็จสิ้นแล้ว หลังจากนั้นอุปกรณ์อื่นสามารถกลายเป็นตัวควบคุมและส่งหรือรับข้อมูลได้
22C มีข้อจำกัดด้านความเร็ว โดยมี 3 โหมดที่ทำงานด้วยความเร็วคงที่ โหมดที่เร็วที่สุดคือ High Speed mode ซึ่งมีความเร็วสูงสุดที่ 3.4Mbps (เมกะบิตต่อวินาที) แต่มีอุปกรณ์เพียงไม่กี่ชนิดที่รองรับความเร็วนี้ ตัวอย่างเช่น Raspberry Pi ถูกจำกัดให้ทำงานในโหมด fast mode ที่ 400Kbps (กิโลบิตต่อวินาที) ส่วนโหมดมาตรฐานทำงานที่ 100Kbps
> 💁 หากคุณใช้ Raspberry Pi พร้อมกับ Grove Base hat เป็นฮาร์ดแวร์ IoT คุณจะเห็นช่องเสียบ I2C หลายช่องบนบอร์ดที่สามารถใช้สื่อสารกับเซ็นเซอร์ I2C ได้ เซ็นเซอร์ Grove แบบแอนะล็อกยังใช้ I2C ร่วมกับ ADC เพื่อส่งค่าที่เป็นแอนะล็อกในรูปแบบข้อมูลดิจิทัล ดังนั้นเซ็นเซอร์วัดแสงที่คุณใช้จึงจำลองขาแอนะล็อก โดยส่งค่าผ่าน I2C เนื่องจาก Raspberry Pi รองรับเฉพาะขาดิจิทัล
### Universal asynchronous receiver-transmitter (UART)
UART เกี่ยวข้องกับวงจรทางกายภาพที่ช่วยให้อุปกรณ์สองตัวสามารถสื่อสารกันได้ โดยแต่ละอุปกรณ์จะมีขาสื่อสาร 2 ขา ได้แก่ ขาส่ง (Tx) และขารับ (Rx) โดยขา Tx ของอุปกรณ์ตัวแรกจะเชื่อมต่อกับขา Rx ของอุปกรณ์ตัวที่สอง และขา Tx ของอุปกรณ์ตัวที่สองจะเชื่อมต่อกับขา Rx ของอุปกรณ์ตัวแรก ซึ่งช่วยให้สามารถส่งข้อมูลได้ทั้งสองทิศทาง
* อุปกรณ์ 1 ส่งข้อมูลจากขา Tx ของมัน ซึ่งจะถูกอุปกรณ์ 2 รับผ่านขา Rx
* อุปกรณ์ 1 รับข้อมูลผ่านขา Rx ที่อุปกรณ์ 2 ส่งมาจากขา Tx

> 🎓 ข้อมูลจะถูกส่งทีละบิต ซึ่งเรียกว่าการสื่อสารแบบ *serial* ระบบปฏิบัติการและไมโครคอนโทรลเลอร์ส่วนใหญ่มี *serial ports* ซึ่งเป็นการเชื่อมต่อที่สามารถส่งและรับข้อมูลแบบ serial ได้ และสามารถเข้าถึงได้ผ่านโค้ดของคุณ
อุปกรณ์ UART มี [baud rate](https://wikipedia.org/wiki/Symbol_rate) (หรือที่เรียกว่า Symbol rate) ซึ่งเป็นความเร็วที่ข้อมูลจะถูกส่งและรับในหน่วยบิตต่อวินาที Baud rate ที่พบบ่อยคือ 9,600 หมายถึงข้อมูล 9,600 บิต (0 และ 1) ถูกส่งในแต่ละวินาที
UART ใช้ start และ stop bits - โดยจะส่ง start bit เพื่อบอกว่าจะส่งข้อมูล 1 ไบต์ (8 บิต) จากนั้นส่ง stop bit หลังจากส่ง 8 บิตเสร็จแล้ว
ความเร็วของ UART ขึ้นอยู่กับฮาร์ดแวร์ แต่ถึงแม้การใช้งานที่เร็วที่สุดก็ไม่เกิน 6.5 Mbps (เมกะบิตต่อวินาที หรือหลายล้านบิตที่ส่งในแต่ละวินาที)
คุณสามารถใช้ UART ผ่าน GPIO pins ได้ โดยตั้งค่าขาหนึ่งเป็น Tx และอีกขาหนึ่งเป็น Rx จากนั้นเชื่อมต่อกับอุปกรณ์อื่น
> 💁 หากคุณใช้ Raspberry Pi พร้อมกับ Grove Base hat เป็นฮาร์ดแวร์ IoT คุณจะเห็นช่องเสียบ UART บนบอร์ดที่สามารถใช้สื่อสารกับเซ็นเซอร์ที่ใช้โปรโตคอล UART ได้
### Serial Peripheral Interface (SPI)
SPI ถูกออกแบบมาสำหรับการสื่อสารในระยะสั้น เช่น การเชื่อมต่อไมโครคอนโทรลเลอร์กับอุปกรณ์จัดเก็บข้อมูล เช่น หน่วยความจำแฟลช โดยใช้โมเดล controller/peripheral ซึ่งมี controller หนึ่งตัว (โดยปกติคือโปรเซสเซอร์ของอุปกรณ์ IoT) ที่ทำงานร่วมกับ peripherals หลายตัว controller จะควบคุมทุกอย่างโดยเลือก peripheral และส่งหรือขอข้อมูล
> 💁 เช่นเดียวกับ I2C คำว่า controller และ peripheral เป็นการเปลี่ยนแปลงล่าสุด ดังนั้นคุณอาจยังเห็นคำศัพท์เก่าใช้อยู่
SPI controllers ใช้สาย 3 เส้น พร้อมกับสายเพิ่มเติม 1 เส้นต่อ peripheral โดย peripherals ใช้สาย 4 เส้น สายเหล่านี้ได้แก่:
| สาย | ชื่อ | คำอธิบาย |
| ---- | --------- | ----------- |
| COPI | Controller Output, Peripheral Input | สายนี้ใช้สำหรับส่งข้อมูลจาก controller ไปยัง peripheral |
| CIPO | Controller Input, Peripheral Output | สายนี้ใช้สำหรับส่งข้อมูลจาก peripheral ไปยัง controller |
| SCLK | Serial Clock | สายนี้ส่งสัญญาณนาฬิกาที่กำหนดโดย controller |
| CS | Chip Select | controller มีสายหลายเส้น หนึ่งเส้นต่อ peripheral และแต่ละเส้นเชื่อมต่อกับสาย CS บน peripheral ที่สอดคล้องกัน |

สาย CS ใช้เพื่อเปิดใช้งาน peripheral หนึ่งตัวในแต่ละครั้ง โดยสื่อสารผ่านสาย COPI และ CIPO เมื่อ controller ต้องการเปลี่ยน peripheral จะปิดใช้งานสาย CS ที่เชื่อมต่อกับ peripheral ที่กำลังใช้งานอยู่ จากนั้นเปิดใช้งานสายที่เชื่อมต่อกับ peripheral ที่ต้องการสื่อสารต่อไป
SPI เป็น *full-duplex* หมายความว่า controller สามารถส่งและรับข้อมูลพร้อมกันจาก peripheral เดียวกันโดยใช้สาย COPI และ CIPO SPI ใช้สัญญาณนาฬิกาบนสาย SCLK เพื่อให้แน่ใจว่าอุปกรณ์ทำงานสอดคล้องกัน ดังนั้นจึงไม่จำเป็นต้องใช้ start และ stop bits เหมือนกับ UART
SPI ไม่มีข้อจำกัดด้านความเร็วที่กำหนดไว้ โดยการใช้งานมักสามารถส่งข้อมูลได้หลายเมกะไบต์ต่อวินาที
ชุดพัฒนา IoT มักรองรับ SPI ผ่าน GPIO pins ตัวอย่างเช่น บน Raspberry Pi คุณสามารถใช้ GPIO pins 19, 21, 23, 24 และ 26 สำหรับ SPI
### การสื่อสารแบบไร้สาย
เซ็นเซอร์บางตัวสามารถสื่อสารผ่านโปรโตคอลไร้สายมาตรฐาน เช่น Bluetooth (ส่วนใหญ่เป็น Bluetooth Low Energy หรือ BLE), LoRaWAN (โปรโตคอลเครือข่ายพลังงานต่ำระยะไกล) หรือ WiFi ซึ่งช่วยให้เซ็นเซอร์ที่อยู่ห่างไกลสามารถสื่อสารได้โดยไม่ต้องเชื่อมต่อกับอุปกรณ์ IoT ทางกายภาพ
ตัวอย่างหนึ่งคือเซ็นเซอร์วัดความชื้นในดินเชิงพาณิชย์ ซึ่งจะวัดความชื้นในดินในพื้นที่ จากนั้นส่งข้อมูลผ่าน LoRaWAN ไปยังอุปกรณ์ฮับที่ประมวลผลข้อมูลหรือส่งต่อไปยังอินเทอร์เน็ต วิธีนี้ช่วยให้เซ็นเซอร์อยู่ห่างจากอุปกรณ์ IoT ที่จัดการข้อมูล ลดการใช้พลังงานและความจำเป็นในการใช้เครือข่าย WiFi ขนาดใหญ่หรือสายเคเบิลยาว
BLE เป็นที่นิยมสำหรับเซ็นเซอร์ขั้นสูง เช่น อุปกรณ์ติดตามสุขภาพที่สวมใส่บนข้อมือ ซึ่งรวมเซ็นเซอร์หลายตัวและส่งข้อมูลเซ็นเซอร์ไปยังอุปกรณ์ IoT เช่น โทรศัพท์ของคุณผ่าน BLE
✅ คุณมีเซ็นเซอร์ Bluetooth อยู่กับตัว ในบ้าน หรือในโรงเรียนหรือไม่? สิ่งเหล่านี้อาจรวมถึงเซ็นเซอร์วัดอุณหภูมิ เซ็นเซอร์ตรวจจับการเคลื่อนไหว อุปกรณ์ติดตาม และอุปกรณ์ฟิตเนส
วิธีหนึ่งที่อุปกรณ์เชิงพาณิชย์นิยมใช้ในการเชื่อมต่อคือ Zigbee Zigbee ใช้ WiFi เพื่อสร้างเครือข่ายแบบตาข่าย (mesh networks) ระหว่างอุปกรณ์ โดยที่แต่ละอุปกรณ์เชื่อมต่อกับอุปกรณ์ใกล้เคียงให้มากที่สุดเท่าที่จะเป็นไปได้ สร้างการเชื่อมต่อจำนวนมากเหมือนใยแมงมุม เมื่ออุปกรณ์หนึ่งต้องการส่งข้อความไปยังอินเทอร์เน็ต มันสามารถส่งไปยังอุปกรณ์ที่ใกล้ที่สุด ซึ่งจะส่งต่อไปยังอุปกรณ์ใกล้เคียงอื่น ๆ และต่อไปเรื่อย ๆ จนถึงตัวประสานงานและสามารถส่งไปยังอินเทอร์เน็ตได้
> 🐝 ชื่อ Zigbee มาจากการเต้นรำแบบ waggle ของผึ้งน้ำหวานหลังจากกลับมาที่รัง
## วัดระดับความชื้นในดิน
คุณสามารถวัดระดับความชื้นในดินได้โดยใช้เซ็นเซอร์วัดความชื้นในดิน อุปกรณ์ IoT และต้นไม้ในบ้านหรือพื้นที่ดินใกล้เคียง
### งาน - วัดความชื้นในดิน
ทำตามคำแนะนำที่เกี่ยวข้องเพื่อวัดความชื้นในดินโดยใช้อุปกรณ์ IoT ของคุณ:
* [Arduino - Wio Terminal](wio-terminal-soil-moisture.md)
* [Single-board computer - Raspberry Pi](pi-soil-moisture.md)
* [Single-board computer - Virtual device](virtual-device-soil-moisture.md)
## การปรับเทียบเซ็นเซอร์
เซ็นเซอร์อาศัยการวัดคุณสมบัติทางไฟฟ้า เช่น ความต้านทานหรือความจุไฟฟ้า
> 🎓 ความต้านทาน (Resistance) วัดในหน่วยโอห์ม (Ω) คือการวัดว่ามีการต้านทานกระแสไฟฟ้าที่ไหลผ่านวัสดุมากน้อยเพียงใด เมื่อมีการใช้แรงดันไฟฟ้ากับวัสดุ ปริมาณกระแสที่ไหลผ่านจะขึ้นอยู่กับความต้านทานของวัสดุ คุณสามารถอ่านเพิ่มเติมได้ใน [หน้าความต้านทานไฟฟ้าบน Wikipedia](https://wikipedia.org/wiki/Electrical_resistance_and_conductance)
> 🎓 ความจุไฟฟ้า (Capacitance) วัดในหน่วยฟารัด (F) คือความสามารถของส่วนประกอบหรือวงจรในการเก็บและสะสมพลังงานไฟฟ้า คุณสามารถอ่านเพิ่มเติมเกี่ยวกับความจุไฟฟ้าได้ใน [หน้าความจุไฟฟ้าบน Wikipedia](https://wikipedia.org/wiki/Capacitance)
การวัดเหล่านี้ไม่ใช่สิ่งที่มีประโยชน์เสมอไป - ลองจินตนาการถึงเซ็นเซอร์วัดอุณหภูมิที่ให้ค่าการวัดเป็น 22.5KΩ! ดังนั้นค่าที่วัดได้จำเป็นต้องถูกแปลงเป็นหน่วยที่มีประโยชน์โดยการปรับเทียบ - นั่นคือการจับคู่ค่าที่วัดได้กับปริมาณที่วัดเพื่อให้สามารถแปลงการวัดใหม่เป็นหน่วยที่ถูกต้อง
เซ็นเซอร์บางตัวมาพร้อมกับการปรับเทียบล่วงหน้า ตัวอย่างเช่น เซ็นเซอร์วัดอุณหภูมิที่คุณใช้ในบทเรียนก่อนหน้านี้ได้รับการปรับเทียบแล้วเพื่อให้สามารถส่งค่าการวัดอุณหภูมิในหน่วย °C ได้ ในโรงงาน เซ็นเซอร์ตัวแรกที่สร้างขึ้นจะถูกนำไปสัมผัสกับช่วงอุณหภูมิที่ทราบและวัดค่าความต้านทาน จากนั้นจึงใช้ค่าที่ได้สร้างสูตรคำนวณที่สามารถแปลงค่าที่วัดได้ในหน่วย Ω (หน่วยของความต้านทาน) เป็น °C
> 💁 สูตรในการคำนวณความต้านทานจากอุณหภูมิเรียกว่า [สมการ Steinhart–Hart](https://wikipedia.org/wiki/Steinhart–Hart_equation)
### การปรับเทียบเซ็นเซอร์วัดความชื้นในดิน
ความชื้นในดินวัดได้โดยใช้ปริมาณน้ำในดินแบบ gravimetric หรือ volumetric
* Gravimetric คือการวัดน้ำหนักของน้ำในน้ำหนักดินต่อหน่วย โดยวัดเป็นจำนวนกิโลกรัมของน้ำต่อกิโลกรัมของดินแห้ง
* Volumetric คือการวัดปริมาณน้ำในปริมาตรดินต่อหน่วย โดยวัดเป็นจำนวนลูกบาศก์เมตรของน้ำต่อลูกบาศก์เมตรของดินแห้ง
> 🇺🇸 สำหรับชาวอเมริกัน เนื่องจากความสอดคล้องของหน่วย สามารถวัดได้ในหน่วยปอนด์แทนกิโลกรัม หรือฟุตลูกบาศก์แทนลูกบาศก์เมตร
เซ็นเซอร์วัดความชื้นในดินวัดความต้านทานไฟฟ้าหรือความจุไฟฟ้า - ซึ่งไม่เพียงแต่เปลี่ยนแปลงตามความชื้นในดิน แต่ยังขึ้นอยู่กับประเภทของดินด้วย เนื่องจากส่วนประกอบในดินสามารถเปลี่ยนแปลงคุณสมบัติทางไฟฟ้าของดินได้ ดังนั้นเซ็นเซอร์ควรได้รับการปรับเทียบ - นั่นคือการนำค่าที่วัดได้จากเซ็นเซอร์ไปเปรียบเทียบกับค่าที่ได้จากวิธีการทางวิทยาศาสตร์ ตัวอย่างเช่น ห้องปฏิบัติการสามารถคำนวณความชื้นในดินแบบ gravimetric โดยใช้ตัวอย่างดินจากพื้นที่เฉพาะที่เก็บตัวอย่างหลายครั้งต่อปี และใช้ตัวเลขเหล่านี้ปรับเทียบเซ็นเซอร์ โดยจับคู่ค่าที่วัดได้จากเซ็นเซอร์กับค่าความชื้นในดินแบบ gravimetric

กราฟด้านบนแสดงวิธีการปรับเทียบเซ็นเซอร์ โดยจับค่าแรงดันไฟฟ้าสำหรับตัวอย่างดินที่วัดในห้องปฏิบัติการโดยเปรียบเทียบน้ำหนักเปียกกับน้ำหนักแห้ง (โดยการวัดน้ำหนักเมื่อเปียก จากนั้นอบให้แห้งและวัดน้ำหนักอีกครั้ง) เมื่อได้ค่าการวัดหลายค่าแล้ว สามารถนำมาพล็อตลงกราฟและสร้างเส้นที่เหมาะสมกับจุดข้อมูล เส้นนี้สามารถใช้แปลงค่าที่วัดได้จากเซ็นเซอร์วัดความชื้นในดินโดยอุปกรณ์ IoT ให้เป็นค่าความชื้นในดินจริง
💁 สำหรับเซ็นเซอร์วัดความชื้นในดินแบบ resistive แรงดันไฟฟ้าจะเพิ่มขึ้นเมื่อความชื้นในดินเพิ่มขึ้น สำหรับเซ็นเซอร์แบบ capacitive แรงดันไฟฟ้าจะลดลงเมื่อความชื้นในดินเพิ่มขึ้น ดังนั้นกราฟสำหรับเซ็นเซอร์แบบ capacitive จะมีแนวโน้มลดลง ไม่ใช่เพิ่มขึ้น

กราฟด้านบนแสดงค่าแรงดันไฟฟ้าที่วัดได้จากเซ็นเซอร์วัดความชื้นในดิน และโดยการติดตามค่าดังกล่าวไปยังเส้นบนกราฟ สามารถคำนวณค่าความชื้นในดินจริงได้
วิธีนี้ช่วยให้เกษตรกรต้องการเพียงค่าการวัดในห้องปฏิบัติการไม่กี่ค่าจากพื้นที่หนึ่ง จากนั้นสามารถใช้ IoT devices วัดความชื้นในดินได้ - ช่วยลดเวลาในการวัดอย่างมาก
---
## 🚀 ความท้าทาย
เซ็นเซอร์วัดความชื้นในดินแบบ resistive และ capacitive มีความแตกต่างกันอย่างไร? และเซ็นเซอร์ประเภทใด (ถ้ามี) ที่เหมาะสมที่สุดสำหรับเกษตรกร? คำตอบนี้จะเปลี่ยนไปหรือไม่ระหว่างประเทศที่กำลังพัฒนาและประเทศที่พัฒนาแล้ว?
## แบบทดสอบหลังการบรรยาย
[แบบทดสอบหลังการบรรยาย](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/12)
## การทบทวนและการศึกษาด้วยตนเอง
ศึกษาเพิ่มเติมเกี่ยวกับฮาร์ดแวร์และโปรโตคอลที่ใช้โดยเซ็นเซอร์และแอคชูเอเตอร์:
* [หน้าวิกิพีเดีย GPIO](https://wikipedia.org/wiki/General-purpose_input/output)
* [หน้าวิกิพีเดีย UART](https://wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter)
* [หน้าวิกิพีเดีย SPI](https://wikipedia.org/wiki/Serial_Peripheral_Interface)
* [หน้าวิกิพีเดีย I2C](https://wikipedia.org/wiki/I²C)
* [หน้าวิกิพีเดีย Zigbee](https://wikipedia.org/wiki/Zigbee)
## งานที่ได้รับมอบหมาย
[ปรับเทียบเซ็นเซอร์ของคุณ](assignment.md)
---
**ข้อจำกัดความรับผิดชอบ**:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้