Skip to content

Cat.1 典型应用场景

场景一:智能 POS 机

需求分析

业务需求:
  - 支付交易:每笔交易数据量 < 10KB,要求 < 3秒完成
  - 语音通话:客服热线、语音提示
  - 远程管理:固件升级、参数配置
  - 稳定性:7×24小时不间断运行

技术需求:
  - 速率:1Mbps 以上(Cat.1 的 10Mbps 绰绰有余)
  - 时延:< 100ms
  - 语音:VoLTE 支持
  - 功耗:有线供电,功耗不敏感

推荐方案

模组:EC200U-CN(Cat.1 bis,单天线,低成本)
SIM:物联网专用 SIM(运营商物联网套餐)
天线:内置 FPC 天线(节省空间)
接口:UART(AT 指令控制)

关键代码示例

c
// POS 机 Cat.1 模组初始化
void cat1_init(void) {
    // 等待模组启动
    delay_ms(5000);
    
    // 配置 APN
    at_send("AT+CGDCONT=1,\"IP\",\"cmnet\"\r\n");
    
    // 激活数据连接
    at_send("AT+CGACT=1,1\r\n");
    
    // 配置 TCP 连接(支付服务器)
    at_send("AT+QIOPEN=1,0,\"TCP\",\"pay.example.com\",443,0,1\r\n");
}

// 发起支付请求
int pos_payment(const char *order_data, int len) {
    char cmd[64];
    snprintf(cmd, sizeof(cmd), "AT+QISEND=0,%d\r\n", len);
    at_send(cmd);
    // 等待 > 提示符
    at_wait_prompt();
    // 发送支付数据
    at_send_raw(order_data, len);
    // 等待响应
    return at_wait_response("SEND OK", 5000);
}

场景二:共享单车

系统架构

┌─────────────────────────────────────────┐
│              共享单车终端                 │
│                                         │
│  ┌──────────┐  ┌──────────┐  ┌───────┐ │
│  │ Cat.1 模组│  │ GNSS 模组│  │ 蓝牙  │ │
│  │ EC200U   │  │ LC29H    │  │ BLE   │ │
│  └──────────┘  └──────────┘  └───────┘ │
│                                         │
│  ┌──────────┐  ┌──────────┐  ┌───────┐ │
│  │ MCU 主控  │  │ 电子锁   │  │ 电池  │ │
│  │ STM32    │  │          │  │ 管理  │ │
│  └──────────┘  └──────────┘  └───────┘ │
└─────────────────────────────────────────┘
              ↓ Cat.1 网络
┌─────────────────────────────────────────┐
│              共享单车云平台               │
│  用户管理 / 订单管理 / 位置追踪 / 运维   │
└─────────────────────────────────────────┘

功能实现

python
# QuecPython 实现(EC600M)
import utime
import gnss
import dataCall
import request

class BikeController:
    def __init__(self):
        self.bike_id = "BIKE_001"
        self.server_url = "https://api.bikeshare.com"
        self.lock_status = "locked"
    
    def get_location(self):
        """获取 GPS 位置"""
        gnss.init()
        gnss.on(1)
        utime.sleep(30)  # 等待定位
        location = gnss.getLocation()
        return {
            "lat": location[0],
            "lng": location[1],
            "speed": location[2]
        }
    
    def report_status(self):
        """上报状态到云平台"""
        location = self.get_location()
        data = {
            "bike_id": self.bike_id,
            "location": location,
            "lock_status": self.lock_status,
            "battery": self.get_battery_level(),
            "timestamp": utime.time()
        }
        response = request.post(
            self.server_url + "/status",
            json=data
        )
        return response.status_code == 200
    
    def unlock(self, user_id):
        """开锁"""
        # 验证用户权限
        resp = request.post(
            self.server_url + "/unlock",
            json={"bike_id": self.bike_id, "user_id": user_id}
        )
        if resp.json()["authorized"]:
            self.lock_status = "unlocked"
            # 控制电子锁开锁
            self.control_lock(False)
            return True
        return False

场景三:工业数据采集网关

架构设计

现场设备层:
  PLC(Modbus RTU)→ RS485 总线
  传感器(4-20mA)→ ADC 采集
  仪表(Modbus TCP)→ 以太网

网关层(Cat.1 模组):
  协议转换:Modbus → MQTT
  数据缓存:本地 Flash 存储
  远程通信:Cat.1 上传云端

云平台层:
  MQTT Broker → 数据处理 → 数据库 → 可视化

Modbus 转 MQTT 实现

python
# QuecPython 工业网关示例
import umodbus
import umqtt
import ujson

class IndustrialGateway:
    def __init__(self):
        # 初始化 Modbus RTU(RS485)
        self.modbus = umodbus.ModbusRTU(
            port=2,          # UART2
            baudrate=9600,
            parity='N',
            stopbits=1
        )
        
        # 初始化 MQTT 客户端
        self.mqtt = umqtt.MQTTClient(
            client_id="gateway_001",
            server="broker.emqx.io",
            port=1883
        )
        self.mqtt.connect()
    
    def read_plc_data(self, slave_id, start_addr, count):
        """读取 PLC 保持寄存器"""
        try:
            data = self.modbus.read_holding_registers(
                slave_id, start_addr, count
            )
            return data
        except Exception as e:
            print("Modbus error:", e)
            return None
    
    def publish_data(self, device_id, data):
        """发布数据到 MQTT"""
        payload = ujson.dumps({
            "device_id": device_id,
            "data": data,
            "timestamp": utime.time()
        })
        topic = f"factory/device/{device_id}/data"
        self.mqtt.publish(topic, payload)
    
    def run(self):
        """主循环"""
        while True:
            # 读取 PLC 数据
            plc_data = self.read_plc_data(1, 0, 10)
            if plc_data:
                self.publish_data("PLC_001", plc_data)
            
            utime.sleep(5)  # 每5秒采集一次

场景四:智能门锁

方案对比

方案优点缺点适用场景
Cat.1速率高,实时性好功耗较高有线供电门锁
NB-IoT超低功耗时延高(1-10s)电池供电,低频使用
Wi-Fi速率高,成本低需要 Wi-Fi 覆盖家用门锁
BLE超低功耗需要手机蓝牙近场开锁

推荐方案(公寓楼宇门锁)

主通信:Cat.1(EC200U-CN)
  - 远程开锁指令接收
  - 开锁记录上传
  - 固件远程升级

辅助通信:BLE
  - 手机近场开锁(无网络时备用)
  - 配置参数

供电:有线供电(220V 转 5V)
  - 无需考虑功耗

褚成志的笔记