android,手机控制各种设备的实现,~~物联网福利第一弹
2017-02-06 15:16
826 查看
走过路过不要错过,相信通过手机来控制各种设备大家已不再陌生,比如通过手机来控制家里的灯光、窗帘、空调、地暖等,更高级的比如亚马逊出的Echo,可以直接通过说话,发送命令比如:小黑开灯,小黑播放音乐等,简单说几句话来到达自己想要的效果, 那么他们都是如何实现的呢,作为一名专业的android开发者,我是不会把这些秘密告诉你们的,哈哈,除非大家觉得我很帅!!
ps:没办法,群众的眼光是雪亮啊,不告诉你们我都不好意思,呐!言归正传喽!!
一个设备控制另一个设备,首先要解决它们之间的通讯问题,市面上设备众多,这些设备也是很有脾气的,不是你手机随便给我发点什么,我都照做的,一定要按照一定的通讯协议,和特定的一些字符串发给我,我才会听话照做。首先来说通讯协议。
常用的协议一般就几种,1、网络通信(UDP,Tcp),2、Moudlebus通讯(485,232),3、ZigBee通讯,4、RF无线通讯,5、蓝牙通讯等。
本章我们着重讨论下大家比较熟悉的网络通讯,Moudlebus通讯会在下一篇为大家介绍,这两个通讯方式比较常用。
首先我们来看看UDP和TCP的特性,TCP和UDP是TCP/IP协议中的两个传输层协议,它们使用IP路由功能把数据包发送到目的地,起到通道的作用。 ps:http为应用层协议,大家不要弄混哦!
TCP协议需要三次握手通信成功后进行建立连接,安全可靠,可控制,接收和发送成功,会有明确的判定。而UDP协议是直接发送,不会判断是否接收和发送成功。
好了,铺垫这么多终于可以上代码了,首先我们来个TCP通讯的代码:
跟指定ip及端口号建立连接
建立tcp通讯长连接
//
buffer为接收到的数据。
大概逻辑是这样,但为了保证程序的稳定性,我们需要增加很多判断,比如最基本的空判断等。
UDP通讯代码直接上一个项目中封装的代码块:
代码大致就是这样,具体数据的发送以及具体数据的接收,需要根据设备厂家给的协议来定,先看协议,根据协议来搞代码,来同志们,我们放松下,跟我唱,我是一只粉刷匠,粉刷本领强,我要把我的新房子,刷的变了样。嘿!!
thank you!!
ps:没办法,群众的眼光是雪亮啊,不告诉你们我都不好意思,呐!言归正传喽!!
一个设备控制另一个设备,首先要解决它们之间的通讯问题,市面上设备众多,这些设备也是很有脾气的,不是你手机随便给我发点什么,我都照做的,一定要按照一定的通讯协议,和特定的一些字符串发给我,我才会听话照做。首先来说通讯协议。
常用的协议一般就几种,1、网络通信(UDP,Tcp),2、Moudlebus通讯(485,232),3、ZigBee通讯,4、RF无线通讯,5、蓝牙通讯等。
本章我们着重讨论下大家比较熟悉的网络通讯,Moudlebus通讯会在下一篇为大家介绍,这两个通讯方式比较常用。
首先我们来看看UDP和TCP的特性,TCP和UDP是TCP/IP协议中的两个传输层协议,它们使用IP路由功能把数据包发送到目的地,起到通道的作用。 ps:http为应用层协议,大家不要弄混哦!
TCP协议需要三次握手通信成功后进行建立连接,安全可靠,可控制,接收和发送成功,会有明确的判定。而UDP协议是直接发送,不会判断是否接收和发送成功。
好了,铺垫这么多终于可以上代码了,首先我们来个TCP通讯的代码:
跟指定ip及端口号建立连接
建立tcp通讯长连接
Socket socket=null; socket = new Socket(mainIP, mainPort); socket.setSoTimeout(socketTimeoutMS); os = socket.getOutputStream();
//通过os.write发送命令
os.write(“指定命令字符”);建立while循环,接收数据
//
while (判断条件){ InputStream is = socket.getInputStream(); // ͨ��socket���õ������������ֽ����� byte[] buffer = new byte[256]; int len = 0; len = is.read(buffer);
buffer为接收到的数据。
大概逻辑是这样,但为了保证程序的稳定性,我们需要增加很多判断,比如最基本的空判断等。
UDP通讯代码直接上一个项目中封装的代码块:
//
static DatagramSocket datagramsocket; public class Udpclient extends AsyncTask<Void, Void, Void> { boolean running = true; private static final int DATA_LEN = 100; @Override protected Void doInBackground(Void... params) { run(); // TODO Auto-generated method stub return null; } public boolean isconnet() { return running; } public void close() { running = false; } public void send(byte[] data){ InetAddress inetAdd; try { inetAdd = InetAddress.getByName(IP); // if (data != null) { System.out.println("客户端向服务器端发送数据--:" + new String(data, US_ASCII)); DatagramPacket sendPacket = new DatagramPacket( data, data.length, inetAdd, 端口号); if (datagramsocket == null) { datagramsocket = new DatagramSocket(); datagramsocket.setSoTimeout(6000); } datagramsocket.send(sendPacket); data = null; } }catch(SocketException e){ data = null; } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); data = null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); data = null; } } public void run() { // TODO Auto-generated method stub // DatagramSocket ds = null; // InetSocketAddress sa = new InetSocketAddress(host, port); try { datagramsocket = new DatagramSocket(端口号); } catch (SocketException e) { e.printStackTrace(); } while (running) { Log.e("aaa", "aaaaa"); try { // 定义接收网络数据的字节数组 byte[] inBuff = new byte[DATA_LEN]; // 以指定字节数组创建准备接受数据的DatagramPacket对象 DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length); datagramsocket.receive(inPacket); String result = new String(inPacket.getData(), 0, inPacket.getLength()); 98f0 Log.e("打印返回的值", result); } catch (ClosedSelectorException e) { running = false; } catch (Exception e) { e.printStackTrace(); continue; } try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
代码大致就是这样,具体数据的发送以及具体数据的接收,需要根据设备厂家给的协议来定,先看协议,根据协议来搞代码,来同志们,我们放松下,跟我唱,我是一只粉刷匠,粉刷本领强,我要把我的新房子,刷的变了样。嘿!!
thank you!!
相关文章推荐
- 一个嵌入式web服务器项目,实现通过手机Android App实现对嵌入式设备的控制
- 你想跨互联网远程调试Android设备吗,推荐一个远程控制手机的免费软件
- android物联网初步,利用手机蓝牙与单片机通信,实现led灯开关和定时
- 《连载 | 物联网框架ServerSuperIO教程》- 11.实现设备(驱动)与设备(驱动)交互和级联控制。注:设备驱动模拟金三与普京的对话
- [置顶] Android 局域网通信并实现控制设备的灯光
- 这个开源项目展示了如何实现一个横跨各种Android平台的音乐播放器,包括手机,平板,汽车,手表,电视等。Google官方推出,跨平台开发必看项目。
- 【手机变身无线音箱-WIFI流媒体传输】--音乐在PC和手机间双向播放-详解Android DLNA使用-使用DLNA实现不同设备间媒体共享
- Android杂谈--通过DDMS实现电脑与Android设备(如手机,平板)的网络连接、截图
- 实现手机app控制威联通QNAP的NAS设备中Aria2启动运行
- 如何实现CAN总线设备无线连接Android手机
- 获取Android设备的方向,Sensor和SensorManager实现手机旋转角度
- Python实现利用socket连接adb控制android设备
- 我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(一)PC服务器端
- android 蓝牙通讯实现手机蓝牙的开启,并扫描附近可见的蓝牙设备
- 《连载 | 物联网框架ServerSuperIO教程》- 11.实现设备(驱动)与设备(驱动)交互和级联控制。
- Android推送通知的实现--通过 WebSphere MQ 遥测传输 (MQTT) 将 Android 手机引入物联网
- 在apk 中执行Runtime.getRuntime().exec adb shell各种命令远程控制其他Android设备(一)
- 我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(三)Android客户端功能实现
- Android手机控制PC关机,重启等操作(一)服务端实现
- 物联网平台机智云Android开源框架入门之旅(三)分析设备详情界面的中如何发送各种指令到云端。