StickS3
支持以下产品:
UiFlow2 示例
IMU 传感器
在 UiFlow2 中打开 sticks3_imu_example.m5f2 项目。
此示例演示了内置 IMU(惯性测量单元)传感器功能。它实时读取并显示加速度计和陀螺仪数据,以 m/s² 显示加速度值,以度/秒 (dps) 显示陀螺仪值。
UiFlow2 代码块:
示例输出:
无
电源管理
在 UiFlow2 中打开 sticks3_power_example.m5f2 项目。
此示例演示了电源管理功能,包括电池电压监控、VBUS 电压读取、充电状态检测以及电池充电和外部输出的控制。按 BtnA 切换外部输出(5V OUT),按 BtnB 切换电池充电。
UiFlow2 代码块:
示例输出:
无
红外发射
在 UiFlow2 中打开 sticks3_ir_tx_example.m5f2 项目。
此示例演示了红外(IR)发射功能。当按下按键 A 时,它会发送带有指定地址和数据值的 IR 数据。示例会显示正在传输的地址和数据。
备注
使用红外发送时,需要启用外部输出模式。
UiFlow2 代码块:
示例输出:
无
红外接收
在 UiFlow2 中打开 sticks3_ir_rx_example.m5f2 项目。
此示例演示了使用 NEC 解码协议的红外(IR)接收功能。当接收到 IR 数据时,它会在屏幕上显示地址和数据值。
备注
使用红外接收时,需要关闭 PA(功率放大器)并启用外部输出模式。
UiFlow2 代码块:
示例输出:
无
音频录制与播放
在 UiFlow2 中打开 sticks3_audio_example.m5f2 项目。
此示例演示了音频录制和播放功能。按下按键 A 开始录制 5 秒。录制完成后,音频将自动播放。示例会显示录制状态和倒计时器。
UiFlow2 代码块:
示例输出:
无
HAT ToF 传感器
在 UiFlow2 中打开 sticks3_hat_tof_example.m5f2 项目。
此示例演示了如何使用 ToF(飞行时间)HAT 传感器测量距离。示例从传感器读取距离值并在屏幕上显示。
UiFlow2 代码块:
示例输出:
无
MicroPython 示例
按键控制
此示例演示了按键的使用。当按下按键 A (BtnA) 时,计数器递增并更新显示。当按下按键 B (BtnB) 时,计数器也会递增并更新显示。
MicroPython 代码块:
1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4import os, sys, io 5import M5 6from M5 import * 7 8 9label_title = None 10label_btna_cnt = None 11label_btnb_cnt = None 12label_tip = None 13btna_cnt = None 14btnb_cnt = None 15 16 17def btna_click_event_cb(state): 18 global label_title, label_btna_cnt, label_btnb_cnt, label_tip, btna_cnt, btnb_cnt 19 btna_cnt = (btna_cnt if isinstance(btna_cnt, (int, float)) else 0) + 1 20 label_btna_cnt.setText(str((str("BtnA: ") + str(btna_cnt)))) 21 print("button a press") 22 23 24def btnb_click_event_cb(state): 25 global label_title, label_btna_cnt, label_btnb_cnt, label_tip, btna_cnt, btnb_cnt 26 btnb_cnt = (btnb_cnt if isinstance(btnb_cnt, (int, float)) else 0) + 1 27 label_btnb_cnt.setText(str((str("BtnB: ") + str(btnb_cnt)))) 28 print("button b press") 29 30 31def setup(): 32 global label_title, label_btna_cnt, label_btnb_cnt, label_tip, btna_cnt, btnb_cnt 33 M5.begin() 34 Widgets.setRotation(0) 35 Widgets.fillScreen(0x000000) 36 label_title = Widgets.Label("Button", 35, 5, 1.0, 0x1A94DD, 0x000000, Widgets.FONTS.DejaVu18) 37 label_btna_cnt = Widgets.Label( 38 "BtnA: ", 5, 50, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 39 ) 40 label_btnb_cnt = Widgets.Label("BtnB:", 5, 80, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 41 label_tip = Widgets.Label( 42 "Press button", 7, 200, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 43 ) 44 BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_click_event_cb) 45 BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_click_event_cb) 46 btna_cnt = 0 47 btnb_cnt = 0 48 49 50def loop(): 51 global label_title, label_btna_cnt, label_btnb_cnt, label_tip, btna_cnt, btnb_cnt 52 M5.update() 53 54 55if __name__ == "__main__": 56 try: 57 setup() 58 while True: 59 loop() 60 except (Exception, KeyboardInterrupt) as e: 61 try: 62 from utility import print_error_msg 63 64 print_error_msg(e) 65 except ImportError: 66 print("please update to latest firmware")
示例输出:
无
IMU 传感器
此示例演示了内置 IMU(惯性测量单元)传感器功能。它实时读取并显示加速度计和陀螺仪数据,以 m/s² 显示加速度值,以度/秒 (dps) 显示陀螺仪值。
MicroPython 代码块:
1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4import os, sys, io 5import M5 6from M5 import * 7import time 8 9 10label_imu = None 11label_accel = None 12label_gyro = None 13label_acc_x = None 14label_acc_y = None 15label_acc_z = None 16label_gyro_y = None 17label_gyro_z = None 18label_gyro_x = None 19last_time = None 20accel = None 21gyro = None 22 23 24def setup(): 25 global \ 26 label_imu, \ 27 label_accel, \ 28 label_gyro, \ 29 label_acc_x, \ 30 label_acc_y, \ 31 label_acc_z, \ 32 label_gyro_y, \ 33 label_gyro_z, \ 34 label_gyro_x, \ 35 last_time, \ 36 accel, \ 37 gyro 38 M5.begin() 39 Widgets.setRotation(0) 40 Widgets.fillScreen(0x000000) 41 label_imu = Widgets.Label("IMU", 46, 4, 1.0, 0x1BCDCD, 0x000000, Widgets.FONTS.DejaVu18) 42 label_accel = Widgets.Label( 43 "Accel(m/^2)", 5, 35, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 44 ) 45 label_gyro = Widgets.Label( 46 "Gyro(dps)", 17, 138, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 47 ) 48 label_acc_x = Widgets.Label("X:", 5, 60, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 49 label_acc_y = Widgets.Label("Y:", 5, 85, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 50 label_acc_z = Widgets.Label("Z:", 5, 110, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 51 label_gyro_y = Widgets.Label("Y:", 5, 187, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 52 label_gyro_z = Widgets.Label("Z:", 5, 213, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 53 label_gyro_x = Widgets.Label("X:", 5, 163, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 54 55 56def loop(): 57 global \ 58 label_imu, \ 59 label_accel, \ 60 label_gyro, \ 61 label_acc_x, \ 62 label_acc_y, \ 63 label_acc_z, \ 64 label_gyro_y, \ 65 label_gyro_z, \ 66 label_gyro_x, \ 67 last_time, \ 68 accel, \ 69 gyro 70 M5.update() 71 if (time.ticks_diff((time.ticks_ms()), last_time)) >= 100: 72 last_time = time.ticks_ms() 73 accel = Imu.getAccel() 74 gyro = Imu.getGyro() 75 label_acc_x.setText(str((str("X: ") + str((accel[0] * 9.8))))) 76 label_acc_y.setText(str((str("Y: ") + str((accel[1] * 9.8))))) 77 label_acc_z.setText(str((str("Z: ") + str((accel[2] * 9.8))))) 78 label_gyro_x.setText(str((str("X: ") + str((gyro[0]))))) 79 label_gyro_y.setText(str((str("Y: ") + str((gyro[1]))))) 80 label_gyro_z.setText(str((str("Z: ") + str((gyro[2]))))) 81 82 83if __name__ == "__main__": 84 try: 85 setup() 86 while True: 87 loop() 88 except (Exception, KeyboardInterrupt) as e: 89 try: 90 from utility import print_error_msg 91 92 print_error_msg(e) 93 except ImportError: 94 print("please update to latest firmware")
示例输出:
无
电源管理
此示例演示了电源管理功能,包括电池电压监控、VBUS 电压读取、充电状态检测以及电池充电和外部输出的控制。按 BtnA 切换外部输出(5V OUT),按 BtnB 切换电池充电。
MicroPython 代码块:
1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4 5import os, sys, io 6import M5 7from M5 import * 8import time 9 10 11label_title = None 12label_5vout = None 13label_usb = None 14label_bat = None 15label_tip = None 16label_state = None 17label_vout = None 18vout_flag = None 19charge = None 20last_time = None 21usb_vol = None 22bat_vol = None 23vout_vol = None 24vout_state = None 25 26 27def btna_click_event_cb(state): 28 global \ 29 label_title, \ 30 label_5vout, \ 31 label_usb, \ 32 label_bat, \ 33 label_tip, \ 34 label_state, \ 35 label_vout, \ 36 vout_flag, \ 37 charge, \ 38 last_time, \ 39 usb_vol, \ 40 bat_vol, \ 41 vout_vol, \ 42 vout_state 43 vout_flag = not vout_flag 44 if vout_flag: 45 Power.setExtOutput(True) 46 print("turn on the output") 47 else: 48 Power.setExtOutput(False) 49 print("turn off the output") 50 51 52def btnb_click_event_cb(state): 53 global \ 54 label_title, \ 55 label_5vout, \ 56 label_usb, \ 57 label_bat, \ 58 label_tip, \ 59 label_state, \ 60 label_vout, \ 61 vout_flag, \ 62 charge, \ 63 last_time, \ 64 usb_vol, \ 65 bat_vol, \ 66 vout_vol, \ 67 vout_state 68 charge = not charge 69 if charge: 70 print("set charge") 71 Power.setBatteryCharge(True) 72 else: 73 print("no charge") 74 Power.setBatteryCharge(False) 75 76 77def setup(): 78 global \ 79 label_title, \ 80 label_5vout, \ 81 label_usb, \ 82 label_bat, \ 83 label_tip, \ 84 label_state, \ 85 label_vout, \ 86 vout_flag, \ 87 charge, \ 88 last_time, \ 89 usb_vol, \ 90 bat_vol, \ 91 vout_vol, \ 92 vout_state 93 94 M5.begin() 95 Widgets.setRotation(0) 96 Widgets.fillScreen(0x000000) 97 label_title = Widgets.Label("Power", 36, 5, 1.0, 0x13BDDE, 0x000000, Widgets.FONTS.DejaVu18) 98 label_5vout = Widgets.Label( 99 "OUT:----mV", 5, 85, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 100 ) 101 label_usb = Widgets.Label("USB:----mV", 5, 35, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 102 label_bat = Widgets.Label("Bat:----mV", 5, 60, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 103 label_tip = Widgets.Label( 104 "BtnA Control", 5, 210, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 105 ) 106 label_state = Widgets.Label("ON", 31, 152, 1.0, 0x00FF00, 0x000000, Widgets.FONTS.DejaVu40) 107 label_vout = Widgets.Label("5V OUT", 28, 125, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 108 109 BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_click_event_cb) 110 BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_click_event_cb) 111 112 Power.setBatteryCharge(True) 113 Power.setExtOutput(False) 114 charge = True 115 label_bat.setColor(0x33CC00, 0x000000) 116 117 118def loop(): 119 global \ 120 label_title, \ 121 label_5vout, \ 122 label_usb, \ 123 label_bat, \ 124 label_tip, \ 125 label_state, \ 126 label_vout, \ 127 vout_flag, \ 128 charge, \ 129 last_time, \ 130 usb_vol, \ 131 bat_vol, \ 132 vout_vol, \ 133 vout_state 134 M5.update() 135 if (time.ticks_diff((time.ticks_ms()), last_time)) >= 1000: 136 last_time = time.ticks_ms() 137 usb_vol = Power.getVBUSVoltage() 138 bat_vol = Power.getBatteryVoltage() 139 vout_vol = Power.getExtVoltage(M5.Power.PORT.A) 140 vout_state = Power.getExtOutput() 141 if Power.isCharging(): 142 label_bat.setColor(0x33CC00, 0x000000) 143 else: 144 label_bat.setColor(0xFFFFFF, 0x000000) 145 if vout_state: 146 label_state.setCursor(x=32, y=152) 147 label_state.setText(str("ON")) 148 label_state.setColor(0x33CC00, 0x000000) 149 else: 150 label_state.setCursor(x=24, y=152) 151 label_state.setText(str("OFF")) 152 label_state.setColor(0x666666, 0x000000) 153 label_usb.setText(str((str("USB:") + str((str(usb_vol) + str("mV")))))) 154 label_bat.setText(str((str("Bat:") + str((str(bat_vol) + str("mV")))))) 155 label_5vout.setText(str((str("Out:") + str((str((int(vout_vol))) + str("mV")))))) 156 157 158if __name__ == "__main__": 159 try: 160 setup() 161 while True: 162 loop() 163 except (Exception, KeyboardInterrupt) as e: 164 try: 165 from utility import print_error_msg 166 167 print_error_msg(e) 168 except ImportError: 169 print("please update to latest firmware")
示例输出:
无
红外发射
此示例演示了红外(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")
示例输出:
无
红外接收
此示例演示了使用 NEC 解码协议的红外(IR)接收功能。当接收到 IR 数据时,它会在屏幕上实时显示地址和数据值。
备注
使用红外接收时,需要关闭 PA(功率放大器)并启用外部输出模式。
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")
示例输出:
无
音频录制与播放
此示例演示了音频录制和播放功能。按下按键 A 开始录制 5 秒。录制完成后,音频将自动播放。示例会显示录制状态和倒计时器。
MicroPython 代码块:
1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4import os, sys, io 5import M5 6from M5 import * 7from audio import Recorder 8import time 9from audio import Player 10 11 12label_title = None 13label_tip = None 14label_cnt = None 15label_conut = None 16label_status = None 17recorder = None 18player = None 19flag_record = None 20record_start_time = None 21remaining = None 22RECORD_DURATION = None 23record_file_path = None 24 25 26def btna_click_event_cb(state): 27 global \ 28 label_title, \ 29 label_tip, \ 30 label_cnt, \ 31 label_conut, \ 32 label_status, \ 33 recorder, \ 34 player, \ 35 flag_record, \ 36 record_start_time, \ 37 remaining, \ 38 RECORD_DURATION, \ 39 record_file_path 40 if not flag_record and not (recorder.is_recording()): 41 print("start record") 42 flag_record = True 43 record_start_time = time.ticks_ms() 44 label_status.setCursor(x=9, y=50) 45 label_status.setText(str("Recording...")) 46 label_status.setColor(0xFF0000, 0x000000) 47 recorder.record("file://flash/res/audio/" + str(record_file_path), RECORD_DURATION, False) 48 49 50def setup(): 51 global \ 52 label_title, \ 53 label_tip, \ 54 label_cnt, \ 55 label_conut, \ 56 label_status, \ 57 recorder, \ 58 player, \ 59 flag_record, \ 60 record_start_time, \ 61 remaining, \ 62 RECORD_DURATION, \ 63 record_file_path 64 65 M5.begin() 66 Widgets.setRotation(0) 67 Widgets.fillScreen(0x000000) 68 label_title = Widgets.Label("Audio", 39, 5, 1.0, 0x19B1D7, 0x000000, Widgets.FONTS.DejaVu18) 69 label_tip = Widgets.Label( 70 "BtnA Record", 8, 210, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 71 ) 72 label_cnt = Widgets.Label( 73 "count down", 11, 88, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 74 ) 75 label_conut = Widgets.Label("5", 48, 118, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu56) 76 label_status = Widgets.Label("Stop", 45, 50, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 77 78 BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_click_event_cb) 79 80 Mic.end() 81 Speaker.end() 82 Speaker.setPA(True) 83 recorder = Recorder(8000, 16, True) 84 player = Player(None) 85 RECORD_DURATION = 5 86 record_file_path = "test.amr" 87 player.set_vol(90) 88 89 90def loop(): 91 global \ 92 label_title, \ 93 label_tip, \ 94 label_cnt, \ 95 label_conut, \ 96 label_status, \ 97 recorder, \ 98 player, \ 99 flag_record, \ 100 record_start_time, \ 101 remaining, \ 102 RECORD_DURATION, \ 103 record_file_path 104 M5.update() 105 if flag_record: 106 if recorder.is_recording(): 107 remaining = ( 108 RECORD_DURATION - (time.ticks_diff((time.ticks_ms()), record_start_time)) / 1000 109 ) 110 if remaining > 0: 111 label_conut.setText(str(int(remaining))) 112 else: 113 label_conut.setText(str(0)) 114 else: 115 flag_record = False 116 label_conut.setText(str("")) 117 label_cnt.setText(str("")) 118 label_status.setColor(0x33CC00, 0x000000) 119 label_status.setCursor(x=22, y=50) 120 label_status.setText(str("Playing...")) 121 player.play( 122 "file://flash/res/audio/" + str(record_file_path), pos=0, volume=-1, sync=True 123 ) 124 label_status.setColor(0xFFFFFF, 0x000000) 125 label_status.setCursor(x=45, y=50) 126 label_status.setText(str("Stop")) 127 label_cnt.setText(str("count down")) 128 label_conut.setText(str(5)) 129 130 131if __name__ == "__main__": 132 try: 133 setup() 134 while True: 135 loop() 136 except (Exception, KeyboardInterrupt) as e: 137 try: 138 from utility import print_error_msg 139 140 print_error_msg(e) 141 except ImportError: 142 print("please update to latest firmware")
示例输出:
无
HAT ToF 传感器
此示例演示了如何使用 ToF(飞行时间)HAT 传感器测量距离。示例从传感器实时读取距离值并在屏幕上显示。
MicroPython 代码块:
1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4import os, sys, io 5import M5 6from M5 import * 7from hardware import Pin 8from hardware import I2C 9from hat import ToFHat 10import time 11 12 13label_title = None 14label_distance = None 15label_dis = None 16label_cm = None 17i2c0 = None 18hat_tof_0 = None 19last_time = None 20dis = None 21 22 23def setup(): 24 global label_title, label_distance, label_dis, label_cm, i2c0, hat_tof_0, last_time, dis 25 26 M5.begin() 27 Widgets.setRotation(0) 28 Widgets.fillScreen(0x000000) 29 label_title = Widgets.Label("HAT ToF", 27, 5, 1.0, 0x1F70D7, 0x000000, Widgets.FONTS.DejaVu18) 30 label_distance = Widgets.Label( 31 "Distance", 27, 55, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 32 ) 33 label_dis = Widgets.Label("---", 35, 90, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu56) 34 label_cm = Widgets.Label("cm", 53, 155, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 35 i2c0 = I2C(0, scl=Pin(0), sda=Pin(8), freq=100000) 36 hat_tof_0 = ToFHat(i2c0) 37 dis = 0 38 Power.setBatteryCharge(True) 39 Power.setExtOutput(True) 40 41 42def loop(): 43 global label_title, label_distance, label_dis, label_cm, i2c0, hat_tof_0, last_time, dis 44 M5.update() 45 if (time.ticks_diff((time.ticks_ms()), last_time)) > 200: 46 last_time = time.ticks_ms() 47 dis = int(hat_tof_0.get_distance()) 48 if dis < 10: 49 label_dis.setCursor(x=48, y=90) 50 elif dis < 100: 51 label_dis.setCursor(x=33, y=90) 52 else: 53 label_dis.setCursor(x=12, y=90) 54 label_dis.setText(str(dis)) 55 print((str("Distance: ") + str((str(dis) + str(" cm"))))) 56 57 58if __name__ == "__main__": 59 try: 60 setup() 61 while True: 62 loop() 63 except (Exception, KeyboardInterrupt) as e: 64 try: 65 from utility import print_error_msg 66 67 print_error_msg(e) 68 except ImportError: 69 print("please update to latest firmware")
示例输出:
无







