1. はじめに
1.1 ネットワークの普及と通信技術の発展に伴い、ネットワークの伝送速度はますます速くなり、Wi-Fi 技術はモバイル デバイスの最も基本的な構成にもなりました。Wi-Fiを介して携帯電話と携帯電話間の情報伝送を実現できますが、もちろん、Wi-Fiモジュールを備えた他のデバイスとの間で情報を伝送することもできます。
1.2 Wi-Fi と Bluetooth は、私たちの生活の中で最も一般的で一般的に使用されている無線通信テクノロジーであり、現代のスマート ホームは基本的にこれら 2 つのプロトコルに基づいて実装されています。適切な通信方法を選択するために、次の 2 つのテクノロジーを比較できます。
比較した | ブルートゥース | Wi-Fi |
伝送距離 | 短く、通常10m程度 | 長さ、約100m~400m |
送信電力消費量 | 低消費電力、5mA | 高消費電力、10-50mA |
転送速度 | 低速、1Mbps | 高速、300Mbps |
安全性能 | 高く安定した伝送 | 低い、パスワードがクラックされている |
応用分野 | ウェアラブルデバイスやスマートホームなどの低電力デバイス | 工場設備やプリンターなどのビッグデータ伝送シナリオ |
1.3 モノのインターネットの発展に伴い、無線通信技術は私たちの生活の隅々にまで関与しています。
業界
スマートホーム
こうしたモノのインターネット通信において、Wifi通信は重要な技術となっています。
Wi-Fi通信の2つのステップ
2.1 Wi-Fi 通信を行う前に、両方の通信当事者が同じローカル エリア ネットワークに存在する必要があります。接続が工場のマシンの場合、通常、マシンには Wi-Fi モジュールが装備されています。
接続を確立するには 2 つの方法があります
方法 1: 携帯電話とマシンの両方を外部ネットワーク (つまり、屋内ルーターの Wi-Fi) に接続し、2 つのデバイスが同じローカル エリア ネットワーク内にあり、接続して通信できるようにします。
方法 2: 携帯電話はマシンの Wi-Fi モジュール ネットワークに直接接続されますが、これにはインターネットにアクセスできず、マシンの Wi-Fi でのみデータを送信できるという欠点があります。
したがって、一般的な手順は、最初にマシンの Wi-Fi モジュール ネットワークに接続し、次にネットワーク構成 Web ページを開き、Wi-Fi モジュールの IP アドレス (http://192.168.0.1 など) を入力することです。ブラウザを使用してネットワーク構成ページを介して外部ネットワークに接続すると、携帯電話はインターネットをサーフィンしたり、サーバー データを要求したり、マシンと通信したりできます。
2.2 IP、シリアル通信アドレスを作成し、ソケット経由で Wi-Fi 接続を確立する
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 Wi-Fi メッセージを読む
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 Wi-Fi メッセージを送信する
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 Wi-Fiソケット接続を切断する
/**
* 关闭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 概要
Wi-Fi は LAN 無線通信技術であるため、通信デバイスは同じ LAN セグメント内に存在し、ソケット接続を維持し、IO ストリームを取得し、IO ストリーム チャネルを通じてデータを送信する必要があります。