ESP8266 AirKiss NFF

来自Jack's Lab
(版本间的差异)
跳转到: 导航, 搜索
(流程分析)
(快速尝试)
 
(未显示1个用户的9个中间版本)
第1行: 第1行:
 
== 概述 ==
 
== 概述 ==
  
 +
AirKiss NFF 即 weixin 近场发现技术(同一无线路由,扫描发现设备)
  
 +
在此基础上,微信硬件平台推出了型号二维码,同一个类别/型号的设备都是贴一样的二维码,因此在设备生产过程中,不需要二维码与设备进行一一对应
 +
 +
用户体验演示视频: http://v.qq.com/page/j/e/b/j0170txx5eb.html
  
 
<br><br>
 
<br><br>
第29行: 第33行:
  
 
<source lang=bash>
 
<source lang=bash>
$ cd ../example/wechat-airkiss-nff
+
$ cd ../example/rawsdk/wechat-airkiss-nff
  
 
$ make flash
 
$ make flash
第35行: 第39行:
  
  
打开微信,扫一扫如下二维码,直接进入微信,自动开始探测设备:
+
打开微信,扫一扫如下二维码:
  
 
[[文件:Wechat-qcode-maike-noduino.jpeg]]
 
[[文件:Wechat-qcode-maike-noduino.jpeg]]
 +
 +
 +
自动进入如下:
 +
 +
[[文件:Airkiss-nff-1.jpg | 450px]]
 +
 +
与此同时串口的输出:
 +
 +
<source lang=bash>
 +
bcn 0
 +
del if1
 +
usl
 +
mode : sta(18:fe:34:f9:0f:17)
 +
add if0
 +
SC version: V2.5.1
 +
f r0, scandone
 +
f r0, scandone
 +
SC_STATUS_FIND_CHANNEL
 +
smartconfig busy
 +
smartconfig busy
 +
</source>
 +
 +
 +
此时设备没有 SSID 和 Password 无法连接无线路由。点上图中的 "点此设置" 进入:
 +
 +
[[文件:Airkiss-nff-2.jpg | 450px]]
 +
 +
下一步:
 +
 +
[[文件:Airkiss-nff-3.jpg | 450px]]
 +
 +
 +
WiFi 配置好后,微信很快就在同一 LAN 下发现了设备:
 +
 +
[[文件:Airkiss-nff-4.jpg | 450px]]
 +
 +
点击即可进入绑定页面:
 +
 +
[[文件:Airkiss-nff-5.jpg | 450px]]
 +
 +
 +
按提示即可完成设备绑定!
  
 
<br><br>
 
<br><br>
第70行: 第116行:
  
 
如果存在,则也往 12476 这个端口发一个,确认包,设备收到后,再回一个响应包,则完成过程
 
如果存在,则也往 12476 这个端口发一个,确认包,设备收到后,再回一个响应包,则完成过程
 +
 +
 +
传统微信设备生产流程是:
 +
 +
* 厂家自己生成 device id,并向公众平台申请带参二维码,有多少个 device id 就需要多少个带参二维码
 +
* 厂家后台记录 device id 和带参二维码的对应关系,并在设备出厂时,一一对应地贴在设备包装盒或者说明书上
 +
* 用户扫描带参二维码,微信客户端会把二维码的参数通过公众平台的后台传给厂家后台
 +
* 厂家后台记录二维码的参数和用户 openid 完成设备绑定
  
  
 
由此过程可发现,新思路和传统方法的差别在:
 
由此过程可发现,新思路和传统方法的差别在:
  
* 设备主动向特定端口广播自己需要关联的公众号 (deviceType) 和设备 ID (deviceId)
+
* 厂家直接向公众平台申请 device id,自己后台登记该 device id 即可,设备出厂时所有设备使用相同的二维码(微信型号码)
 
* 微信客户端扫描可直接进入监听 UDP 端口的二维码(微信型号码),直接进入监听状态
 
* 微信客户端扫描可直接进入监听 UDP 端口的二维码(微信型号码),直接进入监听状态
 +
* 设备主动向特定端口广播自己需要关联的公众号 (deviceType) 和设备 ID (deviceId)
 
* 微信客户端会用得到的 deviceType 和 deviceId 去对应公众号的数据库里查找,设备存在(厂家用 deviceId 做过[http://iot.weixin.qq.com/document-2_6.html 设备授权])则进入绑定界面
 
* 微信客户端会用得到的 deviceType 和 deviceId 去对应公众号的数据库里查找,设备存在(厂家用 deviceId 做过[http://iot.weixin.qq.com/document-2_6.html 设备授权])则进入绑定界面
 
* 用户点绑定后,微信后台会给厂商的后台一个如下消息:
 
* 用户点绑定后,微信后台会给厂商的后台一个如下消息:
第94行: 第149行:
 
</source>
 
</source>
  
厂商的后台只要解析后,将相关信息登记入数据库,即可完成绑定过程,再也无需一一对应地人肉贴带参二维码了
+
厂商的后台只要解析后,将用户 open id 和 device id 的对应关系登记入数据库,即可完成绑定过程,再也无需一一对应地人肉贴带参二维码了
  
  
第105行: 第160行:
 
== 参考  ==
 
== 参考  ==
  
 +
* 型号二维码指南:http://iot.weixin.qq.com/document-7_3.html
 
* 微信设备授权新接口:http://iot.weixin.qq.com/document-2_11.html
 
* 微信设备授权新接口:http://iot.weixin.qq.com/document-2_11.html
 
* [http://mp.weixin.qq.com/s?__biz=MjM5MTgyNzQ5Nw==&mid=400271859&idx=1&sn=299a72ad8ee6189b365586d11cdad333 “型号码”帮助企业简化设备生产 ]
 
* [http://mp.weixin.qq.com/s?__biz=MjM5MTgyNzQ5Nw==&mid=400271859&idx=1&sn=299a72ad8ee6189b365586d11cdad333 “型号码”帮助企业简化设备生产 ]
* 型号二维码介绍:http://iot.weixin.qq.com/document-7_3.html
+
 
  
 
<br><br>
 
<br><br>

2017年1月24日 (二) 08:52的最后版本

目录

[编辑] 1 概述

AirKiss NFF 即 weixin 近场发现技术(同一无线路由,扫描发现设备)

在此基础上,微信硬件平台推出了型号二维码,同一个类别/型号的设备都是贴一样的二维码,因此在设备生产过程中,不需要二维码与设备进行一一对应

用户体验演示视频: http://v.qq.com/page/j/e/b/j0170txx5eb.html



[编辑] 2 快速尝试

Noduino Falcon 开发板 或 nodemcu v1.0 开发板,USB 连上 PC


下载 SDK:

# clone the whole sdk
$ git clone git://github.com/icamgo/noduino-sdk.git noduino-sdk

# fetch the toolchain of esp8266
$ cd noduino-sdk
$ git submodule init
$ git submodule update
$ cd toolchain
$ ./gen.py
# generate the toolchain (you need Python 2.7)


插上开发板,编译上传一步完成:

$ cd ../example/rawsdk/wechat-airkiss-nff

$ make flash


打开微信,扫一扫如下二维码:

Wechat-qcode-maike-noduino.jpeg


自动进入如下:

Airkiss-nff-1.jpg

与此同时串口的输出:

bcn 0
del if1
usl
mode : sta(18:fe:34:f9:0f:17)
add if0
SC version: V2.5.1
f r0, scandone
f r0, scandone
SC_STATUS_FIND_CHANNEL
smartconfig busy
smartconfig busy


此时设备没有 SSID 和 Password 无法连接无线路由。点上图中的 "点此设置" 进入:

Airkiss-nff-2.jpg

下一步:

Airkiss-nff-3.jpg


WiFi 配置好后,微信很快就在同一 LAN 下发现了设备:

Airkiss-nff-4.jpg

点击即可进入绑定页面:

Airkiss-nff-5.jpg


按提示即可完成设备绑定!



[编辑] 3 流程分析

设备主动定时(5s 一次)往 255.255.255.255 这个地址的 12476 端口,广播数据包:

comcat@jackslab:/work/xwifi/noduino-sdk/lib$ nc -u -l -p 12476 | xxd -g 1
0000000: fd 01 fe fc 00 10 00 01 00 00 00 7d 00 00 10 02  ...........}....
0000010: 7b 22 64 65 76 69 63 65 49 6e 66 6f 22 3a 7b 22  {"deviceInfo":{"
0000020: 64 65 76 69 63 65 54 79 70 65 22 3a 22 67 68 5f  deviceType":"gh_
0000030: 39 35 66 61 65 31 62 61 36 66 61 30 22 2c 22 64  95fae1ba6fa0","d
0000040: 65 76 69 63 65 49 64 22 3a 22 67 68 5f 39 35 66  eviceId":"gh_95f
0000050: 61 65 31 62 61 36 66 61 30 5f 38 33 31 32 64 62  ae1ba6fa0_8312db
0000060: 31 63 37 34 61 36 64 39 37 64 30 34 30 36 33 66  1c74a6d97d04063f

comcat@jackslab:/work/xwifi/noduino-sdk/lib$ nc -u -l -p 12476 
������}��{"deviceInfo":{"deviceType":"gh_95fae1ba6fa0","deviceId":"gh_95fae1ba6fa0_8312db1c74a6d97d04063fb88d9a8e47"}}

如上,监听 12476 这个 UDP 端口就知道,其广播数据含有两个关键的数据:

  • deviceType: gh_95fae1ba6fa0
  • deviceId: gh_95fae1ba6fa0_8312db1c74a6d97d04063fb88d9a8e47


这个 deviceType 实际就是公众号的原始ID: gh_95fae1ba6fa0

微信客户端在收到这个 UDP 广播包后,会用得到的 deviceType 和 deviceId 去对应公众号的数据库里查找,看是否有这个设备存在

如果存在,则也往 12476 这个端口发一个,确认包,设备收到后,再回一个响应包,则完成过程


传统微信设备生产流程是:

  • 厂家自己生成 device id,并向公众平台申请带参二维码,有多少个 device id 就需要多少个带参二维码
  • 厂家后台记录 device id 和带参二维码的对应关系,并在设备出厂时,一一对应地贴在设备包装盒或者说明书上
  • 用户扫描带参二维码,微信客户端会把二维码的参数通过公众平台的后台传给厂家后台
  • 厂家后台记录二维码的参数和用户 openid 完成设备绑定


由此过程可发现,新思路和传统方法的差别在:

  • 厂家直接向公众平台申请 device id,自己后台登记该 device id 即可,设备出厂时所有设备使用相同的二维码(微信型号码)
  • 微信客户端扫描可直接进入监听 UDP 端口的二维码(微信型号码),直接进入监听状态
  • 设备主动向特定端口广播自己需要关联的公众号 (deviceType) 和设备 ID (deviceId)
  • 微信客户端会用得到的 deviceType 和 deviceId 去对应公众号的数据库里查找,设备存在(厂家用 deviceId 做过设备授权)则进入绑定界面
  • 用户点绑定后,微信后台会给厂商的后台一个如下消息:
<xml>
<ToUserName><![CDATA[gh_95fae1ba6fa0]]></ToUserName>
<FromUserName><![CDATA[o7okrt5x5y0QF3ZoORfhBs_XM4I8]]></FromUserName>
<CreateTime>1447343815</CreateTime>
<MsgType><![CDATA[device_event]]></MsgType>
<Event><![CDATA[bind]]></Event>
<DeviceType><![CDATA[gh_95fae1ba6fa0]]></DeviceType>
<DeviceID><![CDATA[gh_95fae1ba6fa0_8312db1c74a6d97d04063fb88d9a8e47]]></DeviceID>
<Content><![CDATA[]]></Content>
<SessionID>0</SessionID>
<OpenID><![CDATA[o7okrt5x5y0QF3ZoORfhBs_XM4I8]]></OpenID>
</xml>

厂商的后台只要解析后,将用户 open id 和 device id 的对应关系登记入数据库,即可完成绑定过程,再也无需一一对应地人肉贴带参二维码了


厂家生产时,还是要把从 weixin 申请的 deviceId 写入设备 flash/eeprom 上


注意:已经绑定的设备,微信客户端在查找设备时会自动忽略



[编辑] 4 参考
























个人工具
名字空间

变换
操作
导航
工具箱