Android硬件通信之 WIFI通信
2023-05-01 07:01:49发布 浏览438次 信息编号:51876
友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
Android硬件通信之 WIFI通信
一、简介
1.1 随着网络的普及和通讯技术的发展,网络的传输速度越来越快,wifi技术也成为了移动设备最基本的配置。 我们可以通过wifi实现手机与手机之间的信息传输,当然也可以与其他任何带有wifi模块的设备进行传输。
1.2 wifi和蓝牙是我们生活中最常见、最常用的无线通信技术,当代的智能家居基本都是基于这两种协议来实现的。 我们可以比较以下两种技术,以便选择合适的通信方式:
比较的
蓝牙
无线上网
传输距离
短,一般在10m左右
长度,约100m-400m
传输功耗
低功耗,5mA
高功耗,10-50mA
传输速度
慢,1Mbps
高速,
安全性能
高、稳定传输
低,密码被破解
应用领域
可穿戴设备、智能家居等低功耗设备
工厂设备、打印机等大数据传输场景
1.3 随着物联网的发展,无线通信技术已经涉及到我们生活的每一个角落,比如
行业
智能家居
Wifi通信成为这些物联网通信的重要技术。 下面我们来看看wifi通信的详细步骤
wifi通信的两个步骤
2.1 wifi通信前,通信双方必须在同一个局域网内。 如果连接的是工厂机器,机器一般都带有wifi模块
建立连接有两种方式
方法一:让手机和机器的wifi都连接外网(就是你室内路由器的wifi),这样两台设备在同一个局域网内手机蓝牙上网 原理,可以连接通信
方法二:手机直连本机wifi模块网络。 这样有个缺点就是不能上网,只能用机器的wifi传输数据。
所以一般步骤是先连接机器的wifi模块网络,然后打开网络配置网页。 开启方法是在浏览器中输入wifi模块的IP地址(以wifi模块为例),通过网络配置页面连接外网,手机即可上网,请求服务器数据。 ,并能与机器通讯
2.2 创建IP、串口通讯地址,建立wifi连接
Runnable wifiConnectRunnable = new Runnable() {
@Override
public void run() {
try {
IP = PreferencesUtils.getString(App.getInstance(), PreferencesUtils.MODEL_IP, "192.168.2.1");
PORT = PreferencesUtils.getString(App.getInstance(), PreferencesUtils.MODEL_PORT, "9100");
socketAddress = new InetSocketAddress(IP, Integer.parseInt(PORT)); //获取sockaddress对象
socket = new Socket(); //实例化socket
socket.connect(socketAddress, 2000); //设置超时参数
Log.e(TAG, "wifi: " + "wifi连接成功");
handler.sendEmptyMessage(1);
} catch (Exception e) {
Log.e(TAG, "wifi: " + e.getMessage());
e.printStackTrace();
}
}
};
2.3 获取IO流
mOutputStream = socket.getOutputStream();
mInputStream = socket.getInputStream();
2.4 读取wifi信息
private class ReadThread extends Thread {
@Override
public void run() {
super.run();
while (!isInterrupted()) {
int size;
try {
byte[] buffer = new byte[512];
if (mInputStream == null) return;
size = mInputStream.read(buffer);
if (size > 0) {
String mReception=new String(buffer, 0, size);
String msg = mReception.toString().trim();
Log.e(TAG, "接收短消息:" + msg);
}
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}
2.5 发送wifi信息
private class WriteRunnable implements Runnable {
@Override
public void run() {
try {
String cmd="KZMT;";
Log.e(TAG, "发送短消息:" + cmd);
mOutputStream.write(cmd.getBytes());
mOutputStream.flush();
} catch (IOException e) {
}
}
}
2.6 断开wifi连接
/**
* 关闭Wifi的Socket连接
*/
public void closeWifiStream() {
try {
if (mOutputStream != null) {
mOutputStream.close();
mOutputStream = null;
}
if (mInputStream != null) {
mInputStream.close();
mInputStream = null;
}
if (socket != null) {
socket.close();
socket = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
2.7 总结
Wifi是局域网无线通信技术,所以通信设备必须在同一个局域网网段,然后保持长连接手机蓝牙上网 原理,获取IO流,通过IO流通道传输数据。
提醒:请联系我时一定说明是从星空网上看到的!