智能家居篇之---WIFI通讯(ESP8266)

                  智能家居篇之---WIFI通讯(ESP8266)

  智能家居所谓智能就是可以通过手机端来收集数据、分析数据、进而控制。那么要实现这样的一套系统,最重要也是最基本的要手机端与核心板建立通讯。那么下面我们来讲一讲如何建立通讯。

1、硬件部分:准备一个核心板,一个ESP8266wifi模块。

2、软件部分:一台手机。

首先我们来说一下这个ESP8266,这个在淘宝上非常便宜,10块左右,安信可的产品。这个WiFi模块已经做得非常的成熟,下面介绍一下它的基本使用,首先这个模块有三种模式:
1:STA 模式:ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。
2:AP 模式:ESP8266模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制。
3:STA+AP 模式:两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。

今天的实现用AP模式就够了,指令有下面这几个就够了:
1、设置wifi模式:AT+CWMODE=2
2、重启生效:AT+RST
3、启动多连接:AT+CIPMUX=1
4、建立server:AT+CIPSERVER=1
 

安卓端代码编写:

1、添加一个异步处理类:

/**
 * Created by Layne_Yao on 2017/5/12.
 * CSDN:http://blog.csdn.net/Jsagacity
 */
 
public class SendAsyncTask extends AsyncTask {
	
	//这里是连接ESP8266的IP和端口号,IP是通过指令在单片机开发板查询到,而端口号可以自行设置,也可以使用默认的,333就是默认的
	private static final String IP = "192.168.4.1";
	private static final int PORT = 333;
 
 
 
	private Socket client = null;
	private PrintStream out = null;
 
 
	@Override
	protected Void doInBackground(String... params) {
		String str = params[0];
		try {
			client = new Socket(IP, PORT);
			client.setSoTimeout(5000);
			// 获取Socket的输出流,用来发送数据到服务端
			out = new PrintStream(client.getOutputStream());
			out.print(str);
			out.flush();
 
			if (client == null) {
				return null;
			} else {
				out.close();
				client.close();
			}
 
		} catch (IOException e) {
			e.printStackTrace();
		}
 
		return null;
	}
	
}

2、手机端建立一个接受wifi模块传来得消息的服务器:

public class MobileServer implements Runnable {
	private ServerSocket server;
	private DataInputStream in;
	private byte[] receice;
 
	private Handler handler = new Handler();
 
	public MobileServer() {
	}
 
	public void setHandler(Handler handler) {
		this.handler = handler;
	}
 
	@Override
	public void run() {
 
		try {
			//5000是手机端开启的服务器的端口号,ESP8266进行TCP连接时使用的端口,而IP也是通过指令查询的联入设备的IP
			server = new ServerSocket(5000);
			while (true) {
				Socket client = server.accept();
				in = new DataInputStream(client.getInputStream());
				receice = new byte[50];
				in.read(receice);
				in.close();
				
				Message message = new Message();
				message.what = 1;
				message.obj = new String(receice);
				handler.sendMessage(message);
			}
 
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			server.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

3、布局


 
    
 
    

4、Mainactivity


 
    
 
    

5、权限


这样我们就能实现手机端发送指令到核心板,然后核心板再处理。

下面讲一下如何接收数据:

1、建立TCP连接:AT+CIPSTART=0,"TCP","192.168.4.2",5000(注意这时的ip是手机的ip)
2、发送信息:Sent to the Android

 

参考大神链接:https://blog.csdn.net/smxueer/article/details/78535426

 

你可能感兴趣的:(智能家居)