参考资料:https://blog.csdn.net/zwl1584671413/article/details/81086645

步骤描述:

1.用户创建任务对象,其中包含参数对象、服务器对象和客户端对象
2.设置超时时间与成功返回设备上限数值
3.获取本地ip地址
4.创建配网对象
5.配网对象包含导向数据对象、主数据对象
6.导向数据对象以固定格式生成,主要用于告知设备解析主数据时的一个参数
7.主数据对象包含:总长度、密码长度、ssid的crckey、bssid的crckey、本机ip地址、密码内容和前面所有数据异或的校验位一个字节
8.如果该ssid是隐藏ssid,则需要在总长度加上ssid的长度,以及主数据对象中包含ssid的数据
9.将导向数据对象和主数据对象,以一定格式转化为两个byte数组
10.使用服务器对象开启监听,设备回复的数据
11.客户端对象开始循环发送导向数据和主数据,导向数据发两秒,主数据发四秒,六秒一个循环,直到收到回复或者超时
12.如果超时还没有成功,则直接返回给用户失败
13.如果服务器对象收到了设备返回的信息,则对比第一个字符与ssid拼接密码的字节长度加9是否相等
14.如果不相等忽略,如果相等则解析出回复数据中的设备bssid和设备ip地址
15.将获取到的所有设备的bssid和ip地址返回给用户
16.清理资源

备注:
1.导向数据实际长度(数据长度+udp+ip层) - 数据长度 = 基准值(udp+ip层)
2.将每个子数据对象变为六个字节的数据后,每两个字节合并成一个uint16的数据并且加上固定值40存起来
3.发送完成导向数据后,每两个字节发送一个包

举例说明:

已知:
ssid = [1,2,3,4,5,6,7,8]
password = [5,6,7,8,9,10,11]
bssid = [12,13,14,15,16,17,18,19]
ip = [20,21,22,23,24,25]

求:sendArray

解:
passwordLength = 7
ssidCrcKey = 28(crc值为假设)
bssidCrcKey = 45(crc值为假设)
ipLength = 6
ssidLength = 8

totalLength = 5 + passwordLength + ipLength = 18
_totlaLength = totalLength + ssidLength = 46

index dh dl ch cl(crc值为假设)

datacodes = [
    {
       0,2,E,3,F
    },
    {
       1,0,7,2,A
    },
    {
       2,2,8,7,2
    },
    ......
]
datacodes中的数据依次存放总长度值、密码长度、ssid的CrcKey、bssid的CrcKey、ip地址、密码内容、(ssid内容)、之前所有数据的校验和。

dcArrays = [
    00,23,01,00,00,EF,
    00,02,01,01,00,7A,
    00,27,01,02,00,82,
    ......
]

// 下面都是16进制

_dcArrays = [{00,23},{01,00},{00,EF},{00,02},{01,01},{00,7A},{00,27},{01,02},{00,82},......];

答:sendArray = [0023+28,0100+28,00EF+28,0002+28,0101+28,007A+28,0027+28,0102+28,0082+28,.....];

28 是一个固定值,代码中是十进制的40也就是0x28

导向数据发完后,sendArray中每个元素发一个数据包

EspTouch概述相关推荐

  1. ESP-TOUCH编码规则及解码

    https://blog.csdn.net/flyingcys/article/details/54670688 1. 概述 ESP-TOUCH是Espressif公司自主研究的一键智能配网工具,帮助 ...

  2. ESP32学习笔记(7)——SmartConfig接口使用(ESP-Touch和AirKiss)

    一.概述 SmartConfig是TI开发的一种配置技术,用于将新的Wi-Fi设备连接到Wi-Fi网络.它使用移动应用程序将网络凭据从智能手机或平板电脑广播到未配置的Wi-Fi设备. 该技术的优点是设 ...

  3. Java 多线程概述

    多线程技术概述 1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间. 线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换.并发执行,一个进程最少有一个线程, ...

  4. 【SpringMVC】概述

    概述: SpringMVC:是基于spring的一个框架, 实际上就是spring的一个模块, 专门是做web开发的.                       理解是servlet的一个升级 Sp ...

  5. 梯度下降优化算法概述

    本文原文是 An overview of gradient descent optimization algorithms,同时作者也在 arXiv 上发了一篇同样内容的 论文. 本文结合了两者来翻译 ...

  6. Redis概述和基础

    Redis 1.NoSQL NoSQL = Not Only SQL(不仅仅是SQL) 泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其是超大规模的 ...

  7. OpenCL™(开放计算语言)概述

    OpenCL™(开放计算语言)概述 异构系统并行编程的开准 OpenCL™(开放计算语言)是一种开放的.免版税的标准,用于对超级计算机.云服务器.个人计算机.移动设备和嵌入式平台中的,各种加速器进行跨 ...

  8. 自动驾驶QNX,Linux,Autosar概述

    自动驾驶QNX,Linux,Autosar概述 QNX是一个分布式.嵌入式.可规模扩展的实时操作系统.遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具).部分遵循POSIX.1b( ...

  9. Tengine MLOps概述

    Tengine MLOps概述 大幅提高产业应用从云向边缘迁移的效率 MLOps Cloud Native 聚焦于提升云端的运营过程效率 MLOps Edge Native 聚焦于解决边缘应用开发及异 ...

最新文章

  1. Swift - 使用addSubview()方法将StoryBoard中的视图加载进来
  2. 实现Ant Design 自定义表单组件
  3. 函数式接口作为方法的返回值类型案例
  4. SAP CRM product settype read from database table
  5. 设置一个双色球脚本(2)并带颜色输出
  6. JavaScript——变量与基本数据类型
  7. HTML离线缓存( applicationCache)
  8. 科大讯飞/百度/阿里/腾讯(BAT)智能语音识别(ASR)性能对比选择预计价格分享 - pytorch中文网...
  9. SSM整合(二)(mybatis逆向工程)
  10. codepush 微软服务器,ionic3 code-push 搭建自己服务器的问题
  11. PPT精典基础教程 .
  12. 中国未来家庭STEAM教育趋势研究报告
  13. 基于X86汇编语言的简易打字游戏实现
  14. Git使用笔记[持续更新]
  15. python向网页上传excle、text文件
  16. 求一个只包含0、1的矩阵中只包含1的最大子矩阵大小
  17. vue v-model 双向绑定表单元素的数据:实质是绑定了value、checked、selected属性
  18. ncbi blast MATLAB,NCBI在线BLAST使用方法与结果详解
  19. 白鹭引擎开发飞机大战详尽教程(三创建飞机)
  20. arcgis地图开发测面、测距、定位小工具

热门文章

  1. PDF怎么合并?这些合并方法你该知道
  2. java jmf播放视频_使用JMF实现java视频播放器
  3. vue项目性能优化(图片优化)
  4. python:汽水瓶
  5. Applied ADO.NET: Building Data-Driven Solutions
  6. tableau用数据分组_对数据进行分组
  7. 利用水文分析方法提取山脊、山谷线
  8. 2021-02-04
  9. rk3328摄像头监控
  10. RK3328 编码H265问题