網絡通信專題總結之配網專題

    網絡通信的範圍很廣。其中TCP,UDP通信是最基本知識。想要玩轉物聯網產品,必須要掌握。

簡稱說明:嵌入式端設備簡稱設備

                手機APP簡稱APP

    入職的第一個正式任務是參考“Beej's Guide to Network Programming”文檔,實現TCPServer和Client端之間的通信;UDP Server和Client端的通信;在同一網段的UDP Server 能監聽手機APP搜索設備的發來的信息。

    由於之前沒有接觸過網絡編程相關知識,所以做這個任務很吃力。基本是一小個任務就做一天,當時也是忐忑不安,以這樣的狀態還怎樣勝任接下來的工作。於是乎,就這樣摸着石頭,一步步往前走。

    當時老大的要求是可以參考Beej’s上面的例子,但最好要領會其中的意思。我當時直接把Beej’s上面的例子直接移植到Ubuntu上gcc編譯,直接報找不到xxx文件。折騰了好久,還是拿出找師兄借的《21天學會Linux編程》書,把上面相應的例子找到,一行一行地敲進去,後面終於可以運行了。我很是開心。(總結:其實後面才發現自己喜歡照搬demo運行程序的做法是一個很不好的編程惡習。Demo只能作爲功能實現流程的參考,實際項目需要根據實際情況更改。對於《21天學會XXX》這類速成的雞湯還是少喝點,多踏踏實實學點東西還是很重要的。)

    網絡編程在項目中的應用很廣。嵌入式產品與APP通信用得最多。如配網,發現設備,與雲端通信等。以配網爲例,配網有幾種方式,如SmartConfig, SoftAP,WPS等。下面着重介紹下SmartConfig和SoftAp這兩種用得最多的方式。

Smartconfig

Smartconfig是配網最簡易的一種方式。過程如下:

1.  只需要讓設備進入一種混雜模式,不斷地在1-13channel來回掃描,捕獲空氣中的包;

2.  在抓取手機APP發來的路由器的SSID和密碼後;再切換爲STA模式,嘗試連接路由器,連上便配上網絡了;

3.  APP發現設備。有多種方式:如連上網絡後再向手機Ip地址和約定端口發送UDP包告知連上網絡。

SoftAP

SoftAP是比較穩定的一種配網模式。過程如下:

1.  設備開啓AP模式,並且開啓TCP Server對應端口監聽Client.

2.  APP作爲TCP Client連上設備Server,並且發送路由器的SSID和密碼;在設備收到後,切換爲STA模式,嘗試連接路由器,連上便配上網絡了;

3.  APP發現設備。有多種方式:如連上網絡後再向手機IP地址和約定端口發送UDP包告知連上網絡。

在這裏面:涉及到很多概念需要理解。

l 混雜模式

l 1-13channel,以及channel 1, channel 6, chanel 11特殊意義

l 設備如何知道手機的IP地址

l STA模式

l AP模式

配網遇到問題

1.  使用SmartConfig遇到最大的問題就是網絡兼容性問題。

表現爲有些路由器連上後就被踢下線。當時找模塊的技術支持過來支持了好幾次,每次都是拿工具給路由器抓包就走,後面也毫無音訊,最後也就是給了個SmartConfig路由器兼容列表。我當時也向技術支持發牢騷。但是生氣也是解決不了問題。後面就改用SoftAP的配網方式。(總結:生氣不能解決問題,對待顧客、合作伙伴、技術支持等人都要有耐心,不失禮節)

2.  APP發現設備的問題。

對於設備連上路由器後,告知APP有很多種方式:

從主動與被動的方式分:可分爲兩種。

一種是,設備主動告知APP,設備已經連上網絡了。

另一種是,APP主動搜索設備,看局域網內是否發現設備。

從通信方式分:

l ARP

l UDP

UDP點對點通信

UDP廣播或者組播

    一般來說,通信都是有數據格式的,產品級一般會使用的通信數據格式有柯南庫等。

    由於當時我才疏學淺,加上項目趕進度。改用了SoftAP配網的模式後,設備只是簡單地開了個TCP Server,一旦有Client連上,就發柯南庫,以這種形式告知APP設備已經配上網了。在這個過程中嵌入式端與APP端通信對接出了不少問題,有一次因爲柯南庫的UUID寫爲固定值,後面需要把UUID改爲以MAC地址命名。由於我沒有深入理解柯南庫的意義,忽略了UUID改變也需要把NameLength改變,所以導致設備與APP對接一直不成功,APP工程師找了好幾個小時,才發現原來是我這邊出了問題。嗅。(總結;任何東西不能照搬,需要理解,結合實際改動)

    簡單地開了個TCP Server發柯南庫的形式只是在配置完網絡環節告知了APP,還有設備連上網告知APP環節沒有做,APP主動搜索設備沒有做。所以配網會出現一定概率上發現不了設備。

    後面項目實在是太緊,就使用模塊廠商對應的配網發現協議。該配網協議是SmartConfig和SoftAp糅合版,導致APP端和嵌入式端在剝離SmartConfig的時候出現了不少的問題,後面還是找臺灣總部技術支持才解決了問題。(總結:遇到棘手問題,就找技術支持。好的技術支持對項目的進展有很大幫助。)

    直到今日快到進入量產階段,我們還發現了模塊廠商對應的配網發現協議還是會有一定機率發現不了設備。原因是由於設備是向APP特定的IP和端口發送UDP包,當APP從路由器網、切換到連接設備AP、再切換回路由器網絡時,如果此時路由器給APP分配一個新的IP地址(不同第一次連上的路由器地址)時,設備無論再怎麼發包,APP也是收不到。所以此時需要把發現協議改爲UDP廣播包或者組播的形式。


發佈了29 篇原創文章 · 獲贊 64 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章