第一章:红外与网络基础

各位同学好,我是老张。做嵌入式这行十几年了,红外和网络这块算是我的老本行。今天咱们先打好基础,聊聊红外通信和网络通信到底是怎么回事。

说实话,很多人一上来就急着调代码、焊板子,结果遇到问题抓瞎。我建议你先花点时间理解原理,后面会少走很多弯路。

1.1 红外通信原理

红外通信,说白了就是用光来传数据。但不是可见光,是红外光。波长大概在850nm到940nm之间,人眼看不见。

它的工作方式很简单:发送端用红外LED发光,接收端用光电二极管或者光电三极管来接收。发1和0,靠的是载波的有无。

核心要点:红外通信是半双工的,而且必须要有视距。中间不能有遮挡物。我在项目中遇到过,客户说遥控器不灵,结果发现是电视机柜的玻璃门挡住了红外信号。

调制方式呢,最常见的是38kHz载波。为什么是38kHz?因为这样可以有效抵抗环境光的干扰。你想想看,家里的日光灯是50Hz或60Hz,节能灯可能到几十kHz,但38kHz这个频段相对干净。

接收端一般会用一体化接收头,比如VS1838B、HS0038这些。它们内部集成了光电转换、放大、解调等功能,输出直接就是数字信号。

小提示:选接收头的时候注意看它的载波频率。38kHz是主流,但也有36kHz、40kHz的。买错了就收不到信号。

1.2 红外协议:NEC协议

协议这块,NEC协议是咱们最常用的。几乎所有的家电遥控器都在用。我记得第一次分析NEC波形时,用示波器抓了半天才搞明白。

NEC协议的特点:

  • 载波频率:38kHz
  • 数据格式:引导码 + 地址码 + 地址反码 + 命令码 + 命令反码
  • 逻辑1:560μs高电平 + 1680μs低电平
  • 逻辑0:560μs高电平 + 560μs低电平
  • 引导码:9ms高电平 + 4.5ms低电平

这里有个坑要注意:NEC协议有两种格式,一种是标准NEC,一种是NEC扩展。扩展格式的地址码是16位的,而标准格式是8位。我曾经在项目里没注意这个区别,结果遥控器对不上码,折腾了两天。

// NEC协议解码示例(伪代码)
if (检测到引导码) {
    for (i = 0; i < 32; i++) {
        等待下一个脉冲
        测量低电平时间
        if (低电平时间 > 1000μs) {
            数据位 = 1
        } else {
            数据位 = 0
        }
    }
    地址码 = 前8位
    地址反码 = 中间8位
    命令码 = 后16位的高8位
    命令反码 = 后16位的低8位
    if (地址码 == ~地址反码 && 命令码 == ~命令反码) {
        数据有效
    }
}

1.3 红外协议:RC5协议

RC5是飞利浦搞的协议,和NEC不太一样。它用的是曼彻斯特编码,每个数据位的时间是固定的1.778ms。

RC5的特点:

  • 载波频率:36kHz(注意,不是38kHz)
  • 数据格式:起始位(1位) + 控制位(1位) + 系统地址(5位) + 命令码(6位)
  • 编码方式:曼彻斯特编码
  • 位时间:1.778ms

曼彻斯特编码什么意思?就是每个位中间有一次电平跳变。从高到低表示1,从低到高表示0。这种编码的好处是自带时钟同步,不容易出错。

注意:RC5和NEC的载波频率不同,接收头不能混用。如果你用38kHz的接收头去收RC5信号,距离会变短,甚至完全收不到。

1.4 网络通信基础:TCP/IP

好了,聊完红外,咱们说说网络。TCP/IP协议族是互联网的基石。你想想看,咱们的设备要联网,就得用这套协议。

TCP/IP分层模型:

层级 作用 常见协议
应用层 为用户提供网络服务 HTTP、MQTT、FTP
传输层 端到端的数据传输 TCP、UDP
网络层 路由和寻址 IP、ICMP
链路层 物理介质上的数据传输 以太网、Wi-Fi

TCP和UDP的区别,我打个比方:TCP就像寄挂号信,有回执,能保证送到;UDP就像扔纸飞机,快是快,但可能丢。在咱们的红外转网络方案里,控制指令一般用TCP,因为可靠性要求高。状态上报可以用UDP,丢了也无所谓。

1.5 UDP协议

UDP,全称是用户数据报协议。它很简单,没有连接的概念。你只管把数据包发出去,对方收不收得到,它不管。

UDP的特点:

  • 无连接:不需要三次握手
  • 不可靠:不保证数据到达
  • 速度快:没有确认重传机制
  • 支持广播和多播

UDP的报文格式也很简单:源端口(2字节) + 目的端口(2字节) + 长度(2字节) + 校验和(2字节) + 数据。

我在做红外中继项目时,用UDP来做设备发现。设备上电后发一个UDP广播包,网关收到就知道有新设备上线了。这个方案简单又高效。

1.6 HTTP协议简介

HTTP是应用层协议,咱们上网浏览网页用的就是它。在物联网里,HTTP也经常用来做设备控制和状态查询。

HTTP的核心概念:

  • 请求方法:GET(获取)、POST(创建)、PUT(更新)、DELETE(删除)
  • 状态码:200(成功)、404(未找到)、500(服务器错误)
  • 请求头:包含客户端信息、内容类型等
  • 响应体:返回的数据内容

举个例子,你要查询红外中继设备的状态:

GET /api/device/status HTTP/1.1
Host: 192.168.1.100
Accept: application/json

响应:
HTTP/1.1 200 OK
Content-Type: application/json

{
    "device_id": "IR-001",
    "status": "online",
    "last_command": "power_on",
    "temperature": 32.5
}

经验之谈:在嵌入式设备上用HTTP,要注意资源消耗。每次请求都要解析HTTP头,对单片机来说负担不小。我建议用轻量级的HTTP库,或者干脆用MQTT替代。

1.7 红外与网络的结合思路

好了,基础讲完了。咱们的红外转网络方案,说白了就是:

  1. 用单片机接收红外信号,解码成数据
  2. 把数据通过Wi-Fi或以太网发到服务器
  3. 服务器再通过网络把指令转发给其他设备
  4. 其他设备收到指令后,用红外发射出去

这个方案的核心就是协议转换。红外协议和网络协议,中间需要一个桥梁。这个桥梁,就是咱们要做的中继器。

下一章,我会带大家搭建开发环境,咱们开始动手做。到时候你会看到,理论知识和实际代码是怎么结合起来的。

嗯,今天就到这里。有什么问题,咱们课后交流。