Skip to content

Wi-Fi 模组产品概览

Wi-Fi 技术演进

标准别名频段最高速率关键技术
802.11bWi-Fi 12.4GHz11MbpsDSSS
802.11gWi-Fi 32.4GHz54MbpsOFDM
802.11nWi-Fi 42.4/5GHz600MbpsMIMO
802.11acWi-Fi 55GHz3.5GbpsMU-MIMO, 波束赋形
802.11axWi-Fi 62.4/5GHz9.6GbpsOFDMA, BSS Coloring
802.11axWi-Fi 6E6GHz9.6Gbps新增 6GHz 频段

移远 Wi-Fi 产品

FC41D(Wi-Fi 6,主推)

参数规格
芯片联发科 MT7921
Wi-Fi 标准802.11ax(Wi-Fi 6)
频段2.4GHz + 5GHz 双频
最高速率2.4G: 574Mbps / 5G: 1201Mbps
蓝牙BT 5.0
接口PCIe / USB / SDIO
工作温度-40°C ~ +85°C
封装M.2 2230

FC20(Wi-Fi 5,经济型)

参数规格
芯片联发科 MT7668
Wi-Fi 标准802.11ac(Wi-Fi 5)
频段2.4GHz + 5GHz
最高速率2.4G: 300Mbps / 5G: 433Mbps
蓝牙BT 4.2
接口USB / SDIO

Wi-Fi 6 核心技术

OFDMA(正交频分多址)

Wi-Fi 6 引入 OFDMA,允许多个设备同时传输:

Wi-Fi 5(OFDM):
  一次只能服务一个设备
  其他设备等待
  
Wi-Fi 6(OFDMA):
  将信道分成多个 RU(资源单元)
  多个设备同时传输
  
  优势:
  - 低时延(不需要等待)
  - 高效率(减少信道竞争)
  - 适合密集设备场景(IoT)

BSS Coloring(BSS 着色)

解决密集部署时的同频干扰:

传统方式:
  检测到任何 Wi-Fi 信号就退避
  导致信道利用率低
  
BSS Coloring:
  为每个 BSS(基本服务集)分配颜色标识
  只有相同颜色的信号才需要退避
  不同颜色的信号可以并发传输
  
  效果:密集部署场景吞吐量提升 30-40%

Target Wake Time(TWT)

Wi-Fi 6 的省电机制,专为 IoT 设计:

TWT 工作原理:
  AP 与设备协商唤醒时间
  设备在约定时间才唤醒接收数据
  其余时间深度睡眠
  
  功耗对比:
  Wi-Fi 5 待机:约 10-20mA
  Wi-Fi 6 TWT:约 1-5mA
  
  适合场景:
  - 智能家居传感器
  - 工业 IoT 设备
  - 可穿戴设备(Wi-Fi 版)

Linux 驱动开发

FC41D 在 Linux 上的使用

bash
# 查看 Wi-Fi 接口
ip link show
# wlan0: <BROADCAST,MULTICAST> mtu 1500 ...

# 扫描可用网络
iw dev wlan0 scan | grep SSID

# 连接 Wi-Fi(使用 wpa_supplicant)
cat > /etc/wpa_supplicant.conf << 'EOF'
network={
    ssid="MyWiFi"
    psk="MyPassword"
    key_mgmt=WPA-PSK
}
EOF

wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
dhclient wlan0

# 查看连接状态
iw dev wlan0 link

工业 Wi-Fi 配置(静态 IP)

bash
# /etc/network/interfaces
auto wlan0
iface wlan0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1
    wpa-ssid "IndustrialWiFi"
    wpa-psk "SecurePassword123"
    dns-nameservers 8.8.8.8

工业 Wi-Fi 方案

工厂 Wi-Fi 覆盖设计

工业 Wi-Fi 特殊要求:
  - 金属环境(反射、遮挡)
  - 移动设备(AGV、叉车)
  - 高可靠性(生产不能中断)
  - 漫游切换(设备移动时无缝切换)

频段选择:
  5GHz:速率高,干扰少,但穿透力弱
  2.4GHz:覆盖广,穿透力强,但干扰多
  
  工厂推荐:5GHz 为主,2.4GHz 补盲

AP 部署密度:
  普通仓库:每 500m² 一个 AP
  密集金属环境:每 200m² 一个 AP
  
漫游协议:
  802.11r(快速 BSS 切换):切换时间 < 50ms
  802.11k(邻居报告):辅助设备选择最佳 AP

AGV 小车 Wi-Fi 方案

python
# AGV 小车 Wi-Fi 连接管理
import subprocess
import time
import logging

class AGVWiFiManager:
    """AGV 小车 Wi-Fi 连接管理,支持无缝漫游"""
    
    def __init__(self, interface="wlan0"):
        self.interface = interface
        self.current_ap = None
        self.rssi_threshold = -70  # 低于此值触发漫游
    
    def get_current_rssi(self):
        """获取当前信号强度"""
        result = subprocess.run(
            ["iw", "dev", self.interface, "link"],
            capture_output=True, text=True
        )
        
        for line in result.stdout.split('\n'):
            if 'signal:' in line:
                rssi = int(line.split('signal:')[1].split('dBm')[0].strip())
                return rssi
        return -100
    
    def scan_aps(self):
        """扫描可用 AP"""
        result = subprocess.run(
            ["iw", "dev", self.interface, "scan"],
            capture_output=True, text=True
        )
        
        aps = []
        current_ap = {}
        
        for line in result.stdout.split('\n'):
            if 'BSS' in line and 'on' in line:
                if current_ap:
                    aps.append(current_ap)
                current_ap = {'bssid': line.split()[1]}
            elif 'SSID:' in line:
                current_ap['ssid'] = line.split('SSID:')[1].strip()
            elif 'signal:' in line:
                current_ap['rssi'] = float(line.split('signal:')[1].split('dBm')[0].strip())
        
        return sorted(aps, key=lambda x: x.get('rssi', -100), reverse=True)
    
    def roam_if_needed(self, target_ssid):
        """必要时触发漫游"""
        current_rssi = self.get_current_rssi()
        
        if current_rssi < self.rssi_threshold:
            logging.warning(f"RSSI {current_rssi} dBm 低于阈值,触发漫游")
            
            # 扫描更好的 AP
            aps = self.scan_aps()
            better_aps = [ap for ap in aps 
                         if ap.get('ssid') == target_ssid 
                         and ap.get('rssi', -100) > current_rssi + 10]
            
            if better_aps:
                best_ap = better_aps[0]
                logging.info(f"漫游到 AP: {best_ap['bssid']} (RSSI: {best_ap['rssi']} dBm)")
                
                # 触发 802.11r 快速漫游
                subprocess.run([
                    "wpa_cli", "-i", self.interface,
                    "roam", best_ap['bssid']
                ])
    
    def monitor(self, target_ssid, interval=5):
        """持续监控并在需要时漫游"""
        while True:
            self.roam_if_needed(target_ssid)
            time.sleep(interval)

褚成志的笔记