Roller485 Unit

支持以下产品:

Roller485

Roller485 I2C 应用示例:

 1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from hardware import *
 9from unit import Roller485Unit
10
11
12title0 = None
13label0 = None
14label1 = None
15label2 = None
16label3 = None
17label4 = None
18i2c1 = None
19roller485_0 = None
20
21
22output = None
23mode = None
24
25
26def btn_b_was_clicked_event(state):
27    global title0, label0, label1, label2, label3, label4, i2c1, roller485_0, output, mode
28    output = output ^ (0x01 << 0)
29    roller485_0.set_motor_output_state(output)
30
31
32def btn_a_was_clicked_event(state):
33    global title0, label0, label1, label2, label3, label4, i2c1, roller485_0, output, mode
34    mode = mode + 1
35    if mode > 4:
36        mode = 1
37
38
39def setup():
40    global title0, label0, label1, label2, label3, label4, i2c1, roller485_0, output, mode
41
42    M5.begin()
43    Widgets.fillScreen(0x222222)
44    title0 = Widgets.Title("Roller485 I2C Example", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18)
45    label0 = Widgets.Label("mode:", 1, 63, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
46    label1 = Widgets.Label("motor state:", 2, 108, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
47    label2 = Widgets.Label("speed:", 2, 152, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
48    label3 = Widgets.Label("mode", 40, 215, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
49    label4 = Widgets.Label("on/off", 126, 215, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
50
51    BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btn_b_was_clicked_event)
52    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btn_a_was_clicked_event)
53
54    i2c1 = I2C(1, scl=Pin(22), sda=Pin(21), freq=100000)
55    roller485_0 = Roller485Unit(i2c1, address=0x64, mode=Roller485Unit.I2C_MODE)
56    roller485_0.set_motor_output_state(0)
57    output = roller485_0.get_motor_output_state()
58    mode = roller485_0.get_motor_mode()
59    label0.setText(str((str("mode:") + str(mode))))
60    label1.setText(str((str("motor state:") + str(output))))
61
62
63def loop():
64    global title0, label0, label1, label2, label3, label4, i2c1, roller485_0, output, mode
65    M5.update()
66    label0.setText(str((str("mode:") + str(mode))))
67    label1.setText(str((str("motor state:") + str(output))))
68    if mode == 1:
69        roller485_0.set_motor_speed(20000)
70        roller485_0.set_speed_max_current(400)
71        label2.setText(str((str("speed:") + str((roller485_0.get_motor_speed_readback())))))
72    elif mode == 2:
73        roller485_0.set_motor_position(1000)
74        roller485_0.set_position_max_current(400)
75        label2.setText(str((str("position:") + str((roller485_0.get_motor_position_readback())))))
76    elif mode == 3:
77        roller485_0.set_motor_max_current(400)
78        label2.setText(str((str("current:") + str((roller485_0.get_motor_current_readback())))))
79    elif mode == 4:
80        label2.setText(str((str("encoder:") + str((roller485_0.get_encoder_value())))))
81    roller485_0.set_motor_mode(mode)
82
83
84if __name__ == "__main__":
85    try:
86        setup()
87        while True:
88            loop()
89    except (Exception, KeyboardInterrupt) as e:
90        try:
91            from utility import print_error_msg
92
93            print_error_msg(e)
94        except ImportError:
95            print("please update to latest firmware")

Roller485 I2C UiFlow2 应用示例:

i2c_example.png

roller485_i2c_fire_example.m5f2

Roller485 RS485 应用示例:

  1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import os, sys, io
  6import M5
  7from M5 import *
  8from hardware import *
  9from unit import Roller485Unit
 10from unit import RS485Unit
 11
 12
 13title0 = None
 14label0 = None
 15label1 = None
 16label2 = None
 17label3 = None
 18label4 = None
 19rs485_0 = None
 20roller485_0 = None
 21
 22
 23output = None
 24mode = None
 25
 26
 27def btn_b_was_clicked_event(state):
 28    global title0, label0, label1, label2, label3, label4, rs485_0, roller485_0, output, mode
 29    output = output ^ (0x01 << 0)
 30    roller485_0.set_motor_output_state(output)
 31
 32
 33def btn_a_was_clicked_event(state):
 34    global title0, label0, label1, label2, label3, label4, rs485_0, roller485_0, output, mode
 35    mode = mode + 1
 36    if mode > 4:
 37        mode = 1
 38
 39
 40def setup():
 41    global title0, label0, label1, label2, label3, label4, rs485_0, roller485_0, output, mode
 42
 43    M5.begin()
 44    Widgets.fillScreen(0x222222)
 45    title0 = Widgets.Title(
 46        "Roller485 RS485 Example", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18
 47    )
 48    label0 = Widgets.Label("mode:", 1, 63, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 49    label1 = Widgets.Label("motor state:", 2, 108, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 50    label2 = Widgets.Label("speed:", 2, 152, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 51    label3 = Widgets.Label("mode", 40, 215, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 52    label4 = Widgets.Label("on/off", 126, 215, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 53
 54    BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btn_b_was_clicked_event)
 55    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btn_a_was_clicked_event)
 56
 57    rs485_0 = RS485Unit(2, port=(13, 15))
 58    rs485_0.init(
 59        tx_pin=None,
 60        rx_pin=None,
 61        baudrate=115200,
 62        data_bits=None,
 63        stop_bits=None,
 64        parity=None,
 65        ctrl_pin=None,
 66    )
 67    roller485_0 = Roller485Unit(rs485_0, address=0, mode=Roller485Unit.RS485_MODE)
 68    roller485_0.set_motor_output_state(0)
 69    output = 0
 70    mode = roller485_0.get_motor_mode()
 71    label0.setText(str((str("mode:") + str(mode))))
 72    label1.setText(str((str("motor state:") + str(output))))
 73
 74
 75def loop():
 76    global title0, label0, label1, label2, label3, label4, rs485_0, roller485_0, output, mode
 77    M5.update()
 78    label0.setText(str((str("mode:") + str(mode))))
 79    label1.setText(str((str("motor state:") + str(output))))
 80    if mode == 1:
 81        roller485_0.set_motor_speed(20000)
 82        roller485_0.set_speed_max_current(400)
 83        label2.setText(str((str("speed:") + str((roller485_0.get_motor_speed_readback())))))
 84    elif mode == 2:
 85        roller485_0.set_motor_position(1000)
 86        roller485_0.set_position_max_current(400)
 87        label2.setText(str((str("position:") + str((roller485_0.get_motor_position_readback())))))
 88    elif mode == 3:
 89        roller485_0.set_motor_max_current(400)
 90        label2.setText(str((str("current:") + str((roller485_0.get_motor_current_readback())))))
 91    elif mode == 4:
 92        label2.setText(str((str("encoder:") + str((roller485_0.get_encoder_value())))))
 93    roller485_0.set_motor_mode(mode)
 94
 95
 96if __name__ == "__main__":
 97    try:
 98        setup()
 99        while True:
100            loop()
101    except (Exception, KeyboardInterrupt) as e:
102        try:
103            from utility import print_error_msg
104
105            print_error_msg(e)
106        except ImportError:
107            print("please update to latest firmware")

Roller485 RS485 UiFlow2 应用示例:

rs485_example.png

roller485_485_fire_example.m5f2

Roller485 RS485ToI2C 应用示例:

  1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import os, sys, io
  6import M5
  7from M5 import *
  8from hardware import *
  9from unit import Roller485Unit
 10from unit import RS485Unit
 11from unit import ENVUnit
 12
 13
 14title0 = None
 15label5 = None
 16label0 = None
 17label6 = None
 18label1 = None
 19label2 = None
 20label3 = None
 21label4 = None
 22env2_0 = None
 23rs485_0 = None
 24roller485_0 = None
 25
 26
 27output = None
 28mode = None
 29
 30
 31def btn_b_was_clicked_event(state):
 32    global \
 33        title0, \
 34        label5, \
 35        label0, \
 36        label6, \
 37        label1, \
 38        label2, \
 39        label3, \
 40        label4, \
 41        env2_0, \
 42        rs485_0, \
 43        roller485_0, \
 44        output, \
 45        mode
 46    output = output ^ (0x01 << 0)
 47    roller485_0.set_motor_output_state(output)
 48
 49
 50def btn_a_was_clicked_event(state):
 51    global \
 52        title0, \
 53        label5, \
 54        label0, \
 55        label6, \
 56        label1, \
 57        label2, \
 58        label3, \
 59        label4, \
 60        env2_0, \
 61        rs485_0, \
 62        roller485_0, \
 63        output, \
 64        mode
 65    mode = mode + 1
 66    if mode > 4:
 67        mode = 1
 68
 69
 70def setup():
 71    global \
 72        title0, \
 73        label5, \
 74        label0, \
 75        label6, \
 76        label1, \
 77        label2, \
 78        label3, \
 79        label4, \
 80        env2_0, \
 81        rs485_0, \
 82        roller485_0, \
 83        output, \
 84        mode
 85
 86    M5.begin()
 87    Widgets.fillScreen(0x222222)
 88    title0 = Widgets.Title(
 89        "Roller485 485ToI2C Example", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18
 90    )
 91    label5 = Widgets.Label("temp:", 182, 66, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 92    label0 = Widgets.Label("mode:", 1, 63, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 93    label6 = Widgets.Label("humi:", 182, 131, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 94    label1 = Widgets.Label("motor state:", 2, 108, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 95    label2 = Widgets.Label("speed:", 2, 152, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 96    label3 = Widgets.Label("mode", 40, 215, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 97    label4 = Widgets.Label("on/off", 126, 215, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
 98
 99    BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btn_b_was_clicked_event)
100    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btn_a_was_clicked_event)
101
102    rs485_0 = RS485Unit(2, port=(13, 15))
103    rs485_0.init(
104        tx_pin=None,
105        rx_pin=None,
106        baudrate=115200,
107        data_bits=None,
108        stop_bits=None,
109        parity=None,
110        ctrl_pin=None,
111    )
112    roller485_0 = Roller485Unit(rs485_0, address=0, mode=Roller485Unit.RS485_TO_I2C_MODE)
113    env2_0 = ENVUnit(i2c=roller485_0, type=2)
114    roller485_0.set_motor_output_state(0)
115    output = 0
116    mode = roller485_0.get_motor_mode()
117    label0.setText(str((str("mode:") + str(mode))))
118    label1.setText(str((str("motor state:") + str(output))))
119
120
121def loop():
122    global \
123        title0, \
124        label5, \
125        label0, \
126        label6, \
127        label1, \
128        label2, \
129        label3, \
130        label4, \
131        env2_0, \
132        rs485_0, \
133        roller485_0, \
134        output, \
135        mode
136    M5.update()
137    label0.setText(str((str("mode:") + str(mode))))
138    label1.setText(str((str("motor state:") + str(output))))
139    label5.setText(str((str("temp:") + str((env2_0.read_temperature())))))
140    label6.setText(str((str("humi:") + str((env2_0.read_pressure())))))
141    if mode == 1:
142        roller485_0.set_motor_speed(20000)
143        roller485_0.set_speed_max_current(400)
144        label2.setText(str((str("speed:") + str((roller485_0.get_motor_speed_readback())))))
145    elif mode == 2:
146        roller485_0.set_motor_position(1000)
147        roller485_0.set_position_max_current(400)
148        label2.setText(str((str("position:") + str((roller485_0.get_motor_position_readback())))))
149    elif mode == 3:
150        roller485_0.set_motor_max_current(400)
151        label2.setText(str((str("current:") + str((roller485_0.get_motor_current_readback())))))
152    elif mode == 4:
153        label2.setText(str((str("encoder:") + str((roller485_0.get_encoder_value())))))
154    roller485_0.set_motor_mode(mode)
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")

Roller485 RS485ToI2C UiFlow2 应用示例:

rs485_i2c_example.png

roller485_485toi2c_fire_example.m5f2

class Roller485Unit

Constructors

class Roller485Unit(bus, address, mode)

根据通信模式初始化 Roller485Unit 对象。

参数:
  • bus – I2C/RS485 总线实例。

  • address – 电机的 RS485 地址。默认为 _ROLLER485_RS485_ADDR。

  • mode – Roller485 通信模式。

UIFLOW2:

init.png

class RollerBase

Constructors

class RollerBase

Methods

RollerBase.set_motor_output_state(ctrl) None

设置电机输出状态。

参数:

ctrl (int) – 电机输出的控制值。

UIFLOW2:

set_motor_output_state.png

RollerBase.get_motor_output_state() bool

获取电机输出状态。

返回:

如果电机输出处于激活状态,则为 True,否则为 False。

UIFLOW2:

get_motor_output_state.png

RollerBase.set_motor_mode(mode) None

设置电机模式。

参数:

mode (int) – 为电机设置的模式。

UIFLOW2:

set_motor_mode.png

RollerBase.get_motor_mode() int

获取电机模式。

返回:

当前电机模式。

UIFLOW2:

get_motor_mode.png

RollerBase.set_motor_over_range_protect_state(state) None

设置电机超量程保护状态。

参数:

state (int) – 保护状态值(1 表示启用,0 表示禁用)。

UIFLOW2:

set_motor_over_range_protect_state.png

RollerBase.get_motor_over_range_protect_state() bool

获取电机超范围保护状态。

返回:

如果已启用保护则为 True,否则为 False。

UIFLOW2:

get_motor_over_range_protect_state.png

RollerBase.remove_motor_jam_protect() None

设置电机卡滞释放保护。

UIFLOW2:

remove_motor_jam_protect.png

RollerBase.get_motor_status() int

获取电机状态。

返回:

电机的当前状态。

UIFLOW2:

get_motor_status.png

RollerBase.get_motor_error_code() int

获取电机错误代码。

返回:

电机的当前错误代码。

UIFLOW2:

get_motor_error_code.png

RollerBase.set_button_change_mode(state) None

设置按钮切换模式。

参数:

state (int) – 更改模式状态值(1 表示启用,0 表示禁用)。

UIFLOW2:

set_button_change_mode.png

RollerBase.get_button_change_mode() int

获取按键切换模式。

返回:

当前按钮更改模式值。

UIFLOW2:

get_button_change_mode.png

RollerBase.set_motor_jam_protect_state(state) None

设置电机堵转保护启用/禁用。

参数:

state (int) – 保护状态值(1 表示启用,0 表示禁用)。

UIFLOW2:

set_motor_jam_protect_state.png

RollerBase.get_motor_jam_protect_state() bool

获取电机卡滞保护状态。

返回:

如果启用了防夹保护,则为 True,否则为 False。

UIFLOW2:

get_motor_jam_protect_state.png

RollerBase.set_motor_id(id) None

设置电机 ID。

参数:

id (int) – 要分配给电机的 ID。

UIFLOW2:

set_motor_id.png

RollerBase.get_motor_id() int

获取电机 ID。

返回:

当前电机 ID。

UIFLOW2:

get_motor_id.png

RollerBase.set_485_baudrate(bps) None

设置 485 波特率。

参数:

bps (int) – 波特率值。

UIFLOW2:

set_485_baudrate.png

RollerBase.get_485_baudrate() int

获取 485 波特率。

返回:

当前 485 波特率。

UIFLOW2:

get_485_baudrate.png

RollerBase.set_rgb_brightness(bright) None

设置 RGB 亮度。

参数:

bright (int) – 亮度值。

UIFLOW2:

set_rgb_brightness.png

RollerBase.get_rgb_brightness() int

获取 RGB 亮度。

返回:

当前 RGB 亮度值。

UIFLOW2:

get_rgb_brightness.png

RollerBase.set_motor_speed(speed) None

设置电机速度和最大电流设置。

参数:

speed (int) – 要设置的速度值。

UIFLOW2:

set_motor_speed.png

RollerBase.get_motor_speed() int

获取电机速度和最大电流设置。

返回:

当前电机速度。

UIFLOW2:

get_motor_speed.png

RollerBase.set_speed_max_current(current) None

设置电机速度和最大电流设置。

参数:

current (int) – 要设置的最大电流值。

UIFLOW2:

set_speed_max_current.png

RollerBase.get_speed_max_current() int

获取电机速度和最大电流设置。

返回:

当前最大电流设置。

UIFLOW2:

get_speed_max_current.png

RollerBase.get_motor_speed_readback() float

获取电机速度回读值。

返回:

电机速度的读回值。

UIFLOW2:

get_motor_speed_readback.png

RollerBase.set_motor_speed_pid(p, i, d) None

设置电机速度 PID。

参数:
  • p (float) – 比例增益。

  • i (float) – 积分增益。

  • d (float) – 微分增益。

UIFLOW2:

set_motor_speed_pid.png

RollerBase.get_motor_speed_pid() tuple

获取电机速度 PID。

返回:

一个包含 PID 值的元组。

UIFLOW2:

get_motor_speed_pid.png

RollerBase.set_motor_position(position) None

设置电机位置和最大电流设置。

参数:

position (int) – 要设置的位置值。

UIFLOW2:

set_motor_position.png

RollerBase.get_motor_position() int

获取电机位置和最大电流设置。

返回:

当前电机位置。

UIFLOW2:

get_motor_position.png

RollerBase.set_position_max_current(current) None

设置电机位置和最大电流设置。

参数:

current (int) – 要设置的最大电流值。

UIFLOW2:

set_position_max_current.png

RollerBase.get_position_max_current() int

获取电机位置和最大电流设置。

返回:

当前最大电流设置。

UIFLOW2:

get_position_max_current.png

RollerBase.get_motor_position_readback() float

获取电机位置回读值。

返回:

电机位置的回读值。

UIFLOW2:

get_motor_position_readback.png

RollerBase.get_motor_position_pid() tuple

获取电机位置 PID。

返回:

一个包含位置 PID 值的元组。

UIFLOW2:

get_motor_position_pid.png

RollerBase.set_motor_position_pid(p, i, d) None

设置电机位置 PID。

参数:
  • p (float) – 比例增益。

  • i (float) – 积分增益。

  • d (float) – 微分增益。

UIFLOW2:

set_motor_position_pid.png

RollerBase.set_motor_max_current(current) None

设置电机最大电流。

参数:

current (int) – 电机的最大电流,在发送前乘以 100。

UIFLOW2:

set_motor_max_current.png

RollerBase.get_motor_max_current() int

获取电机最大电流。

返回:

电机最大电流,读取后除以 100。

UIFLOW2:

get_motor_max_current.png

RollerBase.get_motor_current_readback() float

获取电机电流回读值。

返回:

电机电流回读值,读取后除以 100。

UIFLOW2:

get_motor_current_readback.png

RollerBase.set_rgb_color(rgb) None

设置系统 RGB 颜色。

参数:

rgb (int) – RGB 颜色值,格式为 0xRRGGBB。

UIFLOW2:

set_rgb_color.png

RollerBase.get_rgb_color() tuple

获取系统 RGB 颜色。

返回:

RGB 颜色,格式为元组 (R, G, B)。

UIFLOW2:

get_rgb_color.png

RollerBase.set_rgb_mode(mode) None

设置系统 RGB 模式。

参数:

mode (int) – RGB 模式的值。

UIFLOW2:

set_rgb_mode.png

RollerBase.get_rgb_mode() int

获取系统 RGB 模式。

返回:

当前 RGB 模式值。

UIFLOW2:

get_rgb_mode.png

RollerBase.get_vin_voltage() int

获取系统 VIN 电压。

返回:

读取系统 VIN 电压值后,将其乘以 10。

UIFLOW2:

get_vin_voltage.png

RollerBase.get_temperature_value() int

获取系统温度。

返回:

当前系统温度值。

UIFLOW2:

get_temperature_value.png

RollerBase.set_encoder_value(count) None

设置系统编码器的值。

参数:

count (int) – 编码器计数值。

UIFLOW2:

set_encoder_value.png

RollerBase.get_encoder_value() int

获取系统编码器值。

返回:

当前编码器的值。

UIFLOW2:

get_encoder_value.png

RollerBase.save_param_to_flash() None

将电机数据保存到 flash。

UIFLOW2:

save_param_to_flash.png

RollerBase.get_firmware_version() int

获取设备固件版本。

返回:

当前固件版本。

UIFLOW2:

get_firmware_version.png

RollerBase.set_i2c_address(addr) None

设置 I2C 地址。

参数:

addr (int) – 新的 I2C 地址。必须介于 0x08 和 0x77 之间。

UIFLOW2:

set_i2c_address.png

RollerBase.get_i2c_address() int

获取当前 I2C 地址。

返回:

当前 I2C 地址。

UIFLOW2:

get_i2c_address.png

class RollerI2C(RollerBase)

Constructors

class RollerI2C(i2c, address)

初始化 RollerI2C 对象。

参数:
  • i2c (I2C|PAHUBUnit) – I2C 总线实例或 PAHUBUnit 实例。

  • address (int) – 设备的 I2C 地址。默认为 _ROLLER485_I2C_ADDR。

UIFLOW2:

init.png

Methods

RollerI2C.read(register, length) bytes

从 I2C 设备上的指定寄存器读取数据。

参数:
  • register – 要读取的寄存器名称。

  • length – 要读取的字节数。

返回:

从设备读取的数据,以 bytes 对象的形式返回。

RollerI2C.write(register, bytes) None

向 I2C 设备的指定寄存器写入数据。

参数:
  • register – 要写入的寄存器名称。

  • bytes – 要写入寄存器的数据,格式为 bytes 对象。

class Roller485(RollerBase)

Constructors

class Roller485(bus, address)

初始化 Roller485 对象。

参数:
  • bus – RS485 总线实例。

  • address (int) – 电机的 RS485 地址。默认为 _ROLLER485_RS485_ADDR。

Methods

Roller485.read(register, length) bytes

通过 RS485 从指定寄存器读取数据。

参数:
  • register – 要读取的寄存器名称。

  • length – 要读取的字节数。

Roller485.create_frame(cmd, motor_id, *datas) None

根据给定的命令和电机 ID 创建命令帧。

参数:
  • cmd – 命令字节。

  • motor_id – 电机的 ID。

  • datas – 要包含在帧中的额外数据字节。

Roller485.write(register, bytes) bool

通过 RS485 将数据写入指定寄存器。

参数:
  • register – 要写入的寄存器名称。

  • bytes – 要写入寄存器的数据,格式为 bytes 对象。

返回:

写入数据后的响应。

Roller485.send_command(cmd, id, data, buf_len) bool

通过 RS485 发送命令。

参数:
  • cmd – 命令字节。

  • id – 电机 ID。

  • data – 与命令一起发送的数据。

  • buf_len – 缓冲区的长度。

Roller485.read_response(cmd, id) tuple[Literal[True], Any]

通过 RS485 发送命令。

参数:
  • cmd – 命令字节。

  • id – 电机 ID。

返回:

一个元组 (success, response)。如果 response 有效,则 success 为 True,response 为读取到的数据。

Roller485._crc8(buffer) int

计算 CRC8 校验和。

参数:

buffer – 用于计算校验和的数据缓冲区。

返回:

计算得到的 CRC8 值。

class Roller485ToI2CBus(RollerBase)

Constructors

class Roller485ToI2CBus(bus, address, mode)

初始化 Roller485ToI2CBus 对象。

参数:
  • bus – RS485 总线实例。

  • address – 电机的 RS485 地址。默认为 _ROLLER485_RS485_ADDR。

Methods

Roller485ToI2CBus.readfrom_mem(addr, mem_addr, nbytes) bytes

从 I2C 从设备的指定寄存器读取数据。

参数:
  • addr – 要读取的 I2C 从机地址。

  • mem_addr – 内存寄存器地址。

  • nbytes – 要读取的字节数。

返回:

从寄存器读取的数据。

抛出 Exception 异常:

如果读取操作失败。

Roller485ToI2CBus.readfrom_mem_into(addr, mem_addr, buf)

从 I2C 从设备的指定寄存器读取数据。

参数:
  • addr – 要读取的 I2C 从机地址。

  • mem_addr – 内存寄存器地址。

  • buf – 用于存储数据的缓冲区。

Roller485ToI2CBus.writeto_mem(addr, mem_addr, buf) Literal[True]

将数据写入 I2C 从设备的指定寄存器。

参数:
  • addr – 要写入的 I2C 从设备地址。

  • mem_addr – 内存寄存器地址。

  • buf – 要写入的数据字节。

返回:

如果写入操作成功,则为 True。

抛出 Exception 异常:

如果写入操作失败。

Roller485ToI2CBus.readfrom(addr, nbytes) bytes

通过 RS485 从 I2C 从设备读取数据。

参数:
  • addr – 要读取的 I2C 从机地址。

  • nbytes – 要读取的字节数。

返回:

从 I2C 从设备读取的数据。

抛出 Exception 异常:

如果读取操作失败。

Roller485ToI2CBus.readfrom_into(addr, buf)

通过 RS485 从 I2C 从设备读取数据。

参数:
  • addr – I2C 设备地址。

  • buf – 用于存储数据的缓冲区。

Roller485ToI2CBus.writeto(addr, buf, stop) Literal[True]

通过 RS485 向 I2C 从设备写入数据。

参数:
  • addr – 要写入的 I2C 从设备地址。

  • buf – 要写入的数据字节。

  • stop – 写入后是否发送停止位。

返回:

如果写入操作成功,则为 True。

抛出 Exception 异常:

如果写入操作失败。

Roller485ToI2CBus.scan(addr, buf, stop) List

扫描 I2C 总线上的设备。

返回:

找到的 I2C 设备地址列表。