唯倚社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2175|回复: 10

[学习教程] ESP8266设置为路由模式后手机控制继电器的开关配送源码

[复制链接]

137

主题

307

帖子

3811

积分

LV3

Rank: 3Rank: 3

积分
3811

最佳新人

发表于 2017-10-12 21:23:29 | 显示全部楼层 |阅读模式

轻松玩转社区

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 MartinGarrix 于 2017-11-6 12:18 编辑

ESP8266设置为路由模式后手机控制继电器的开关

本教程配送ESP8266代码和安卓APP应用源码
代码在下面回复可见百度云分享连接。
1.  实现原理
既然我们需要用手机去控制继电器的开关,那么我们在不外加单片机的情况下,只是单纯的在ESP8266模块上实现,没有用到ESP8266的AT指令,TCP通信。那么我们主要有一下几种方法:

一、将ESP8266作为服务器,用户的手机作为客户端。手机链接ESP8266WiFi模块,通过TCP通信,然后手机下发相应指令。当ESP266模块接收到相应指令时,那么对相应IO口进行控制,以达到控制继电器开关目的。

二、将ESP266作为客户端,用户的手机作为服务器。ESP8266模块去链接手机,通过TCP通信,然后手机下发相应指令。当ESP266模块接收到相应指令时,那么对相应IO口进行控制,以达到控制继电器开关目的。

原理基本一致,只是交换了双方位置,控制原理一样。当然我们用户也可以将手机改为电脑PC,原理是一样的。本教程采用第一种方法。那么为什么我们今天只介绍手机控制,而且我们的手机只是作为客户端,ESP8266作为服务器。首先我们用手机控制比电脑方便很多。假设我们采用第二种方法,ESP8266作为客户端去连接手机的话,用户是很难知道ESP8266是否连接上手机的,就算连上了也不知道有没有存在某个时段会不会失去连接。而用户的手机去连接ESP826模块的话,我们随时可以查看手机是否连接成功,是否掉线。
编译环境:ESP_IDE                  Eclipse
编译语言:C                             JAVA
硬件模块:WiFi继电器 WIOT-1模块
通信方式:TCP

2.ESP8266主要实现代码
首先我们打开我们的ESP8266工程,找到我们user_main.c找到我们的user_init函数,这个函数我们主要初始化了串口,并设置了ESP8266模块的工作函数。

@AB`3K5H6I8{~(JO229SSA9.png

这一句就是我们设置的工作方式。WiFi 3种工作模式: tation 模式 soft-AP模式 station+soft-AP模式,我们设置的就是soft-AP模式,也叫路由模式。在InitWifiSetting,函数中我们初始化了WIFI,设置了WiFi属性,WiFi名字叫WeiecnIOT-XXX,其中后面的XX为MAC地址。WiFi无密码。在此我们单独的对IO口操作就不做介绍了。我们再打开TCPServer.c文件夹,这是我们了最底层的TCP通信函数。可以看到我们在最上面定义了宏SERVER_LOCAL_PORT为60000,这是我们模块的服务器开放端口,这个是可以更改的值从0到65535。当然有些是可以用有些是不能随便乱用的,在这里我不做介绍,大家上网查资料。Tcp_server_recv_cb这是我们的ESP8266模块TCP接收函数void*arg : 回调函数的参数,网络传输结构体 espconn 指针。Pusrdata为TCP接收函数指针,length为TCP接收数据的长度。在这个函数你们我们主要对TCP发送过来的数据进行了判断处理,在相对应的控制指令我们对继电器进行了控制。

5FE6F3C4F84F4599B340415BEF5A0856.jpg

而在这里我们不得不提的就是我们的SendData函数,这是我们的ESP8266模块的TCP发送函数,调用它则可向客户端发送数据。它只有两个参数一个是数据一个是数据长度。还有一个TCPServerInit函数,这是TCP服务器初始化启动函数。其余我们不做介绍了,用户自己对照手册查看。我们在每一次对继电器进行操作我们都会向客户端发送数据,告诉客户端当前继电器状态,包括我们的按键函数也是这么写的,当按键按下对继电器操作一次,我们也会对客户端发送一次当前继电器状态。在我们用户的手机连上ESP8266模块刚连上那一刻我们客户端会向ESP8266请求一次当前继电器状态,此时我们接收到请求,我们也会向客户端发送当前继电器状态。
记住此固件IP地址为192.168.4.1,端口号为60000
3.安卓APP主要实现代码
首先我们打开安卓代码,此次代码主要基于Android4.0开发的。我们打开MainActivity.java在这里我们主要关注当我们用户输入完IP地址时,因为我们已经将端口号固定,当我们用户点击连接时是否向ESP8266下发指令请求当前继电器状态,还有我们当开关控件点击开或者关时我们是否向ESP8266下发指令改变继电器状态。下面我们附上两张主要实现代码。

146A40420CB746B4A97CCE86317A5CD4.jpg

C8C228B5C72747FE90DCB6028A0A2123.jpg

其余的我们不做详细介绍。本次安卓代码其中TcpSocketsClient.java为安卓APP主要TCP实现通信代码,这个为底层代码,用户最好不要进行修改。
下面附上一张安卓app界面图片

2.png

4.注意及说明
两份源码用户如果需要进行更改,最好只改控制的命令  上传继电器状态的指令  IO口  端口号  WiFi名称和波特率,其余为底层实现代码,如果用户没有一定开发能力最好不要进更改。如果用户的手机为Android7.0或者Android7.0以上那么我们打开安卓源码时Eclipse在你打开了手机的开发者模式是无法发现您的设备的。在调试代码时,用户可以打开串口口调试。代码在下面回复可见百度云分享连接。
游客,如果您要查看本帖隐藏内容请回复

137

主题

307

帖子

3811

积分

LV3

Rank: 3Rank: 3

积分
3811

最佳新人

 楼主| 发表于 2017-10-12 21:39:55 | 显示全部楼层
66666666666666
回复

使用道具 举报

1

主题

100

帖子

79

积分

版主

Rank: 7Rank: 7Rank: 7

积分
79
发表于 2017-10-12 21:51:23 | 显示全部楼层
根本停不下来
回复

使用道具 举报

3

主题

122

帖子

426

积分

版主

Rank: 7Rank: 7Rank: 7

积分
426
发表于 2017-10-12 22:12:17 | 显示全部楼层
第一次评论啊,好紧张啊,该怎么说啊,打多少字才显的有文采啊,这样说好不好啊,
回复

使用道具 举报

137

主题

307

帖子

3811

积分

LV3

Rank: 3Rank: 3

积分
3811

最佳新人

 楼主| 发表于 2017-10-12 23:25:35 | 显示全部楼层
人艰不拆
回复

使用道具 举报

21

主题

148

帖子

1167

积分

超级版主

Rank: 8Rank: 8

积分
1167

最佳新人

发表于 2017-10-13 00:14:37 | 显示全部楼层
请叫我雷锋
回复

使用道具 举报

3

主题

26

帖子

157

积分

VIP

积分
157
发表于 2017-10-29 12:27:25 | 显示全部楼层
非常不错的代码,很有参考价值
回复

使用道具 举报

1

主题

6

帖子

58

积分

LV1

Rank: 1

积分
58
发表于 2018-2-7 16:24:07 | 显示全部楼层

微博的常用语
[发帖际遇]: Maoyl 在论坛发帖时没有注意,被小偷偷去了 3 E币. 幸运榜 / 衰神榜
回复

使用道具 举报

1

主题

2

帖子

32

积分

LV1

Rank: 1

积分
32
发表于 2018-4-7 10:49:15 | 显示全部楼层
可以可以,很好的一份说明
回复

使用道具 举报

1

主题

3

帖子

53

积分

LV1

Rank: 1

积分
53
发表于 2018-5-26 23:00:58 | 显示全部楼层
参考666666666666666
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|weiecn ( 湘ICP备14002058号 )

GMT+8, 2018-11-20 23:44 , Processed in 0.065994 second(s), 13 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表