K210、Openmv与串行总线舵机通信(基于micropython)舵机驱动板和舵机控制板代码
最近博主在使用幻尔公司 串行总线舵机时,想使用k210控制,由于官方没有相关例程(树莓派的版本是python版本代码,用不了)特此分享一下控制代码
主要调用函数
a.to_bytes(x,'little'/'big')
#将int型变成byte型
#第一个参数是显示位数,第二个参数为显示顺序:从小到大/从大到小
int.from_bytes(a,'little'/'big')
#将byte型变成int型
#第一个参数是显示位数,第二个参数为显示顺序:从小到大/从大到小
舵机驱动板版本
需要注意波特率为115200
这里计算校验和要逐个byte转成int相加,不是直接把各参数相加
例如servoWriteCmd(1,1,0,1000)
并非是
1+7+1+0+1000
而是化为byte型
0x01+0x07+ 0x01 +0x00 +0x00+ 0xE8 +0x03 = 0xF4 = 244
0xF4取~后超过255因此取最后字节1011即0x0B
故最后的消息为55 55 01 07 01 00 00 E8 03 0B
from machine import UART,Timer
from Maix import GPIO
from fpioa_manager import fm
from ubinascii import *
import time
#映射串口引脚#初始化串口
uart = UART(UART.UART1, 115200, read_buf_len=4096)def servoWriteCmd(id, cmd, par1, par2):fm.register(6, fm.fpioa.UART1_RX, force=True)fm.register(7, fm.fpioa.UART1_TX, force=True)begin = 85 #0x55的十进制buf= begin.to_bytes(1,'little')buf += buftry:len = 7sum = 0a = id.to_bytes(1,'little')b = len.to_bytes(1,'little')c = cmd.to_bytes(1,'little')d = par1.to_bytes(1,'little')dd = par1.to_bytes(1,'big')f = par2.to_bytes(2,'little')ff = par2.to_bytes(2,'big')#print(par2 % 256)sum = int.from_bytes(a,'big')+ int.from_bytes(b,'big')+ int.from_bytes(c,'big')+(par1 % 256)+(par1 // 256)+(par2 % 256)+(par2 // 256)print(sum)sum = ~sum #取反print(sum.to_bytes(1,'little'))buf += id.to_bytes(1,'little')+ len.to_bytes(1,'little') + cmd.to_bytes(1,'little')+par1.to_bytes(2,'little')+par2.to_bytes(2,'little')+sum.to_bytes(1,'little')uart.write(buf)print(buf)except Exception as e:print(e)def portInit(): #配置用到的IO口fm.register(6, fm.fpioa.GPIO0, force=True)RX = GPIO(GPIO.GPIO0,GPIO.OUT)RX.value(0)fm.register(7, fm.fpioa.GPIO1, force=True)TX = GPIO(GPIO.GPIO1,GPIO.OUT)TX.value(1)def portWrite(): #配置单线串口为输出fm.register(6, fm.fpioa.GPIO0, force=True)RX = GPIO(GPIO.GPIO0,GPIO.OUT)RX.value(0)fm.register(7, fm.fpioa.GPIO1, force=True)TX = GPIO(GPIO.GPIO1,GPIO.OUT)TX.value(1)def portRead(): #配置单线串口为输入fm.register(6, fm.fpioa.GPIO0, force=True)RX = GPIO(GPIO.GPIO0,GPIO.OUT)RX.value(1)fm.register(7, fm.fpioa.GPIO1, force=True)TX = GPIO(GPIO.GPIO1,GPIO.OUT)TX.value(0)portInit()
while True:try:portWrite() #将单线串口配置为输出servoWriteCmd(1,1,0,1000) #发送命令 参数1 舵机id=1, 参数2 命令 = 1, 参数3 位置 = 0, 参数4 时间 = 1000ms 55 55 01 07 01 00 00 E8 03 0Btime.sleep(1.1)servoWriteCmd(1,1,1000,2000)#55 55 01 07 01 E8 03 D0 07 34time.sleep(2.1)except Exception as e:print(e)break
舵机控制板版本
需要注意波特率为9600
控制板的代码相对简单,没有校验和只需要将相应参数转换为byte型即可,这里只写了控制单个舵机的函数,多个舵机控制读者请酌情自行编写
# Untitled - By: lenovo - 周一 8月 1 2022from machine import UART,Timer
from Maix import GPIO
from fpioa_manager import fm
from ubinascii import *
import time
#映射串口引脚#初始化串口
uart = UART(UART.UART1, 9600, read_buf_len=4096)def servoWriteCmd(cmd,count,par1,id,par2):fm.register(6, fm.fpioa.UART1_RX, force=True)fm.register(7, fm.fpioa.UART1_TX, force=True)begin = 85buf= begin.to_bytes(1,'little')buf += buftry:len = count*3+5buf += len.to_bytes(1,'little')+ cmd.to_bytes(1,'little') + count.to_bytes(1,'little')+par1.to_bytes(2,'little')+id.to_bytes(1,'little')+par2.to_bytes(2,'little')uart.write(buf)print(buf)except Exception as e:print(e)#portInit()
while True:try:#portWrite() #将单线串口配置为输出servoWriteCmd(3,1,1000,2,800) #发送命令 参数1 舵机id=1, 参数2 命令 = 1, 参数3 位置 = 0, 参数4 时间 = 1000ms time.sleep(1.1)servoWriteCmd(3,1,1000,2,100)#time.sleep(2.1)except Exception as e:print(e)break
K210、Openmv与串行总线舵机通信(基于micropython)舵机驱动板和舵机控制板代码相关推荐
- uart接口_UART串行总线舵机转接板规格、接线说明 amp; 驱动安装
摘要 UART串行总线舵机需要配合UART串行总线舵机转接板使用,它的作用是将舵机的单线转换为双线TTL接口(Rx接收端,Tx发送端),通过双线TTL串口接口与单片机进行通信.或者通过转接板上的US ...
- usb接口驱动_UART串行总线舵机转接板规格、接线说明 amp; 驱动安装
摘要 UART串行总线舵机需要配合UART串行总线舵机转接板使用,它的作用是将舵机的单线转换为双线TTL接口(Rx接收端,Tx发送端),通过双线TTL串口接口与单片机进行通信.或者通过转接板上的US ...
- 高速串行总线设计基础(四)眼图的形成原理
前言 眼图的形成原理 眼图的参数含义 眼图的模板 眼图的识别依据? 前言 眼图的测量对于高速串行总线的重要性不言而喻,眼图反映了总线通道环境的优劣,信号的好坏等等,正确的识别眼图是一项基础技能,如果具 ...
- 4位快速加法器和4位串行加法器相比_使用混合信号示波器调试串行总线系统
本应用指南面向的读者是数字系统设计师,他们在研发过程中会用到模拟和数字元器件,包括采用串行总线的微控制器和 DSP 系统.本文讨论调试串行总线设计所面临的挑战和新的解决方案,这些串行总线包括控制器局域 ...
- SPI、I2C、UART 三种串行总线对比介绍
转载自https://blog.csdn.net/oqqHuTu12345678/article/details/65445338 参考博客 https://blog.csdn.net/xiaodin ...
- SPI、I2C、UART三种串行总线的原理、区别及应用
SPI协议解析,链接如下 https://blog.csdn.net/weiqifa0/article/details/82765892 I2C协议解析,链接如下 https://blog.csdn. ...
- SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)
SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...
- 串行总线 —— I2C、UART、SPI
I2C,也叫 IIC,是一种常见的串行总线,它只需要两根线即可在连接于总线上的器件之间传送信息. 0. 电气知识 开漏输出:Open drain output,不输出电压,低电平时接地,高电平时不接地 ...
- 三种串行总线协议的区别(SPI、I2C和UART)
SPI.I2C跟UART三种串行总线协议的区别: (如果想了解SPI和I2C更多详细内容,可看 SPI总线(一):基本原理篇, SPI总线(二):驱动分析篇,SPI总线(三):驱动实例,i2c总线(基 ...
最新文章
- opencv mat相关资料整理
- Angular-Ui-Router+ocLazyLoad动态加载脚本
- 矿泉水功能突破口-丰收节交易会·李喜贵:遵义谋定水产业
- PHPstrom怎样设置浏览器
- 书评:Just the Computer Essentials(Vista)
- java基准测试_微基准测试进入Java 9
- 定值保险计算举例_保险公司的“开门红”又要来了!理财险真的值得买吗?
- C语言 __FUNCTION__ - C语言零基础入门教程
- 回文绝对求下联:亚冠决赛决冠亚
- BP(反向传播)神经网络
- 章节3.1和3.2----栈的表示、实现和应用
- Waves 13:一款专业电子音频制作插件和音频信号处理器插件套装
- 【算法设计与分析】如何分析一个算法
- 【基金量化研究系列】大类资产配置研究(六)——多资产风险平价策略
- 计算机自举过程是什么问题,操作系统原理(一)——自举过程
- PS 制作 图片放大镜效果 和 鼠标点击效果
- linux 编辑文件命令
- 日语流行口语极短句2
- MATLAB中Simulink创建与运行
- Acitivity的生命周期
热门文章
- 操作系统原理_田丽华(5)CPU调度
- 了解第三方库函数——curses
- python调用ch_python curses使用
- 【cuda】Nsight System 下载,安装与使用
- windows shell 编程
- 怎样从PHP文件中提取特征码,关于判断文件唯一性,怎么提取特征码
- android 选择文件路径无效,Android使用MediaMetadataRetriever类获取视频帧时一直无法正确读取路径文件,iamge显示位null...
- arduino利用电位器仿真编码器控制舵机转动
- C语言编程,给出三角形三个边的边长,判断是否能构成三角形。
- 重装系统时提示无法在计算机安装系统文件夹,电脑重装系统提示遇到错误Windows安装无法继续解决方法...