StickS3
支持以下产品:
UiFlow2 示例
IMU 传感器
此示例演示了内置 IMU(惯性测量单元)传感器功能。它实时读取并显示加速度计和陀螺仪数据,以 m/s² 显示加速度值,以度/秒 (dps) 显示陀螺仪值。
UiFlow2 代码块:
示例输出:
无
电源管理
在 UiFlow2 中打开 sticks3_power_example.m5f2 项目。
此示例演示了电源管理功能,包括电池电压监控、VBUS 电压读取、充电状态检测以及电池充电和外部输出的控制。按 BtnA 切换电池充电,按 BtnB 切换 Grove 输出。
UiFlow2 代码块:
示例输出:
无
红外发射
在 UiFlow2 中打开 sticks3_ir_tx_example.m5f2 项目。
此示例演示了红外(IR)发射功能。当按下按键 A 时,它会发送带有指定地址和数据值的 IR 数据。
UiFlow2 代码块:
示例输出:
无
音频录制与播放
此示例演示了音频录制与播放功能。按下按键 A 开始录制 5 秒。录制完成后,音频将自动播放。示例会显示录制状态和倒计时。
UiFlow2 代码块:
示例输出:
无
扬声器
在 UiFlow2 中打开 sticks3_speaker_example.m5f2 项目。
此示例演示了内置扬声器功能。按下按键 A 播放 600Hz 到 1600Hz 之间的随机频率音调。示例会在屏幕上显示当前频率。
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 切换电池充电,按 BtnB 切换 Grove 输出。
MicroPython 代码块:
1# SPDX-FileCopyrightText: 2026 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 M5.begin() 94 Widgets.setRotation(0) 95 Widgets.fillScreen(0x000000) 96 label_title = Widgets.Label("Power", 36, 5, 1.0, 0x13BDDE, 0x000000, Widgets.FONTS.DejaVu18) 97 label_5vout = Widgets.Label( 98 "OUT:----mV", 5, 85, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 99 ) 100 label_usb = Widgets.Label("USB:----mV", 5, 35, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 101 label_bat = Widgets.Label("Bat:----mV", 5, 60, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 102 label_tip = Widgets.Label( 103 "BtnA Control", 5, 210, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 104 ) 105 label_state = Widgets.Label("ON", 31, 152, 1.0, 0x00FF00, 0x000000, Widgets.FONTS.DejaVu40) 106 label_vout = Widgets.Label("5V OUT", 28, 125, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 107 108 BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_click_event_cb) 109 BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_click_event_cb) 110 111 Power.setBatteryCharge(True) 112 Power.setExtOutput(False) 113 charge = True 114 label_bat.setColor(0x33CC00, 0x000000) 115 116 117def loop(): 118 global \ 119 label_title, \ 120 label_5vout, \ 121 label_usb, \ 122 label_bat, \ 123 label_tip, \ 124 label_state, \ 125 label_vout, \ 126 vout_flag, \ 127 charge, \ 128 last_time, \ 129 usb_vol, \ 130 bat_vol, \ 131 vout_vol, \ 132 vout_state 133 M5.update() 134 if (time.ticks_diff((time.ticks_ms()), last_time)) >= 1000: 135 last_time = time.ticks_ms() 136 usb_vol = Power.getVBUSVoltage() 137 bat_vol = Power.getBatteryVoltage() 138 vout_vol = Power.getExtVoltage(M5.Power.PORT.A) 139 vout_state = Power.getExtOutput() 140 if Power.isCharging(): 141 label_bat.setColor(0x33CC00, 0x000000) 142 else: 143 label_bat.setColor(0xFFFFFF, 0x000000) 144 if vout_state: 145 label_state.setCursor(x=32, y=152) 146 label_state.setText(str("ON")) 147 label_state.setColor(0x33CC00, 0x000000) 148 else: 149 label_state.setCursor(x=24, y=152) 150 label_state.setText(str("OFF")) 151 label_state.setColor(0x666666, 0x000000) 152 label_usb.setText(str((str("USB:") + str((str(usb_vol) + str("mV")))))) 153 label_bat.setText(str((str("Bat:") + str((str(bat_vol) + str("mV")))))) 154 label_5vout.setText(str((str("Out:") + str((str(vout_vol) + str("mV")))))) 155 156 157if __name__ == "__main__": 158 try: 159 setup() 160 while True: 161 loop() 162 except (Exception, KeyboardInterrupt) as e: 163 try: 164 from utility import print_error_msg 165 166 print_error_msg(e) 167 except ImportError: 168 print("please update to latest firmware")
示例输出:
无
红外发射
此示例演示了红外(IR)发射功能。当按下按键 A 时,它会发送带有指定地址和数据值的 IR 数据。示例会显示正在传输的地址和数据。
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 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 addr = 56 41 data = 0 42 Power.setExtOutput(True) 43 label_addr.setText(str((str("addr: ") + str(addr)))) 44 45 46def loop(): 47 global label_title, label_addr, label_data, label_tip, ir, data, addr 48 M5.update() 49 50 51if __name__ == "__main__": 52 try: 53 setup() 54 while True: 55 loop() 56 except (Exception, KeyboardInterrupt) as e: 57 try: 58 from utility import print_error_msg 59 60 print_error_msg(e) 61 except ImportError: 62 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 8from audio import Player 9import time 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 21RECORD_DURATION = None 22remaining = 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 RECORD_DURATION, \ 38 remaining, \ 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 RECORD_DURATION, \ 62 remaining, \ 63 record_file_path 64 M5.begin() 65 Widgets.setRotation(0) 66 Widgets.fillScreen(0x000000) 67 label_title = Widgets.Label("Audio", 39, 5, 1.0, 0x19B1D7, 0x000000, Widgets.FONTS.DejaVu18) 68 label_tip = Widgets.Label( 69 "BtnA Record", 8, 210, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 70 ) 71 label_cnt = Widgets.Label( 72 "count down", 11, 88, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 73 ) 74 label_conut = Widgets.Label("5", 48, 118, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu56) 75 label_status = Widgets.Label("Stop", 45, 50, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18) 76 BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_click_event_cb) 77 Mic.end() 78 Speaker.end() 79 recorder = Recorder(8000, 16, True) 80 player = Player(None) 81 RECORD_DURATION = 5 82 record_file_path = "test.amr" 83 player.set_vol(90) 84 85 86def loop(): 87 global \ 88 label_title, \ 89 label_tip, \ 90 label_cnt, \ 91 label_conut, \ 92 label_status, \ 93 recorder, \ 94 player, \ 95 flag_record, \ 96 record_start_time, \ 97 RECORD_DURATION, \ 98 remaining, \ 99 record_file_path 100 M5.update() 101 if flag_record: 102 if recorder.is_recording(): 103 remaining = ( 104 RECORD_DURATION - (time.ticks_diff((time.ticks_ms()), record_start_time)) / 1000 105 ) 106 if remaining > 0: 107 label_conut.setText(str(int(remaining))) 108 else: 109 label_conut.setText(str(0)) 110 else: 111 flag_record = False 112 label_conut.setText(str("")) 113 label_cnt.setText(str("")) 114 label_status.setColor(0x33CC00, 0x000000) 115 label_status.setCursor(x=22, y=50) 116 label_status.setText(str("Playing...")) 117 player.play( 118 "file://flash/res/audio/" + str(record_file_path), pos=0, volume=-1, sync=True 119 ) 120 label_status.setColor(0xFFFFFF, 0x000000) 121 label_status.setCursor(x=45, y=50) 122 label_status.setText(str("Stop")) 123 label_cnt.setText(str("count down")) 124 label_conut.setText(str(5)) 125 126 127if __name__ == "__main__": 128 try: 129 setup() 130 while True: 131 loop() 132 except (Exception, KeyboardInterrupt) as e: 133 try: 134 from utility import print_error_msg 135 136 print_error_msg(e) 137 except ImportError: 138 print("please update to latest firmware")
示例输出:
无
扬声器
此示例演示了内置扬声器功能。按下按键 A 播放 600Hz 到 1600Hz 之间的随机频率音调。示例会在屏幕上显示当前频率。
MicroPython 代码块:
1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4 5import os, sys, io 6import M5 7from M5 import * 8import random 9 10 11label_title = None 12label_freq = None 13label_tip = None 14freq_hz = None 15 16 17def btna_click_event_cb(state): 18 global label_title, label_freq, label_tip, freq_hz 19 print("tone") 20 Speaker.tone(freq_hz, 200) 21 freq_hz = random.randint(600, 1600) 22 label_freq.setText(str((str("Freq: ") + str((str(freq_hz) + str("Hz")))))) 23 24 25def setup(): 26 global label_title, label_freq, label_tip, freq_hz 27 M5.begin() 28 Widgets.setRotation(0) 29 Widgets.fillScreen(0x000000) 30 label_title = Widgets.Label("Speaker", 28, 5, 1.0, 0x1EC8E3, 0x000000, Widgets.FONTS.DejaVu18) 31 label_freq = Widgets.Label( 32 "Freq:600Hz", 5, 65, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 33 ) 34 label_tip = Widgets.Label( 35 "BtnA Tone", 19, 210, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18 36 ) 37 BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_click_event_cb) 38 Speaker.begin() 39 Speaker.setVolumePercentage(0.9) 40 freq_hz = 600 41 label_freq.setText(str((str("Freq: ") + str((str(freq_hz) + str("Hz")))))) 42 43 44def loop(): 45 global label_title, label_freq, label_tip, freq_hz 46 M5.update() 47 48 49if __name__ == "__main__": 50 try: 51 setup() 52 while True: 53 loop() 54 except (Exception, KeyboardInterrupt) as e: 55 try: 56 from utility import print_error_msg 57 58 print_error_msg(e) 59 except ImportError: 60 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")
示例输出:
无







