กิจกรรมที่ 10 — เพิ่มบอร์ดตัวรับที่ตัวเรือน (Receive)
IoT ในฟาร์มอัจฉริยะหน้าแรก

กิจกรรมที่ 10 — เพิ่มบอร์ดตัวรับที่ตัวเรือน (Receive)

50 นาที

อุปกรณ์ที่ใช้ บอร์ด ESP32-C3 ตัวใหม่ (ไม่มีเซนเซอร์ ต่อไปจะเรียกว่า บอร์ดตัวรับ), สาย USB ของบอร์ดตัวรับ, แล็ปท็อปที่ต่ออินเทอร์เน็ตได้, บอร์ด GoGo-IoT ที่อัปเดตแล้วจากกิจกรรมที่ 9 เสียบไฟจากกล่องจ่ายไฟ

บอร์ดตัวรับแทนบอร์ดที่วางไว้ ในตัวเรือน ซึ่งมี WiFi ถึง หน้าที่ของมันมีอย่างเดียวคือฟังแพ็กเก็ต ESP-NOW จากบอร์ดที่แปลง แล้วนำค่าที่ได้ยินมาแสดงบนหน้าเว็บของตัวเอง และส่งต่อให้ Home Assistant ในกิจกรรมที่ 11 ในกิจกรรมนี้เราจะติดตั้งเฟิร์มแวร์ตัวรับ เปิดหน้าเว็บของมันด้วย IP แล้วบอกว่าให้ฟังบอร์ดของกลุ่มเรา

ใบงาน

คลิกหัวข้อเพื่อดูวิธีทำ ทำเสร็จแล้วทำเครื่องหมายและบันทึกผล กรอกที่นี่หรือในขั้นตอนด้านล่างก็ได้

10.1ติดตั้งเฟิร์มแวร์ตัวรับ

บอร์ดตัวรับเป็นบอร์ด ESP32-C3 ทั่วไปที่ยังไม่มีโปรแกรมของเรา ขั้นตอนเหมือนข้อ 9.1 แต่ใช้ไฟล์คนละชุด

ดาวน์โหลดไฟล์ของโซนเรา

  1. ดาวน์โหลดไฟล์ตามสีโซนของกลุ่ม
โซน ไฟล์เฟิร์มแวร์บอร์ดตัวรับ
แดง farm-receiver-red.factory.bin
เขียว farm-receiver-green.factory.bin
น้ำเงิน farm-receiver-blue.factory.bin

ติดตั้งลงบอร์ดตัวรับ

  1. เสียบสาย USB จากบอร์ดตัวรับเข้าแล็ปท็อป (บอร์ด GoGo-IoT ต้องเสียบไฟจากกล่องจ่ายไฟอยู่ ไม่ใช่แล็ปท็อป จะได้ไม่เลือกพอร์ตผิดบอร์ด) ที่ web.esphome.io กด Connect แล้วเลือกพอร์ตที่ปรากฏ
  2. กด Install เลือกไฟล์ farm-receiver-…bin ที่ดาวน์โหลดไว้ แล้วยืนยันการติดตั้ง รอจนสำเร็จ อย่าถอดสายระหว่างติดตั้ง

ถ้ากด Connect แล้วไม่มีพอร์ตขึ้นมาให้เลือก ให้ลองสาย USB เส้นอื่น (สายชาร์จบางเส้นไม่มีสายข้อมูล) หรือกดปุ่ม BOOT บนบอร์ดค้างไว้ขณะเสียบสาย แล้วกด Connect ใหม่

↑ กลับไปที่ใบงาน

10.2อ่านชื่อและ IP ของบอร์ดตัวรับ

อ่านและบันทึกข้อมูลบอร์ด

  1. กด Logs & Console แล้วกดปุ่ม Reset device ในหน้าเว็บ อ่านบรรทัด ===== DEVICE NAME: ... ===== ชื่อจะเป็น farm-receiver-สี-รหัสหกตัว เช่น farm-receiver-red-d4e5f6
  2. ตรวจสีในชื่อ ต้องตรงกับโซนของเรา ถ้าไม่ตรงแสดงว่าติดตั้งไฟล์ผิดสี ให้กลับไปทำข้อ 10.1 ด้วยไฟล์ที่ถูกต้อง
  3. รอจนมี ===== IP ADDRESS: ... ===== แล้วจดทั้งสองค่า ชื่อบอร์ดตัวรับ IP
  4. ปล่อยหน้าบันทึกนี้เปิดไว้ก่อน จะใช้ดูในข้อ 10.3

ถ้าหน้าต่างบันทึกว่างเปล่า ให้กด Reset device ในหน้าเว็บอีกครั้ง อย่าถอดสายและอย่ากดปุ่มบนบอร์ด · บอร์ดตัวรับบางรุ่นมีช่อง USB สองช่อง ถ้าติดตั้งได้แต่ไม่เห็นบันทึก ให้ลองอีกช่องหนึ่ง

↑ กลับไปที่ใบงาน

10.3เปิดหน้าเว็บของตัวรับและระบุบอร์ดที่แปลง

เปิดหน้าเว็บ

  1. เปิดแท็บใหม่ พิมพ์ http:// ตามด้วย IP ของบอร์ดตัวรับ จะเห็นรายการค่าชุดเดียวกับบอร์ด GoGo-IoT แต่ต่อท้ายว่า ESP-NOW และยังว่างอยู่ทุกรายการ เพราะตัวรับยังไม่รู้ว่าต้องฟังบอร์ดไหน ส่วน บอร์ดอื่นที่ได้ยิน (other boards heard) จะเปลี่ยนไปเรื่อย ๆ นั่นคือบอร์ดของกลุ่มอื่นในห้องที่กำลังส่งออกอากาศอยู่
  2. จดชื่อบอร์ดอื่นที่ได้ยินมาหนึ่งชื่อ แล้วอ่าน ช่องสัญญาณ WiFi (channel) ของตัวรับ

บอกตัวรับว่าฟังบอร์ดของเรา

  1. หารายการ ชื่อบอร์ดที่แปลง (sender name) พิมพ์ รหัสหกตัวท้าย ของบอร์ด GoGo-IoT ของกลุ่ม (จากชื่อ เช่น a1b2c3) แล้วกดปุ่มส่งหรือ Enter พิมพ์ทั้งชื่อก็ได้ ตัวพิมพ์เล็กหรือใหญ่ไม่ต่างกัน
  2. ภายในไม่กี่วินาที บอร์ดที่รับข้อมูลอยู่ (receiving from) จะแสดงชื่อเต็มของบอร์ดเรา รับข้อมูลจากแปลง (link) เป็น ON และค่าอุณหภูมิ ความชื้น ความสว่าง ลูกลอย ปรากฏขึ้น ดูในหน้าบันทึกของตัวรับด้วย จะมีบรรทัด <<< GOGO,… ทุก 3 วินาที คู่กับบรรทัด >>> ที่เห็นในกิจกรรมที่ 9
  3. อ่าน ความแรงสัญญาณ ESP-NOW (rssi) dBm ตัวเลขติดลบ ยิ่งใกล้ 0 ยิ่งแรง บนโต๊ะเดียวกันมักอยู่ราว −30 ถึง −50 dBm

ถ้ารอเกินหนึ่งนาทีแล้วยังไม่มีค่า ตรวจตามลำดับ (1) รหัสที่พิมพ์ตรงกับชื่อบอร์ด GoGo-IoT ของเราทุกตัว (2) บอร์ด GoGo-IoT มีไฟและส่งอยู่ ดูจากหน้าเว็บของมันว่า แพ็กเก็ต ESP-NOW ที่ส่ง เพิ่มขึ้น (3) ช่องสัญญาณ WiFi ของสองบอร์ดต้องเท่ากัน ( กับ ) ถ้าต่างกัน แสดงว่าสองบอร์ดต่อเราเตอร์คนละตัว ให้ปิดแล้วเปิดบอร์ดตัวรับใหม่หนึ่งครั้ง (หรือย้ายไปใกล้บอร์ด GoGo-IoT) แล้วดูช่องสัญญาณอีกครั้ง หากยังไม่ตรง ให้บอกผู้สอน

การเลือกด้วยชื่อคือกลไกอย่างง่ายที่ทำให้ตัวรับของทุกกลุ่มใช้เฟิร์มแวร์ชุดเดียวกันได้ ที่ฟาร์มจริงซึ่งมีบอร์ดคู่เดียว อาจตั้งชื่อไว้ในเฟิร์มแวร์เลย หรือให้ตัวรับรับเฉพาะจากหมายเลขประจำเครื่อง (MAC address) ของบอร์ดที่แปลง

↑ กลับไปที่ใบงาน

10.4ตรวจว่าค่าที่รับมาจากบอร์ดของเราจริง

ทดลองแล้วดูที่ตัวรับ

  1. ให้คนหนึ่งใช้มือครอบบอร์ด GoGo-IoT ค้างไว้ อีกคนดูหน้าเว็บของ ตัวรับ จับเวลาตั้งแต่เริ่มครอบจนค่าความสว่าง (ESP-NOW) ลดลง วินาที เทียบกับเวลาที่วัดในกิจกรรมที่ 1 ( วินาที) ส่วนที่เพิ่มขึ้นคือการรอแพ็กเก็ตรอบถัดไป ซึ่งส่งทุก 3 วินาที
  2. ยกสวิตช์ลูกลอยพ้นน้ำ สวิตช์ลูกลอย (ESP-NOW) บนหน้าตัวรับต้องเปลี่ยนเป็น OFF วางกลับแล้วต้องเป็น ON

เทียบสองหน้าจอ

  1. เปิดหน้าเว็บของบอร์ด GoGo-IoT ไว้อีกแท็บ ค่าความชื้นและอุณหภูมิบนสองหน้าต้องตรงกัน (ต่างกันได้ไม่เกินหนึ่งรอบส่ง)

ค่าที่เห็นบนหน้าตัวรับ เดินทางมาสองต่อ: จากเซนเซอร์ผ่าน ESP-NOW ถึงตัวรับ แล้วจากตัวรับผ่าน WiFi ถึงเบราว์เซอร์ของเรา ที่ฟาร์มจริง ต่อแรกยาวเป็นร้อยเมตร ต่อที่สองอยู่ในบ้าน

↑ กลับไปที่ใบงาน

10.5ทดสอบระยะทาง

บอร์ด GoGo-IoT มีถ่าน 18650 อยู่ด้านใต้ ถ้าถ่านมีไฟ บอร์ดจะทำงานต่อเมื่อถอดสาย USB จึงถือเดินได้

พาบอร์ดที่แปลงออกห่าง

  1. ถอดสาย USB ของบอร์ด GoGo-IoT ออกจากกล่องจ่ายไฟ ดูว่าบอร์ดยังทำงาน (ค่าบนหน้าตัวรับยังอัปเดต) ถ้าบอร์ดดับ แสดงว่าถ่านไม่มีไฟ ให้ใช้เพาเวอร์แบงก์จ่ายไฟแทน หรือเสียบกับปลั๊กที่ไกลที่สุดที่หาได้
  2. ให้สมาชิกคนหนึ่งถือบอร์ดเดินไปยังจุดที่ ไกลที่สุดในห้อง โดยไม่ออกนอกห้อง (บอร์ดต้องยังต่อ WiFi ของห้องอยู่ ไม่เช่นนั้นช่องสัญญาณอาจเปลี่ยน) อีกคนดูหน้าเว็บของตัวรับ
  3. เมื่อถึงจุดไกลสุด อ่านความแรงสัญญาณ dBm และดูว่าค่ายังอัปเดตทุก 3 วินาทีหรือไม่ ถ้ามีคนหรือเสาบัง ให้ลองยกบอร์ดสูงขึ้น
  4. เดินกลับมาที่โต๊ะ อ่าน แพ็กเก็ตที่หาย (packets lost) คือจำนวนแพ็กเก็ตที่ตัวรับนับได้ว่าขาดหายไประหว่างทาง (จากหมายเลขลำดับที่กระโดด)
  5. เสียบสาย USB ของบอร์ด GoGo-IoT กลับเข้ากล่องจ่ายไฟ

ในห้องโล่ง ESP-NOW ไปได้ 100–200 เมตร ระยะที่ทดสอบได้ในห้องนี้จึงยังไม่ถึงขีดจำกัด สิ่งที่ควรสังเกตคือ สัญญาณอ่อนลงเท่าไรเมื่อไกลขึ้นและมีสิ่งกีดขวาง และ แพ็กเก็ตหายไปบ้างโดยระบบไม่ส่งซ้ำ เพราะการส่งออกอากาศแบบนี้ไม่มีการตอบรับ ผู้ออกแบบจึงต้องส่งซ้ำเป็นระยะ อย่างที่บอร์ดเราส่งทุก 3 วินาที

↑ กลับไปที่ใบงาน

10.6จำลองแปลงเงียบ

ปิดบอร์ดที่แปลง

  1. ปิดสวิตช์ ON / OFF บนบอร์ด GoGo-IoT พร้อมกับเริ่มจับเวลา ดูหน้าเว็บของตัวรับ
  2. นับจนกว่า รับข้อมูลจากแปลง (link) เปลี่ยนเป็น OFF และค่าเซนเซอร์ (ESP-NOW) กลายเป็น NaN (ไม่มีค่า) จดเวลา วินาที
  3. เปิดสวิตช์บอร์ดกลับ รอให้บอร์ดต่อ WiFi ได้ (ราว 10–20 วินาที) ค่าต้องกลับมาเอง

ตัวรับถูกตั้งไว้ว่า ถ้าไม่ได้ยินบอร์ดที่เลือกไว้เกิน 15 วินาที (ประมาณ 5 รอบส่ง) ให้รายงานว่าขาดการเชื่อมต่อ และ ลบค่าเดิมทิ้ง แทนที่จะแสดงค่าค้างไว้ นี่คือหลัก fail-safe เดียวกับกิจกรรมที่ 5: ระบบต้องบอกได้ว่า “ไม่รู้” ดีกว่าแสดงตัวเลขเก่าเหมือนยังรู้อยู่ ในกิจกรรมที่ 11 เราจะให้ Home Assistant เตือนเมื่อเกิดเหตุการณ์นี้

↑ กลับไปที่ใบงาน

คำถามท้ายกิจกรรม ตัวรับได้ยินบอร์ดของกลุ่มอื่นด้วย ถ้าเป็นฟาร์มจริงที่เพื่อนบ้านใช้ระบบแบบเดียวกัน จะเกิดปัญหาอะไรได้บ้าง และควรป้องกันอย่างไร (คิดทั้งเรื่องการเลือกรับเฉพาะบอร์ดของเรา และเรื่องคนอื่นอ่านข้อมูลของเราได้)