F FisherHub Docs

无线通信

无线通信技术全景

智能硬件产品的无线连接能力决定了它的使用场景和体验。不同无线技术覆盖的距离、带宽、功耗差异巨大,选错通信方案是项目返工的主要原因之一。

核心指标对比

技术频段速率距离功耗成本网络拓扑
WiFi 4/5/62.4/5GHz最高 1Gbps50-100m 室内高(100-500mA)$1-3星型
Bluetooth 5.x2.4GHz最高 2Mbps10-100m低(1-10mA)$0.5-2星型/ mesh
LoRaSub-1GHz0.3-50kbps2-15km极低(10-50mA)$2-5星型
NFC13.56MHz106-424kbps<10cm被动(无电池)$0.3-1点对点
Zigbee2.4GHz250kbps10-100m$1-3Mesh
UWB3.1-10.6GHz最高 27Mbps10-30m$3-8点对点

WiFi

适用于需要高带宽或直连云端的设备。智能家居中的摄像头、音箱、家电几乎都用 WiFi。

优点:不依赖网关,直接连接路由器就能上云;速率高,支持 OTA 固件升级。 缺点:功耗高,配对体验差,对路由器质量有依赖。

// ESP32 WiFi 连接示例 (ESP-IDF)
#include "esp_wifi.h"
#include "esp_event.h"

void wifi_init_sta(void) {
    esp_netif_t *netif = esp_netif_create_default_wifi_sta();
    
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);
    
    esp_event_handler_instance_t instance_any_id;
    esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID,
                                        wifi_event_handler, NULL, &instance_any_id);
    
    wifi_config_t wifi_config = {
        .sta = {
            .ssid = CONFIG_WIFI_SSID,
            .password = CONFIG_WIFI_PASSWORD,
        },
    };
    esp_wifi_set_mode(WIFI_MODE_STA);
    esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
    esp_wifi_start();
    esp_wifi_connect();
}

void wifi_event_handler(void* arg, esp_event_base_t base,
                         int32_t event_id, void* data) {
    if (event_id == WIFI_EVENT_STA_GOT_IP) {
        ip_event_got_ip_t* event = (ip_event_got_ip_t*) data;
        printf("获取IP: " IPSTR "\n", IP2STR(&event->ip_info.ip));
    }
}

配对方案

  • 蓝牙辅助配网 — 设备通过 BLE 广播,App 扫描后发送 WiFi 凭据
  • SmartConfig — App 加密 SSID/密码到 UDP 包中广播
  • WPS — 按键配对,安全性较低
  • SoftAP — 设备自己发 WiFi,手机连上去配置

BLE (Bluetooth Low Energy)

BLE 已经取代经典蓝牙成为 IoT 的主流短距无线方案。

优点:功耗极低,手机原生支持,配对体验好。 缺点:速率有限,距离不如 WiFi。

# MicroPython BLE 广播
import bluetooth
import struct
import time

ble = bluetooth.BLE()
ble.active(True)

# 配置广播数据:设备名称 + 温湿度
def advertise(temp, hum):
    name = b"ESP32_Sensor"
    adv_data = struct.pack(
        '<HB', 
        0x1234,   # 公司ID
        0x02      # 数据类型标识
    ) + struct.pack('<ff', temp, hum)
    
    ble.gap_advertise(
        100,  # 广播间隔(ms)
        adv_data + name
    )

while True:
    advertise(25.3, 60.1)
    time.sleep(0.1)
// ESP32 BLE 服务器 (Arduino)
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>

BLEService *service;
BLECharacteristic *tempChar;

void setup_ble() {
    BLEDevice::init("SmartSensor");
    BLEServer *server = BLEDevice::createServer();
    
    service = server->createService("180A");
    tempChar = service->createCharacteristic(
        "2A1C",
        BLECharacteristic::PROPERTY_READ | 
        BLECharacteristic::PROPERTY_NOTIFY
    );
    
    service->start();
    
    BLEAdvertising *adv = BLEDevice::getAdvertising();
    adv->addServiceUUID("180A");
    adv->start();
}

void loop() {
    float temp = read_temperature();
    tempChar->setValue(temp);
    tempChar->notify();  // 通知客户端更新
    delay(10000);
}

BLE Mesh

BLE Mesh 基于节点中继转发,能覆盖整个建筑。适合智能灯控等大规模设备网络。

LoRa 与 LoRaWAN

LoRa 提供公里级的低速率通信,是户外传感器网络的理想选择。

优点:超远距离,穿墙能力极强,单网关可覆盖整个小区。 缺点:速率极低,不能传音视频;需要 LoRaWAN 网关。

# LoRa 节点发送 (PyCom LoPy + MicroPython)
from network import LoRa
import socket
import time

lora = LoRa(mode=LoRa.LORAWAN, region=LoRa.AS923)

# 连接网关(OTAA 入网)
app_eui = bytes([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
app_key = bytes([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])

lora.join(activation=LoRa.OTAA, auth=(app_eui, app_key), timeout=0)
while not lora.has_joined():
    time.sleep(2.5)

s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
s.setsockopt(socket.SOL_LORA, socket.SO_DR, 5)  # 速率参数
s.setblocking(False)

# 发送数据
s.send(bytes([0x01, 0x02, 0x03]))

NFC (Near Field Communication)

NFC 基于 RFID 技术,通信距离在 10cm 以内。应用场景包括:手机碰一碰配网、产品防伪验证、制造阶段写入序列号和密钥。NFC 芯片通常不需要电池,由读卡器电磁场供电。

选型决策树

  • 直连云服务器 → WiFi 或 4G Cat.1
  • 与手机通信(大流量) → WiFi 或 BLE 2M PHY
  • 与手机通信(小数据) → BLE
  • 户外城市远距离 → LoRaWAN / NB-IoT
  • 野外远距离 → LoRa / 卫星
  • 近场配对/标签 → NFC

常见无线调试问题

信号差:用频谱仪或手机 WiFi Analyzer 检查信道占用情况,天线远离金属和地平面。连接不稳定:检查供电是否充足(WiFi 发射时电流峰值可能超过 500mA),检查软件中的重连机制。功耗高:检查是否频繁发送小包数据(尽量批量化发送),确认关闭了不必要的广播模式。

小结

无线选型的核心是匹配带宽、距离和功耗。追求用户体验用 WiFi/BLE,追求覆盖用 LoRa,追求低成本和近场用 NFC。不管选哪种方案,都需要尽早做无线性能测试,不要等到产品定型了才发现信号覆盖不达标。