1 背景

在去年的产品创新会上,我就提议可以利用360摄像机的红外灯作为红外遥控器,对家庭需要遥控的设备进行远程遥控。其原理是因为360摄像机的红外灯发射的是860nm和940nm波长,和遥控器使用的波长一致,并且360摄像机的灯大多数是1-2W功率,比手持遥控器的功率更强,理论上可以利用房间里光的折射,在不对着电器的情况下对设备进行控制。当时并不确定是否可行,经过本人在T32方案验证后,本方案已经论证成功,本文在此背景下对整体方案进行梳理和论证,以及编写后续的产品方案。
本方案可通过红外灯遥控控制电视和空调,视频如下:

本方案的主要优势如下:
1)在硬件不增加成本的情况下增加红外遥控功能。红外灯作为室内摄像机必备的硬件功能之一,所有的室内摄像机都有这个功能。而中国家庭现存超过80%的空调、电视等家电依旧以红外遥控为主,大多数以手持红外遥控器进行控制。我们也可以看到,有大量的红外转发器、空调伴侣等新的遥控器,可以通过手机APP的方式进行遥控,使用更加方便,解决了部分遥控器找不到、无法提前开启设备等用户痛点,我们搜索发现,新式的红外遥控器每年都在以8%的速度符合增长,说明新式的遥控器需求依旧旺盛。而我们搜索淘宝可以看到,单独的一个红外遥控器在几块到几十块不等,使用摄像机进行红外遥控,相当于为用户省下一个购买红外遥控器的费用。

2)摄像机可以红外遥控设备此功能全网唯一,可以作为卖点。通过搜索摄像机红外遥控关键词可以发现,目前市面上还没有类似的摄像机产品。这个功能本身是摄像机硬件可以自带的功能,大家不做的原因可能是大家不清楚红外遥控和红外灯的硬件相通性,所以厂家也不会朝着摄像机需要支持红外遥控这个功能来做,毕竟遥控器和摄像机是2个不同的产品。在不增加硬件成本的情况下,我司如果研发成功,先一步根据需求整合卖点,具备全网唯一性。趁着夏天做一波营销。

3)高频带低频,增加APP日活。对于好的产品,我们希望具备高频、痛点、刚需三个特性。摄像机产品具备了痛点和刚需的特性,但是高频的特性并不突出。而互联网的产品我们其实是希望具备高频属性,通过高频特性和用户连接,产生数据,根据数据为客户提供服务。在家庭中,特别是夏天的情况下,开空调是一个高频的场景。摄像机不太可能每天都打开一次,但是空调基本上每天都会打开,通过使用摄像机开空调的高频特性,带动摄像机APP的日活,具备一定的可行性。
4)大模型时代,****场景联动,增加更多的联动场景。大模型时代,大模型其实应该像人一样,在家里作为家庭的大脑,家庭的管家,管家怎么能只是控制一个摄像机呢?360在2024年左右增加了智能场景联动,但是日活一直不高,其原因就是场景联动并没有太多可以联动的东西。除了可以对设备进行开机、关机等操作,其他并没有可以实现联动的设备。这里可以参考2018年百度音响在音响大战中为了突破场景联动限制而增加的红外遥控功能,通过红外控制,将音响作为家庭入口,进行场景联动。

这里分享2018年智能音响大战高频带低频的一个产品场景。在2018年大家普遍认可的是智能音响是家庭的入口,通过智能音响带动全屋进行联动,进行全屋智能控制。小米依托于其强大的智能家居布局,音响数量遥遥领先。而百度小度和天猫精灵虽然发布了自身的智能音响,但是并没有那么多的联动设备,仅仅只是支持设备自身的媒体内容进行场景挖掘,比如百度最开始在做饭场景、教学场景支持通过语音进行交互,但是依旧没有办法进行联动。在2019年的时候,百度发布的小度音响1S主打“内置红外遥控”的卖点,此后升级款“小度智能音箱大金刚”进一步强化红外能力:内置6+1个红外发射二极管,实现360°全方位、半径10米的覆盖。官方宣称其内置17万多个红外编码,支持231个空调品牌、370个电视品牌、123个机顶盒品牌和121个电风扇品牌,基本囊括市面上绝大多数红外家电,用户只需一句“小度小度,打开电视”,音箱便通过红外信号完成指令,通过红外遥控进行场景扩展,进一步对抗了米家原生的场景联动。

360智慧生活 小度音响

2 可行性方案

2.1 红外遥控的原理(多种扩展协议)

红外遥控器一般是由红外发光元器件组成,通过两端施加电压,发出940nm波长的红外线。原来的红外遥控器一般使用发光二极管,业内俗称草帽灯,后续整体工艺进步,变成了LED灯。

通常红外遥控为了提高抗干扰性能和降低电源消耗, 红外遥控器常用载波的方式传送二进制编码, 常用的载波频率为 38kHz。也有一些遥控系统采用 36kHz、 40 kHz、 56 kHz等, 一般由发射端晶振的振荡频率来决定。 所以, 通常的红外遥控器是将遥控信号(二进制脉冲码) 调制在 38KHz 的载波上, 经缓冲放大后送至红外发光二极管, 转化为红外信号发射出去的。
 二进制脉冲码的形式有多种, 其中最为常用的是 NEC Protocol 的 PWM 码(脉冲宽度调制)和 Philips RC-5 Protocol 的 PPM 码(脉冲位置调制码, 脉冲串之间的时间间隔来实现信号调制)。 如果要开发红外接收设备, 一定要知道红外遥控器的编码方式和载波频率, 我们才可以选取一体化红外接收头和制定解码方案。 以常见的 NEC 协议, 其特征如下:

  1. 8 位地址和 8 位指令长度;
  2. 地址和命令 2 次传输(确保可靠性)
  3. PWM 脉冲位置调制, 以发射红外载波的占空比代表“0” 和“1” ;
  4. 载波频率为 38Khz;
  5. 时间为 1.125ms 或 2.25ms;
    NEC 码的位定义: 一个脉冲对应 560us 的连续载波, 一个逻辑 1 传输需要2.25ms(560us 脉冲+1680us 低电平), 一个逻辑 0 的传输需要 1.125ms(560us脉冲+560us 低电平) 。 而红外接收头在收到脉冲的时候为低电平, 在没有脉冲的时候为高电平, 这样, 我们在接收头端收到的信号为: 逻辑 1 应该是 560us 低+1680us 高, 逻辑 0 应该是 560us 低+560us 高。 所以可以通过计算高电平时间判断接收到的数据是 0 还是 1。 NEC 码位定义时序图如下图所示:

    NEC 遥控指令的数据格式为: 引导码、 地址码、 地址反码、 控制码、 控制反码。 引导码由一个 9ms 的低电平和一个 4.5ms 的高电平组成, 地址码、 地址反码、 控制码、 控制反码均是 8 位数据格式。 按照低位在前, 高位在后的顺序发送。 采用反码是为了增加传输的可靠性(可用于校验) 。 数据格式如下:

     NEC 码还规定了连发码(由 9ms 低电平+2.5m 高电平+0.56ms 低电平+97.94ms 高电平组成), 如果在一帧数据发送完毕之后, 红外遥控器按键仍然没有放开, 则发射连发码, 可以通过统计连发码的次数来标记按键按下的长短或次数。
    不同的红外协议如下表所示。
协议 载波 位数 引导码 编码 备注
NEC / NEC 1 38 kHz 32 9 ms ON + 4.5 ms OFF LSB first;地址+!地址+命令+!命令 日本家电最常见;米家/小度码库首选
Sony SIRC (12/15/20 bit) 40 kHz 12-20 2.4 ms ON + 0.6 ms OFF LSB first;短帧可叠发三次 电视、PS2 手柄
Philips RC-5 36 kHz 14 无独立引导;曼彻斯特编码 1.778 ms / 位 对称曼彻斯特抗抖;B&O、老机顶盒
Philips RC-6 36 kHz 20 2.66 ms 引导 + start bit 曼彻斯特;Mode 扩展 XBOX DVD、部分电视
Sharp 38 kHz 15 3.2 ms ON + 1.6 ms OFF 正常码 + 反码交替发送 早期夏普电视/空调
Panasonic (K-Mode) 36 kHz 48 3.4 ms ON + 1.7 ms OFF MSB first;设备+子设备+命令 松下电视/机顶盒
Samsung (32/36 bit) 38 kHz 32 / 36 4.5 ms ON + 4.5 ms OFF 类 NEC;尾随扩展4位 近年电视、空调
LG 38 kHz 28 9 ms ON + 4.5 ms OFF 地址16 bit + 命令8 bit 新 LG TV 移植自 NEC
Denon / Sharp Old 38 kHz 48 3 ms ON + 1 ms OFF 七进制脉冲长度 功放设备
Apple IR (Apple Remote) 38 kHz 32 9 ms + 4.5 ms NEC 派生,ID 固定 Mac / Apple TV
空调长码 (Daikin, Mitsubishi, Gree…) 38 kHz 64-216 多段 Leader 专有字段:模式/温度/风速 每次发完整状态帧,码长可>100ms

2.2 红外遥控硬件方案

以360智能摄像机6C双摄版为例,整体灯板的电路图如图所示。通过U1(RY7010)的恒流驱动器提供稳定电压电流,通过S8050的三极管对LED灯进行控制,IR端口通过高低电平控制红外灯亮灭。

红外灯的IO口对应的是GPIO PA17,控制GPIO PA17即可控制红外灯亮灭,输出高电平红外灯亮,输出低电平红外灯灭。

注意事项:
1)由于输出的IO口是普通IO口,不是PWM口,所以需要用定时器模拟38K载波信号。
2)必须是GPIO直连控制LED灯的才能进行红外灯控制,有些摄像机IO口不够,通过串联转并联芯片扩展的IO口不支持直接高频载波。
3)如果是PWM的接口,可支持调节自带的PWM波,不需要通过定时器模拟载波信号。

2.3 红外遥控软件方案

编写一个内核字符驱动,来控制GPIO17进行红外控制,代码逻辑主要是:

  • 初始化字符设备:注册字符设备和创建适当的设备文件。
  • GPIO控制:使用内核提供的GPIO API来控制引脚的状态。
  • 定时生成38kHz信号:通过定时器或延时循环生成38kHz频率的信号。
  • 文件操作:实现openreadwriteclose等操作,让用户空间程序能够控制信号的输出。

1)配置T23的环境

安装对应的SDK,执行t23_image_mk.sh

2)  配置驱动代码

在/sdk/Ingenic-SDK-T23-1.1.0-20230726/opensource/drivers/misc/ir_gpio_driver路径下新建对应的驱动程序,配置对应的Makefile

1
2
3
4
5
6
7
8
9
10
11
12
13
CROSS_COMPILE ?= mips-linux-gnu-
ifeq (${ISVP_ENV_KERNEL_DIR}, )
ISVP_ENV_KERNEL_DIR = ../../../kernel
endif
KDIR := ${ISVP_ENV_KERNEL_DIR}
MODULE_NAME := ir_gpio_driver
all: modules
.PHONY: modules clean
obj-m := $(MODULE_NAME).o
modules:
@$(MAKE) -C $(KDIR) M=$(shell pwd) $@
clean:
@rm -rf *.o *~ .depend .*.cmd *.mod.c .tmp_versions *.ko *.symvers modules.order

3) 编写对应的驱动程序

代码不方便公开,整体逻辑是利用2个高精度定时器,一个用来产生38K载波,一个用来做状态机,发生整体时序。

4)驱动运用

目前驱动支持2种方式,一种通过映射在/dev下的字符驱动进行控制,一种是通过open、control的方式进行代码集成控制,以下是通过字符驱动控制

1
2
3
4
5
6
7
8
9
10
11
12
1. 准备一张32G的TF卡,将TF卡格式化为FAT32格式。
2. 在卡里新建一个文件夹,叫做:no_app
3. 将ir_gpio_driver.ko复制到文件夹里。
4. 使用串口,登录
用户名:root
密码:XXXXXX
5. 安装驱动程序:
-> cd /mnt/sdcard
-> insmod ir_gpio_driver.ko gpio_num=17 active_low=0
6. 运行程序:
# 电视机开关键
echo -ne "\x10\xe7\x00\xff" > /dev/ir_led

5)电视机控制

普通的电视机和空调的红外遥控码协议是完全不同的,其核心是电视机控制比较简单,只是NEC协议。而空调是使用的长码,当点击空调开关的时候,会发送空调的开关、温度、风向等一系列指令,因此空调的红外码一般是64长度或者128长度。
通过逻辑分析仪可以看到:

  1. 使用38K载波解析,地址码是0x10E7,命令码是0x00xFF。

6)空调控制

通过逻辑分析仪可以看到,空调的红外控制码为长码,除了最开始的地址码0x00ff和控制命令外,不同厂家自定义了不同的字段,无法自动解析。通过手动解析“\xff\x00\xff\x00\xff\x00\xfb\x04\x97\x68\x2a\xd5”,有2处不同。
1)控制码是长码,有多组控制信号。
2)最后结尾信号不是0xff,而是尾部有个 2.240 ms / 596 µs的信号,作为NEC Repeat 码的前两段(Repeat = 9 ms carrier → 2.25 ms low → 560 µs carrier),告诉内机“还在长按键”或“请确保上一帧已收齐。

3 合作厂商

红外码的码库很复杂,而且维护成本很高。我找了一家厂家,目前给华为、小米、荣耀等厂家提供红外码库。