# DFRobot_N20SerialMotor
**Repository Path**: dfrobot/DFRobot_N20SerialMotor
## Basic Information
- **Project Name**: DFRobot_N20SerialMotor
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-20
- **Last Updated**: 2026-08-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# DFRobot_N20SerialMotor
===========================
* [English Version](./README.md)
N20 电机驱动模块的 Arduino 库,基于 Modbus-RTU 协议,可实现电机速度控制、地址配置、串口参数配置和多设备级联扫描。
![产品图片]
## 产品链接 (https://www.dfrobot.com.cn)
SKU: DFR1277
## 目录
* [概述](#概述)
* [库安装](#库安装)
* [方法](#方法)
* [示例](#示例)
* [兼容性](#兼容性)
* [历史](#历史)
* [创作者](#创作者)
## 概述
* 校验模块 Modbus-RTU 通讯
* 设置电机速度(`-255~255`,0 停止电机)
* 配置从机地址(`1~247`),重新上电后生效
* 配置波特率,重新上电后生效
* 恢复出厂设置(UART 参数和设备地址),默认参数重新上电后生效
* 读取 VID/PID/版本并扫描总线设备
## 库安装
使用前请先下载本库和依赖库:
* https://github.com/DFRobot/DFRobot_RTU.git
将两个库复制到 `Arduino/libraries` 目录,然后打开示例运行。
## 方法
```C++
/**
* @fn DFRobot_N20SerialMotor
* @brief 构造函数。
* @param addr Modbus 从机地址,范围:1~247。
* @param s Modbus-RTU 通讯串口对象指针。
*/
DFRobot_N20SerialMotor(uint8_t addr, Stream *s);
/**
* @fn begin
* @brief 校验当前地址设备。
* @n 调用本函数前,请先在用户程序中初始化串口。
* @return int8_t
* @retval 0 成功
* @retval -1 失败
*/
int8_t begin(void);
/**
* @fn setSpeed
* @brief 设置电机速度。
* @param speed 速度范围:-255~255。0 停止电机。
* @return int8_t
* @retval 0 成功
* @retval -1 失败
*/
int8_t setSpeed(int16_t speed);
/**
* @fn setDeviceAddr
* @brief 设置模块设备地址。
* @param addr 地址范围:1~247。
* @n 新地址在模块重新上电后生效。
* @n 本函数不会更新内部通讯地址;
* @n 模块重启后请使用新地址重新创建对象。
* @return int8_t
* @retval 0 成功
* @retval -1 失败
*/
int8_t setDeviceAddr(uint8_t addr);
/**
* @fn setBaudrate
* @brief 配置波特率,仅可修改波特率,不可修改停止位和校验位。
* @param baud 波特率代码。
* @n eBaud2400
* @n eBaud4800
* @n eBaud9600
* @n eBaud14400
* @n eBaud19200
* @n eBaud38400
* @n eBaud57600
* @n eBaud115200
* @n 新波特率在模块重新上电后生效。
* @n 本函数不会更新主机串口波特率;
* @n 模块重启后请使用新波特率重新初始化串口。
* @return int8_t
* @retval 0 成功
* @retval -1 失败
*/
int8_t setBaudrate(eBaudrate_t baud);
/**
* @fn restoreFactory
* @brief 恢复出厂设置,主要将 UART 参数和设备地址恢复为默认值。
* @n 默认参数在模块重新上电后生效。
* @return int8_t
* @retval 0 成功
* @retval -1 失败
*/
int8_t restoreFactory(void);
/**
* @fn getDeviceInfo
* @brief 读取 VID/PID/版本信息。
* @return sDeviceInfo_t
* @n VID 产品 VID。
* @n PID 产品 PID。
* @n version 产品版本。
*/
sDeviceInfo_t getDeviceInfo(void);
/**
* @fn scanAddress
* @brief 扫描总线上在线设备地址。
* @param addrBuf 输出地址数组。
* @param bufLen addrBuf 最大可存储数量。
* @param startAddr 扫描起始地址,小于 1 时钳位为 1。
* @param endAddr 扫描结束地址,大于 247 时钳位为 247。
* @return uint8_t 发现的设备数量。
*/
uint8_t scanAddress(uint8_t *addrBuf, uint8_t bufLen, uint8_t startAddr = 1, uint8_t endAddr = 247);
```
## 示例
* `singleMotorControl`:初始化单个电机并进行正反转速度控制。
* `dualMotorControl`:初始化两个级联电机,并在同一总线上控制。
* `addressScan`:扫描 Modbus-RTU 总线并打印发现的电机地址。
## 兼容性
MCU | Work Well | Work Wrong | Untested | Remarks
------------------ | :----------: | :-------------: | :---------: | :----:
Arduino Uno | √ | | |
Arduino MEGA2560 | √ | | |
Arduino Leonardo | √ | | |
FireBeetle-ESP8266 | √ | | |
FireBeetle-ESP32 | √ | | |
FireBeetle-M0 | √ | | |
Micro:bit | | | √ |
## 历史
- 2026-05-09 - 发布 1.0.0 版本。
## 创作者
Written by JiaLi , 2026. (Welcome to our [website](https://www.dfrobot.com/))