网络通信专题总结之配网专题

    网络通信的范围很广。其中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广播包或者组播的形式。


猜你喜欢

转载自blog.csdn.net/tommymusk/article/details/79520524
今日推荐