一. 前言。
之前逛gitHub,有人问过是否支持自定义回调8266的信息,我想应该可以把?所以,一直想动手搞上位机的配网封装,因为太忙了,这几天临近过年有点时间,终于搞好了。
因为本人姓徐,所以命名为 XSmartConfig , 顾名思义原理和smartConfig一样,只是再封装一次。
二. 特点。
③. 集成方法与使用。
- 为了兼顾 Eclipse 开发,同时缩短周期,我就不放在 jCenter 了,打包成jar架包大家使用吧。jar包下载地址在下面。
<uses-permission android:name&#61;"android.permission.INTERNET" /><uses-permission android:name&#61;"android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name&#61;"android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name&#61;"android.permission.CHANGE_WIFI_MULTICAST_STATE" /><uses-permission android:name&#61;"android.permission.CHANGE_WIFI_STATE" />
- ②、xEspTouchTask.java 类&#xff0c;是对外的API接口。详细使用方法&#xff0c;请到Demo查看。
xEspTouchTask espTouchTask &#61; new xEspTouchTask.Builder(this) .setSsid(apSsid) .setPassWord(apPassword) .creat(); espTouchTask.startSmartConfig();
xEspTouchTask espTouchTask &#61; new xEspTouchTask.Builder(this) .setSsid(apSsid) .setPassWord(apPassword) .creat(); espTouchTask.startSmartConfig(30, 8989);;
- ③、设置监听接口 EspTouchTaskListener()。
code状态码 | message信息回调 | 说明 |
---|
0 | 表示成功配网&#xff0c;接着看message的信息&#xff0c;为一个包含设备的Mac地址和网关地址的Json | 一键配网成功回调 |
1 | 为多个配网信息&#xff0c;还在配网中&#xff0c;其中message是刚刚配对成功的设备 | 只有设置了指定的个数配网设备才有回调 |
2 | null | 表示一键配网配网失败 |
3 | 表示成功接受到设备的UDP发来的自定义信息 | 仅当设置了端口号和超时时间才生效 |
4 | null | 表示超过了设置超时时间&#xff0c;未接受到设备的UDP信息 |
espTouchTask.setEspTouchTaskListener(new xEspTouchTask.EspTouchTaskListener() {&#64;Overridepublic void EspTouchTaskCallback(int code, String message) {switch (code) {case 0:break;case 1:break; case 2: break; case 3: break;case 4:break;}}});
④. 关于如何自定义设备成功连接路由器后的信息回调 。
一句话概括&#xff1a;设备在配网成功获取IP之后&#xff0c;手机也会开启UDP接口来接受局域网的UDP信息包&#xff0c;这样就可以实行我们自定义的信息回调啦&#xff1b; 很多人会问&#xff0c;这样有什么好处&#xff0c;比如我设备已经连接路由器&#xff0c;但是不知道是否成功连接了MQTT服务器&#xff0c;您完全可以在连接MQTT之后再发送UDP广播包&#xff0c;之后关闭。
下面是我8266的部分UDP代码。
- UDP的地址为255&#xff0c;255&#xff0c;255&#xff0c;255
- 协议好的端口号 8989 。
void udp_client_init(void) {wifi_set_broadcast_if(0x01); user_udp_espconn.proto.udp &#61; (esp_udp *) os_zalloc(sizeof(esp_udp));user_udp_espconn.type &#61; ESPCONN_UDP; user_udp_espconn.proto.udp->local_port &#61; 2000; user_udp_espconn.proto.udp->remote_port &#61; 8989; const char udp_remote_ip[4] &#61; { 255, 255, 255, 255 }; os_memcpy(user_udp_espconn.proto.udp->remote_ip, udp_remote_ip, 4);espconn_regist_recvcb(&user_udp_espconn, user_udp_recv_cb); espconn_regist_sentcb(&user_udp_espconn, user_udp_sent_cb); espconn_create(&user_udp_espconn); getUDPSendMessage();os_timer_disarm(&sendDataTimer); os_timer_setfn(&sendDataTimer, (os_timer_func_t *) timerSendData,NULL); os_timer_arm(&sendDataTimer, 2500, 1); }