首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Android网络开发回顾之旅 ② 新年新气象,封装一个esp8266一键配网XSmartConfig , 支持自定义回调。(附带Demo)

  • 23-11-14 06:23
  • 4138
  • 7177
blog.csdn.net
  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

    • ① 对物联网爱不释手,在Android手机集成使用MQTT协议 ,实现搞掂移动控制硬件端。

    • ① 新年新气象,封装一个esp8266一键配网XSmartConfig , 支持自定义回调。


一. 前言。

之前逛gitHub,有人问过是否支持自定义回调8266的信息,我想应该可以把?所以,一直想动手搞上位机的配网封装,因为太忙了,这几天临近过年有点时间,终于搞好了。

因为本人姓徐,所以命名为 XSmartConfig , 顾名思义原理和smartConfig一样,只是再封装一次。


二. 特点。

  • ①、继承了乐鑫8266的一键配网 smartConfig , 保留了其功能。

  • ②、支持多个设备配网的功。

  • ③、支持隐藏的SSID配网。

  • ④、目前V1.0版本仅仅支持配网成功后的UDP回调接收,具体的协议请自定义。


③. 集成方法与使用。


  • 为了兼顾 Eclipse 开发,同时缩短周期,我就不放在 jCenter 了,打包成jar架包大家使用吧。jar包下载地址在下面。

  • ①、所需的权限:
 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  • ②、xEspTouchTask.java 类,是对外的API接口。详细使用方法,请到Demo查看。

 //这是我们平时用的smartConfig一键配网代码
 xEspTouchTask espTouchTask = new xEspTouchTask.Builder(this) //初始化
                    .setSsid(apSsid) //设置路由器的名字
                    .setPassWord(apPassword)  //设置路由器连接的密码
                    .creat(); //创建对象
           espTouchTask.startSmartConfig();  //开始执行,不带UDP的普通配网
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

 //这是我们smartConfig一键配网后执行UDP接受过滤此设备的自定义一键配网
 xEspTouchTask espTouchTask = new xEspTouchTask.Builder(this) //初始化
                    .setSsid(apSsid) //设置路由器的名字
                    .setPassWord(apPassword)  //设置路由器连接的密码
                    .creat(); //创建对象
              espTouchTask.startSmartConfig(30, 8989);;  //开始执行带UDP协议的 一键配网,30是超时时间,8989是本地端口
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  • ③、设置监听接口 EspTouchTaskListener()。

code状态码message信息回调说明
0表示成功配网,接着看message的信息,为一个包含设备的Mac地址和网关地址的Json一键配网成功回调
1为多个配网信息,还在配网中,其中message是刚刚配对成功的设备只有设置了指定的个数配网设备才有回调
2null表示一键配网配网失败
3表示成功接受到设备的UDP发来的自定义信息仅当设置了端口号和超时时间才生效
4null表示超过了设置超时时间,未接受到设备的UDP信息

        espTouchTask.setEspTouchTaskListener(new xEspTouchTask.EspTouchTaskListener() {
            @Override
            public void EspTouchTaskCallback(int code, String message) {
                switch (code) {
                    case 0:
                        //一键配网成功...
                        break;
                    case 1:
                        //为多个配网信息,还在配网中,其中message是刚刚配对成功的设备
                        break;   
                    case 2:    
                       //表示配网失败;        
                        break;    
                    case 3:                 
                        //配网成功后,UDP广播后获取到的信息:message
                        break;
                    case 4:
                       //表示超过了设置超时时间,未接受到设备的UDP信息
                        break;
                }
            }
        });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

④. 关于如何自定义设备成功连接路由器后的信息回调 。


  • 我说出来了这样的话语,那肯定有我解决的方法,鉴于我的想法如下,需要有点通讯知识才会看懂哦!

    • 设备成功连接路由器获取IP之后,确定您的设备和手机在同一个网段,之后设备开启UDP广播包,指定的远程端口号, 发送您的自定义信息。

    • 如果考虑到UDP广播不安全,您可以使用TCP协议,还记得8266那个smartConfig有个 手机的ip地址回调么?拿到这个地址之后,我们可以双方协议好,就好!

    • 但目前我仅仅做了UDP的。 如果您有想法,完全把我这份源码下载下来,做tcp协议。


一句话概括:设备在配网成功获取IP之后,手机也会开启UDP接口来接受局域网的UDP信息包,这样就可以实行我们自定义的信息回调啦; 很多人会问,这样有什么好处,比如我设备已经连接路由器,但是不知道是否成功连接了MQTT服务器,您完全可以在连接MQTT之后再发送UDP广播包,之后关闭。


  • 下面是我8266的部分UDP代码。

    • UDP的地址为255,255,255,255
    • 协议好的端口号 8989 。
void udp_client_init(void) {

    wifi_set_broadcast_if(0x01);     //设置 ESP8266 发送 UDP广播包时,从 station 接口发送
    user_udp_espconn.proto.udp = (esp_udp *) os_zalloc(sizeof(esp_udp));//分配空间
    user_udp_espconn.type = ESPCONN_UDP;              //设置类型为UDP协议
    user_udp_espconn.proto.udp->local_port = 2000;            //本地端口
    user_udp_espconn.proto.udp->remote_port = 8989;           //目标端口
    const char udp_remote_ip[4] = { 255, 255, 255, 255 };       //目标IP地址(广播)
    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);            //建立 UDP 传输
    getUDPSendMessage();

    os_timer_disarm(&sendDataTimer);      //取消定时器定时
    os_timer_setfn(&sendDataTimer, (os_timer_func_t *) timerSendData,
    NULL);    //设置定时器回调函数
    os_timer_arm(&sendDataTimer, 2500, 1);    //启动定时器,单位:毫秒

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

  • 工程源代码下载:https://github.com/xuhongv/XSmartConfig-master

    • Jar包下载:https://github.com/xuhongv/XSmartConfig-master/raw/master/Asset/XSmartConfig_V1.0.jar

    • APK下载体验:

等等

注:本文转载自blog.csdn.net的半颗心脏的文章"http://blog.csdn.net/xh870189248/article/details/79328257"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top