ESP8266實現的Mesh網絡間的節點通信

我在ESP8266的網狀網絡(Mesh Network)一文中只是簡單的介紹了Mesh網絡在IoT實踐應用上的意義與作用,也簡單地舉了一個用ESP8266實現方式。但不少的朋友提起這個例子只在太過于簡單,只是一個文字性多播而已,很難體會到Mesh在實際的網絡通信中怎么使用,例如:

  1. 如何向某一個特定的設備發送信息 ?
  2. 如何向網內所有的設備廣播信息 ?
  3. Mesh網絡的具體構成與每個部分的作用是什么樣的 ?
  4. 設備間如何實現安全通信 ?

由于在ESP8266WiFiMesh提供的方法實現非常少,具體只有以下幾個:

構造函數 - 用于創建一個WIFI Mesh節點

ESP8266WiFiMesh(uint32_t chip_id, std::function<String(String)> handler);

參數說明:

  • chip_id - 節點的唯一標識號
  • handler - 當接收到信息時進行處理的回調方法

初始化方法 - 啟用Mesh網絡必須調用此方法。

void begin();

掃描/發現節點 - 向發現的節點發送一個特定的信息

void attemptScan(String message);

接受連接請求 - 當接收到任何的客戶端時將會啟用此方法。

void acceptRequest();

可見,它在使用Mesh網絡進行通信的幾乎只是個雞肋,所以接下來我會使用 easyMesh 這個庫來實現幾個例子,通過代碼來說明Mesh網絡的具體用法。

easyMesh 這個庫功能比較全面,方法也比較多

  • uint32 getChipId( void ) { return _chipId;} - 讀取當前芯片的唯一編號
  • void setDebugMsgTypes( uint16_t types ) - 設置調試信息的類型 (具體參考meshPackageType)
  • void debugMsg( debugType type, const char* format ... ) - 發送調試信息 (具體可以參考 debugType枚舉類型)
  • void init( String prefix, String password, uint16_t port ) - 初始化Mesh節點
  • void update( void ) -
  • bool sendSingle( uint32_t &destId, String &msg ) - 向指定的目標節點單點發送信息
  • bool sendBroadcast( String &msg ) - 向Mesh網絡內的所有節點廣播信息
  • void setReceiveCallback( void(*onReceive)(uint32_t from, String &msg) ) - 設置接受信息的回調方法
  • void setNewConnectionCallback( void(*onNewConnection)(bool adopt) ) - 設置新建連接時的回調方法
  • uint16_t connectionCount( meshConnectionType *exclude = NULL ) - 返回連接到當前節點上的其它節點的數量
  • uint32_t getNodeTime( void ) - 獲取節點的時間

光看eashMesh這個主類提供的方法成員是不是已經完爆ESP8266WiFiMesh? easyMesh 還有很多很好用的內部變量與保護方法,具體你可以參考easyMesh.h文件的內容。

另外,easyMesh 還提供了 easyMeshAP, easyMeshSTA 這些類,有興趣的讀者也可以進行深度的研究。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容