摘要:

刚刚接触wifi开发的东西,用的模块是 ESP8266-12E。

资料很多,淘宝地址:https://item.taobao.com/item.htm?spm=a1z09.2.9.10.qGL1rb&id=42444035227&_u=e1js7shc67a2 资料可以从里面下载。

对于ESP8266本身的固件编程我就不在这里讲了,讲多了有点跑题的嫌疑。

不过,还行需要先介绍下它的这款芯片的一些特性吧。

  1. 模块本身可以作为服务端也可以作为客户端。
  2. 支持TCP也支持UDP。
  3. 作为客户端,单链接,这里可以实现透传。

什么是透传?

简单理解就是不用每次发AT指令,就可以接收和发送数据了。而且,掉电之后可以不用重新配置。

非透传指的是:不能这边发送数据,那边收到数据。而是中间需要先发指令,然后发送数据。

  1. 当模块作为服务器端的时候,处于非透传模式。

    一次最大发送数据量为 2K。

这是发送数据的指令集,不过指令有点问题。上面红色方框里面的才是真正的指令集。

 

实例代码(单片机端)

下面是我2天开发wifi走过的弯路以及步骤如下:

  1. 熟悉这款芯片,以及它的特性。

    要知道一点,你用手机给它发数据,串口返回的数据是没有反应的。

    而且第一步当中最重要的就是解决物理线路问题。

    很多问题都是由小问题搞来的。

    DB9接口中,母头一的tx一定要和设备的tx相连接。

    母头的引脚定义如下:

 

物理联线千万不能错,错的话,全盘皆输。

细节:设备一上电,灯会闪烁。由此可以看到它的发送或者接收数据的情况。

还有就是当发送不过去数据的时候,断电重启会是一个好的选择,因为你不知道你到底发错了什么数据。

  1. 看文档,咨询商家,使用场合,看它这款设备的使用场景等等。例外加群找找相关的资料。
  2. 先在PC端搭建实验平台:

    PC端发送数据实例:

    PC端接收数据实例:

  3. 等上面的一切都没有问题之后,我们进入正题。

    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作为结束的标志。必须要加上。不然失效。

  4. 手机端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的更多相关文章

  1. Android WiFi开发教程(一)——WiFi热点的创建与关闭

    相对于BlueTooth,WiFi是当今使用最广的一种无线网络传输技术, 几乎所有智能手机.平板电脑和笔记本电脑都支持Wi-Fi上网.因此,掌握基本的WiFI开发技术是非常必要的.本教程将围绕一个小D ...

  2. 3星|《给产品经理讲技术》:APP开发技术介绍,没有技术背景的话恐怕只能看懂书中的比喻和结论

    基本是APP开发涉及到的相关技术的入门级介绍.涉及到的知识点与技术细节比较多,不少技术相关的内容并没有像标题暗示的那样没有技术背景也可以看懂,而是涉及到许多专业的术语.原理.也有一些内容是用比喻的方法 ...

  3. Android开发技术周报183学习记录

    Android开发技术周报183学习记录 教程 Android性能优化来龙去脉总结 记录 一.性能问题常见 内存泄漏.频繁GC.耗电问题.OOM问题. 二.导致性能问题的原因 1.人为在ui线程中做了 ...

  4. 快速全面了解QT软件界面开发技术

    快速全面了解QT软件界面开发技术     目录 前言 一. 学习QT可能的目的是什么? 只想体验一下QT? 当前的项目选择了用QT. 为将来做QT技术储备. 二. QT的核心技术优势是什么? QT在软 ...

  5. .NET Web开发技术简单整理

    在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...

  6. Web前端开发大系概览 (前端开发技术栈)

    前言 互联网建立50多年了,网站开发技术日新月异,但web前端始终离不开浏览器,最终还是HTML+JavaScript+CSS这3个核心,围绕这3个核心而开发出来大量技术框架/解决方案. 我从2000 ...

  7. VC++/MFC(VC6)开发技术精品学习资料下载汇总

    工欲善其事,必先利其器,VC开发MFC Windows程序,Visual C++或Visual Studio是必须的,恩,这里都给你总结好了,拿去吧:VC/MFC开发必备Visual C++.Visu ...

  8. Web开发技术发展历史

    Web开发技术发展历史   来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...

  9. 大规模web 服务开发技术

    <大规模web 服务开发技术> 是一本讲解大型Web 应用的入门级书籍,能够让我们接触到大应用的知识点. 目录如下: 第1章  大规模Web服务的开发定位——掌握整体第2章  大规模数据处 ...

随机推荐

  1. DDMS无法查看data/data目录?

    今天andorid 学习用真机来尝试用Android SQLite数据库时,从DDMS的FileExplore查看数据库文件时会发现里面是空的什么也没有,之前用的一直都是模拟器,现如今用真机 捣鼓了小 ...

  2. 网络开始---多线程---NSThread-01-基本使用(了解)(二)

    #import "HMViewController.h" @interface HMViewController () @end @implementation HMViewCon ...

  3. 真机测试时的错误:No matching provisioning profiles found

    1.出现错误的原因是这样的---- 公司开始做项目,原来做真机测试的时候,用的是公司申请的苹果开发者账号.现在项目结束了,准备上线,但客户要求使用客户自己的苹果开发者是账号上线,于是就用客户的账号测试 ...

  4. IIS管理

    1.缓存的处理 http://www.cnblogs.com/dudu/p/iis_user-mode_caching_cache-control_public.html 2.负载均衡的使用 ARR ...

  5. SpringMVC4 + Spring + MyBatis3 基于注解的最简配置

    本文使用最新版本(4.1.5)的springmvc+spring+mybatis,采用最间的配置方式来进行搭建. 1. web.xml 我们知道springmvc是基于Servlet: Dispatc ...

  6. select2使用

    一.简介 select2是Jquery用来代替选择框的一种组件.它让你可以定制下拉框,并且支持搜索.标记,远程数据源,无限滚动和其他更高级的功能.select2的下载地址为:https://selec ...

  7. hping3

    [root@zxserver104 ~]# hping3 -c -d -S -w -p --flood --rand-source 115.236.6x.19x 1. hping3 = 应用程序二进制 ...

  8. shell的查找与替换

    shell中做查找,grep是注定逃不开的. cat file | grep austin 就是在文档中查找Austin所在行. grep和正则表达式匹配之后,查找功能变得异常强大. 这个时候,要保证 ...

  9. Json常用的转换

    简单记录一下jquery里面的JSON.parse()和JSON.stringify()函数,和js中的eval()函数的用法 1,JSON.parse 函数(常用) 作用:将 JavaScript ...

  10. 关于点击ztree的节点将页面生成到easyui的新增选项卡(easyui-tabs)时,总是在浏览器中生成一个新的页面的问题

    最近的项目中用到了easyui,还有ztree菜单.在这里将我遇到的一些问题写出来算是做个笔记吧. 这是我头一次在博客园里分享代码,我的处女作,写的不好的地方还望各位见谅! 由于很久没有写过前台的东西 ...