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. 初识Kubernetes(K8s):理论基础
  2. “是男人就下一百层”h5游戏全网最详细教学、全代码,js操作
  3. Citrix Provisioning Services 7.13企业实战
  4. 可惜Java中没有yield return
  5. thinkphp session mysql_ThinkPHP实现将SESSION存入MYSQL的方法
  6. 2020各大网站rss订阅源地址_2020-20-18——DJANGO复习
  7. 16F877A和24C02通信汇编语言,PIC16f877A读写24c02程序
  8. okhttp初识拦截器
  9. java-信息安全(九)-基于DH,非对称加密,对称加密等理解HTTPS
  10. Haproxy-1.5.x SSL配置
  11. n 维欧式空间中正交向量组的扩充
  12. SQL面试题:删除表中指定字段的重复数据,只保留最大的id数据
  13. user reg.php,织梦member/reg_new.php SQL注入漏洞修复
  14. 易语言API HooK CreateThread创建线程
  15. ubuntu双系统修改启动菜单
  16. ServletConfig与ServletContext
  17. 你想成为一个什么样的人
  18. 教资高中计算机科目,中学信息技术考试科目
  19. 太上玄门日诵早晚功课经序
  20. VS1005 HiRes 高清播放器方案

热门文章

  1. docx文件怎么打开
  2. python气象科研学习路线和常用技巧
  3. (翻译)仿真模式(Simulation)
  4. 民法典实施后,婚前、婚后买房区别很大
  5. WhatsApp被禁止使用后如何解封?亲测有效,不懂千万别去乱操作
  6. hostapd基本配置
  7. 聊聊 SQLAlchemy 连接池中的连接失效问题
  8. mysql实用教程 电子版_MySQL实用教程
  9. 图像特征-Harris角点检测
  10. 中国SNS网站盈利模式浅析及探讨