ทุกบอร์ดรัน 06_command_comes_back.py ด้วย TEAM ของตัวเอง ไฟล์ 06 ฟังนาน 15 นาที (LISTEN_MS = 900000) พอสำหรับสองรอบ ถ้ารันค้างไว้นานกว่านั้นก่อนเกม ให้กดรันใหม่ก่อนเริ่ม
say ไปที่ team01 จากหน้ารวม https://advance-innovation-centre-aic.github.io/embedded-systems-for-aiot-developer/examples/web/mqtt_dashboard.htmlteam00 บนโต๊ะผู้สอน นาฬิกาหยุดเมื่อคำขึ้นจอหน้าห้อง · รอบสองแข่งกับเวลารอบแรกของห้องเราเอง| คนนั่งบอร์ด | ศูนย์ควบคุม | คนจด | คนแก้ |
|---|---|---|---|
| ดูจอ อ่านคำออกเสียง | พิมพ์แล้วส่งต่อ | เวลาของห้องทั้งสองรอบ | คำไม่ขึ้น ดูลิ้นชัก Console ว่ามาถึงไหม |
ถ้ามีคำที่ไม่มีใครในห้องส่งโผล่ขึ้นมา นั่นคือ broker สาธารณะทำงานตามที่มันเป็น ใครก็เขียนเข้ามาได้ · ห้องที่มีไม่ถึงสิบเก้าทีม ทีมสุดท้ายคือทีมที่เลขสูงสุด
ฝั่งเครือข่าย
การเข้าร่วมเครือข่ายเป็นกระบวนการหลายจังหวะ ไม่ใช่คำสั่งเดียวจบ · การได้เลขที่อยู่เป็นคนละขั้นกับการเข้าร่วมได้ · การส่งข้อความผ่านคนกลางที่เรียกว่า broker ทำให้ผู้ส่งกับผู้รับไม่ต้องรู้จักกัน · ความล้มเหลวใช้เวลามากกว่าความสำเร็จเสมอ เพราะมีการลองใหม่ซ่อนอยู่
ฝั่ง Python และวิทยาการคอมพิวเตอร์
dict กับการแปลงเป็น JSON · ความต่างระหว่าง bytes กับ str และเหตุที่ต้อง .decode() · try/except กับความล้มเหลวที่คาดไว้แล้ว · การเทียบสตริงตรง ๆ แทนการพึ่ง truthiness · การจับเวลาคร่อมคำสั่งที่เราควบคุมไม่ได้
ฝั่งการออกแบบระบบ
โปรแกรมที่ล้มเหลวต้องบอกให้ได้ว่าล้มที่ขั้นไหน · ข้อมูลที่มาจากคนอื่นต้องตรวจก่อนใช้เสมอ · การรอหลักฐานหลายรอบก่อนรายงาน · การใช้ข้อมูลที่บันทึกไว้แล้วเป็นชุดทดสอบ แทนการหวังพึ่งสภาพจริงที่ควบคุมไม่ได้
ข้อสุดท้ายคือของที่ทีมทดสอบซอฟต์แวร์ทั่วโลกใช้ทุกวัน และวันนี้ผู้เรียนได้ใช้มันไปแล้วโดยไม่รู้ตัว
วันนี้เราได้:
พาบอร์ดขึ้นเครือข่ายด้วยโค้ดของเราเอง · ให้บอร์ดสำรวจคลื่นทั้งห้องแล้ววินิจฉัยตัวเองได้ · แยก "ต่อติดตอนนั้น" ออกจาก "ยังต่ออยู่ตอนนี้" · ส่งค่าจริงออกไปให้เครื่องอื่นเห็น และรับคำสั่งจากที่ไกลกลับมาสั่งของบนบอร์ด · เขียนกฎเองว่าลิงก์แบบไหนเรียกว่าใช้ได้
การบ้านของทีม: เลือกทำ 1 ข้อจากสี่ข้อในสไลด์ถัดไป จดลงบันทึกการเรียน
บทเรียนถัดไปเราจะให้ปุ่มกับไฟขึ้น broker ด้วย ชื่อชุดเดิมทั้งหมด broker.hivemq.com · TEAM · bento-aiot/<ทีม>/... ไฟล์ 07_button_to_broker.py ส่งการกดปุ่มเป็น event และสถานะไฟใน telemetry แล้วรับ cmd จากหน้าเว็บเดิมมาเปิดปิดไฟ เก็บหน้าเว็บของทีมไว้ ไม่ต้องปิด
ชุดบทเรียนถัดไป: สองชุดบทเรียนแรกเราเล่นของที่ไลบรารีมีให้ครบแล้ว ตั้งแต่บทเรียน 2.1–2.3 เราจะ สร้างมันขึ้นมาเองทีละชิ้น เริ่มที่หลอด LED ทุกดวงบนบอร์ด (gpio.num_leds() บอกว่ากี่ดวง — Eva 3 · Dev Kit 5) กับปุ่มผู้ใช้จริงหนึ่งปุ่ม ผ่านโมดูล gpio ที่วันนี้เพิ่งได้เห็นผ่านตาในไฟล์ 06
โครงลูป "อ่าน → ตัดสิน → รายงาน" ที่ใช้มาสองชุดบทเรียนแล้ว จะเป็นโครงเดียวกับชุดบทเรียนถัดไปเป๊ะ ๆ เปลี่ยนแค่ว่าปลายทางของการตัดสินคือหลอดไฟ ไม่ใช่ตัวหนังสือ
สองชุดบทเรียนแรกจบแล้ว ผู้เรียนได้เห็นของทั้งชุดที่ไลบรารีนี้มีให้ ตั้งแต่จอ เซนเซอร์ เสียง ไปจนถึงการส่งข้อมูลออกไปให้คนที่อยู่คนละที่ ไม่ใช่เพื่อให้จำได้หมด แต่เพื่อให้รู้ว่าปลายทางหน้าตาเป็นอย่างไร ตั้งแต่ชุดบทเรียนถัดไปเราจะย้อนกลับไปสร้างมันทีละชิ้นด้วยมือตัวเอง
คำถามคิดต่อ: ถ้าบอร์ดของทีมต้องแขวนอยู่ในโรงงานหกเดือน แล้วส่งค่าออกไปทุกนาที · จะรู้ได้อย่างไรว่ามันหยุดส่งตอนตีสาม · และคำสั่งที่ส่งกลับมาได้ ควรมีใครสั่งได้บ้าง
ข้อ 1 · จอหน้าประตู
ดัดแปลง 02_link_uptime.py ให้เหลือข้อมูลน้อยที่สุดเท่าที่จะยังตอบคำถาม "ตอนนี้บอร์ดออนไลน์อยู่ไหม" ได้จากระยะสามเมตร ตัดอะไรออกไปบ้าง แล้วทำไมถึงกล้าตัดสิ่งนั้น
ข้อ 2 · ส่งของทีมเอง
แก้ payload ใน 05_value_leaves_the_board.py ให้ส่งค่าที่ทีมเลือกเองเพิ่มอีกอย่างจาก sensors.snapshot() แล้วเปิดหน้าเว็บ my_first_reader.html ดูว่าฝั่งรับเห็นคีย์ใหม่เป็นกล่องใหม่จริงไหม และคีย์นั้นควรตั้งชื่อว่าอะไรคนอื่นถึงจะเข้าใจ
ข้อ 3 · คำสั่งของทีมเอง
เพิ่มคำสั่งที่สี่ให้ 06_command_comes_back.py นอกจาก beep led say ที่มีอยู่ แล้วอธิบายว่าถ้าคนส่งพิมพ์คำสั่งนั้นมาผิดรูปแบบ โปรแกรมของทีมจะทำอย่างไร
ข้อ 4 · เทปของทีมเอง
จดผลของ wifi.is_connected() กับ wifi.ip() จากการเดินจริงของทีม ลงเป็น TAPE ชุดใหม่ใน 03_your_link_rule.py แล้วตั้ง WANT_REPORTS ให้ตรงกับที่ควรจะเป็น พร้อมอธิบายว่านับมาได้อย่างไร
เขียนคำตอบลงบันทึกการเรียน แล้วเอามาเล่าให้เพื่อนฟังต้นชุดบทเรียนถัดไป



เอกสารของผู้ผลิต
มาตรฐานและเอกสารเปิด
connect() ถึงกินเวลาหลายวินาที และทำไมความล้มเหลวถึงกินเวลามากกว่า"0.0.0.0"json.dumps() กับ json.loads() ผลิตและอ่านbroker.hivemq.com (1883 TCP · 8884 wss) ไม่มีรหัสผ่าน https://www.hivemq.com/demos/websocket-client/ · หน้าเว็บ examples/web/ ใช้ MQTT.js 5.16.0งานวิจัยที่กำหนดรูปร่างของชุดบทเรียนนี้
wifi มีอะไรให้ใช้บ้าง" จึงมีแค่ห้าช่อง ไม่ใช่สารบัญของทั้งไลบรารีหมายเหตุเรื่องภาพ
ไดอะแกรม SVG ทุกภาพในเด็คนี้วาดขึ้นใหม่สำหรับหลักสูตรนี้ · ภาพลำดับการเข้าร่วมเครือข่ายมาจาก Wikimedia Commons ระบุที่มาไว้ใต้ภาพ · ภาพหน้าจอของ 04_scan_the_room.py เป็นภาพจริงจากการรันที่ความละเอียดเท่าจอของทั้งสองบอร์ด · ภาพหน้า Playground เป็นภาพถ่ายจากบอร์ด Eva Kit จริง บันทึกโดยผู้สอน
ข้อเท็จจริงเกี่ยวกับพฤติกรรมของโมดูล wifi mqtt tesaiot sensors gpio lcd และ ui ตรวจสอบจากซอร์สโค้ดของโปรเจกต์ KIT_PSE84_EVAL_EPC2-MicroPython-BentoClaw (Eva Kit) TESAIoT_KIT_PSE84_AI-Micropython-BentoClaw (Dev Kit) และ BENTO-TESAIoT-libraries โดยตรง
ตัวเลข 85 วินาทีคือเพดานที่วัดได้จริงบนบอร์ดตอนใส่รหัสผิด ไม่ใช่ค่าจากเอกสาร ทีมที่วัดได้ต่างจากนี้ บอกผู้สอนได้เลย