PHP airkiss demo,GitHub - maitao/AirKissDemo: Airkiss配网
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配网相关推荐
- Esp8266学习之旅⑥ 了解SmartConfig与Airkiss一键配网,给8266一键配网上云端。(带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- 图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)
本文内容 1)使用smart_config例程,使用乐鑫ESPTouch APP或者微信公众号配网. 2)修改smart_config例程,使ESP32复位后,如果已配过网,则不再进行配网,而是直接连 ...
- 安信可分享 | 分享一个基于airkiss协议的配网小程序,实现小程序一键配网安信可ESP32C3\ESP8266\ESP32\ESP32S2系列的模组。(附带源码)
文章目录 一.关于 WeChatAirkiss 1.1 应用场景 二.airkiss 简介 三.开始使用 四.API说明 五.FAQ 六.开源微信物联网控制一览表 联系我们 一.关于 WeChatAi ...
- ESP32-C3入门教程 WiFi篇⑤——WiFi Smart Config 智能配网(基于AirKiss)
文章目录 一.前言 二.代码修改 三.运行效果 一.前言 本文基于VS Code IDE进行编程.编译.下载.运行等操作 基础入门章节请查阅:ESP32-C3入门教程 基础篇①--基于VS Code构 ...
- 【微信小程序控制硬件15 】 重认识无线物联网的配网协议,了解腾讯物联蓝牙协议LLSync SDK,腾讯连连小程序也可以蓝牙配网了。
文章目录 一.配网的认识 1.1 各类Wi-Fi配网方式对比 1.2 设备热点配网 1.3 零配配网 1.4 蓝牙辅助配网 1.5 一键配网 1.6 手机热点配网 1.6 摄像头扫码配网 二.LLSy ...
- ESP8266-01模块接入巴法云,SmartConfig智能配网,设置断电记忆模式,可以使用米家控制和普通开关控制
文章目录 前言 Demo下载地址 一.项目介绍 1.开关控制方式: 2.SmartConfig配网: 3.重置配网: 4.断电记忆模式切换: 5.通过MQTT设备云方式接入网络 二.使用步骤 1.文件 ...
- ESP32一键配网------smartconfig
本文内容 使用smart_config例程,使用乐鑫ESPTouch APP或者微信公众号配网. 主流WiFi配网方式介绍 1) SoftAP配网 ESP32 会建立一个 WiFi 热点(AP模式), ...
- wifi 配网方式总结
本文汇总介绍了目前市面上各种WIFI模块的常见的配网方式的原理和实现,对比了各种配网方式的优势和局限,得出结论,WEB配网是最直接.最简单.最灵活.约束条件最少的配网方式,应该成为WIFI模块配网的标 ...
- 乐鑫esp8266学习rtos3.0笔记第4篇:带你捋一捋微信公众号 airkiss 配网 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。(附带demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...
最新文章
- 罗辑思维年终4小时演讲《时间的朋友》1000字浓缩版
- 2.Cocos2d-x-3.2编写3d打飞机,项目代码总结
- 算法 --- 翻转二叉树
- 吴恩达《机器学习》第十章:应用机器学习的建议
- ECNU 3263 丽娃河的狼人传说(差分约束)
- sql多行插入insert多行无法分析查询文本_收藏!SQL语法全集合!
- 服务器操作系统使用相关要求,服务器操作系统使用相关要求
- mysql datetime默认时间_Mysql中datetime默认值问题
- 机械电子工程用不用学c语言,机械电子工程到底学什么 毕业以后能干什么
- 洛谷P3332 K大数查询
- 汇编jnl_汇编指令
- excel如何在选定区域内跳过空值自动编号
- 多可系统如何设置登录IP限制
- STL源码剖析(四):容器(6)Rb_tree
- 基于python的微博热搜爬取及数据分析
- 网络安全风险评估关键技术讨论
- 【面试题】Java 高级工程师面试刷题100题(二)
- NGBOSS转型在即:COTS初露锋芒
- [windows]修改本机host配置
- java_进阶:Map、自动装箱拆箱
热门文章
- 数字IC前端设计入门----之环境搭建
- 每周一磁 · 钕铁硼永磁材料
- liblinear libsvm
- liblinear简单使用说明
- 但是尚未从池中获取连接_解决报错“超时时间已到。超时时间已到,但是尚未从池中获取连接”的方案...
- 【仿真-simulation】仿真概念的介绍
- 自动化测试面试题及答案大全(下)
- linux刷windows phone,使用WoA-Installer工具在Lumia 950/XL上安装Windows 10 ARM
- Network bonding模式简介
- 数电实验三-点亮四个数码管(Multisim和Basys3)