# เจาะลึก IoT ![ภาพสเก็ตโน้ตของบทเรียนนี้](../../../../../translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.th.jpg) > สเก็ตโน้ตโดย [Nitya Narasimhan](https://github.com/nitya) คลิกที่ภาพเพื่อดูเวอร์ชันขนาดใหญ่ บทเรียนนี้เป็นส่วนหนึ่งของ [ซีรีส์ Hello IoT](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) จาก [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) บทเรียนนี้ถูกสอนผ่านวิดีโอ 2 ตอน - บทเรียน 1 ชั่วโมง และชั่วโมงตอบคำถามที่เจาะลึกในส่วนต่าง ๆ ของบทเรียนและตอบคำถามเพิ่มเติม [![บทเรียน 2: เจาะลึก IoT](https://img.youtube.com/vi/t0SySWw3z9M/0.jpg)](https://youtu.be/t0SySWw3z9M) [![บทเรียน 2: เจาะลึก IoT - ชั่วโมงตอบคำถาม](https://img.youtube.com/vi/tTZYf9EST1E/0.jpg)](https://youtu.be/tTZYf9EST1E) > 🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอ ## แบบทดสอบก่อนเรียน [แบบทดสอบก่อนเรียน](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/3) ## บทนำ บทเรียนนี้จะเจาะลึกในบางแนวคิดที่ครอบคลุมในบทเรียนก่อนหน้า ในบทเรียนนี้เราจะพูดถึง: * [องค์ประกอบของแอปพลิเคชัน IoT](../../../../../1-getting-started/lessons/2-deeper-dive) * [เจาะลึกไมโครคอนโทรลเลอร์](../../../../../1-getting-started/lessons/2-deeper-dive) * [เจาะลึกคอมพิวเตอร์บอร์ดเดี่ยว](../../../../../1-getting-started/lessons/2-deeper-dive) ## องค์ประกอบของแอปพลิเคชัน IoT องค์ประกอบสองส่วนของแอปพลิเคชัน IoT คือ *อินเทอร์เน็ต* และ *สิ่งของ* มาดูรายละเอียดของสององค์ประกอบนี้กัน ### สิ่งของ ![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.th.jpg) **สิ่งของ** ใน IoT หมายถึงอุปกรณ์ที่สามารถโต้ตอบกับโลกทางกายภาพได้ อุปกรณ์เหล่านี้มักจะเป็นคอมพิวเตอร์ขนาดเล็ก ราคาถูก ทำงานด้วยความเร็วต่ำและใช้พลังงานต่ำ เช่น ไมโครคอนโทรลเลอร์ที่มี RAM เพียงไม่กี่กิโลไบต์ (เมื่อเทียบกับกิกะไบต์ใน PC) ทำงานที่ความเร็วเพียงไม่กี่ร้อยเมกะเฮิรตซ์ (เมื่อเทียบกับกิกะเฮิรตซ์ใน PC) แต่ใช้พลังงานน้อยมากจนสามารถทำงานได้เป็นสัปดาห์ เดือน หรือแม้กระทั่งปีด้วยแบตเตอรี่ อุปกรณ์เหล่านี้โต้ตอบกับโลกทางกายภาพโดยใช้เซ็นเซอร์เพื่อรวบรวมข้อมูลจากสิ่งแวดล้อม หรือควบคุมเอาต์พุตหรือแอคชูเอเตอร์เพื่อทำการเปลี่ยนแปลงทางกายภาพ ตัวอย่างทั่วไปคือเทอร์โมสตัทอัจฉริยะ - อุปกรณ์ที่มีเซ็นเซอร์วัดอุณหภูมิ วิธีการตั้งค่าอุณหภูมิที่ต้องการ เช่น ปุ่มหมุนหรือหน้าจอสัมผัส และการเชื่อมต่อกับระบบทำความร้อนหรือความเย็นที่สามารถเปิดหรือปิดได้เมื่ออุณหภูมิที่ตรวจพบอยู่นอกช่วงที่ต้องการ เซ็นเซอร์วัดอุณหภูมิจะตรวจจับว่าอุณหภูมิในห้องเย็นเกินไป และแอคชูเอเตอร์จะเปิดระบบทำความร้อน ![แผนภาพแสดงอุณหภูมิและปุ่มหมุนเป็นอินพุตของอุปกรณ์ IoT และการควบคุมเครื่องทำความร้อนเป็นเอาต์พุต](../../../../../translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.th.png) มีอุปกรณ์ IoT หลากหลายประเภท ตั้งแต่ฮาร์ดแวร์เฉพาะที่ตรวจจับสิ่งหนึ่ง ไปจนถึงอุปกรณ์อเนกประสงค์ แม้กระทั่งสมาร์ทโฟนของคุณ! สมาร์ทโฟนสามารถใช้เซ็นเซอร์เพื่อตรวจจับโลกภายนอก และแอคชูเอเตอร์เพื่อโต้ตอบกับโลก - เช่น ใช้เซ็นเซอร์ GPS เพื่อระบุตำแหน่งของคุณ และลำโพงเพื่อให้คำแนะนำการนำทางไปยังจุดหมายปลายทาง ✅ ลองคิดถึงระบบอื่น ๆ รอบตัวคุณที่อ่านข้อมูลจากเซ็นเซอร์และใช้ข้อมูลนั้นในการตัดสินใจ ตัวอย่างหนึ่งคือเทอร์โมสตัทในเตาอบ คุณสามารถหาตัวอย่างเพิ่มเติมได้หรือไม่? ### อินเทอร์เน็ต **อินเทอร์เน็ต** ในแอปพลิเคชัน IoT ประกอบด้วยแอปพลิเคชันที่อุปกรณ์ IoT สามารถเชื่อมต่อเพื่อส่งและรับข้อมูล รวมถึงแอปพลิเคชันอื่น ๆ ที่สามารถประมวลผลข้อมูลจากอุปกรณ์ IoT และช่วยตัดสินใจว่าจะส่งคำขอใดไปยังแอคชูเอเตอร์ของอุปกรณ์ IoT การตั้งค่าทั่วไปคือการมีบริการคลาวด์บางประเภทที่อุปกรณ์ IoT เชื่อมต่อ และบริการคลาวด์นี้จัดการสิ่งต่าง ๆ เช่น ความปลอดภัย รวมถึงการรับข้อความจากอุปกรณ์ IoT และส่งข้อความกลับไปยังอุปกรณ์ บริการคลาวด์นี้จะเชื่อมต่อกับแอปพลิเคชันอื่น ๆ ที่สามารถประมวลผลหรือจัดเก็บข้อมูลเซ็นเซอร์ หรือใช้ข้อมูลเซ็นเซอร์ร่วมกับข้อมูลจากระบบอื่น ๆ เพื่อช่วยในการตัดสินใจ อุปกรณ์ไม่ได้เชื่อมต่อกับอินเทอร์เน็ตโดยตรงเสมอไปผ่าน WiFi หรือการเชื่อมต่อแบบมีสาย บางอุปกรณ์ใช้เครือข่ายแบบเมชเพื่อสื่อสารกันผ่านเทคโนโลยี เช่น Bluetooth โดยเชื่อมต่อผ่านอุปกรณ์ฮับที่มีการเชื่อมต่ออินเทอร์เน็ต ในตัวอย่างของเทอร์โมสตัทอัจฉริยะ เทอร์โมสตัทจะเชื่อมต่อผ่าน WiFi ในบ้านไปยังบริการคลาวด์ที่ทำงานในคลาวด์ มันจะส่งข้อมูลอุณหภูมิไปยังบริการคลาวด์นี้ และจากนั้นข้อมูลจะถูกเขียนลงในฐานข้อมูลบางประเภทเพื่อให้เจ้าของบ้านสามารถตรวจสอบอุณหภูมิปัจจุบันและที่ผ่านมาได้ผ่านแอปบนโทรศัพท์ บริการอื่นในคลาวด์จะทราบว่าเจ้าของบ้านต้องการอุณหภูมิเท่าใด และส่งข้อความกลับไปยังอุปกรณ์ IoT ผ่านบริการคลาวด์เพื่อบอกระบบทำความร้อนให้เปิดหรือปิด ![แผนภาพแสดงอุณหภูมิและปุ่มหมุนเป็นอินพุตของอุปกรณ์ IoT อุปกรณ์ IoT มีการสื่อสารสองทางกับคลาวด์ ซึ่งมีการสื่อสารสองทางกับโทรศัพท์ และการควบคุมเครื่องทำความร้อนเป็นเอาต์พุตจากอุปกรณ์ IoT](../../../../../translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.th.png) เวอร์ชันที่ฉลาดกว่านี้สามารถใช้ AI ในคลาวด์ร่วมกับข้อมูลจากเซ็นเซอร์อื่น ๆ ที่เชื่อมต่อกับอุปกรณ์ IoT อื่น ๆ เช่น เซ็นเซอร์ตรวจจับการใช้งานห้อง รวมถึงข้อมูล เช่น สภาพอากาศ และแม้กระทั่งปฏิทินของคุณ เพื่อช่วยตัดสินใจว่าจะตั้งค่าอุณหภูมิอย่างไรในลักษณะอัจฉริยะ ตัวอย่างเช่น มันสามารถปิดระบบทำความร้อนหากอ่านจากปฏิทินว่าคุณกำลังไปพักร้อน หรือปิดระบบทำความร้อนในแต่ละห้องตามการใช้งานห้อง โดยเรียนรู้จากข้อมูลเพื่อให้แม่นยำมากขึ้นเรื่อย ๆ ![แผนภาพแสดงเซ็นเซอร์อุณหภูมิหลายตัวและปุ่มหมุนเป็นอินพุตของอุปกรณ์ IoT อุปกรณ์ IoT มีการสื่อสารสองทางกับคลาวด์ ซึ่งมีการสื่อสารสองทางกับโทรศัพท์ ปฏิทิน และบริการสภาพอากาศ และการควบคุมเครื่องทำความร้อนเป็นเอาต์พุตจากอุปกรณ์ IoT](../../../../../translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.th.png) ✅ ข้อมูลอื่นใดที่สามารถช่วยทำให้เทอร์โมสตัทที่เชื่อมต่ออินเทอร์เน็ตฉลาดขึ้น? ### IoT บน Edge แม้ว่า I ใน IoT หมายถึง Internet แต่อุปกรณ์เหล่านี้ไม่จำเป็นต้องเชื่อมต่อกับอินเทอร์เน็ต ในบางกรณี อุปกรณ์สามารถเชื่อมต่อกับอุปกรณ์ 'edge' - อุปกรณ์เกตเวย์ที่ทำงานบนเครือข่ายท้องถิ่นของคุณ ซึ่งหมายความว่าคุณสามารถประมวลผลข้อมูลโดยไม่ต้องส่งข้อมูลผ่านอินเทอร์เน็ต สิ่งนี้สามารถทำงานได้เร็วขึ้นเมื่อคุณมีข้อมูลจำนวนมากหรือการเชื่อมต่ออินเทอร์เน็ตช้า ช่วยให้คุณทำงานแบบออฟไลน์ในที่ที่การเชื่อมต่ออินเทอร์เน็ตเป็นไปไม่ได้ เช่น บนเรือ หรือในพื้นที่ภัยพิบัติเมื่อตอบสนองต่อวิกฤตด้านมนุษยธรรม และช่วยให้คุณเก็บข้อมูลเป็นส่วนตัว อุปกรณ์บางตัวจะมีโค้ดประมวลผลที่สร้างขึ้นโดยใช้เครื่องมือคลาวด์และทำงานในพื้นที่เพื่อรวบรวมและตอบสนองต่อข้อมูลโดยไม่ใช้การเชื่อมต่ออินเทอร์เน็ตในการตัดสินใจ ตัวอย่างหนึ่งคืออุปกรณ์สมาร์ทโฮม เช่น Apple HomePod, Amazon Alexa หรือ Google Home ซึ่งจะฟังเสียงของคุณโดยใช้โมเดล AI ที่ฝึกในคลาวด์ แต่ทำงานในพื้นที่บนอุปกรณ์ อุปกรณ์เหล่านี้จะ 'ตื่น' เมื่อได้ยินคำหรือวลีที่กำหนด และส่งเสียงพูดของคุณผ่านอินเทอร์เน็ตเพื่อประมวลผลเท่านั้น อุปกรณ์จะหยุดส่งเสียงพูดเมื่อถึงจุดที่เหมาะสม เช่น เมื่อตรวจพบการหยุดพูด ทุกสิ่งที่คุณพูดก่อนปลุกอุปกรณ์ด้วยคำปลุก และทุกสิ่งที่คุณพูดหลังจากที่อุปกรณ์หยุดฟังจะไม่ถูกส่งผ่านอินเทอร์เน็ตไปยังผู้ให้บริการอุปกรณ์ และดังนั้นจะเป็นส่วนตัว ✅ ลองคิดถึงสถานการณ์อื่น ๆ ที่ความเป็นส่วนตัวมีความสำคัญ ดังนั้นการประมวลผลข้อมูลจะดีกว่าหากทำบน edge แทนที่จะทำในคลาวด์ เป็นคำใบ้ - ลองคิดถึงอุปกรณ์ IoT ที่มีกล้องหรืออุปกรณ์ถ่ายภาพอื่น ๆ ### ความปลอดภัยของ IoT เมื่อมีการเชื่อมต่ออินเทอร์เน็ต ความปลอดภัยเป็นสิ่งสำคัญ มีคำพูดตลกที่ว่า 'S ใน IoT หมายถึง Security' - ซึ่งไม่มี 'S' ใน IoT หมายความว่ามันไม่ปลอดภัย อุปกรณ์ IoT เชื่อมต่อกับบริการคลาวด์ และดังนั้นจึงมีความปลอดภัยเท่ากับบริการคลาวด์นั้น - หากบริการคลาวด์ของคุณอนุญาตให้อุปกรณ์ใด ๆ เชื่อมต่อได้ ข้อมูลที่เป็นอันตรายสามารถถูกส่ง หรือการโจมตีด้วยไวรัสสามารถเกิดขึ้นได้ สิ่งนี้สามารถมีผลกระทบในโลกจริงได้ เนื่องจากอุปกรณ์ IoT โต้ตอบและควบคุมอุปกรณ์อื่น ๆ ตัวอย่างเช่น [Stuxnet worm](https://wikipedia.org/wiki/Stuxnet) ได้ทำการปรับเปลี่ยนวาล์วในเครื่องหมุนเหวี่ยงเพื่อทำให้เกิดความเสียหาย แฮกเกอร์ยังได้ใช้ประโยชน์จาก [ความปลอดภัยที่ไม่ดีเพื่อเข้าถึงจอมอนิเตอร์เด็ก](https://www.npr.org/sections/thetwo-way/2018/06/05/617196788/s-c-mom-says-baby-monitor-was-hacked-experts-say-many-devices-are-vulnerable) และอุปกรณ์เฝ้าระวังในบ้านอื่น ๆ > 💁 บางครั้งอุปกรณ์ IoT และอุปกรณ์ edge ทำงานบนเครือข่ายที่แยกออกจากอินเทอร์เน็ตโดยสิ้นเชิงเพื่อเก็บข้อมูลเป็นส่วนตัวและปลอดภัย สิ่งนี้เรียกว่า [air-gapping](https://wikipedia.org/wiki/Air_gap_(networking)) ## เจาะลึกไมโครคอนโทรลเลอร์ ในบทเรียนก่อนหน้า เราได้แนะนำไมโครคอนโทรลเลอร์ ตอนนี้มาดูรายละเอียดเพิ่มเติมกัน ### CPU CPU คือ 'สมอง' ของไมโครคอนโทรลเลอร์ เป็นตัวประมวลผลที่รันโค้ดของคุณและสามารถส่งข้อมูลไปยังและรับข้อมูลจากอุปกรณ์ที่เชื่อมต่อ CPU สามารถมีหนึ่งหรือหลายคอร์ - ซึ่งหมายถึง CPU หนึ่งหรือหลายตัวที่สามารถทำงานร่วมกันเพื่อรันโค้ดของคุณ CPU อาศัยนาฬิกาเพื่อทำงานหลายล้านหรือพันล้านครั้งต่อวินาที แต่ละการทำงาน หรือรอบ จะซิงโครไนซ์การกระทำที่ CPU สามารถทำได้ ในแต่ละรอบ CPU สามารถดำเนินการคำสั่งจากโปรแกรม เช่น ดึงข้อมูลจากอุปกรณ์ภายนอกหรือทำการคำนวณทางคณิตศาสตร์ รอบที่สม่ำเสมอนี้ช่วยให้การกระทำทั้งหมดเสร็จสิ้นก่อนที่จะดำเนินการคำสั่งถัดไป ยิ่งรอบนาฬิกาเร็วเท่าไร คำสั่งที่สามารถดำเนินการได้ในแต่ละวินาทีจะมากขึ้น และดังนั้น CPU จะเร็วขึ้น ความเร็วของ CPU วัดเป็น [Hertz (Hz)](https://wikipedia.org/wiki/Hertz) ซึ่งเป็นหน่วยมาตรฐานที่ 1 Hz หมายถึงหนึ่งรอบหรือการทำงานของนาฬิกาต่อวินาที > 🎓 ความเร็วของ CPU มักจะระบุเป็น MHz หรือ GHz 1MHz คือ 1 ล้าน Hz 1GHz คือ 1 พันล้าน Hz > 💁 CPU ดำเนินการโปรแกรมโดยใช้ [fetch-decode-execute cycle](https://wikipedia.org/wiki/Instruction_cycle) สำหรับทุกการทำงานของนาฬิกา CPU จะดึงคำสั่งถัดไปจากหน่วยความจำ ถอดรหัส แล้วดำเนินการ เช่น ใช้หน่วยตรรกะทางคณิตศาสตร์ (ALU) เพื่อบวกตัวเลข 2 ตัว การดำเนินการบางอย่างจะใช้เวลาหลายรอบในการทำงาน ดังนั้นรอบถัดไปจะทำงานในรอบถัดไปหลังจากคำสั่งเสร็จสิ้น ![วงจร fetch decode execute แสดงการดึงคำสั่งจากโปรแกรมที่เก็บใน RAM จากนั้นถอดรหัสและดำเนินการบน CPU](../../../../../translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.th.png) ไมโครคอนโทรลเลอร์มีความเร็วรอบนาฬิกาต่ำกว่าคอมพิวเตอร์เดสก์ท็อปหรือแล็ปท็อป หรือแม้กระทั่งสมาร์ทโฟนส่วนใหญ่ ตัวอย่างเช่น Wio Terminal มี CPU ที่ทำงานที่ 120MHz หรือ 120,000,000 รอบต่อวินาที ✅ คอมพิวเตอร์ PC หรือ Mac เฉลี่ยมี CPU ที่มีหลายคอร์ทำงานที่หลายกิกะเฮิรตซ์ ซึ่งหมายถึงรอบนาฬิกาหลายพันล้านครั้งต่อวินาที ลองค้นคว้าความเร็วรอบนาฬิกาของคอมพิวเตอร์ของคุณและเปรียบเทียบว่ามันเร็วกว่า Wio Terminal กี่เท่า แต่ละรอบนาฬิกาจะใช้พลังงานและสร้างความร้อน ยิ่งรอบเร็วเท่าไร พลังงานที่ใช้และความร้อนที่สร้างจะมากขึ้น PC มีฮีตซิงค์และพัดลมเพื่อระบายความร้อน หากไม่มีสิ่งเหล่านี้ PC จะร้อนเกินไปและปิดตัวลงภายในไม่กี่วินาที ไมโครคอนโทรลเลอร์มักไม่มีสิ่งเหล่านี้เนื่องจากทำงานเย็นกว่ามากและดังนั้นจึงช้ากว่ามาก PC ใช้พลังงานจากไฟฟ้าหลักหรือแบตเตอรี่ขนาดใหญ่เป็นเวลาหลายชั่วโมง ไมโครคอนโทรลเลอร์สามารถทำงานได้เป็นวัน เดือน หรือแม้กระทั่งปีด้วยแบตเตอรี่ขนาดเล็ก ไมโครคอนโทรลเลอร์ยังสามารถมีคอร์ที่ทำงานด้วยความเร็วต่างกัน โดยเปลี่ยนไปใช้คอร์ที่ช้ากว่าเมื่อความต้องการ CPU ต่ำเพื่อลดการใช้พลังงาน > 💁 PC และ Mac บางรุ่นกำลังนำการผสมผสานระหว่างคอร์ที่มีพลังงานสูงและคอร์ที่มีพลังงานต่ำมาใช้ โดยเปลี่ยนไปเพื่อประหยัดแบตเตอรี่ ตัวอย่างเช่น ชิป M1 ในแล็ปท็อป Apple รุ่นล่าสุดสามารถเปลี่ยนระหว่างคอร์ประสิทธิภาพ 4 คอร์และคอร์ประหยัดพลังงาน 4 คอร์เพื่อเพิ่มประสิทธิภาพแบตเตอรี่หรือความเร็วขึ้นอยู่กับงานที่กำลังดำเนินการ ✅ ลองค้นคว้า: อ่านเกี่ยวกับ CPU ใน [บทความ CPU บน Wikipedia](https://wikipedia.org/wiki/Central_processing_unit) #### งาน สำรวจ Wio Terminal หากคุณกำลังใช้ Wio Terminal สำหรับ > 🎓 หน่วยความจำโปรแกรมเก็บโค้ดของคุณและยังคงอยู่แม้ไม่มีพลังงาน 🎓 RAM ใช้สำหรับการทำงานของโปรแกรมและจะถูกรีเซ็ตเมื่อไม่มีพลังงาน เช่นเดียวกับ CPU หน่วยความจำในไมโครคอนโทรลเลอร์มีขนาดเล็กกว่าคอมพิวเตอร์ PC หรือ Mac อย่างมาก คอมพิวเตอร์ PC ทั่วไปอาจมี RAM ขนาด 8 กิกะไบต์ (GB) หรือ 8,000,000,000 ไบต์ โดยแต่ละไบต์มีพื้นที่เพียงพอสำหรับเก็บตัวอักษรหนึ่งตัวหรือเลขตั้งแต่ 0-255 ในขณะที่ไมโครคอนโทรลเลอร์จะมี RAM เพียงกิโลไบต์ (KB) โดยกิโลไบต์เท่ากับ 1,000 ไบต์ Wio Terminal ที่กล่าวถึงข้างต้นมี RAM ขนาด 192KB หรือ 192,000 ไบต์ ซึ่งน้อยกว่าคอมพิวเตอร์ PC ทั่วไปถึง 40,000 เท่า! แผนภาพด้านล่างแสดงความแตกต่างของขนาดระหว่าง 192KB และ 8GB - จุดเล็ก ๆ ตรงกลางแสดงถึง 192KB ![การเปรียบเทียบระหว่าง 192KB และ 8GB - ใหญ่กว่า 40,000 เท่า](../../../../../translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.th.png) พื้นที่เก็บโปรแกรมก็เล็กกว่าคอมพิวเตอร์ PC เช่นกัน คอมพิวเตอร์ PC ทั่วไปอาจมีฮาร์ดไดรฟ์ขนาด 500GB สำหรับเก็บโปรแกรม ในขณะที่ไมโครคอนโทรลเลอร์อาจมีพื้นที่เก็บข้อมูลเพียงกิโลไบต์หรืออาจจะไม่กี่เมกะไบต์ (MB) (1MB เท่ากับ 1,000KB หรือ 1,000,000 ไบต์) Wio Terminal มีพื้นที่เก็บโปรแกรมขนาด 4MB ✅ ลองค้นคว้าดู: คอมพิวเตอร์ที่คุณใช้ในการอ่านนี้มี RAM และพื้นที่เก็บข้อมูลเท่าไหร่? เปรียบเทียบกับไมโครคอนโทรลเลอร์ดูสิ ### Input/Output ไมโครคอนโทรลเลอร์ต้องการการเชื่อมต่อ Input และ Output (I/O) เพื่ออ่านข้อมูลจากเซ็นเซอร์และส่งสัญญาณควบคุมไปยังแอคชูเอเตอร์ โดยปกติจะมีขา Input/Output อเนกประสงค์ (GPIO) จำนวนหนึ่ง ขาเหล่านี้สามารถกำหนดค่าในซอฟต์แวร์ให้เป็น Input (รับสัญญาณ) หรือ Output (ส่งสัญญาณ) 🧠⬅️ ขา Input ใช้สำหรับอ่านค่าจากเซ็นเซอร์ 🧠➡️ ขา Output ส่งคำสั่งไปยังแอคชูเอเตอร์ ✅ คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ในบทเรียนถัดไป #### งานที่ต้องทำ สำรวจ Wio Terminal หากคุณใช้ Wio Terminal สำหรับบทเรียนนี้ ให้ค้นหาขา GPIO ดูส่วน *Pinout diagram* ใน [หน้าผลิตภัณฑ์ Wio Terminal](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) เพื่อเรียนรู้ว่าขาไหนคืออะไร Wio Terminal มาพร้อมกับสติกเกอร์ที่คุณสามารถติดด้านหลังเพื่อแสดงหมายเลขขา ดังนั้นให้ติดสติกเกอร์นี้หากยังไม่ได้ทำ ### ขนาดทางกายภาพ ไมโครคอนโทรลเลอร์มักมีขนาดเล็ก โดยที่เล็กที่สุด เช่น [Freescale Kinetis KL03 MCU มีขนาดเล็กพอที่จะใส่ในหลุมของลูกกอล์ฟ](https://www.edn.com/tiny-arm-cortex-m0-based-mcu-shrinks-package/) ในขณะที่ CPU ในคอมพิวเตอร์ PC อาจมีขนาด 40mm x 40mm และยังไม่รวมฮีตซิงค์และพัดลมที่จำเป็นเพื่อให้ CPU ทำงานได้นานกว่าสองสามวินาทีโดยไม่ร้อนเกินไป ซึ่งมีขนาดใหญ่กว่าตัวไมโครคอนโทรลเลอร์อย่างมาก Wio Terminal Developer Kit ที่มีไมโครคอนโทรลเลอร์ เคส หน้าจอ และการเชื่อมต่อและส่วนประกอบต่าง ๆ มีขนาดไม่ใหญ่กว่าตัว CPU Intel i9 เปล่า ๆ และเล็กกว่ามากเมื่อรวมฮีตซิงค์และพัดลม! | อุปกรณ์ | ขนาด | | -------------------------------- | --------------------- | | Freescale Kinetis KL03 | 1.6mm x 2mm x 1mm | | Wio Terminal | 72mm x 57mm x 12mm | | Intel i9 CPU, ฮีตซิงค์และพัดลม | 136mm x 145mm x 103mm | ### เฟรมเวิร์กและระบบปฏิบัติการ เนื่องจากความเร็วและขนาดหน่วยความจำที่ต่ำ ไมโครคอนโทรลเลอร์จึงไม่ใช้ระบบปฏิบัติการ (OS) ในความหมายของคอมพิวเตอร์เดสก์ท็อป ระบบปฏิบัติการที่ทำให้คอมพิวเตอร์ของคุณทำงาน (Windows, Linux หรือ macOS) ต้องการหน่วยความจำและพลังการประมวลผลจำนวนมากเพื่อทำงานที่ไม่จำเป็นสำหรับไมโครคอนโทรลเลอร์ จำไว้ว่าไมโครคอนโทรลเลอร์มักถูกตั้งโปรแกรมให้ทำงานเฉพาะเจาะจงหนึ่งหรือหลายงาน ไม่เหมือนคอมพิวเตอร์ทั่วไปอย่าง PC หรือ Mac ที่ต้องรองรับอินเทอร์เฟซผู้ใช้ เล่นเพลงหรือภาพยนตร์ มีเครื่องมือสำหรับเขียนเอกสารหรือโค้ด เล่นเกม หรือท่องอินเทอร์เน็ต การเขียนโปรแกรมไมโครคอนโทรลเลอร์โดยไม่มี OS คุณจำเป็นต้องมีเครื่องมือบางอย่างเพื่อสร้างโค้ดในรูปแบบที่ไมโครคอนโทรลเลอร์สามารถทำงานได้ โดยใช้ API ที่สามารถสื่อสารกับอุปกรณ์ต่อพ่วงได้ ไมโครคอนโทรลเลอร์แต่ละตัวมีความแตกต่างกัน ดังนั้นผู้ผลิตมักสนับสนุนเฟรมเวิร์กมาตรฐานที่ช่วยให้คุณทำตาม 'สูตร' มาตรฐานเพื่อสร้างโค้ดและให้มันทำงานบนไมโครคอนโทรลเลอร์ใด ๆ ที่รองรับเฟรมเวิร์กนั้น คุณสามารถเขียนโปรแกรมไมโครคอนโทรลเลอร์โดยใช้ OS ซึ่งมักเรียกว่า real-time operating system (RTOS) เนื่องจากถูกออกแบบมาเพื่อจัดการการส่งข้อมูลไปและกลับจากอุปกรณ์ต่อพ่วงในเวลาจริง ระบบปฏิบัติการเหล่านี้มีน้ำหนักเบามากและมีฟีเจอร์เช่น: * การทำงานแบบมัลติเธรด ช่วยให้โค้ดของคุณสามารถทำงานหลายบล็อกพร้อมกันได้ ไม่ว่าจะบนหลายคอร์หรือผลัดกันทำงานบนคอร์เดียว * การเชื่อมต่อเครือข่ายเพื่อสื่อสารผ่านอินเทอร์เน็ตอย่างปลอดภัย * ส่วนประกอบ GUI สำหรับสร้างอินเทอร์เฟซผู้ใช้ (UI) บนอุปกรณ์ที่มีหน้าจอ ✅ อ่านเพิ่มเติมเกี่ยวกับ RTOS ต่าง ๆ: [Azure RTOS](https://azure.microsoft.com/services/rtos/?WT.mc_id=academic-17441-jabenn), [FreeRTOS](https://www.freertos.org), [Zephyr](https://www.zephyrproject.org) #### Arduino ![โลโก้ Arduino](../../../../../images/arduino-logo.svg) [Arduino](https://www.arduino.cc) เป็นเฟรมเวิร์กไมโครคอนโทรลเลอร์ที่ได้รับความนิยมมากที่สุด โดยเฉพาะในหมู่นักเรียน ผู้ที่ชื่นชอบ และผู้สร้าง Arduino เป็นแพลตฟอร์มอิเล็กทรอนิกส์แบบโอเพ่นซอร์สที่รวมซอฟต์แวร์และฮาร์ดแวร์ คุณสามารถซื้อบอร์ดที่รองรับ Arduino จาก Arduino เองหรือจากผู้ผลิตรายอื่น แล้วเขียนโค้ดโดยใช้เฟรมเวิร์ก Arduino บอร์ด Arduino เขียนโค้ดด้วยภาษา C หรือ C++ การใช้ C/C++ ช่วยให้โค้ดของคุณถูกคอมไพล์ให้มีขนาดเล็กและทำงานได้เร็ว ซึ่งเป็นสิ่งจำเป็นสำหรับอุปกรณ์ที่มีข้อจำกัดอย่างไมโครคอนโทรลเลอร์ แกนหลักของแอปพลิเคชัน Arduino เรียกว่า sketch และเป็นโค้ด C/C++ ที่มีฟังก์ชัน 2 ตัว - `setup` และ `loop` เมื่อบอร์ดเริ่มทำงาน โค้ดเฟรมเวิร์ก Arduino จะเรียกใช้ฟังก์ชัน `setup` หนึ่งครั้ง จากนั้นจะเรียกใช้ฟังก์ชัน `loop` ซ้ำ ๆ อย่างต่อเนื่องจนกว่าจะปิดพลังงาน คุณจะเขียนโค้ดการตั้งค่าในฟังก์ชัน `setup` เช่น การเชื่อมต่อ WiFi และบริการคลาวด์ หรือการตั้งค่าขา Input และ Output โค้ดในฟังก์ชัน `loop` จะมีโค้ดประมวลผล เช่น การอ่านค่าจากเซ็นเซอร์และส่งค่าดังกล่าวไปยังคลาวด์ โดยปกติคุณจะเพิ่มการหน่วงเวลาในแต่ละ loop เช่น หากคุณต้องการส่งข้อมูลเซ็นเซอร์ทุก ๆ 10 วินาที คุณจะเพิ่มการหน่วงเวลา 10 วินาทีที่ท้าย loop เพื่อให้ไมโครคอนโทรลเลอร์พักการทำงาน ประหยัดพลังงาน แล้วเรียกใช้ loop อีกครั้งเมื่อครบ 10 วินาที ![Sketch Arduino ที่เรียกใช้ setup ก่อน แล้วเรียกใช้ loop ซ้ำ ๆ](../../../../../translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.th.png) ✅ สถาปัตยกรรมโปรแกรมนี้เรียกว่า *event loop* หรือ *message loop* แอปพลิเคชันหลายตัวใช้สิ่งนี้เบื้องหลัง และเป็นมาตรฐานสำหรับแอปพลิเคชันเดสก์ท็อปส่วนใหญ่ที่ทำงานบน OS เช่น Windows, macOS หรือ Linux ฟังก์ชัน `loop` จะฟังข้อความจากส่วนประกอบ UI เช่น ปุ่ม หรืออุปกรณ์อย่างคีย์บอร์ด และตอบสนองต่อข้อความเหล่านั้น คุณสามารถอ่านเพิ่มเติมใน [บทความเกี่ยวกับ event loop](https://wikipedia.org/wiki/Event_loop) Arduino มีไลบรารีมาตรฐานสำหรับการโต้ตอบกับไมโครคอนโทรลเลอร์และขา I/O โดยมีการใช้งานที่แตกต่างกันภายใต้เพื่อให้ทำงานบนไมโครคอนโทรลเลอร์ที่แตกต่างกัน ตัวอย่างเช่น ฟังก์ชัน [`delay`](https://www.arduino.cc/reference/en/language/functions/time/delay/) จะหยุดโปรแกรมชั่วคราวในช่วงเวลาที่กำหนด ฟังก์ชัน [`digitalRead`](https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/) จะอ่านค่าของ `HIGH` หรือ `LOW` จากขาที่กำหนด โดยไม่คำนึงถึงบอร์ดที่โค้ดทำงาน ไลบรารีมาตรฐานเหล่านี้หมายความว่าโค้ด Arduino ที่เขียนสำหรับบอร์ดหนึ่งสามารถคอมไพล์ใหม่สำหรับบอร์ด Arduino อื่น ๆ และทำงานได้ โดยสมมติว่าขาเหมือนกันและบอร์ดรองรับฟีเจอร์เดียวกัน มีระบบนิเวศของไลบรารี Arduino ของบุคคลที่สามจำนวนมากที่ช่วยให้คุณเพิ่มฟีเจอร์เพิ่มเติมในโปรเจกต์ Arduino ของคุณ เช่น การใช้เซ็นเซอร์และแอคชูเอเตอร์ หรือการเชื่อมต่อกับบริการ IoT บนคลาวด์ ##### งานที่ต้องทำ สำรวจ Wio Terminal หากคุณใช้ Wio Terminal สำหรับบทเรียนนี้ ให้อ่านโค้ดที่คุณเขียนในบทเรียนที่แล้วอีกครั้ง ค้นหาฟังก์ชัน `setup` และ `loop` ตรวจสอบผลลัพธ์ที่ส่งออกทาง serial สำหรับฟังก์ชัน loop ที่ถูกเรียกซ้ำ ๆ ลองเพิ่มโค้ดในฟังก์ชัน `setup` เพื่อเขียนไปยัง serial port และสังเกตว่าโค้ดนี้ถูกเรียกเพียงครั้งเดียวในแต่ละครั้งที่คุณรีบูต ลองรีบูตอุปกรณ์ของคุณด้วยสวิตช์พลังงานด้านข้างเพื่อแสดงให้เห็นว่าฟังก์ชันนี้ถูกเรียกทุกครั้งที่อุปกรณ์รีบูต ## เจาะลึกคอมพิวเตอร์บอร์ดเดี่ยว ในบทเรียนที่แล้ว เราได้แนะนำคอมพิวเตอร์บอร์ดเดี่ยว ตอนนี้เรามาเจาะลึกลงไปในเรื่องนี้กัน ### Raspberry Pi ![โลโก้ Raspberry Pi](../../../../../translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.th.png) [Raspberry Pi Foundation](https://www.raspberrypi.org) เป็นองค์กรการกุศลจากสหราชอาณาจักรที่ก่อตั้งขึ้นในปี 2009 เพื่อส่งเสริมการศึกษาด้านวิทยาการคอมพิวเตอร์ โดยเฉพาะในระดับโรงเรียน ในฐานะส่วนหนึ่งของภารกิจนี้ พวกเขาได้พัฒนาคอมพิวเตอร์บอร์ดเดี่ยวที่เรียกว่า Raspberry Pi Raspberry Pi ปัจจุบันมีให้เลือก 3 รุ่น - รุ่นขนาดเต็ม รุ่นเล็ก Pi Zero และ Compute Module ที่สามารถนำไปใช้ในอุปกรณ์ IoT สุดท้ายของคุณ ![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.th.jpg) รุ่นล่าสุดของ Raspberry Pi ขนาดเต็มคือ Raspberry Pi 4B ซึ่งมี CPU แบบ quad-core (4 คอร์) ที่ทำงานที่ 1.5GHz RAM ขนาด 2, 4 หรือ 8GB กิกะบิตอีเธอร์เน็ต WiFi พอร์ต HDMI 2 พอร์ตที่รองรับหน้าจอ 4k พอร์ตเสียงและวิดีโอคอมโพสิต พอร์ต USB (USB 2.0 2 พอร์ต, USB 3.0 2 พอร์ต) ขา GPIO 40 ขา ตัวเชื่อมต่อกล้องสำหรับโมดูลกล้อง Raspberry Pi และช่องเสียบ SD card ทั้งหมดนี้อยู่บนบอร์ดที่มีขนาด 88mm x 58mm x 19.5mm และใช้พลังงานจากอะแดปเตอร์ USB-C 3A ราคาเริ่มต้นที่ 35 ดอลลาร์สหรัฐฯ ซึ่งถูกกว่าคอมพิวเตอร์ PC หรือ Mac มาก > 💁 ยังมี Pi400 คอมพิวเตอร์แบบ all-in-one ที่มี Pi4 อยู่ในคีย์บอร์ด ![Raspberry Pi Zero](../../../../../translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.th.jpg) Pi Zero มีขนาดเล็กกว่ามากและใช้พลังงานต่ำกว่า มี CPU แบบ single-core 1GHz RAM ขนาด 512MB WiFi (ในรุ่น Zero W) พอร์ต HDMI หนึ่งพอร์ต พอร์ต micro-USB หนึ่งพอร์ต ขา GPIO 40 ขา ตัวเชื่อมต่อกล้องสำหรับโมดูลกล้อง Raspberry Pi และช่องเสียบ SD card มีขนาด 65mm x 30mm x 5mm และใช้พลังงานน้อยมาก Zero มีราคา 5 ดอลลาร์สหรัฐฯ และรุ่น W ที่มี WiFi ราคา 10 ดอลลาร์สหรัฐฯ > 🎓 CPU ในทั้งสองรุ่นนี้เป็นโปรเซสเซอร์ ARM ซึ่งแตกต่างจากโปรเซสเซอร์ Intel/AMD x86 หรือ x64 ที่คุณพบใน PC และ Mac ส่วนใหญ่ CPU เหล่านี้คล้ายกับ CPU ที่พบในไมโครคอนโทรลเลอร์บางตัว รวมถึงโทรศัพท์มือถือเกือบทั้งหมด Microsoft Surface X และ Apple Mac ที่ใช้ Apple Silicon รุ่นใหม่ Raspberry Pi ทุกรุ่นใช้ระบบปฏิบัติการ Debian Linux เวอร์ชันหนึ่งที่เรียกว่า Raspberry Pi OS ซึ่งมีให้เลือกทั้งเวอร์ชัน lite ที่ไม่มีเดสก์ท็อป ซึ่งเหมาะสำหรับโปรเจกต์ 'headless' ที่ไม่ต้องใช้หน้าจอ หรือเวอร์ชันเต็มที่มีเดสก์ท็อปเต็มรูปแบบ พร้อมเว็บเบราว์เซอร์ แอปพลิเคชันสำนักงาน เครื่องมือเขียนโค้ด และเกม เนื่องจาก OS เป็นเวอร์ชันของ Debian Linux คุณสามารถติดตั้งแอปพลิเคชันหรือเครื่องมือใด ๆ ที่ทำงานบน Debian และสร้างขึ้นสำหรับโปรเซสเซอร์ ARM ภายใน Pi #### งานที่ต้องทำ สำรวจ Raspberry Pi หากคุณใช้ Raspberry Pi สำหรับบทเรียนนี้ ให้อ่านเกี่ยวกับส่วนประกอบฮาร์ดแวร์ต่าง ๆ บนบอร์ด * คุณสามารถค้นหารายละเอียดเกี่ยวกับโปรเซสเซอร์ที่ใช้ใน [หน้าสารสนเทศฮาร์ดแวร์ Raspberry Pi](https://www.raspberrypi.org/documentation/hardware/raspberrypi/) อ่านเกี่ยวกับโปรเซสเซอร์ที่ใช้ใน Pi ที่คุณใช้งาน * ค้นหาขา GPIO อ่านเพิ่มเติมเกี่ยวกับขาเหล่านี้ใน [เอกสาร GPIO ของ Raspberry Pi](https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md) ใช้ [คู่มือการใช้งาน GPIO Pin](https://www.raspberrypi.org/documentation/usage/gpio/README.md) เพื่อระบุขาต่าง ๆ บน Pi ของคุณ ### การเขียนโปรแกรมคอมพิวเตอร์บอร์ดเดี่ยว คอมพิวเตอร์บอร์ดเดี่ยวเป็นคอมพิวเตอร์เต็มรูปแบบที่ใช้ระบบปฏิบัติการเต็มรูปแบบ ซึ่งหมายความว่ามีภาษาการเขียนโปรแกรม เฟรมเวิร์ก และเครื่องมือมากมายที่คุณสามารถใช้ในการเขียนโค้ดได้ แตกต่างจากไมโครคอนโทรลเลอร์ที่ต้องพึ่งพาการสนับสนุนบอร์ดในเฟรมเวิร์กอย่าง Arduino ภาษาการเขียนโปรแกรมส่วนใหญ่มีไลบรารีที่สามารถเข้าถึงขา GPIO เพื่อส่งและรับข้อมูลจากเซ็นเซอร์และแอคชูเอเตอร์ ✅ คุณคุ้นเคยกับภาษาการเขียนโปรแกรมอะไรบ้าง? ภาษานั้นรองรับบน Linux หรือไม่? ภาษาการเขียนโปรแกรมที่นิยมที่สุดสำหรับการสร้างแอปพล ### การใช้คอมพิวเตอร์บอร์ดเดี่ยวในงาน IoT ระดับมืออาชีพ คอมพิวเตอร์บอร์ดเดี่ยวถูกนำมาใช้ในงาน IoT ระดับมืออาชีพ ไม่ใช่แค่สำหรับชุดพัฒนาสำหรับนักพัฒนาเท่านั้น แต่ยังเป็นวิธีที่ทรงพลังในการควบคุมฮาร์ดแวร์และดำเนินงานที่ซับซ้อน เช่น การรันโมเดลการเรียนรู้ของเครื่อง ตัวอย่างเช่น [Raspberry Pi 4 compute module](https://www.raspberrypi.org/blog/raspberry-pi-compute-module-4/) ซึ่งมีประสิทธิภาพเทียบเท่ากับ Raspberry Pi 4 แต่มีขนาดกะทัดรัดและราคาถูกกว่า โดยไม่มีพอร์ตส่วนใหญ่ ออกแบบมาเพื่อการติดตั้งในฮาร์ดแวร์ที่ปรับแต่งเอง --- ## 🚀 ความท้าทาย ความท้าทายในบทเรียนที่ผ่านมา คือการลิสต์รายการอุปกรณ์ IoT ให้ได้มากที่สุดเท่าที่คุณจะหาได้ในบ้าน โรงเรียน หรือที่ทำงานของคุณ สำหรับอุปกรณ์แต่ละชิ้นในรายการนี้ คุณคิดว่าอุปกรณ์เหล่านั้นสร้างขึ้นจากไมโครคอนโทรลเลอร์หรือคอมพิวเตอร์บอร์ดเดี่ยว หรืออาจเป็นการผสมผสานของทั้งสองอย่าง? ## แบบทดสอบหลังบทเรียน [แบบทดสอบหลังบทเรียน](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/4) ## ทบทวนและศึกษาด้วยตนเอง * อ่าน [คู่มือเริ่มต้นใช้งาน Arduino](https://www.arduino.cc/en/Guide/Introduction) เพื่อทำความเข้าใจเพิ่มเติมเกี่ยวกับแพลตฟอร์ม Arduino * อ่าน [บทนำเกี่ยวกับ Raspberry Pi 4](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/) เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ Raspberry Pi * ศึกษาเพิ่มเติมเกี่ยวกับแนวคิดและคำย่อบางส่วนในบทความ [What the FAQ are CPUs, MPUs, MCUs, and GPUs ใน Electrical Engineering Journal](https://www.eejournal.com/article/what-the-faq-are-cpus-mpus-mcus-and-gpus/) ✅ ใช้คู่มือเหล่านี้ พร้อมกับข้อมูลค่าใช้จ่ายที่แสดงในลิงก์ใน [คู่มือฮาร์ดแวร์](../../../hardware.md) เพื่อช่วยตัดสินใจว่าคุณต้องการใช้แพลตฟอร์มฮาร์ดแวร์แบบใด หรือคุณต้องการใช้อุปกรณ์เสมือนแทน ## งานที่ได้รับมอบหมาย [เปรียบเทียบและวิเคราะห์ความแตกต่างระหว่างไมโครคอนโทรลเลอร์และคอมพิวเตอร์บอร์ดเดี่ยว](assignment.md) --- **ข้อจำกัดความรับผิดชอบ**: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาที่เป็นต้นฉบับควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้