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 代码块:
示例输出:
无
IR 接收
在 UiFlow2 中打开 sticks3_ir_rx_example.m5f2 项目。
本示例演示使用 NEC 解码协议的红外(IR)接收功能。收到 IR 数据时,在屏幕上显示地址和数据值。
UiFlow2 代码块:
示例输出:
无
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:

方法
- IR.tx(cmd, data)
使用 NEC 协议,通过指定的命令和数据发送 IR 信号。
- 参数:
cmd – 要传输的命令代码。
data – 与该命令关联的数据。
UiFlow2:

- IR.rx_cb(cb)
注册红外接收的回调。当收到 NEC 格式的 IR 信号时,会以两个参数
(data, addr)调用该回调。仅支持带 IR 接收器的开发板(如 StickS3)。
- 参数:
cb – 回调函数签名为
cb(data, addr)。data和addr为 8 位值(0–255)。
UiFlow2:


