Android开发—智能家居系列】(二):用手机对WIFI模块进行配置
在实际开发中,我开发的这款APP是用来连接温控器,并对温控器进行控制的。有图为证,哈哈。
上一篇文章【Android开发—智能家居系列】(一):智能家居原理的文末总结中写到:
手机APP控制智能温控器就两步:一是通过手机,让WIFI模块接入网络,而是通过网络,使用手机对模块发送指令。在这篇文章中,我们来介绍第一个步骤。
【时序图】
【概念】
【两种模式】:
AP:即无线接入点,是一个无线网络的中心节点。通常使用的无线路由器就是一个AP,其它无线终端可以通过AP相互连接。
STA:即无线站点,是一个无线网络的终端。如笔记本电脑、PDA等。
【两个端口】
48899端口:我所用的WIFI模块(USR-WIFI232-S)的端口
49000端口:除去我用的WIFI(USR-WIFI232-S)模块,其他WIFI模块的端口
【IP地址】
广播地址:X.X.X.255(如:255.255.255.255)
WIFI模块默认IP:10.10.100.254
接入路由器之后,由路由器动态分配的IP。
【实现过程描述】
使用UDP广播方式搜索wifi模块
- 第一阶段是在WIFI模块处于AP模式下,对其进行搜索。
- 第二阶段是在WIFI模块处于STA模式下,对其进行搜索。
第一阶段:
模块工作在AP模式下时,会开启一个用于接收“快速联网协议命令”的UDP端口,端口号为48999(出厂设置默认IP为10.10.100.254)
- 通过UDP广播(广播地址:x.x.x.255,端口48899),发送HF-A11ASSISTHREAD(该口令可用AT+ASWD命令设置)
(这里也可以用单播的形式搜索,目的地址:10.10.10.254,端口48899,命令不变) - 模块收到指令后,如果口令正确,向源地址(单播:端口48899)发送IP地址、Mac地址和模块名称。
- 收到模块返回的IP地址及MAC地址后,立即回送一个“+ok”,模块收到后进入连接状态。
- 进入连接状态后,模块可以正常接收网络AT指令。 如:设置网络协议参数:AT+NETP=TCP,CLIENT,30000,X.X.X.X 设置STA的网络参数:AT+WANN=DHCP
过渡阶段:
- UDP广播(端口:49000)发送指令ff 00 01 01 02(十六进制)
- 模块收到指令后返回路由列表
- 将用户选择的SSID(路由名称)和密钥发送给模块(端口:49000),模块连入此路由,转化成STA模式,并回送一个指令ff 00 03 82 01 01 87
第二阶段:
在STA模式下,我们要找到此WIFI模块,并对其发送开、关等操作指令。步骤同第一阶段,但是返回的IP地址会不一样。模块作为STA链接到路由中,以为此时模块的IP地址是由路由器分配的,不是确定IP地址,所以手机无法与模块建立连接,故需要采用广播搜索,获取到模块在STA模式下的地址。
【总结】
有了基本的思路,了解并熟悉整个连接和通信过程,接下来就是比较简单的和基础的部分了,包括UDP通信以及字符和十六进制之间的转换等基本功了。整个开发过程中,对以上内容的理解是一点一点来的,刚开始组长给我讲一遍什么都不明白,给了我一堆资料和工具也不知道怎么用,但是开发着开发着就搞清楚了。开发过程中还请教了WIFI模块生产公司的工程师,解决了我的问题。遇到问题时,还是要多想办法,总会有解决的办法,看你有没有决心和信心要把它解决出来。
Android开发—智能家居系列】(二):用手机对WIFI模块进行配置的更多相关文章
- 【Android开发—智能家居系列】(一):智能家居原理
来到JCZB公司的第二天,就接到了开发类似于小米智能家庭APP的任务.组长让我在手机上安装上此款APP,给了我个小米智能插座,就让我开始了解需求.这便开启了我的智能家居旅程.说实话,我也真是out的无 ...
- 【Android开发—智能家居系列】(四):UDP通信发送指令
思路回顾 [1]手机连接WIFI模块 [2]UDP通信对WIFI模块发送指令,以和WIFI模块保持连接状态 [3]UDP通信对WIFI模块发送指令,让其搜索可用的无线网,返回WIFI列表 [4]发送指 ...
- 【Android开发—智能家居系列】(三):手机连接WIFI模块
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 概述 实现连接WIFI的功能会用到一个工具类,源码可以点击链接下载.网上这些类似的工具类里的代码差不多是一样的.连接无线网主要有 ...
- 基于Laravel+Swoole开发智能家居后端
基于Laravel+Swoole开发智能家居后端 在上一篇<Laravel如何优雅的使用Swoole>中我已经大概谈到了Laravel结合Swoole的用法. 今天,我参与的智能家居项目基 ...
- 使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form
使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form 开发环境: Wing IDE 6.1 步骤1: 打开 Wing IDE,创建一个新的 pr ...
- 【Android开发VR实战】二.播放360°全景视频
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53924006 本文出自[DylanAndroid的博客] [Android开发 ...
- [Android开发学iOS系列] 工具篇: Xcode使用和快捷键
[Android开发学iOS系列] 工具篇: Xcode使用和快捷键 工欲善其事必先利其器. 编辑 Cmd + N: 新建文件 Option + Cmd + N: 新建文件夹 Cmd + / : 注释 ...
- [Android开发学iOS系列] iOS写UI的几种方式
[Android开发学iOS系列] iOS写UI的几种方式 作为一个现代化的平台, iOS的发展也经历了好几个时代. 本文讲讲iOS写UI的几种主要方式和各自的特点. iOS写UI的方式 在iOS中写 ...
- [Android开发学iOS系列] Auto Layout
[Android开发学iOS系列] Auto Layout 内容: 介绍什么是Auto Layout. 基本使用方法 在代码中写约束的方法 Auto Layout的原理 尺寸和优先级 Auto Lay ...
随机推荐
- HashMap允许将null用作键 也允许将null作为值
HashMap不能保证元素的顺序,HashMap能够将键设为null,也可以将值设为null. 与之对应的是Hashtable,(注意大小写:不是HashTable),Hashtable不能将键和值设 ...
- 微信开发 access_token 数量限制问题
微信对access_token的请求有数量限制, 如果用户量特别多的话, access_token 可能会不够用 两种方案: 1. access_token 加入缓存并设置2小时的失效时间,每次从 ...
- verdi知识点
引用:http://blog.csdn.net/naclkcl9/article/details/5425936 1. verdi 加强了active anotation, active trace和 ...
- laravel如何利用数据库的形式发送通知
具体实现需要分几步: 1.修改驱动为database; 2.创建database的queue表 3.创建任务sendMessage 4.创建发送逻辑dispatch 5.启动队列 接下来我们进行实操: ...
- sql 表连接的3种类型
内连接 inner join (join) 交叉连接 cross join 笛卡尔积 效率低 外连接 outer join (left join ,right join ,full join ...
- python爬取博客圆首页文章链接+标题
新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...
- shell相关指令介绍$*和$#以及$?和if [[ ! -z $1 ]]
$#,脚本运行时后跟的参数个数 #! /bin/bash case "$#" in 0) printf "Enter a number: " read n=$R ...
- flask中的上下文_请求上下文和应用上下文
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...
- android 之 Dialog
Android平台下对话框主要有普通对话框.选项对话框.单选多选对话框.进度对话框.日期对话框.时间对话框等. 在程序中通过开发回调方法onCreateDialog来完成对话框的创建,该方法需要传入代 ...
- Linux暂停和恢复进程
Linux暂停和恢复进程 kill -STOP 1234 将该进程暂停. 如果要让它恢复到后台,用kill -CONT 1234 (很多在前台运行的程序这样是不行的) 如果要恢复到前台,请在当时运行该 ...