Wifi开发技术总结1
摘要:
刚刚接触wifi开发的东西,用的模块是 ESP8266-12E。
资料很多,淘宝地址:https://item.taobao.com/item.htm?spm=a1z09.2.9.10.qGL1rb&id=42444035227&_u=e1js7shc67a2 资料可以从里面下载。
对于ESP8266本身的固件编程我就不在这里讲了,讲多了有点跑题的嫌疑。
不过,还行需要先介绍下它的这款芯片的一些特性吧。
- 模块本身可以作为服务端也可以作为客户端。
- 支持TCP也支持UDP。
- 作为客户端,单链接,这里可以实现透传。
什么是透传?
简单理解就是不用每次发AT指令,就可以接收和发送数据了。而且,掉电之后可以不用重新配置。
非透传指的是:不能这边发送数据,那边收到数据。而是中间需要先发指令,然后发送数据。
- 当模块作为服务器端的时候,处于非透传模式。
一次最大发送数据量为 2K。


这是发送数据的指令集,不过指令有点问题。上面红色方框里面的才是真正的指令集。
实例代码(单片机端)

下面是我2天开发wifi走过的弯路以及步骤如下:
- 熟悉这款芯片,以及它的特性。
要知道一点,你用手机给它发数据,串口返回的数据是没有反应的。
而且第一步当中最重要的就是解决物理线路问题。
很多问题都是由小问题搞来的。
DB9接口中,母头一的tx一定要和设备的tx相连接。
母头的引脚定义如下:


物理联线千万不能错,错的话,全盘皆输。
细节:设备一上电,灯会闪烁。由此可以看到它的发送或者接收数据的情况。
还有就是当发送不过去数据的时候,断电重启会是一个好的选择,因为你不知道你到底发错了什么数据。
- 看文档,咨询商家,使用场合,看它这款设备的使用场景等等。例外加群找找相关的资料。
- 先在PC端搭建实验平台:
PC端发送数据实例:

PC端接收数据实例:

- 等上面的一切都没有问题之后,我们进入正题。
Android端wifi开发
首先我们来看看效果:
发AT指令集:
AT+CWMODE=3
AT+RST
AT+CIPMUX=1
AT+CIPSERVER=1
假如需要发送数据给手机端的话:
AT+CIPSEND=0,4
>OK
上面的所有指令都是需要单个发送的,不支持几条一起发送。而且,最后一条指令最坑,一定要加 \n。不然不行。
现在打开手机端app界面如下:
1)我们默认是WIFI解锁:

2)此时程序连接上root 这个AP,此AP就是我们之前设置好的wifi模块的ap。
至于怎么设置,见AP指令。

AT指令集: AT+CWSAP="root","12345678",1,3
对于这条指令最坑爹的是,密码必须用8位,而且在wifi 手机端程序里面,密码模式最好设置为WPA2_PSK模式,不然很有可能连接不上。
之前一直没连接上的一个原因就是 设备的AP没有密码,但死活连接不上去。程序还老死掉。后来设置密码之后,成功解决。


3)进入到主页面后,会跳出AlertDialog 让你选择以何种方式解锁,如果选择蓝牙解锁,将会跳到另一个页面去。而选择WIFI解锁,则留着本页面。

4)这里选择wifi解锁:然后我填入6位密码,点击确定。然后串口里面会显示我发送的数据,后面13是发送的字节数。6 + 6 + 1


当串口发送OK 的时候,手机端接收到你发送的字符 >OK .手机端readline 是以\n作为结束的标志。必须要加上。不然失效。
- 手机端APP开发:
参考资料:
http://blog.csdn.net/x605940745/article/details/17001641
android之socket编程实例
http://my.oschina.net/hiliusl/blog/175605
android4.0 WIFI实现网络连接
http://www.2cto.com/kf/201210/163507.html
Android开发——自动连接指定SSID的wifi热点(不加密/加密)
整个程序的思路是这样的:
初始化---弹出dialog,选择解锁方式----自动连接指定wifi热点(先打开,然后连接)---- 创建客户端数据的输出流 ---- 常见客户端输入流(接收数据)---- 等待按键触发
下面是一些之前走过的bug之路:
1)自动连接wifi模块部分代码:

为啥会有一个5s延迟是因为 客户端 初始化需要时间。所以我们先延迟。延迟完毕之后,打开即可。

将刚刚创建的网络添加进来并连接:(测试时候发现无密码的加入不进来,只有3类型的比较好使)

2)这一步完了之后,我们就可以进行 socket连接了
下面这一步相当于socket初始化,Android 4.0 以后,所有与网络相关的东东都必须要在线程里面进行初始化。
下面延迟4s是因为等待前面主线程里面连接上 ssid 为 root 的ap热点。然后 等待socket连接好。建立连接。

3)wifi 发送数据
上面的搞完之后,我们在需要发送数据的地方 发送数据即可:
这里面不要用 out.writeUTF(XXX);这样发送,串口那边收不到数据,可能因为是编码方式的原因。
而且我们的接收线程是全局的。不能写在发送下面,本来想着写个超时机制,多少s 之后收不到串口那边发送过来的数据就提示客户端发送失败
之类的指令。

4)接收数据
这个里面我故意延迟6s 就是等待 刚刚在线程里面的socket初始化成功。
然后隔个1s 检测一次,看看socket是不是连接上,没连接上就重新连接。然后建立输入流之间的连接。
当我们执行 bf.readLine(); 这句代码的时候,必须要知道我们 "串口端"发送数据的末尾必须要加
一个 "\n " ,不加这个这边是处于线程堵塞状态,一直在这就不走了,我们在遇到问题的时候,可以加
Log 看状态,不行就加断点,一步步调试。
当我们收到数据以后,判断里面是否包含 "OK"字样的字符串,如果包含,说明主线程里面的数据已经成功
发送到"串口了"(设备),且串口会给我们发送一个标识位,这里规定为:"OK"。
其实我们收到的数据是这样的: ">OK",后面是一个回车(\n)奥。


5)当然,上面的这些代码能跑是因为我们还需要加入权限:

至此,整个手机与wifi模块通讯就都讲完了。以后有补充的话,我还是会第一时间加入进来的。
Wifi开发技术总结1的更多相关文章
- Android WiFi开发教程(一)——WiFi热点的创建与关闭
相对于BlueTooth,WiFi是当今使用最广的一种无线网络传输技术, 几乎所有智能手机.平板电脑和笔记本电脑都支持Wi-Fi上网.因此,掌握基本的WiFI开发技术是非常必要的.本教程将围绕一个小D ...
- 3星|《给产品经理讲技术》:APP开发技术介绍,没有技术背景的话恐怕只能看懂书中的比喻和结论
基本是APP开发涉及到的相关技术的入门级介绍.涉及到的知识点与技术细节比较多,不少技术相关的内容并没有像标题暗示的那样没有技术背景也可以看懂,而是涉及到许多专业的术语.原理.也有一些内容是用比喻的方法 ...
- Android开发技术周报183学习记录
Android开发技术周报183学习记录 教程 Android性能优化来龙去脉总结 记录 一.性能问题常见 内存泄漏.频繁GC.耗电问题.OOM问题. 二.导致性能问题的原因 1.人为在ui线程中做了 ...
- 快速全面了解QT软件界面开发技术
快速全面了解QT软件界面开发技术 目录 前言 一. 学习QT可能的目的是什么? 只想体验一下QT? 当前的项目选择了用QT. 为将来做QT技术储备. 二. QT的核心技术优势是什么? QT在软 ...
- .NET Web开发技术简单整理
在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...
- Web前端开发大系概览 (前端开发技术栈)
前言 互联网建立50多年了,网站开发技术日新月异,但web前端始终离不开浏览器,最终还是HTML+JavaScript+CSS这3个核心,围绕这3个核心而开发出来大量技术框架/解决方案. 我从2000 ...
- VC++/MFC(VC6)开发技术精品学习资料下载汇总
工欲善其事,必先利其器,VC开发MFC Windows程序,Visual C++或Visual Studio是必须的,恩,这里都给你总结好了,拿去吧:VC/MFC开发必备Visual C++.Visu ...
- Web开发技术发展历史
Web开发技术发展历史 来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...
- 大规模web 服务开发技术
<大规模web 服务开发技术> 是一本讲解大型Web 应用的入门级书籍,能够让我们接触到大应用的知识点. 目录如下: 第1章 大规模Web服务的开发定位——掌握整体第2章 大规模数据处 ...
随机推荐
- Android 设置EditText光标Curso颜色及粗细
在android的输入框里,如果要修改光标的颜色及粗细步骤如下两步即可搞定: 1.在资源文件drawable下新建一个光标控制color_cursor.xml <?xml version=&qu ...
- Struts2(十四)拦截器实现权限管理
一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截 ...
- IOS 网络浅析-(三 NSURLConnection代理)
对于现在的iOS开发,用法简单,最古老最经典最直接的NSURLConnection的作用不是很大,但是作为一名ios开发者,我们应该拥有一颗热爱学习的心,下面通过代码的实现简单介绍一下NSURLCon ...
- iOS 核心动画
核心动画(Core Animation) : •CoreAnimation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.fr ...
- C语言-06-复杂数据类型
一.数组 1> 数组的定义和初始化 定义 ① 数组定义了同种类型数据的集合 ② 定义数组时,数组必须有固定的长度 初始化 ① 如果在定义数组时,初始化数组,数组元素的个数必须是常量 ② 如果不在 ...
- ASP.NET @Page指令属性(vs2010)
最近看一篇好文章,摘抄下来. 原文出处:http://www.cnblogs.com/zhaozhan/archive/2010/05/01/1725819.html @Page指令位于每个ASP.N ...
- 数据仓库建模与ETL实践技巧
数据分析系统的总体架构分为四个部分 —— 源系统.数据仓库.多维数据库.客户端(图一:pic1.bmp) 其中,数据仓库(DW)起到了数据大集中的作用.通过数据抽取,把数据从源系统源源不断地抽取出来, ...
- 【mysql】关于innodb中MVCC的一些理解
一.MVCC简介 MVCC (Multiversion Concurrency Control),即多版本并发控制技术,它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代 ...
- MFC Grid control 2.27
原文链接地址:http://www.codeproject.com/Articles/8/MFC-Grid-control MFCGridCtrl是个强大的类,用于数据的表格显示. 1.类特征 Cel ...
- Linux学习之五——压缩与备份
一.Linux下常见的压缩文件 *.Z compress 程序压缩的档案(现在不流行了,用gzip也能解压): *.gz gzip 程序压缩的档案: *.bz2 bzip2 程序压缩的档案: *.ta ...