无线传感网络(WSN)和通信技术在工业、智能家居、农业、医疗等领域有着广泛的应用。以下将针对常见的通信技术(如 RFID、ZigBee、Wi-Fi、蓝牙 4.0、UWB 等)进行详细介绍,并结合传感器的主流应用方案,通过案例分析和代码演示帮助理解其实现。
1. RFID(Radio Frequency Identification)
简介:
RFID 是一种通过无线电波进行自动识别的技术,主要由 RFID 标签和读写器组成。标签通常附加在物体上,用于唯一标识。
应用场景:
- 物流管理:仓储货物追踪。
- 门禁系统:身份验证。
- 医疗行业:患者身份跟踪。
案例:RFID 读取标签 ID(使用 MFRC522 模块)
硬件准备:
- Arduino 或 Raspberry Pi。
- MFRC522 RFID 读写器模块。
示例代码(Arduino):
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // Reset pin
#define SS_PIN 10 // Slave Select pin
MFRC522 rfid(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init RFID reader
Serial.println("RFID Reader initialized.");
}
void loop() {
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
return;
Serial.print("Card UID: ");
for (byte i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i], HEX);
Serial.print(" ");
}
Serial.println();
rfid.PICC_HaltA(); // Halt the card
}
2. ZigBee
简介:
ZigBee 是一种低功耗、低速率的无线通信协议,基于 IEEE 802.15.4 标准,支持网状网络拓扑结构。
应用场景:
- 智能家居:灯光控制、温湿度监测。
- 工业自动化:传感器网络。
案例:ZigBee 温湿度传感网络
硬件准备:
- XBee 模块。
- DHT11/DHT22 温湿度传感器。
示例代码(Arduino):
#include <DHT.h>
#define DHTPIN 2 // Pin where the sensor is connected
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
Serial.println("ZigBee Temperature and Humidity Node");
}
void loop() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
if (isnan(temp) || isnan(hum)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print(" *C, Humidity: ");
Serial.print(hum);
Serial.println(" %");
delay(2000); // Send data every 2 seconds
}
3. Wi-Fi(IEEE 802.11)
简介:
Wi-Fi 是一种基于 IEEE 802.11 的无线通信协议,具有高带宽和广泛兼容性,适用于需要较高数据速率的场景。
应用场景:
- 智能家居:摄像头、智能插座。
- 数据采集:传感器数据上传至云端。
案例:ESP32 采集传感器数据并上传至 MQTT Broker
硬件准备:
- ESP32 模块。
- 温湿度传感器(如 DHT11)。
示例代码(ESP32):
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const char* ssid = "your_wifi_ssid";
const char* password = "your_wifi_password";
const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
dht.begin();
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("WiFi connected");
// Connect to MQTT Broker
client.setServer(mqtt_server, 1883);
while (!client.connected()) {
if (client.connect("ESP32Client")) {
Serial.println("MQTT connected");
} else {
delay(1000);
}
}
}
void loop() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
if (!isnan(temp) && !isnan(hum)) {
String payload = String("{\"temperature\":") + temp + ",\"humidity\":" + hum + "}";
client.publish("home/sensor", payload.c_str());
Serial.println("Data sent: " + payload);
}
delay(2000);
}
4. 蓝牙 4.0(BLE, Bluetooth Low Energy)
简介:
蓝牙 4.0 是一种低功耗蓝牙协议,特别适合低数据量、短距离的设备通信。
应用场景:
- 可穿戴设备:心率监测器。
- 智能家居:门锁、灯泡控制。
案例:ESP32 BLE 发送传感器数据
硬件准备:
- ESP32 模块。
- 传感器(如光照传感器)。
示例代码(ESP32):
#include <BLEDevice.h>
#include <BLEServer.h>
BLEServer* pServer = nullptr;
BLECharacteristic* pCharacteristic = nullptr;
void setup() {
Serial.begin(115200);
BLEDevice::init("ESP32_BLE");
pServer = BLEDevice::createServer();
BLEService* pService = pServer->createService("12345678-1234-1234-1234-123456789abc");
pCharacteristic = pService->createCharacteristic(
"87654321-4321-4321-4321-cba987654321",
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_NOTIFY
);
pService->start();
}
void loop() {
int sensorValue = analogRead(34); // Example sensor
pCharacteristic->setValue(String(sensorValue).c_str());
pCharacteristic->notify();
delay(1000);
}
5. UWB(Ultra Wideband)
简介:
UWB 是一种高精度短距离通信技术,常用于定位和测距,精度可以达到厘米级。
应用场景:
- 室内定位:物流管理、资产追踪。
- 无线测距:无人机避障。
备注:
UWB 硬件及其 SDK(如 Decawave 的 DW1000)通常用于实现这类应用,具体代码取决于模块厂商提供的库。
总结
这些通信技术在不同场景中各有特点:
- RFID 适用于被动标识和识别。
- ZigBee 和 蓝牙 4.0 适合低功耗应用。
- Wi-Fi 和 以太网 适合需要高数据传输速率的场景。
- UWB 适合高精度定位。