IR

IR 用于控制主机设备内置的红外接收/发射管。

主机对 IR 的具体支持如下:

控制器

IR 发射器

IR 接收器

Atom Lite

Atom Matrix

Atom U

AtomS3 Lite

AtomS3U

StickC

StickC-Plus

StickC-Plus2

Cardputer

Capsule

StickS3

UiFlow2 示例

IR 发射

在 UiFlow2 中打开 sticks3_ir_tx_example.m5f2 项目。

本示例演示红外(IR)发射功能。按下 A 键时,会以指定地址和数据值发送 IR 数据,并显示正在发送的地址和数据。

UiFlow2 代码块:

sticks3_ir_tx_example.png

示例输出:

IR 接收

在 UiFlow2 中打开 sticks3_ir_rx_example.m5f2 项目。

本示例演示使用 NEC 解码协议的红外(IR)接收功能。收到 IR 数据时,在屏幕上显示地址和数据值。

UiFlow2 代码块:

sticks3_ir_rx_example.png

示例输出:

MicroPython 示例

IR 发射

本示例演示红外(IR)发射功能。按下 A 键时,会以指定地址和数据值发送 IR 数据,并显示正在发送的地址和数据。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4import os, sys, io
 5import M5
 6from M5 import *
 7from hardware import IR
 8
 9
10label_title = None
11label_addr = None
12label_data = None
13label_tip = None
14ir = None
15data = None
16addr = None
17
18
19def btna_click_event_cb(state):
20    global label_title, label_addr, label_data, label_tip, ir, data, addr
21    data = (data if isinstance(data, (int, float)) else 0) + 1
22    ir.tx(addr, data)
23    print((str("IR: Send addr: ") + str((str(addr) + str((str(" data: ") + str(data)))))))
24    label_data.setText(str((str("data: ") + str(data))))
25
26
27def setup():
28    global label_title, label_addr, label_data, label_tip, ir, data, addr
29    M5.begin()
30    Widgets.setRotation(0)
31    Widgets.fillScreen(0x000000)
32    label_title = Widgets.Label("IR", 58, 5, 1.0, 0x1AEAEB, 0x000000, Widgets.FONTS.DejaVu18)
33    label_addr = Widgets.Label("addr:", 5, 45, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
34    label_data = Widgets.Label("data:", 5, 70, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
35    label_tip = Widgets.Label(
36        "BtnA Send", 18, 200, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18
37    )
38    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_click_event_cb)
39    ir = IR()
40    ir.rx_cb(ir_rx_event)
41    addr = 56
42    data = 0
43    Power.setExtOutput(True)
44    label_addr.setText(str((str("addr: ") + str(addr))))
45
46
47def loop():
48    global label_title, label_addr, label_data, label_tip, ir, data, addr
49    M5.update()
50
51
52if __name__ == "__main__":
53    try:
54        setup()
55        while True:
56            loop()
57    except (Exception, KeyboardInterrupt) as e:
58        try:
59            from utility import print_error_msg
60
61            print_error_msg(e)
62        except ImportError:
63            print("please update to latest firmware")

示例输出:

IR 接收

本示例演示使用 NEC 解码协议的红外(IR)接收功能。收到 IR 数据时,在屏幕上显示地址和数据值。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4import os, sys, io
 5import M5
 6from M5 import *
 7from hardware import IR
 8
 9
10label_title = None
11label0 = None
12label_addr = None
13label_data = None
14ir = None
15data = None
16addr = None
17
18
19def ir_rx_event(_data, _addr, _ctrl):
20    global label_title, label0, label_addr, label_data, ir, data, addr
21    data = _data
22    addr = _addr
23    label_addr.setText(str((str("addr: ") + str(addr))))
24    label_data.setText(str((str("data: ") + str(data))))
25
26
27def setup():
28    global label_title, label0, label_addr, label_data, ir, data, addr
29
30    M5.begin()
31    Widgets.setRotation(0)
32    Widgets.fillScreen(0x000000)
33    label_title = Widgets.Label("IR RX", 41, 5, 1.0, 0x0FBAE1, 0x000000, Widgets.FONTS.DejaVu18)
34    label0 = Widgets.Label("NEC Decode", 8, 50, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
35    label_addr = Widgets.Label("addr:", 5, 115, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
36    label_data = Widgets.Label("data:", 5, 145, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
37
38    Speaker.setPA(False)
39    ir = IR()
40    ir.rx_cb(ir_rx_event)
41
42
43def loop():
44    global label_title, label0, label_addr, label_data, ir, data, addr
45    M5.update()
46
47
48if __name__ == "__main__":
49    try:
50        setup()
51        while True:
52            loop()
53    except (Exception, KeyboardInterrupt) as e:
54        try:
55            from utility import print_error_msg
56
57            print_error_msg(e)
58        except ImportError:
59            print("please update to latest firmware")

示例输出:

class IR

构造函数

class IR

根据 M5Stack 开发板类型,使用相应的引脚初始化 IR 单元。

UiFlow2:

init.png

方法

IR.tx(cmd, data)

使用 NEC 协议,通过指定的命令和数据发送 IR 信号。

参数:
  • cmd – 要传输的命令代码。

  • data – 与该命令关联的数据。

UiFlow2:

tx.png

IR.rx_cb(cb)

注册红外接收的回调。当收到 NEC 格式的 IR 信号时,会以两个参数 (data, addr) 调用该回调。

仅支持带 IR 接收器的开发板(如 StickS3)。

参数:

cb – 回调函数签名为 cb(data, addr)dataaddr 为 8 位值(0–255)。

UiFlow2:

rx_cb.png