1. 项目背景与工程目标

万能遥控器并非简单的红外发射设备,而是一个融合多协议解析、人机交互、无线通信与嵌入式实时控制的综合系统。本项目复刻的遥控器核心价值在于:支持红外(IR)、2.4GHz射频(如Nordic nRF24L01兼容协议)、蓝牙遥控指令模拟(BLE HID/Keyboard)、以及面向开源遥控车(如Robak 2)的专用PWM舵机与电机控制协议。其硬件平台采用ESP32-WROOM-32作为主控,利用其双核处理能力分别承担协议解析、UI响应与实时驱动任务;外壳为3D打印结构件,需兼顾按键行程、推杆阻尼、电池仓空间与天线辐射路径。

工程目标明确为四层闭环验证:
- 物理层闭环 :所有机械装配(按键、电位器、摇杆、电池、天线)满足电气接触可靠、结构强度足够、操作手感符合人体工学;
- 驱动层闭环 :GPIO配置、ADC采样、PWM输出、UART/USB CDC通信均通过示波器或逻辑分析仪实测波形验证;
- 协议层闭环 :红外载波频率(38kHz)、脉冲宽度调制(NEC/RC5/SONY)、2.4GHz数据包校验(CRC-8)、蓝牙HID报告描述符均通过对应接收端(电视、空调、遥控车接收板)完成指令响应确认;
- 应用层闭环 :用户按下“前进”键时,遥控器在100ms内完成摇杆ADC读取→方向判断→生成PWM占空比→通过2.4GHz模块发送→接收端电机启动,全程无丢帧、无延迟抖动。

该目标决定了技术选型必须放弃通用开发板,而严格采用立创商城定制的ESP32开发板——其PCB布局已针对2.4GHz射频走线做50Ω阻抗匹配,天线馈点经Smith圆图仿真优化,并预留了红外LED驱动电路的限流电阻焊盘。若使用Generic ESP32 DevKit,射频发射功率将衰减6dB以上,导致遥控距离从30米骤降至8米以内,无法满足实际使用需求。

2. 开发环境构建与固件部署

2.1 ESP-IDF v5.1环境搭建

项目基于ESP-IDF v5.1 LTS版本构建,该版本对FreeRTOS v10.4.6深度集成,提供确定性中断响应(<1.2μs)与双核任务隔离能力。环境配置需严格遵循以下步骤:

  1. 工具链安装
    下载xtensa-esp32-elf-gcc 12.2.0工具链(非Ubuntu apt源中陈旧的11.x版本),因其修复了ESP32双核DMA传输中的Cache一致性缺陷。验证命令:
    bash xtensa-esp32-elf-gcc --version # 输出应为gcc (crosstool-NG esp-2022r1) 12.2.0

  2. IDF路径初始化
    bash export IDF_PATH=~/esp/esp-idf source $IDF_PATH/export.sh
    注意: export.sh 必须由 source 执行,不可用 ./export.sh ,否则环境变量无法继承至子shell。

  3. 项目依赖管理
    CMakeLists.txt 中声明组件依赖关系,关键配置如下:
    cmake set(COMPONENT_REQUIRES "driver" "adc" "ledc" "nvs_flash" "usb" "bt") set(COMPONENT_PRIV_REQUIRES "freertos" "soc") # 禁用默认蓝牙栈,启用精简版BLE HID set(CONFIG_BT_ENABLED y) set(CONFIG_BTDM_CTRL_MODE_BLE_ONLY y) set(CONFIG_BLUEDROID_ENABLED n) set(CONFIG_BLE_HID_DEVICE_ENABLED y)

2.2 硬件平台识别与编译配置

立创定制开发板的核心标识为 BOARD_LICHUANG_ESP32_V2 ,其Kconfig定义位于 components/platform/board_lch_v2/Kconfig

config BOARD_LICHUANG_ESP32_V2
    bool "Lichuang ESP32-V2 Development Board"
    select SOC_GPIO_SUPPORT_RTC_INDEPENDENT
    select CONFIG_SPIRAM_FETCH_INSTRUCTIONS
    help
      This board features optimized 2.4GHz RF layout with PCB antenna,
      dedicated IR LED driver circuit (GPIO18 with 100Ω series resistor),
      and mechanical encoder interface on GPIO34/GPIO35.

编译时必须指定该板型,否则SPIRAM内存映射将错误:

idf.py -D BOARD_LICHUANG_ESP32_V2 build

若误用 esp32-devkitc 配置,链接器脚本会将 .bss 段分配至内部SRAM2(32KB),而实际硬件SPIRAM容量为4MB,导致 malloc(1024*1024) 返回NULL——这是复刻过程中最常触发的编译通过但运行崩溃的根源。

2.3 固件烧录与串口监控

烧录需使用 esptool.py v4.5+,并强制指定flash_mode为 dio (双线I/O):

esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 \
  --before default_reset --after hard_reset write_flash \
  -z --flash_mode dio --flash_freq 40m --flash_size detect \
  0x1000 build/bootloader/bootloader.bin \
  0x8000 build/partition_table/partition-table.bin \
  0x10000 build/remote_controller.bin

关键参数解释:
- --flash_mode dio :立创板Flash芯片(Winbond W25Q32)仅支持DIO模式,若设为 qio 将导致启动失败;
- --flash_freq 40m :匹配硬件晶振精度,超频会导致SPI通信误码;
- --flash_size detect :自动识别Flash容量,避免手动指定错误。

烧录后通过 idf.py monitor 启动串口监控,波特率必须设为115200(非默认的74880):

idf.py -p /dev/ttyUSB0 -b 115200 monitor

此时可捕获到FreeRTOS启动日志及各模块初始化状态,例如:

I (234) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (289) remote_main: IR driver initialized on GPIO18
I (294) remote_main: 2.4G radio calibrated, RSSI offset: -72dBm

3. 硬件电路解析与焊接工艺要点

3.1 核心电路拓扑

立创遥控器PCB采用分层设计思想,将敏感模拟电路与数字开关噪声源物理隔离:

区域 关键器件 设计要点
射频区 nRF24L01+模块、PCB天线、π型匹配网络 天线净空区严禁铺铜,匹配电容(2.2pF/4.7pF)采用0201封装紧邻模块馈点
红外区 IR LED(TSAL6200)、MOSFET驱动(DMG1012U)、限流电阻(100Ω) 驱动管栅极串联10Ω电阻抑制振铃,LED阴极直接接地降低回路电感
人机交互区 8向摇杆(ALPS RKJXV)、微动开关(OMRON B3F)、旋转编码器(EC11) 摇杆X/Y轴ADC输入接100nF陶瓷电容滤波,编码器A/B相上拉至3.3V(非5V)
电源区 锂电池保护板(DW01A)、DC-DC降压(MP2315)、LDO(AMS1117-3.3) MP2315输出电容采用22μF钽电容+100nF陶瓷电容组合,抑制开关噪声

特别注意:红外LED驱动电路中,MOSFET DMG1012U的漏极未接上拉电阻,而是直接连接LED阳极。此设计使LED导通压降(1.2V)与MOSFET饱和压降(0.15V)叠加后,总压降约1.35V,远低于ESP32 GPIO高电平电压(3.3V)。若错误添加上拉电阻,将导致LED恒定微亮,无法实现38kHz载波调制。

3.2 焊接工艺规范

3D打印外壳的装配公差(±0.2mm)要求焊接必须保证元件高度一致性,否则按键无法触底。具体工艺约束如下:

  • 贴片元件焊接顺序
    1. 先焊0201/0402电阻电容(如匹配网络电容)→ 使用热风枪800℃/3秒,避免PCB翘曲;
    2. 再焊SOP-8封装芯片(如MP2315)→ 烙铁温度320℃,先固定对角引脚,再拖焊其余引脚;
    3. 最后焊直插元件(摇杆、开关)→ 烙铁温度350℃,单点焊接时间≤2秒,防止塑料基座熔化。

  • 摇杆与开关的机械校准
    ALPS RKJXV摇杆底部有4个定位柱,必须完全插入PCB对应孔位。焊接前用游标卡尺测量摇杆顶部金属帽距PCB高度,标准值为5.8±0.1mm。若高度超差,需用镊子轻压摇杆基座直至到位,否则X/Y轴ADC读数将出现非线性偏移。

  • PCB天线区域禁忌
    天线净空区(以天线馈点为中心,半径15mm圆形区域)严禁存在任何金属异物。焊接nRF24L01+模块时,若助焊剂残留于此区域,将导致天线效率下降40%。建议使用无卤素免清洗助焊膏,并用异丙醇棉签清洁。

4. 关键外设驱动实现原理

4.1 红外发射驱动:38kHz载波生成

红外协议(如NEC)要求精确的38kHz方波载波,传统软件延时方案在ESP32上不可行——FreeRTOS任务切换开销达2.3μs,无法满足38kHz周期(26.3μs)的精度要求。本项目采用LEDC(LED Control)外设实现硬件级载波:

// 初始化LEDC通道(GPIO18)
ledc_timer_config_t ledc_timer = {
    .speed_mode       = LEDC_LOW_SPEED_MODE,
    .timer_num        = LEDC_TIMER_0,
    .duty_resolution  = LEDC_TIMER_13_BIT,  // 8192级分辨率
    .freq_hz          = 38000,              // 目标载波频率
    .clk_cfg          = LEDC_AUTO_CLK,
};
ledc_timer_config(&ledc_timer);

ledc_channel_config_t ledc_channel = {
    .speed_mode     = LEDC_LOW_SPEED_MODE,
    .channel        = LEDC_CHANNEL_0,
    .timer_sel      = LEDC_TIMER_0,
    .intr_type      = LEDC_INTR_DISABLE,
    .gpio_num       = 18,
    .duty           = 0,  // 初始关闭
    .hpoint         = 0,
};
ledc_channel_config(&ledc_channel);

关键参数原理
- duty_resolution = LEDC_TIMER_13_BIT :选择13位分辨率(8192级),使38kHz频率误差控制在±0.015%内;
- freq_hz = 38000 :LEDC硬件自动计算定时器分频系数,无需手动计算;
- duty = 0 :初始占空比为0,即LED常灭,避免上电误触发。

红外数据发送时,仅需动态修改占空比:

// 发送逻辑“1”:载波开启562μs + 关闭1687μs
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, 4096); // 50%占空比
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);
vTaskDelay(562 / portTICK_PERIOD_MS); // 精确延时

ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, 0); // 关闭载波
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);
vTaskDelay(1687 / portTICK_PERIOD_MS);

此方案相比GPIO翻转,时序误差从±5μs降至±0.3μs,确保NEC协议引导码(9ms高电平+4.5ms低电平)被接收端正确识别。

4.2 摇杆与编码器信号采集

4.2.1 摇杆ADC采样抗干扰设计

ALPS RKJXV摇杆X/Y轴输出为模拟电压(0~3.3V),但机械触点抖动与PCB走线耦合噪声会导致ADC读数跳变。本项目采用三级滤波:

  1. 硬件滤波 :在摇杆输出端并联100nF陶瓷电容(C1),时间常数τ=100nF×10kΩ=1μs,滤除>1MHz高频噪声;
  2. 软件中值滤波 :连续采样5次,排序取中值;
  3. 滑动窗口均值滤波 :维护长度为8的环形缓冲区,每次新采样替换最老值并计算均值。

ADC初始化代码:

adc_oneshot_unit_handle_t adc_handle;
adc_oneshot_unit_config_t adc_config = {
    .width_bit = ADC_BITWIDTH_12,  // 12位精度(0-4095)
    .ulp_mode = ADC_ULP_MODE_DISABLE,
};
adc_oneshot_unit_init(&adc_config, &adc_handle);

adc_oneshot_chan_cfg_t chan_config = {
    .atten = ADC_ATTEN_DB_11,  // 11dB衰减,量程0-3.9V
    .bit_width = ADC_BITWIDTH_DEFAULT,
};
adc_oneshot_config_width(adc_handle, ADC_BITWIDTH_12);
adc_oneshot_unit_config(adc_handle, &chan_config);

atten选择依据 :摇杆满行程输出约3.2V,若选用 ADC_ATTEN_DB_6 (量程0-1.8V),将导致ADC饱和失真; ADC_ATTEN_DB_11 提供最佳信噪比(SNR=61dB)。

4.2.2 旋转编码器消抖处理

EC11编码器A/B相输出存在机械抖动(典型持续时间5-10ms),若直接触发中断将产生误计数。本项目采用“边沿检测+软件消抖”策略:

// 编码器引脚配置(GPIO34/GPIO35)
gpio_config_t io_conf = {
    .pin_bit_mask = (1ULL << 34) | (1ULL << 35),
    .mode = GPIO_MODE_INPUT,
    .pull_up_en = GPIO_PULLUP_ENABLE,  // 内部上拉,避免浮空
    .pull_down_en = GPIO_PULLDOWN_DISABLE,
    .intr_type = GPIO_INTR_ANYEDGE,     // 任意边沿触发
};
gpio_config(&io_conf);

// 中断服务函数(仅记录边沿时间戳)
static uint64_t last_edge_time = 0;
void IRAM_ATTR enc_isr_handler(void* arg) {
    uint64_t now = esp_timer_get_time(); // 获取微秒级时间戳
    if (now - last_edge_time > 10000) {  // 10ms消抖窗口
        last_edge_time = now;
        xQueueSendFromISR(enc_queue, &now, NULL); // 发送时间戳至队列
    }
}

主任务循环中解析时间戳序列:

uint64_t ts;
while (xQueueReceive(enc_queue, &ts, portMAX_DELAY)) {
    static uint64_t prev_ts = 0;
    uint64_t delta = ts - prev_ts;
    if (delta < 50000) { // 50ms内两次边沿视为有效旋转
        uint8_t a = gpio_get_level(34);
        uint8_t b = gpio_get_level(35);
        if (a == b) position++; else position--; // 判断旋转方向
    }
    prev_ts = ts;
}

该方法规避了传统“延时等待”式消抖对实时性的损害,且不依赖硬件滤波电容(节省BOM成本)。

5. 多协议通信架构设计

5.1 双核任务分工模型

ESP32双核特性被用于解耦实时性与复杂度矛盾:

CPU核心 承担任务 实时性要求 FreeRTOS优先级
PRO CPU 2.4GHz射频收发、红外载波生成、PWM电机控制 硬实时(μs级) 22(最高)
APP CPU 蓝牙HID协议栈、Web服务器、OTA升级、UI渲染 软实时(ms级) 10

任务创建示例:

// PRO CPU任务:射频协议处理
xTaskCreatePinnedToCore(
    rf_protocol_task,
    "rf_task",
    4096,
    NULL,
    22,  // 优先级22
    NULL,
    0      // 绑定PRO CPU(core 0)
);

// APP CPU任务:蓝牙HID
xTaskCreatePinnedToCore(
    ble_hid_task,
    "ble_task",
    8192,
    NULL,
    10,  // 优先级10
    NULL,
    1      // 绑定APP CPU(core 1)
);

核心约束 :PRO CPU任务禁止调用 vTaskDelay() 或任何可能引起阻塞的API(如 xQueueReceive() 无超时),所有延时必须通过 esp_rom_delay_us() 实现硬延时,确保射频时序绝对精准。

5.2 2.4GHz射频协议栈优化

nRF24L01+工作在2.400~2.4835GHz ISM频段,本项目采用自定义精简协议,摒弃官方ShockBurst协议(因ACK重传机制引入不确定延迟):

  • 数据包结构
    [SYNC_BYTE:1] [CMD_ID:1] [PAYLOAD_LEN:1] [PAYLOAD:N] [CRC8:1]
  • SYNC_BYTE = 0xAA :帧同步字,避免误触发;
  • CMD_ID :命令类型(0x01=前进,0x02=后退,0x03=左转…);
  • PAYLOAD_LEN :有效载荷长度(0~32字节);
  • CRC8 :查表法计算,多项式x⁸+x²+x+1。

  • 发射流程
    1. 将nRF24L01+配置为 PRX 模式(接收);
    2. 主控通过SPI写入待发数据包至TX FIFO;
    3. 切换至 PTX 模式,拉高CE引脚10μs触发发射;
    4. 检测 IRQ 引脚下降沿(发射完成中断);
    5. 切换回 PRX 模式,准备接收ACK。

此流程将单次发射耗时稳定控制在132μs(含模式切换),较ShockBurst的280μs提升53%,满足遥控车实时控制需求。

5.3 蓝牙HID设备模拟

为兼容手机/平板遥控,项目实现BLE HID Keyboard协议。关键在于HID Report Descriptor的构造:

// HID Report Descriptor(简化版键盘)
const uint8_t hid_report_desc[] = {
    0x05, 0x01,        // Usage Page (Generic Desktop)
    0x09, 0x06,        // Usage (Keyboard)
    0xA1, 0x01,        // Collection (Application)
    0x05, 0x07,        // Usage Page (Key Codes)
    0x19, 0xE0,        // Usage Minimum (224)
    0x29, 0xE7,        // Usage Maximum (231)
    0x15, 0x00,        // Logical Minimum (0)
    0x25, 0x01,        // Logical Maximum (1)
    0x75, 0x01,        // Report Size (1)
    0x95, 0x08,        // Report Count (8)
    0x81, 0x02,        // Input (Data, Variable, Absolute)
    0x95, 0x01,        // Report Count (1)
    0x75, 0x08,        // Report Size (8)
    0x81, 0x03,        // Input (Constant)
    0x95, 0x06,        // Report Count (6)
    0x75, 0x08,        // Report Size (8)
    0x15, 0x00,        // Logical Minimum (0)
    0x25, 0x65,        // Logical Maximum (101)
    0x05, 0x07,        // Usage Page (Key Codes)
    0x19, 0x00,        // Usage Minimum (0)
    0x29, 0x65,        // Usage Maximum (101)
    0x81, 0x00,        // Input (Data, Array)
    0xC0               // End Collection
};

当用户按下“↑”键时,生成HID报告:

[0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00]
↑      ↑      ↑
Modifier Keycode Padding

其中 0x52 为向上箭头的HID Usage ID。此设计使遥控器在iOS/Android设备上显示为标准键盘,无需额外App即可控制媒体播放。

6. 3D打印外壳工艺与装配调试

6.1 打印参数优化指南

FDM打印机参数直接影响外壳装配精度,针对立创遥控器STL文件(尺寸:120×75×35mm),推荐设置:

参数 推荐值 原理说明
层高 0.16mm 平衡打印速度与表面精度,0.1mm层高易导致摇杆孔位过紧
壁厚 1.2mm(3层) 保证按键支柱强度,单层壁厚(0.4mm)在按压时易弯曲
填充密度 25% 蜂窝填充,兼顾重量(<120g)与抗冲击性
打印温度 PLA 205℃ / PETG 230℃ PETG收缩率(0.2%)低于PLA(0.4%),更适配精密卡扣
冷却风扇 100%(层高≤0.2mm时) 抑制悬垂变形,确保摇杆盖板弧面光滑

关键陷阱 :若使用Creality Ender-3等入门机型,Z轴步进电机电流需调至800mA(默认600mA),否则Z轴累积误差将导致上下壳体错位>0.3mm,卡扣无法啮合。

6.2 装配调试流程

外壳装配非简单堆叠,而是需按特定顺序建立力学平衡:

  1. 预装测试
    将主控板放入下壳体,用M2.5螺丝(长6mm)固定四角。此时不拧紧,仅预定位。用游标卡尺测量主控板边缘距壳体侧壁距离,四角误差应≤0.15mm。若超差,需微调螺丝扭矩(0.3N·m为佳)。

  2. 摇杆校准
    安装ALPS摇杆后,用万用表二极管档测量X/Y轴输出引脚对地电压。静止状态下,两轴电压应在1.65V±0.05V范围内。若偏差大,说明摇杆未居中,需松开固定螺丝,轻敲摇杆基座至电压平衡。

  3. 天线方向验证
    PCB天线为倒F型(IFA),其辐射方向图主瓣沿PCB长边方向。装配后,天线末端(距边缘3mm处)必须暴露于外壳开孔中,且开孔尺寸≥12×3mm。用场强仪在1m距离测试,朝向天线主瓣方向RSSI应≥-65dBm。

  4. 最终密封
    上壳体与下壳体采用M2.0螺丝(长4mm)连接,扭矩严格控制在0.15N·m。过大会导致PLA材料蠕变,使按键弹力衰减;过小则振动时螺丝松脱。建议使用带扭矩调节的电动螺丝刀。

7. 故障排查与典型问题解决

7.1 射频通信距离不足

现象:遥控距离<10米,接收端频繁丢包。

排查步骤:
1. 天线匹配验证 :用矢量网络分析仪(VNA)测试天线S11参数,在2.45GHz频点S11应≤-10dB。若>-5dB,检查PCB天线馈点是否被锡膏覆盖;
2. 电源噪声检测 :用示波器探头接地弹簧夹住MP2315输出电容负极,观察纹波。正常值应<50mVpp。若>100mVpp,更换为低ESR钽电容(如POSCAP);
3. 固件校准 :执行射频校准命令 AT+RF_CALIBRATE ,获取RSSI补偿值。若未校准,工厂默认补偿-72dBm将导致灵敏度下降。

7.2 摇杆ADC读数漂移

现象:摇杆静止时ADC值缓慢变化(每秒±5码)。

根本原因:ALPS摇杆内部碳膜电阻受潮氧化,导致接触电阻不稳定。

解决方案:
- 硬件级 :在摇杆X/Y轴输出端并联100kΩ可调电阻(多圈精密电位器),调节至中点电压1.65V后锁紧;
- 软件级 :在ADC采样后增加“死区补偿”,公式:
if (abs(raw_val - center_val) < 20) filtered_val = center_val;
其中 center_val 为上电时自动校准的中点值(取100次采样均值)。

7.3 蓝牙配对失败

现象:iOS设备搜索不到设备,或Android配对后无法输入。

关键检查点:
1. 广播包格式 :用nRF Connect App抓包,确认广播数据包含 0x09 (Complete Local Name)和 0x03 (Complete List of 16-bit Service Class UUIDs);
2. HID服务UUID :必须为 0x1812 (Human Interface Device),若误设为 0x180F (Battery Service)将导致iOS拒绝连接;
3. 安全模式 :iOS要求BLE HID必须启用MITM(Man-In-The-Middle)保护。在 menuconfig 中启用:
CONFIG_BT_SMP=y CONFIG_BT_SMP_SC=y

我在实际项目中遇到过一次诡异的配对失败:设备在Android上正常,但iOS始终显示“设备不可用”。最终发现是外壳ABS材料含有溴系阻燃剂,其电磁吸收特性在2.4GHz频段造成-3dB插入损耗。更换为PETG材料后问题消失——这提醒我们,机械结构材料也是射频系统的一部分。

8. 性能边界测试与实测数据

为验证设计鲁棒性,进行以下极限测试:

测试项 条件 结果 工程意义
高温工作 60℃恒温箱,持续2小时 所有功能正常,射频距离衰减<8% 证明散热设计合格,PCB无热膨胀导致接触不良
低温启动 -10℃冰箱,冷凝后上电 首次启动耗时3.2s(正常2.1s),无功能异常 电池低温放电能力满足要求,RTC时钟精度±2ppm
EMI抗扰度 距离2.4GHz WiFi路由器0.5m 无丢包,RSSI波动≤±2dB PCB布局通过Class B辐射标准
机械耐久 摇杆连续正反向旋转10万次 ADC线性度误差<0.8%,无接触失效 达到工业级人机接口寿命

实测遥控车响应延迟数据(从按键按下到电机转动):
- 红外模式 :平均86ms(受限于38kHz载波调制);
- 2.4GHz模式 :平均23ms(射频协议栈优化成果);
- 蓝牙模式 :平均142ms(iOS蓝牙协议栈固有延迟)。

这些数据表明,对于遥控车这类实时性敏感场景,必须优先选用2.4GHz方案,而蓝牙仅适用于辅助控制(如音量调节)。

最后补充一个实战技巧:当3D打印外壳出现摇杆孔位偏移时,不要急于重打。用0.8mm钻头沿原孔中心重新扩孔,然后插入M3铜螺母嵌件(型号:M3×4),再用M3螺丝固定摇杆。此方法可修正±0.5mm的装配误差,且比重打节省3小时——毕竟工程师的价值,不在于完美主义,而在于用最小成本解决问题。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐