AirKissDemo

AirKiss原理

本章只大致讲解一下什么是air kiss,具体通讯协议介绍请去文末链接查看

一、AirKiss简介

AirKiss技术是一种通过手机发送的SSID和密码经过路由转发出去,被目前wifi设备所检测并截获到。从而达到通过手机客户端给智能设备配网wifi网络的一种新型技术。

二、AirKiss配网基本流程

wifi智能设备以station混杂模式运行

手机客户端通过AirKiss发送家里的路由器ssid和密码

wifi设备通过抓包获取到ssid和密码,然后连接到家里的路由器

三、Demo实现

demo通过RxJava实现异步任务

客户端发送wifi ssid 以及密码 关键代码

//发送AirKiss

sendSubscribe = Observable.create(new Observable.OnSubscribe() {

@Override

public void call(Subscriber super String> subscriber) {

byte DUMMY_DATA[] = new byte[1500];

AirKissEncoder airKissEncoder = new AirKissEncoder(ssid, password);

DatagramSocket sendSocket = null;

try {

sendSocket = new DatagramSocket();

sendSocket.setBroadcast(true);

int encoded_data[] = airKissEncoder.getEncodedData();

for (int i = 0; i < encoded_data.length; ++i) {

DatagramPacket pkg = new DatagramPacket(DUMMY_DATA,

encoded_data[i],

InetAddress.getByName("255.255.255.255"),

10000);

sendSocket.send(pkg);

Thread.sleep(4);

}

subscriber.onCompleted();

} catch (Exception e) {

subscriber.onError(e);

e.printStackTrace();

} finally {

sendSocket.close();

sendSocket.disconnect();

}

}

})

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Observer() {

@Override

public void onCompleted() {

}

@Override

public void onError(Throwable e) {

Toast.makeText(MainActivity.this, "连接失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();

}

@Override

public void onNext(String string) {

}

});

这时智能设备已经连上了wifi,一般来说客户端和硬件交互时,智能设备连上了wifi可能会发送一段UDP包,来告诉客户端联网成功,客户端再来进行接下来的操作(要与硬件规定规范)

客户端处理智能设备发送的UDP包(根据实际格式进行解码,本文直接解码成String)

//接收udp包

receiveSubscribe = Observable.create(new Observable.OnSubscribe() {

@Override

public void call(Subscriber super String> subscriber) {

byte[] buffer = new byte[15000];

DatagramSocket udpServerSocket = null;

try {

udpServerSocket = new DatagramSocket(24333);

udpServerSocket.setSoTimeout(1000 * 60);

DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

while (true) {

Log.d("status", "running");

udpServerSocket.receive(packet);

buffer = packet.getData();

String hexString = Str_Hex.byte2hex(buffer);

//对收到的UDP包进行解码

//各个设备返回的UDP包格式不一样 将解码的UDP包通过RxJava发送到主线程 进行UI处理

if (!TextUtils.isEmpty(hexString)) {

Log.d("received:", hexString);

subscriber.onNext(hexString);

break;

}

}

subscriber.onCompleted();

} catch (SocketException e) {

subscriber.onError(e);

e.printStackTrace();

} catch (IOException e) {

subscriber.onError(e);

e.printStackTrace();

} finally {

udpServerSocket.close();

udpServerSocket.disconnect();

}

}

}).subscribeOn(Schedulers.newThread())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Subscriber() {

ProgressDialog mDialog = mDialog = new ProgressDialog(MainActivity.this);

@Override

public void onStart() {

super.onStart();

mDialog.setMessage("正在连接...");

mDialog.setCancelable(false);

mDialog.show();

}

@Override

public void onCompleted() {

mDialog.dismiss();

}

@Override

public void onError(Throwable e) {

Toast.makeText(MainActivity.this, "连接失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();

mDialog.dismiss();

}

@Override

public void onNext(String s) {

Toast.makeText(MainActivity.this, "收到的UDP包:" + s, Toast.LENGTH_SHORT).show();

}

});

注意: 由于使用了RxJava,要在onDestroy()里面解除订阅,避免内存泄露

四、相关说明

本协议是基于https://github.com/zhchbin/WeChatAirKiss 修改的,感谢@zhchbin的分享,上面地址完整的实现了airkiss协议

声明: 目前AirKiss协议已经发展到3.0版本(详见微信硬件平台),此版本应该还是基于最初的设计实现,仅供学习研究使用,不建议作为商业产品

AirKiss是微信硬件平台提供的一种WIFI设备快速入网配置技术。WeChatAirKiss是通过分析微信客户端相关的网络包实现的Android客户端,实现了相同的功能,使用者能够摆脱微信客户端的限制使用AirKiss技术进行物联网模块的联网配置。

PHP airkiss demo,GitHub - maitao/AirKissDemo: Airkiss配网相关推荐

  1. Esp8266学习之旅⑥ 了解SmartConfig与Airkiss一键配网,给8266一键配网上云端。(带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  2. 图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

    本文内容 1)使用smart_config例程,使用乐鑫ESPTouch APP或者微信公众号配网. 2)修改smart_config例程,使ESP32复位后,如果已配过网,则不再进行配网,而是直接连 ...

  3. 安信可分享 | 分享一个基于airkiss协议的配网小程序,实现小程序一键配网安信可ESP32C3\ESP8266\ESP32\ESP32S2系列的模组。(附带源码)

    文章目录 一.关于 WeChatAirkiss 1.1 应用场景 二.airkiss 简介 三.开始使用 四.API说明 五.FAQ 六.开源微信物联网控制一览表 联系我们 一.关于 WeChatAi ...

  4. ESP32-C3入门教程 WiFi篇⑤——WiFi Smart Config 智能配网(基于AirKiss)

    文章目录 一.前言 二.代码修改 三.运行效果 一.前言 本文基于VS Code IDE进行编程.编译.下载.运行等操作 基础入门章节请查阅:ESP32-C3入门教程 基础篇①--基于VS Code构 ...

  5. 【微信小程序控制硬件15 】 重认识无线物联网的配网协议,了解腾讯物联蓝牙协议LLSync SDK,腾讯连连小程序也可以蓝牙配网了。

    文章目录 一.配网的认识 1.1 各类Wi-Fi配网方式对比 1.2 设备热点配网 1.3 零配配网 1.4 蓝牙辅助配网 1.5 一键配网 1.6 手机热点配网 1.6 摄像头扫码配网 二.LLSy ...

  6. ESP8266-01模块接入巴法云,SmartConfig智能配网,设置断电记忆模式,可以使用米家控制和普通开关控制

    文章目录 前言 Demo下载地址 一.项目介绍 1.开关控制方式: 2.SmartConfig配网: 3.重置配网: 4.断电记忆模式切换: 5.通过MQTT设备云方式接入网络 二.使用步骤 1.文件 ...

  7. ESP32一键配网------smartconfig

    本文内容 使用smart_config例程,使用乐鑫ESPTouch APP或者微信公众号配网. 主流WiFi配网方式介绍 1) SoftAP配网 ESP32 会建立一个 WiFi 热点(AP模式), ...

  8. wifi 配网方式总结

    本文汇总介绍了目前市面上各种WIFI模块的常见的配网方式的原理和实现,对比了各种配网方式的优势和局限,得出结论,WEB配网是最直接.最简单.最灵活.约束条件最少的配网方式,应该成为WIFI模块配网的标 ...

  9. 乐鑫esp8266学习rtos3.0笔记第4篇:带你捋一捋微信公众号 airkiss 配网 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

最新文章

  1. 罗辑思维年终4小时演讲《时间的朋友》1000字浓缩版
  2. 2.Cocos2d-x-3.2编写3d打飞机,项目代码总结
  3. 算法 --- 翻转二叉树
  4. 吴恩达《机器学习》第十章:应用机器学习的建议
  5. ECNU 3263 丽娃河的狼人传说(差分约束)
  6. sql多行插入insert多行无法分析查询文本_收藏!SQL语法全集合!
  7. 服务器操作系统使用相关要求,服务器操作系统使用相关要求
  8. mysql datetime默认时间_Mysql中datetime默认值问题
  9. 机械电子工程用不用学c语言,机械电子工程到底学什么 毕业以后能干什么
  10. 洛谷P3332 K大数查询
  11. 汇编jnl_汇编指令
  12. excel如何在选定区域内跳过空值自动编号
  13. 多可系统如何设置登录IP限制
  14. STL源码剖析(四):容器(6)Rb_tree
  15. 基于python的微博热搜爬取及数据分析
  16. 网络安全风险评估关键技术讨论
  17. 【面试题】Java 高级工程师面试刷题100题(二)
  18. NGBOSS转型在即:COTS初露锋芒
  19. [windows]修改本机host配置
  20. java_进阶:Map、自动装箱拆箱

热门文章

  1. 数字IC前端设计入门----之环境搭建
  2. 每周一磁 · 钕铁硼永磁材料
  3. liblinear libsvm
  4. liblinear简单使用说明
  5. 但是尚未从池中获取连接_解决报错“超时时间已到。超时时间已到,但是尚未从池中获取连接”的方案...
  6. 【仿真-simulation】仿真概念的介绍
  7. 自动化测试面试题及答案大全(下)
  8. linux刷windows phone,使用WoA-Installer工具在Lumia 950/XL上安装Windows 10 ARM
  9. Network bonding模式简介
  10. 数电实验三-点亮四个数码管(Multisim和Basys3)