ฉันจะปรับเปลี่ยนการใช้งาน EasyMesh ที่มีอยู่เล็กน้อยในขณะนี้ดูเหมือนว่าจะไม่ได้ใช้บทบาทของโหนด แต่ละโหนดมีค่าเท่ากันและสามารถสร้างการเชื่อมต่อกับแต่ละโหนดเท่านั้น อย่างที่ฉันเห็นไม่มีทางที่จะเพิ่มเซิร์ฟเวอร์ในตารางเส้นทางของพวกเขาหรือทำเครื่องหมายบันทึกการเชื่อมต่อเฉพาะในตารางที่มีการเชื่อมต่อกับเซิร์ฟเวอร์
โหนดใช้รายการการเชื่อมต่อสำหรับการกำหนดเส้นทางข้อความ / การส่งต่อ สิ่งที่คุณต้องการคือโหนดที่มีการบันทึกการเชื่อมต่อสำหรับเซิร์ฟเวอร์นี่คือสิ่งที่โหนดรูทเป็น
ตอนนี้เมื่อโหนดถูกเปิดใช้งานมันจะทำการสแกน AP (จุดเข้าใช้งาน), กรองสิ่งที่ไม่เริ่มต้นด้วยคำนำหน้าเครือข่ายและจากนั้นเชื่อมต่อกับ AP ด้วย RSSI ที่ดีที่สุด นอกจากนี้ทุกโหนดสร้าง AP ของตัวเองที่มีชื่อตาข่ายคำนำหน้า + โหนด ID
หากไม่มีโหนดอื่นให้ใช้ก็จะรอให้ผู้อื่นเชื่อมต่อ และนี่คือจุดแรกที่ควรใช้การเปลี่ยนแปลง คุณสามารถ hardcode หรือกำหนดค่า AP ที่ไม่เหมือนใครด้วยชื่ออย่างเช่นคำนำหน้า mesh + "เซิร์ฟเวอร์"และถ้าไม่มี EasyMesh AP อื่น ๆ อยู่โหนดควรเชื่อมต่อกับ AP นี้และควรเก็บmeshConnectionType
วัตถุที่กำหนดไว้ล่วงหน้าในรายการการเชื่อมต่อ
การจัดเก็บวัตถุนี้จะไม่ถูกกำหนดโดยการแลกเปลี่ยนข้อความระหว่างเซิร์ฟเวอร์และโหนด แต่อาจเป็นค่าคงที่ยกเว้นสำหรับespconn
เขตข้อมูล ว่าควรจะได้มาเช่นเดียวกับในกรณีอื่น ๆ ในโครงสร้างต่อไปนี้คุณจะต้องตัวแปรแรกถึงสมาชิก
struct meshConnectionType {
espconn *esp_conn;
uint32_t chipId = 0;
String subConnections;
timeSync time;
uint32_t lastRecieved = 0;
bool newConnection = true;
(...)
};
chipId
จะเป็นที่อยู่ของเซิร์ฟเวอร์ในเครือข่ายของตาข่าย คุณควรเลือกหนึ่งค่าที่ไม่สามารถเป็นรหัสชิป ESP8266
ดังนั้นโดยทั่วไปโหนดแรกที่เปิดเครื่องในเครือข่ายของคุณจะเป็นโหนด "รูท" หากโหนดอื่นต้องการส่งข้อความไปยังเซิร์ฟเวอร์ข้อความนั้นจะถูกส่งไปยังโหนด "root" ตามการเชื่อมต่อแบบตรง (เรียกว่าการเชื่อมต่อย่อยในรหัส)
โหนด "รูท" จะพบว่ามีการเชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ (ไปยังเราเตอร์ / อินเทอร์เน็ต) และเนื่องจากเป็นข้อความไปยังเซิร์ฟเวอร์ว่าควรส่งต่อข้อความนี้ในวิธีอื่น (ไม่ใช่แบบตาข่าย) . ต้องการข้อมูลเพิ่มเติมที่ชัดเจนเช่นที่อยู่ IP ของเซิร์ฟเวอร์และพอร์ตที่ใช้ สิ่งเหล่านี้ควรถูกเก็บไว้เป็นโหนด (ในทุก ๆ โหนด) โดยค่าเริ่มต้นหรือโดยวิธีการกำหนดค่าบางอย่าง
ดังนั้นในที่สุด "รูท" โหนดจะส่งข้อความ IP ไปยังเซิร์ฟเวอร์สิ่งนี้ควรดำเนินการโดยคุณอีกครั้ง
TL; DR; สรุป:
- ควรมีเซิร์ฟเวอร์ AP และโหนดแรก (เฉพาะโหนดแรกที่จะเปิดใช้งาน) ควรเชื่อมต่อกับโหนดนี้จะเป็นโหนดรูท
- เซิร์ฟเวอร์ควรมีที่อยู่ (
destId
) ที่จะใช้ในเครือข่ายเมชเมื่อส่งข้อความไปยังเซิร์ฟเวอร์ ข้อมูลนี้ควรพร้อมใช้งานสำหรับทุกโหนดโดยค่าเริ่มต้น
- โหนดรูทควรรู้ว่าเชื่อมต่อ "โดยตรง" กับเซิร์ฟเวอร์ / อินเทอร์เน็ต สิ่งนี้สามารถทำได้โดยการเพิ่มบันทึกการเชื่อมต่อกับเซิร์ฟเวอร์ของ
destId
รายการการเชื่อมต่อของรูตโหนด
- โหนดรูทที่รู้ว่าเชื่อมต่อกับเซิร์ฟเวอร์สามารถส่งต่อข้อความได้อย่างเหมาะสมผ่านทางอินเทอร์เน็ต
นี่เป็นเพียงความคิดทางทฤษฎีที่ฉันคิดขึ้นมาโดยการอ่านผ่านการใช้งาน EasyMesh ฉันอาจพลาดความจริงที่สำคัญบางอย่างที่ทำให้สิ่งนี้ยากหรือเป็นไปไม่ได้ที่จะนำไปใช้ มันอาจไม่ใช่วิธีที่มีประสิทธิภาพที่สุดในการแก้ปัญหา ฉันไม่ได้เป็นผู้เชี่ยวชาญด้านเครือข่ายตาข่าย
การมีโหนดรูทในเครือข่ายถามว่า "จะเกิดอะไรขึ้นหากรูตถูกตัดการเชื่อมต่อรูทใหม่จะถูกเลือกอย่างไร"