智能家居简单实现—使用ESP8266简单实现和APP通讯

智能家居简单实现—使用ESP8266简单实现和APP通讯前段时间,公司利用ESP8266这个WiFi模块,做了好多小产品。从手机APP直连这个ESP8266进行通讯,再到实现远程控制。中间实现过程磕磕碰碰,虽然这方面已经做得非常成熟,但是网上的资料少之又少。现在把实现方式展示出来,同时也算是做一个笔记。首先这里要实现的是Android端的APP直连ESP8266进行双向通讯。如果想了解Android端的APP远程连接与ESP8266…

大家好,又见面了,我是你们的朋友全栈君。

前段时间,公司利用 ESP8266 这个WiFi模块,做了好多小产品。从手机 APP 直连这个 ESP8266 进行通讯,再到实现远程控制。中间实现过程磕磕碰碰,虽然这方面已经做得非常成熟,但是网上的资料少之又少。现在把实现方式展示出来,同时也算是做一个笔记。

首先这里要实现的是Android端的APP直连ESP8266进行双向通讯。

如果想了解Android端的APP远程连接与ESP8266进行双向通信的,实现真正的智能家居,可以参与这场Chat:智能家居远程控制,实现APP与ESP8266远程通信

首先我们来说一下这个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

另外还有非常多的指令可以修改这个模块的参数,甚至还可以修改里面的程序重新烧录,更多的详情就参考安信可的官网。这个就需要电子比较厉害的人才会适合了,我是Android开发的,所以这方面不太了解,还望海涵。

这是设备:

智能家居简单实现---使用ESP8266简单实现和APP通讯

接下来通过串口发送指令开启ESP8266的WiFi:

智能家居简单实现---使用ESP8266简单实现和APP通讯
 

发送完这四个指令之后,打开手机就可以看到相应的WiFi开启了(这个WiFi名给我改过):

智能家居简单实现---使用ESP8266简单实现和APP通讯

好了,硬件准备完毕,接下来我们准备APP软件,针对Android端的。新建一个Android项目,项目结构:

智能家居简单实现---使用ESP8266简单实现和APP通讯

添加一个异步处理类:

/**
 * Created by Layne_Yao on 2017/5/12.
 * CSDN:http://blog.csdn.net/Jsagacity
 */

public class SendAsyncTask extends AsyncTask<String, Void, Void> {
	
	//这里是连接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;
	}
	
}

在手机端建立一个作为接受ESP8266发送的消息的服务器:

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();
		}
	}
}

布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.itman.connectesp8266.MainActivity" >

    <TextView
        android:id="@+id/tv_content"
        android:layout_width="match_parent"
        android:layout_height="25dp"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:background="#fe9920"
        android:gravity="center"
        android:text="接收的内容" />

    <Button
        android:id="@+id/bt_send"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp"
        android:text="发送" />

    <TextView
        android:id="@+id/tv_send_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/bt_send"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="33dp"
        android:text="发送的内容" />

</RelativeLayout>

最后是MainActivity:

public class MainActivity extends ActionBarActivity implements OnClickListener {
	private TextView tv_content, tv_send_text;
	private Button bt_send;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		InitView();

		//开启服务器
		MobileServer mobileServer = new MobileServer();
		mobileServer.setHandler(handler);
		new Thread(mobileServer).start();

	}

	private void InitView() {
		tv_content = (TextView) findViewById(R.id.tv_content);
		tv_send_text = (TextView) findViewById(R.id.tv_send_text);
		bt_send = (Button) findViewById(R.id.bt_send);

		bt_send.setOnClickListener(this);

	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.bt_send:
			String str = "Sent to the ESP8266";
			new SendAsyncTask().execute(str);
			tv_send_text.setText(str);
			break;
		}

	}

	Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 1:
				tv_content.setText("WiFi模块发送的:" + msg.obj);
				Toast.makeText(MainActivity.this, "接收到信息", Toast.LENGTH_LONG)
						.show();
			}
		}
	};

}

最后不要忘了添加网路权限:

<uses-permission android:name="android.permission.INTERNET"/>

运行到真机,确保手机连接上ESP8266的WiFi,就可以进行手机发送信息到ESP8266了。手机APP发送过去的:

智能家居简单实现---使用ESP8266简单实现和APP通讯

ESP8266接收到的:

智能家居简单实现---使用ESP8266简单实现和APP通讯

接下来是ESP8266发送数据到APP。首先ESP要使用到的指令有:

1、建立TCP连接:AT+CIPSTART=0,”TCP”,”192.168.4.2″,5000
2、确定发送数据的长度:AT+CIPSEND=0,19
3、发送信息:Sent to the Android

操作指令:

智能家居简单实现---使用ESP8266简单实现和APP通讯

APP端接受到的信息:

智能家居简单实现---使用ESP8266简单实现和APP通讯

以上是简单的实现APP和ESP8266直连通讯的实现。

如果有人不会的,那就直接去下面链接下载apk来安装吧,里面有apk和整个项目的了,有稍稍改动,但变化不大。由于已经从那家公司离职多年,所以demo没有测试,望周知。

链接: 百度网盘 请输入提取码 密码: wjsw

如果想要实现远程控制,过程是比较繁杂的,但是并不复杂。

这里只简单的说明一下大致的实现方式:

1、要实现远程控制就必须得租用一个服务器,当然自己电脑也可以作为服务器,就是需要配置。最简单的方式是租用云服务器,比如阿里云的ECS,如果是学生,还有学生价。

2、接下来是最麻烦的步骤:

1)手机发数据到云服务器,这个不用多说了,使用json数据的网络通信;

2)接着就是云服务器继续把手机发送过来的转发的ESP8266,而云服务器和ESP8266之间的通讯是需要使用TCP长连接的。因为ESP8266这边的IP是会变化的所以只能使用长连接;

3)ESP8266发数据到云服务器就不用再多说了,就第2点中的长连接。但是云服务器怎么推送数据到APP呢?答案也是长连接的,这里可以使用别人集成好的框架mina。

以上就是远程控制的大致过程要点,想要实现就各自去完成了。当初我还是在别的平台问人问到的实现方案,网上根本没有相应的资料,或者是方案。以上的实现方案虽然有点繁杂,但是并不复杂,慢慢实现是没有很大难度的。

如果想直接学习并实现的,可以参与这场Chat:智能家居远程控制,实现APP与ESP8266远程通信

如果是想学习Android开发基础的,可以看一下这篇文章:简单的入门Android开发基础

                                                                智能家居简单实现---使用ESP8266简单实现和APP通讯

关注个人公众号「技术人的日常」,关注后回复:安卓基础,即可获取Android基础入门学习资料。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131015.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 学计算机男生喜欢的礼物,十大00后男生喜欢的礼物大集合

    学计算机男生喜欢的礼物,十大00后男生喜欢的礼物大集合每个时代都有它流行的东西,自然不同时代的人喜欢的东西也不一样。00后的男生作为二十一世纪的第一批年轻男士,自然也有他们喜欢的东西。在这主要为大家盘点一些00后男生喜欢的礼物,每一件都充满创意和新奇的元素,送给00后男生不会拒绝。NO.1男士钛钢军牌00后男生并不是娇弱的妈宝男,他们也有血性方刚的一面,自然他们也想表现出霸气的一面。这款男士钛钢刻字军牌,美国大兵同款军牌项链,可以定制文字和照片,0…

    2022年7月25日
    27
  • JS前端去掉emoji表情和Java后台处理emoji表情方法

    莫非定律 : 任何事情都没表面看去来那么简单!emoji表情在项目中使用,因为其特殊的编码格式,经常导致在网络传输、编解码、以及数据入库中带来一些问题!下面简单介绍使用Js和java处理移除emoji表情!Emoji 表情的相关基础内容介绍,请读者自行在网上查找资料!前端JS代码//emojob编码集,因为emoji表情在不断地增加,下面的reg可能在未来会不能满足…

    2022年2月27日
    251
  • pip安装scrapy失败_python的scrapy框架的安装

    pip安装scrapy失败_python的scrapy框架的安装错误如图所示,running setup.py install for Twisted…..errorTwisted依赖库安装报错,重新下载手动安装一下下载网址:https://www.lfd.uci.edu/~gohlke/pythonlibs注意:看下安装的python是什么版本,我安装的python 3.9.0,就下载cp39,64位的下载安装的版本不对,就会报:Twisted-20.3.0-cp38-cp38-win_amd64.whl is not a support…

    2022年8月18日
    10
  • 激光slam_高德导航术语理解

    激光slam_高德导航术语理解ROS激光SLAM导航理解注:最近学习ROS的导航,需要理清ROS的SLAM、环境感知(costmap)、与导航算法。为防止自己忘记,将觉得有价值的内容摘抄于此。文章目录ROS激光SLAM导航理解激光SLAM基本原理基本原理1、占据栅格地图基本原理2、导航基本原理SLAM与导航系统框架:激光SLAM系统框架建图系统框架导航系统框架`move_base`中的使用运用`plugins`Cost…

    2022年8月23日
    12
  • 仪器保养 | 安捷伦DSO-X 2002A示波器自检测/自校准

    仪器保养 | 安捷伦DSO-X 2002A示波器自检测/自校准安捷伦DSO-X2002A示波器自检测、自校准首先上电开机1.按下Utility-服务-Diagnostics-硬件本机自检-前面板自检2.按下Utility-服务-Calibration–按下后盖CAL-开始用户校准-根据提示完成操作感兴趣的话就跟安迪一起来学习吧~仪器保养|安捷伦DSO-X2002A示波器自检测/自校准…

    2022年10月11日
    3
  • 摘星-上升篇

    以下内容均来自阳光占星,如有冒犯,告知删除!上升金牛——歌者的哼唱有这么一类人,可能有着细致柔和的五官,容易发胖的体质以及坚定的眼神。有点害羞与腼腆;喜欢哼唱着小曲,不喜欢拥挤的人群而喜欢宁静的自然。这样的一群人就是生活在我们身边的上升金牛。他们喜欢舒缓的生活节奏,喜欢按照自己的节奏去一点点的完成计划,不喜欢突如其来的变动扰乱了自己的生活。金牛是一个喜欢稳定和安逸的星座,并且由于金牛的守护星为金星,上升金牛也诞生出更多的艺术色彩。但上升金牛的审美一直被吐槽,旁人就必须忍受他那万年…

    2022年4月6日
    75

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号