前言:记录杭州疫情,独自在杭州跨年了,不过也可以抽出点时间来写写博客分享一下,在这也要祝大家虎年大吉!!


本篇目标:介绍当前智能家居产品中,关于设备配网中用到的一些技术


配网的作用

现在家庭生活中,智能设备越来越多,大到手机、电脑,小到插座、灯泡、网关等。但是这些设备需要联网的话,通常会接入家里的路由器,那么给设备配置连接路由器的过程就可以简单的称为配网
所以配网展现的作用就是让一个智能设备连接到路由器(网关)上,使得这个智能设备能够通过网络获取发送数据,并展现给使用者。

ps:对于现在的智能家居设备,配网还有一个作用,就是在设备连接到路由器后,可以将设备添加到使用者的平台(小米等)账号下。


配网的主流方式

配网的几个主流的方式:

  1. 有线连接:该方式十分简单,通过网线直接将设备连接到路由器即可,缺点就是网线束缚了空间。
  2. 无线连接 - 界面操作:有显示屏的设备一般会通过显示屏进行展示和交互,这样对于使用者非常友好,所有数据都可以看到,操作过程是十分明确,方便,如手机、电脑为代表。
  3. 无线连接 - softap配网(常用):对于没有显示屏的设备,会借助手机界面或说明书的引导,对设备进行配网。通过按键(或其他触发条件)长按,让设备散发一个开放的热点,在手机上预先填好路由器的账号密码,然后将手机的网络切换到开放的热点上,通过局域网将路由器信息发送给设备,设备收到信息后,去连接路由器。
  4. 无线连接 - 蓝牙配网(常用):和softap配网相似,也需要在手机上预填路由器信息,不过得益于手机蓝牙连接的方便性,使得手机能够自动连接到设备蓝牙,并将数据传输给设备,设备收到信息后去连接路由器。
  5. 无线连接 - smartconfig(不常用):将路由器信息经过长度、地址编码,然后通过手机广播出去,同时将设备变成类似一个无线抓包器,捕获并过滤出编码的数据包,并解码成路由器数据,连接路由器;整个操作过程与蓝牙配网类似,但是对于编码解码的设计,以及开发设计要求很高,并且该方式成功率无法达到100%,并且存在很多路由器兼容性上的问题,所以开发和维护的成本会比较高。
  6. 无线连接 - 私有协议方式(不常用):现在的厂商将自家的路由器和设备间,通过定制私有协议(或私有方案)的方式,使得自家的设备能够快速连接上自家的路由器,并不需要上述几个方式复杂的操作,但局限性也显而易见了,所以在协议未统一的情况下,也不常使用这种方式,代表如华为的hilink。
  7. 无线连接 - 网关接入(常用):该方式用于多个设备组网,一般是蓝牙和zigbee设备,网关已经通过上述的某种方式接入路由器联网,此时只需要简单的根据手机上的提示进行自组网配对即可,之后设备会自动连接到网关上,由网关代理管理所有的数据入网。

ps:简单的提一句个人觉得的配网趋势,由于现在很多的无线芯片支持wifi&ble双功能,所以主流会偏向蓝牙配网,并将softap配网作为备用;同时大厂商(例如华为、小米、阿里)将会发展上述的私有协议方式的快速接入,并在联盟提出统一化的配网协议,达到多平台产品之间真正的互通。


配网的设计

在本节选取上述的几个无线连接提下具体的过程设计:

  • softap配网:
    (1)手机app预填路由器信息
    (2)设备散发热点,热点名称可以结合mac自定义,用于区分即可
    (3)手机连接设备热点后,便建立了局域网
    (4)选取局域网通讯的方式:tcp&http,udp&coap,tcp&私有协议,udp&私有协议都可,在通用和数据量上都有各自的优先和缺点;
    (5)制定具体的交互命令协议:如查询设备信息、设置路由器信息
    (6)数据加密
    (7)数据交互完毕后,设备关闭热点,完成路由器的连接

    #mermaid-svg-MgAkKUky4jmfZVQx .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-MgAkKUky4jmfZVQx .label text{fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx .node rect,#mermaid-svg-MgAkKUky4jmfZVQx .node circle,#mermaid-svg-MgAkKUky4jmfZVQx .node ellipse,#mermaid-svg-MgAkKUky4jmfZVQx .node polygon,#mermaid-svg-MgAkKUky4jmfZVQx .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-MgAkKUky4jmfZVQx .node .label{text-align:center;fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx .node.clickable{cursor:pointer}#mermaid-svg-MgAkKUky4jmfZVQx .arrowheadPath{fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-MgAkKUky4jmfZVQx .flowchart-link{stroke:#333;fill:none}#mermaid-svg-MgAkKUky4jmfZVQx .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-MgAkKUky4jmfZVQx .edgeLabel rect{opacity:0.9}#mermaid-svg-MgAkKUky4jmfZVQx .edgeLabel span{color:#333}#mermaid-svg-MgAkKUky4jmfZVQx .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-MgAkKUky4jmfZVQx .cluster text{fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-MgAkKUky4jmfZVQx .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-MgAkKUky4jmfZVQx text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-MgAkKUky4jmfZVQx .actor-line{stroke:grey}#mermaid-svg-MgAkKUky4jmfZVQx .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-MgAkKUky4jmfZVQx .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-MgAkKUky4jmfZVQx #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-MgAkKUky4jmfZVQx .sequenceNumber{fill:#fff}#mermaid-svg-MgAkKUky4jmfZVQx #sequencenumber{fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx #crosshead path{fill:#333;stroke:#333}#mermaid-svg-MgAkKUky4jmfZVQx .messageText{fill:#333;stroke:#333}#mermaid-svg-MgAkKUky4jmfZVQx .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-MgAkKUky4jmfZVQx .labelText,#mermaid-svg-MgAkKUky4jmfZVQx .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-MgAkKUky4jmfZVQx .loopText,#mermaid-svg-MgAkKUky4jmfZVQx .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-MgAkKUky4jmfZVQx .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-MgAkKUky4jmfZVQx .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-MgAkKUky4jmfZVQx .noteText,#mermaid-svg-MgAkKUky4jmfZVQx .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-MgAkKUky4jmfZVQx .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-MgAkKUky4jmfZVQx .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-MgAkKUky4jmfZVQx .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-MgAkKUky4jmfZVQx .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MgAkKUky4jmfZVQx .section{stroke:none;opacity:0.2}#mermaid-svg-MgAkKUky4jmfZVQx .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-MgAkKUky4jmfZVQx .section2{fill:#fff400}#mermaid-svg-MgAkKUky4jmfZVQx .section1,#mermaid-svg-MgAkKUky4jmfZVQx .section3{fill:#fff;opacity:0.2}#mermaid-svg-MgAkKUky4jmfZVQx .sectionTitle0{fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx .sectionTitle1{fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx .sectionTitle2{fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx .sectionTitle3{fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MgAkKUky4jmfZVQx .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-MgAkKUky4jmfZVQx .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MgAkKUky4jmfZVQx .grid path{stroke-width:0}#mermaid-svg-MgAkKUky4jmfZVQx .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-MgAkKUky4jmfZVQx .task{stroke-width:2}#mermaid-svg-MgAkKUky4jmfZVQx .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MgAkKUky4jmfZVQx .taskText:not([font-size]){font-size:11px}#mermaid-svg-MgAkKUky4jmfZVQx .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MgAkKUky4jmfZVQx .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-MgAkKUky4jmfZVQx .task.clickable{cursor:pointer}#mermaid-svg-MgAkKUky4jmfZVQx .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-MgAkKUky4jmfZVQx .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-MgAkKUky4jmfZVQx .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-MgAkKUky4jmfZVQx .taskText0,#mermaid-svg-MgAkKUky4jmfZVQx .taskText1,#mermaid-svg-MgAkKUky4jmfZVQx .taskText2,#mermaid-svg-MgAkKUky4jmfZVQx .taskText3{fill:#fff}#mermaid-svg-MgAkKUky4jmfZVQx .task0,#mermaid-svg-MgAkKUky4jmfZVQx .task1,#mermaid-svg-MgAkKUky4jmfZVQx .task2,#mermaid-svg-MgAkKUky4jmfZVQx .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-MgAkKUky4jmfZVQx .taskTextOutside0,#mermaid-svg-MgAkKUky4jmfZVQx .taskTextOutside2{fill:#000}#mermaid-svg-MgAkKUky4jmfZVQx .taskTextOutside1,#mermaid-svg-MgAkKUky4jmfZVQx .taskTextOutside3{fill:#000}#mermaid-svg-MgAkKUky4jmfZVQx .active0,#mermaid-svg-MgAkKUky4jmfZVQx .active1,#mermaid-svg-MgAkKUky4jmfZVQx .active2,#mermaid-svg-MgAkKUky4jmfZVQx .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-MgAkKUky4jmfZVQx .activeText0,#mermaid-svg-MgAkKUky4jmfZVQx .activeText1,#mermaid-svg-MgAkKUky4jmfZVQx .activeText2,#mermaid-svg-MgAkKUky4jmfZVQx .activeText3{fill:#000 !important}#mermaid-svg-MgAkKUky4jmfZVQx .done0,#mermaid-svg-MgAkKUky4jmfZVQx .done1,#mermaid-svg-MgAkKUky4jmfZVQx .done2,#mermaid-svg-MgAkKUky4jmfZVQx .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-MgAkKUky4jmfZVQx .doneText0,#mermaid-svg-MgAkKUky4jmfZVQx .doneText1,#mermaid-svg-MgAkKUky4jmfZVQx .doneText2,#mermaid-svg-MgAkKUky4jmfZVQx .doneText3{fill:#000 !important}#mermaid-svg-MgAkKUky4jmfZVQx .crit0,#mermaid-svg-MgAkKUky4jmfZVQx .crit1,#mermaid-svg-MgAkKUky4jmfZVQx .crit2,#mermaid-svg-MgAkKUky4jmfZVQx .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-MgAkKUky4jmfZVQx .activeCrit0,#mermaid-svg-MgAkKUky4jmfZVQx .activeCrit1,#mermaid-svg-MgAkKUky4jmfZVQx .activeCrit2,#mermaid-svg-MgAkKUky4jmfZVQx .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-MgAkKUky4jmfZVQx .doneCrit0,#mermaid-svg-MgAkKUky4jmfZVQx .doneCrit1,#mermaid-svg-MgAkKUky4jmfZVQx .doneCrit2,#mermaid-svg-MgAkKUky4jmfZVQx .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-MgAkKUky4jmfZVQx .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-MgAkKUky4jmfZVQx .milestoneText{font-style:italic}#mermaid-svg-MgAkKUky4jmfZVQx .doneCritText0,#mermaid-svg-MgAkKUky4jmfZVQx .doneCritText1,#mermaid-svg-MgAkKUky4jmfZVQx .doneCritText2,#mermaid-svg-MgAkKUky4jmfZVQx .doneCritText3{fill:#000 !important}#mermaid-svg-MgAkKUky4jmfZVQx .activeCritText0,#mermaid-svg-MgAkKUky4jmfZVQx .activeCritText1,#mermaid-svg-MgAkKUky4jmfZVQx .activeCritText2,#mermaid-svg-MgAkKUky4jmfZVQx .activeCritText3{fill:#000 !important}#mermaid-svg-MgAkKUky4jmfZVQx .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MgAkKUky4jmfZVQx g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-MgAkKUky4jmfZVQx g.classGroup text .title{font-weight:bolder}#mermaid-svg-MgAkKUky4jmfZVQx g.clickable{cursor:pointer}#mermaid-svg-MgAkKUky4jmfZVQx g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-MgAkKUky4jmfZVQx g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-MgAkKUky4jmfZVQx .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-MgAkKUky4jmfZVQx .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-MgAkKUky4jmfZVQx .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-MgAkKUky4jmfZVQx .dashed-line{stroke-dasharray:3}#mermaid-svg-MgAkKUky4jmfZVQx #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MgAkKUky4jmfZVQx #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MgAkKUky4jmfZVQx #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-MgAkKUky4jmfZVQx #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-MgAkKUky4jmfZVQx #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MgAkKUky4jmfZVQx #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MgAkKUky4jmfZVQx #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MgAkKUky4jmfZVQx #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MgAkKUky4jmfZVQx .commit-id,#mermaid-svg-MgAkKUky4jmfZVQx .commit-msg,#mermaid-svg-MgAkKUky4jmfZVQx .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MgAkKUky4jmfZVQx .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MgAkKUky4jmfZVQx .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MgAkKUky4jmfZVQx g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MgAkKUky4jmfZVQx g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-MgAkKUky4jmfZVQx g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-MgAkKUky4jmfZVQx g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-MgAkKUky4jmfZVQx g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-MgAkKUky4jmfZVQx .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-MgAkKUky4jmfZVQx .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-MgAkKUky4jmfZVQx .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-MgAkKUky4jmfZVQx .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-MgAkKUky4jmfZVQx .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-MgAkKUky4jmfZVQx .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-MgAkKUky4jmfZVQx .edgeLabel text{fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MgAkKUky4jmfZVQx .node circle.state-start{fill:black;stroke:black}#mermaid-svg-MgAkKUky4jmfZVQx .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-MgAkKUky4jmfZVQx #statediagram-barbEnd{fill:#9370db}#mermaid-svg-MgAkKUky4jmfZVQx .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-MgAkKUky4jmfZVQx .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-MgAkKUky4jmfZVQx .statediagram-state .divider{stroke:#9370db}#mermaid-svg-MgAkKUky4jmfZVQx .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-MgAkKUky4jmfZVQx .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-MgAkKUky4jmfZVQx .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-MgAkKUky4jmfZVQx .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-MgAkKUky4jmfZVQx .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-MgAkKUky4jmfZVQx .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-MgAkKUky4jmfZVQx .note-edge{stroke-dasharray:5}#mermaid-svg-MgAkKUky4jmfZVQx .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-MgAkKUky4jmfZVQx .error-icon{fill:#522}#mermaid-svg-MgAkKUky4jmfZVQx .error-text{fill:#522;stroke:#522}#mermaid-svg-MgAkKUky4jmfZVQx .edge-thickness-normal{stroke-width:2px}#mermaid-svg-MgAkKUky4jmfZVQx .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-MgAkKUky4jmfZVQx .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-MgAkKUky4jmfZVQx .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-MgAkKUky4jmfZVQx .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-MgAkKUky4jmfZVQx .marker{fill:#333}#mermaid-svg-MgAkKUky4jmfZVQx .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-MgAkKUky4jmfZVQx {color: rgba(0, 0, 0, 0.75);font: ;}app设备填入路由器信息散发热点 DEV-XXXXXXXX连接热点udp&私有协议介质传输查询设备信息返回设备信息发送路由器信息响应关闭热点,连接路由器app设备
  • 蓝牙配网:
    (1)手机app预填路由器信息
    (2)设备进行蓝牙广播,可以在蓝牙广播包 - 厂商自定义数据中加入特定的数据用于区分自家的设备
    (3)设备本地蓝牙服务注册自定的服务用于通讯
    (4)手机搜索到特定的蓝牙设备后,连接蓝牙,获取服务,通过服务进行通讯
    (5)制定协议:蓝牙数据量小,一般自定私有字节协议进行通讯
    (6)制定具体的交互命令协议:如查询设备信息、设置路由器信息
    (7)数据加密
    (8)数据交互完毕后,设备关闭蓝牙,完成路由器的连接

    #mermaid-svg-MpT5PXzFt5L3TDdu .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .label text{fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .node rect,#mermaid-svg-MpT5PXzFt5L3TDdu .node circle,#mermaid-svg-MpT5PXzFt5L3TDdu .node ellipse,#mermaid-svg-MpT5PXzFt5L3TDdu .node polygon,#mermaid-svg-MpT5PXzFt5L3TDdu .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-MpT5PXzFt5L3TDdu .node .label{text-align:center;fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .node.clickable{cursor:pointer}#mermaid-svg-MpT5PXzFt5L3TDdu .arrowheadPath{fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-MpT5PXzFt5L3TDdu .flowchart-link{stroke:#333;fill:none}#mermaid-svg-MpT5PXzFt5L3TDdu .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-MpT5PXzFt5L3TDdu .edgeLabel rect{opacity:0.9}#mermaid-svg-MpT5PXzFt5L3TDdu .edgeLabel span{color:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-MpT5PXzFt5L3TDdu .cluster text{fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-MpT5PXzFt5L3TDdu .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-MpT5PXzFt5L3TDdu text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-MpT5PXzFt5L3TDdu .actor-line{stroke:grey}#mermaid-svg-MpT5PXzFt5L3TDdu .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-MpT5PXzFt5L3TDdu #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .sequenceNumber{fill:#fff}#mermaid-svg-MpT5PXzFt5L3TDdu #sequencenumber{fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu #crosshead path{fill:#333;stroke:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .messageText{fill:#333;stroke:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-MpT5PXzFt5L3TDdu .labelText,#mermaid-svg-MpT5PXzFt5L3TDdu .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-MpT5PXzFt5L3TDdu .loopText,#mermaid-svg-MpT5PXzFt5L3TDdu .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-MpT5PXzFt5L3TDdu .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-MpT5PXzFt5L3TDdu .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-MpT5PXzFt5L3TDdu .noteText,#mermaid-svg-MpT5PXzFt5L3TDdu .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-MpT5PXzFt5L3TDdu .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-MpT5PXzFt5L3TDdu .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-MpT5PXzFt5L3TDdu .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-MpT5PXzFt5L3TDdu .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MpT5PXzFt5L3TDdu .section{stroke:none;opacity:0.2}#mermaid-svg-MpT5PXzFt5L3TDdu .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-MpT5PXzFt5L3TDdu .section2{fill:#fff400}#mermaid-svg-MpT5PXzFt5L3TDdu .section1,#mermaid-svg-MpT5PXzFt5L3TDdu .section3{fill:#fff;opacity:0.2}#mermaid-svg-MpT5PXzFt5L3TDdu .sectionTitle0{fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .sectionTitle1{fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .sectionTitle2{fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .sectionTitle3{fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MpT5PXzFt5L3TDdu .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-MpT5PXzFt5L3TDdu .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MpT5PXzFt5L3TDdu .grid path{stroke-width:0}#mermaid-svg-MpT5PXzFt5L3TDdu .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-MpT5PXzFt5L3TDdu .task{stroke-width:2}#mermaid-svg-MpT5PXzFt5L3TDdu .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MpT5PXzFt5L3TDdu .taskText:not([font-size]){font-size:11px}#mermaid-svg-MpT5PXzFt5L3TDdu .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MpT5PXzFt5L3TDdu .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-MpT5PXzFt5L3TDdu .task.clickable{cursor:pointer}#mermaid-svg-MpT5PXzFt5L3TDdu .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-MpT5PXzFt5L3TDdu .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-MpT5PXzFt5L3TDdu .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-MpT5PXzFt5L3TDdu .taskText0,#mermaid-svg-MpT5PXzFt5L3TDdu .taskText1,#mermaid-svg-MpT5PXzFt5L3TDdu .taskText2,#mermaid-svg-MpT5PXzFt5L3TDdu .taskText3{fill:#fff}#mermaid-svg-MpT5PXzFt5L3TDdu .task0,#mermaid-svg-MpT5PXzFt5L3TDdu .task1,#mermaid-svg-MpT5PXzFt5L3TDdu .task2,#mermaid-svg-MpT5PXzFt5L3TDdu .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-MpT5PXzFt5L3TDdu .taskTextOutside0,#mermaid-svg-MpT5PXzFt5L3TDdu .taskTextOutside2{fill:#000}#mermaid-svg-MpT5PXzFt5L3TDdu .taskTextOutside1,#mermaid-svg-MpT5PXzFt5L3TDdu .taskTextOutside3{fill:#000}#mermaid-svg-MpT5PXzFt5L3TDdu .active0,#mermaid-svg-MpT5PXzFt5L3TDdu .active1,#mermaid-svg-MpT5PXzFt5L3TDdu .active2,#mermaid-svg-MpT5PXzFt5L3TDdu .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-MpT5PXzFt5L3TDdu .activeText0,#mermaid-svg-MpT5PXzFt5L3TDdu .activeText1,#mermaid-svg-MpT5PXzFt5L3TDdu .activeText2,#mermaid-svg-MpT5PXzFt5L3TDdu .activeText3{fill:#000 !important}#mermaid-svg-MpT5PXzFt5L3TDdu .done0,#mermaid-svg-MpT5PXzFt5L3TDdu .done1,#mermaid-svg-MpT5PXzFt5L3TDdu .done2,#mermaid-svg-MpT5PXzFt5L3TDdu .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-MpT5PXzFt5L3TDdu .doneText0,#mermaid-svg-MpT5PXzFt5L3TDdu .doneText1,#mermaid-svg-MpT5PXzFt5L3TDdu .doneText2,#mermaid-svg-MpT5PXzFt5L3TDdu .doneText3{fill:#000 !important}#mermaid-svg-MpT5PXzFt5L3TDdu .crit0,#mermaid-svg-MpT5PXzFt5L3TDdu .crit1,#mermaid-svg-MpT5PXzFt5L3TDdu .crit2,#mermaid-svg-MpT5PXzFt5L3TDdu .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-MpT5PXzFt5L3TDdu .activeCrit0,#mermaid-svg-MpT5PXzFt5L3TDdu .activeCrit1,#mermaid-svg-MpT5PXzFt5L3TDdu .activeCrit2,#mermaid-svg-MpT5PXzFt5L3TDdu .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-MpT5PXzFt5L3TDdu .doneCrit0,#mermaid-svg-MpT5PXzFt5L3TDdu .doneCrit1,#mermaid-svg-MpT5PXzFt5L3TDdu .doneCrit2,#mermaid-svg-MpT5PXzFt5L3TDdu .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-MpT5PXzFt5L3TDdu .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-MpT5PXzFt5L3TDdu .milestoneText{font-style:italic}#mermaid-svg-MpT5PXzFt5L3TDdu .doneCritText0,#mermaid-svg-MpT5PXzFt5L3TDdu .doneCritText1,#mermaid-svg-MpT5PXzFt5L3TDdu .doneCritText2,#mermaid-svg-MpT5PXzFt5L3TDdu .doneCritText3{fill:#000 !important}#mermaid-svg-MpT5PXzFt5L3TDdu .activeCritText0,#mermaid-svg-MpT5PXzFt5L3TDdu .activeCritText1,#mermaid-svg-MpT5PXzFt5L3TDdu .activeCritText2,#mermaid-svg-MpT5PXzFt5L3TDdu .activeCritText3{fill:#000 !important}#mermaid-svg-MpT5PXzFt5L3TDdu .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MpT5PXzFt5L3TDdu g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-MpT5PXzFt5L3TDdu g.classGroup text .title{font-weight:bolder}#mermaid-svg-MpT5PXzFt5L3TDdu g.clickable{cursor:pointer}#mermaid-svg-MpT5PXzFt5L3TDdu g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-MpT5PXzFt5L3TDdu g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-MpT5PXzFt5L3TDdu .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-MpT5PXzFt5L3TDdu .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-MpT5PXzFt5L3TDdu .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-MpT5PXzFt5L3TDdu .dashed-line{stroke-dasharray:3}#mermaid-svg-MpT5PXzFt5L3TDdu #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MpT5PXzFt5L3TDdu #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MpT5PXzFt5L3TDdu #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-MpT5PXzFt5L3TDdu #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-MpT5PXzFt5L3TDdu #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MpT5PXzFt5L3TDdu #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MpT5PXzFt5L3TDdu #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MpT5PXzFt5L3TDdu #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-MpT5PXzFt5L3TDdu .commit-id,#mermaid-svg-MpT5PXzFt5L3TDdu .commit-msg,#mermaid-svg-MpT5PXzFt5L3TDdu .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MpT5PXzFt5L3TDdu .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MpT5PXzFt5L3TDdu .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MpT5PXzFt5L3TDdu g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MpT5PXzFt5L3TDdu g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-MpT5PXzFt5L3TDdu g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-MpT5PXzFt5L3TDdu g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-MpT5PXzFt5L3TDdu g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-MpT5PXzFt5L3TDdu .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-MpT5PXzFt5L3TDdu .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-MpT5PXzFt5L3TDdu .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-MpT5PXzFt5L3TDdu .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-MpT5PXzFt5L3TDdu .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-MpT5PXzFt5L3TDdu .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-MpT5PXzFt5L3TDdu .edgeLabel text{fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-MpT5PXzFt5L3TDdu .node circle.state-start{fill:black;stroke:black}#mermaid-svg-MpT5PXzFt5L3TDdu .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-MpT5PXzFt5L3TDdu #statediagram-barbEnd{fill:#9370db}#mermaid-svg-MpT5PXzFt5L3TDdu .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-MpT5PXzFt5L3TDdu .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-MpT5PXzFt5L3TDdu .statediagram-state .divider{stroke:#9370db}#mermaid-svg-MpT5PXzFt5L3TDdu .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-MpT5PXzFt5L3TDdu .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-MpT5PXzFt5L3TDdu .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-MpT5PXzFt5L3TDdu .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-MpT5PXzFt5L3TDdu .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-MpT5PXzFt5L3TDdu .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-MpT5PXzFt5L3TDdu .note-edge{stroke-dasharray:5}#mermaid-svg-MpT5PXzFt5L3TDdu .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-MpT5PXzFt5L3TDdu .error-icon{fill:#522}#mermaid-svg-MpT5PXzFt5L3TDdu .error-text{fill:#522;stroke:#522}#mermaid-svg-MpT5PXzFt5L3TDdu .edge-thickness-normal{stroke-width:2px}#mermaid-svg-MpT5PXzFt5L3TDdu .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-MpT5PXzFt5L3TDdu .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-MpT5PXzFt5L3TDdu .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-MpT5PXzFt5L3TDdu .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-MpT5PXzFt5L3TDdu .marker{fill:#333}#mermaid-svg-MpT5PXzFt5L3TDdu .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-MpT5PXzFt5L3TDdu {color: rgba(0, 0, 0, 0.75);font: ;}app设备填入路由器信息蓝牙广播发现设备、连接蓝牙查询蓝牙服务响应蓝牙服务&私有协议传输查询设备信息返回设备信息发送路由器信息响应停止广播,连接路由器app设备

小结

配网为当前智能家居设备不可缺少的步骤,上述都是个人的一些总结。
当然上述的配网只是最简化的流程,在真正的开发上,对于体验和开发会对过程进行二次的优化和修改,达到对于使用者友好。

后续篇章将通过局域网设备、esp32来具体实现softap配网和蓝牙配网。

共勉

智能家居之设备配网(理论篇)相关推荐

  1. Wifi设备配网问题

    今天写个物联网的技术文章--关于Wifi设备为什么配网失败. 这相信是很多做过Wifi产品的制造业企业遇到的客诉最多的问题--消费者因Wifi产品配网失败,投诉.申请退货. 据我了解,有客户使用201 ...

  2. 设备配网和通用配网 UI 业务包(内附代码段)

    设备配网UI业务包 智能生活设备配网 UI 业务包的功能涵盖了目前常见的 Wi-Fi 设备.Zigbee 设备.蓝牙设备,并且支持二维码扫码的设备,例如 GPRS 和 NB-IoT 设备.业务包主要实 ...

  3. hass智能 小米扫地机器人_智能家居从新出发: 第三篇 小米全家桶接入homeassistant...

    原标题:智能家居从新出发: 第三篇 小米全家桶接入homeassistant 第一篇,我分享了在群晖上如何安装homeassistant 智能家居从新出发: 第一篇 群晖docker安装homeass ...

  4. 蓝牙mesh组网实践(配网基础篇)

    转载自:蓝牙mesh组网实践(配网基础篇) - JayWell - 博客园 (cnblogs.com) 本测试基于CH582m单片机,尝试进行简单的组网. 沁恒官方EVT中提供了两种配网方式--配网器 ...

  5. 设备配网专题《原理分析,设备配网技术之AP配网》

    1.什么是AP配网?即是传统配网,是一种配网成功率很高的WiFi配网方式 AP配网原理:设备开启AP模式,手机用于STA模式,手机连接设备AP组成局域网,手机发送需要连接路由的SSID及PASSWD给 ...

  6. 微信小程序udp通信连接硬件设备配网

    == 注意:UDP连接只能在局域网才能连接成功 == 设备配网,首先获取当前WIFI 页面加载之后自动获取当前手机连接的WiFi名字 点击获取更多网络,获取附近可以搜到的WiFi列表 选择一个WiFi ...

  7. 树莓派python智能家居英文参考文献_Home Assistant + 树莓派:强大的智能家居系统 · 设备接入篇...

    ------ 相信大家通过之前的 安装篇 已经成功安装了 Home Assistant (HASS) 和 Homebridge,在这篇文章中,我将带领大家接入智能家居设备. 大多数人初接触 HASS ...

  8. 【Android工程师与智能家居产品的第一次接触②】给设备配网 Esp8266 wifi模块的快速配网和AP配网简介(付Android demo)

    文章包含内容 什么是配网? 常见的配网方案: 常见WiFi快连技术厂商: 实际开发中问题: GitHub 项目地址: CSDN 项目地址: 纵然WIFI设备配网目前虽然已经非常成熟,市面上也有了很多的 ...

  9. 搭建Domoticz智能家居服务器实现外网控制ESP8266

    文章目录 智能家居系统设想 先来成果视频欣赏 Domoticz服务器搭建 MQTT服务器的搭建 外网控制的实现方法 在Domoticz管理页面新建设备 Arduino IDE程序的实现 智能家居系统设 ...

最新文章

  1. 【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )
  2. 怀旧服新开服务器最新,暴雪官方发大招,怀旧服新开11个新服务器
  3. WindowsXp 平台安装Oversim+INET+OMnet++
  4. 海量数据拆分到nosql系统的一种方案
  5. Idea 封装Java代码片段 快速提示
  6. hbuilder设置html浏览器打开,HBuilder X如何配置浏览器操作配置方法
  7. cookielifetime php_PHP session有效期session.gc_maxlifetime的设置方法
  8. AngularJS Eclipse——新手入门【翻译+整理】
  9. Linux三剑客之grep
  10. 请教问题:ckeditor脚本错误“Error:例外被抛出且未被接住”[已解决]
  11. linux一句话精彩问答 (转贴)
  12. 硬盘克隆 计算机更换硬盘,换硬盘数据怎么办 看一招本地磁盘对拷
  13. 记录一次zabbix网页端报错Assuming that agent dropped connection because of access permissions
  14. Win10环境下安装pytho、pip与Robot Framework
  15. Spark项目实战:购物网站评价标签生成(非常详细的Spark算子操作)
  16. python数据清洗--对双十一淘宝直播流量数据进行数据真实性验证
  17. 图文详解!java开发面试简历模板java
  18. 蓝桥杯 BASIC-3 字母图形
  19. PRML5.2--网络训练
  20. NLP自然语言处理—文本分类入门

热门文章

  1. STM32自平衡小车
  2. java 一维码架包_Java 生成、识别条形码
  3. C++之父B.Stroustrup近期言论
  4. 深度解析 Keras 中的图片预处理:图片生成器 ImageDataGeneraor
  5. AD原理图右下角Title Block信息实时更新的方法(AD20)多图教程
  6. 对于Lattice FPGA/CPLD XO2编程,“Flash erase, program, verify, secure”和“Flash erase, program, verify, secu
  7. 需求调研注意事项-第一篇--如何组织调研工作
  8. 设计模式怎样解决设计问题
  9. Python入门编程:用户问答互动程序
  10. matlab等高线图例如何显示,如何在MATLAB中的等高线图的等高线上放置字符串标签...