
## 项目34 红外遥控控制声音和LED

**1. 项目介绍：**

红外遥控是一种低成本、易于使用的无线通信技术。IR光与可见光非常相似，除了它的波长稍长一点。这意味着红外线是人眼无法检测到的，这对于无线通信来说是完美的。例如，当你按下电视遥控器上的一个按钮时，一个红外LED会以每秒38000次的频率反复开关，将信息(如音量或频道控制)传送到电视上的红外感光器。

我们将首先解释常见的红外通信协议是如何工作的。然后我们将从一个遥控器和一个红外接收组件开始这个项目。

**2. 项目元件：**

|![Img](./media/afc52f6616725ba37e3b12a2e01685ad.png)|![Img](./media/a2aa343488c11843f13ae0413547c673.png)|![Img](./media/dc6163b527b2977fd9f897b541383a08.png)|![Img](./media/6de88c5b9c38d8ab879ae91eb51431b7.png)|
| :--: | :--: | :--: | :--: |
|ESP32*1|面包板*1|红外接收器*1|RGB LED*1|
|![Img](./media/a802ce7dc086858873e587c19b45578d.png)|![Img](./media/11f324f82f890b0691f134e1ea7a3765.png)|![Img](./media/a225cd286d071225ea0261768ac3f418.png)|![Img](./media/e209a5e6d89e9b4fab30e607922d769b.png) |
|有源蜂鸣器*1|220Ω电阻*3|10KΩ电阻*1|红外遥控器*1|
|![Img](./media/6c3a06627faa0d87dd69cbd361929240.png)|![Img](./media/d23956651d15073e880387c5a5419d80.png)|![Img](./media/2266d29566a875c35c2bd4be3e4a23f8.png)|![Img](./media/4107849550a2c6d09592b2a28e291b54.png) |
|NPN型晶体管(S8050)*1|1kΩ电阻*1 |USB 线*1| 跳线若干|

**3. 元件知识：**   

**红外(IR)遥控器：** 是一种可以发射红外光信号的设备。按下不同的按钮，位于遥控器前端的红外发射管会发出不同指令的红外线。红外遥控技术应用广泛，如电视、空调等。因此，在当今科技发达社会，红外遥控技术使你切换电视节目和调节空调温度都很方便。

我们使用的遥控器如下所示，该红外遥控器采用NEC编码。

![Img](./media/1e106ffcce219ed8acee00a1586fd473.png)

**红外(IR)接收器：** 是VS1838B红外接收传感器元件，可以接收红外光，所以可以用它来检测红外遥控器发出的红外光信号。

![Img](./media/dc6163b527b2977fd9f897b541383a08.png)

红外接收器是集接收、放大、解调一体的器件，将接收到的红外光信号在其内部IC就已经完成了解调（将红外光信号转换回二进制），输出的就是数字信号，然后将信息传递给微控制器。它可接收标准38KHz调制的遥控器信号。

红外信号调制过程图：

![Img](./media/4b390c4b310f1184bbcd46b601fb953f.png)

**4. 解码红外信号：**

我们按照下面接线图将红外接收元件连接到ESP32。

![Img](./media/725871f174783cfa77a87a90f9dece9d.png)

**代码说明：**

![Img](./media/img-20241029112445.png)

红外接收器接收红外遥控器上按键值信号，初始化管脚。

![Img](./media/img-20241029112642.png)

串口端口自动换行打印接收到的十六进制的红外遥控器按键值信号。

你可以打开我们提供的代码，也可以自己编写代码，其如下：

1. 从 “![Img](./media/img-20241023140031.png)” 拖出 “![Img](./media/img-20241023140106.png)”。

2. 从 “![Img](./media/img-20241023140218.png)” 拖出 “![Img](./media/img-20241023140243.png)” 放入 “![Img](./media/img-20241023140106.png)”，设置波特率为 115200 。

3. 从 “ ![Img](./media/img-20241029112954.png) ” 拖出 “ ![Img](./media/img-20241029113045.png) ” ，管脚为 0 。

4. 先从 “![Img](./media/img-20241023140218.png)” 拖出 “![Img](./media/img-20241029113136.png)” 放入 “ ![Img](./media/img-20241029113045.png) ” 中；再从 “![Img](./media/img-20241029113248.png)” 拖出 “ ![Img](./media/img-20241029114726.png) ” 放入 “![Img](./media/img-20241029113136.png)” 中数字 0 处，将 “不换行” 改成 “自动换行”。

![Img](./media/img-20241029114927.png)

完整代码：

![Img](./media/img-20241029114956.png)

编译并上传代码到ESP32，代码上传成功后，利用USB线上电，单击图标 ![Img](./media/img-20241023142105.png) 进入串行监视器，设置波特率为 <span style="color: rgb(255, 76, 65);">115200</span>。你会看到的现象是：将红外遥控器发射器对准红外接收头，按下红外控制器上的按键，串口监视器将打印当前接收到的按键编码值。多次按下相同的按键以确保你拥有该按键的正确编码值。如果看到FFFFFFFF，请忽略它。

![Img](./media/img-20241029112302.png)

写下红外遥控器与每个按键相关联的按键编码值，因为你稍后将需要这些信息。

![Img](./media/f5abdd5de7bb6a716a3b15ee29a4d023.png)

**5. 红外遥控的接线图：**

![Img](./media/eb78662bb9f933558fba6f55c7aa67ea.png)

**6. 项目代码：**

![Img](./media/img-20241101082934.png)

**7. 项目现象：**

编译并上传代码到ESP32，代码上传成功后，利用USB线上电，你会看到的现象是：按红外遥控器的1~7键，蜂鸣器都会鸣响一次，同时RGB分别亮红灯，绿灯，蓝灯，黄灯，洋红灯，蓝绿灯，白灯。按其他另一按键（除1-7键以外），RGB熄灭。

![Img](./media/419ac23044525271d4824d4ecb78b727.png)




