热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

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




一. 前言。


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

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




二. 特点。


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

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

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

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




③. 集成方法与使用。




  • 为了兼顾 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查看。


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


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



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



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


espTouchTask.setEspTouchTaskListener(new xEspTouchTask.EspTouchTaskListener() {&#64;Overridepublic void EspTouchTaskCallback(int code, String message) {switch (code) {case 0://一键配网成功...break;case 1://为多个配网信息&#xff0c;还在配网中&#xff0c;其中message是刚刚配对成功的设备break; case 2: //表示配网失败; break; case 3: //配网成功后&#xff0c;UDP广播后获取到的信息&#xff1a;messagebreak;case 4://表示超过了设置超时时间&#xff0c;未接受到设备的UDP信息break;}}});



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




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

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

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

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




一句话概括&#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); //设置 ESP8266 发送 UDP广播包时&#xff0c;从 station 接口发送user_udp_espconn.proto.udp &#61; (esp_udp *) os_zalloc(sizeof(esp_udp));//分配空间user_udp_espconn.type &#61; ESPCONN_UDP; //设置类型为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 }; //目标IP地址&#xff08;广播&#xff09;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); //启动定时器&#xff0c;单位&#xff1a;毫秒}



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

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

    • APK下载体验&#xff1a;

等等


推荐阅读
  • 痞子衡嵌入式:对比MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异...
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异。近 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 两个方案:1通过android.permission.READ_PHONE_STATE读取2通过短信过滤,读取手机号。按照第1个方案,AndroidManifest.xml需要添加< ... [详细]
  • 从零开始的ESP8266探索(15)WiFi其他方法和WiFi事件响应
    文章目录目的WiFi其他方法WiFi事件响应事件列表注册事件使用示例总结目的WiFi在使用过程中并非会一直如希望般稳定运行的,为了应对这些情况就需要能够了解WiFi ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 开发板:FL2440内核:linux3.0无线网卡:RT3070RT3070的工作模式分为STA(station)模式、SoftAP(AccessPoint)模式两种。STA ... [详细]
  • 序言Broadcast作为Android的四大组件之一,重要性不言而喻;一般我们使用广播的方式通常如下,继承BroadcastReceiver,新建一个广播类。publicclas ... [详细]
  • Androidwifi对象属性及简易Demo本章介绍Android开发中WiFi热点和WiFi属性的获取,介绍WiFi的名称、状态等属性以及获取周围 ... [详细]
author-avatar
魏知染纪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有