树莓派学习-5.调用pigpio库使串口舵机转动

1.修改串口映射关系

(1)打开终端输入

ls -l /dev

按回车会显示当前的串口映射关系

在这里插入图片描述
(2)编辑辑 /boot/config.txt 文件
在终端输入

sudo nano /boot/config.txt

在文件后面增加一句代码

dtoverlay=pi3-miniuart-bt

按Ctrl+x,按y保存并退出
在这里插入图片描述
(3)重启树莓派

(4)输入

 ls -l /dev

再次查看映射
在这里插入图片描述

2.禁用串口的默认控制台功能

(1)在终端输入

sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service

(2)编辑/boot/cmdline.txt文件

sudo nano /boot/cmdline.txt

在这里插入图片描述
删除红框内的内容(删除console=serial0,115200)

删除后如下图
在这里插入图片描述
按Ctrl+x,按y保存并退出

(3)重启树莓派即可

到这里修改串口映射关系已经完成

3.运行例程测试

笔者这里使用的是幻尔串口总线舵机
在这里插入图片描述
(1)启动pigpio守护进程
在终端输入

sudo pigpiod

如果没有启动pigpio,无法调用pigpio库发送数据
(2)运行例程
可新建python文件,在终端cd 到python文件目录,再输入 python3 文件名
举个例子:
进入文件夹
在这里插入图片描述
输入python3 文件名在这里插入图片描述

例程程序如下:

#!/usr/bin/python3

import serial
import pigpio
import time

pi = pigpio.pi()  #初始化 pigpio库
serialHandle = serial.Serial("/dev/ttyAMA0", 115200)  #初始化串口, 波特率为115200


##
##命令发送
##
def servoWriteCmd(id, cmd, par1 = None, par2 = None):
    buf = bytearray(b'\x55\x55')
    try:
        len = 3   #若命令是没有参数的话数据长度就是3
        buf1 = bytearray(b'')

	## 对参数进行处理
        if par1 is not None:
            len += 2  #数据长度加2
            buf1.extend([(0xff & par1), (0xff & (par1 >> 8))])  #分低8位 高8位 放入缓存
        if par2 is not None:
            len += 2
            buf1.extend([(0xff & par2), (0xff & (par2 >> 8))])  #分低8位 高8位 放入缓存
        buf.extend([(0xff & id), (0xff & len), (0xff & cmd)])
        buf.extend(buf1) #追加参数

	##计算校验和
        sum = 0x00
        for b in buf:  #求和
            sum += b
        sum = sum - 0x55 - 0x55  #去掉命令开头的两个 0x55
        sum = ~sum  #取反
        buf.append(0xff & sum)  #取低8位追加进缓存
        serialHandle.write(buf) #发送
    except Exception as e:
        print(e)

def portInit(): #配置用到的IO口
    pi.set_mode(17, pigpio.OUTPUT)  #配置RX_CON 即 GPIO17 为输出
    pi.write(17, 0)
    pi.set_mode(27, pigpio.OUTPUT)  #配置TX_CON 即 GPIO27 为输出
    pi.write(27, 1)

def portWrite():  #配置单线串口为输出
    pi.write(27, 1)  #拉高TX_CON 即 GPIO27
    pi.write(17, 0)  #拉低RX_CON 即 GPIO17
    

def portRead():   #配置单线串口为输入
    pi.write(27, 0) #拉低TX_CON 即 GPIO27
    pi.write(17, 1) #拉高RX_CON 即 GPIO17


portInit()
while True:
    try:
        portWrite() #将单线串口配置为输出
        servoWriteCmd(1,1,0,1000) #发送命令 参数1 舵机id=1, 参数2 命令 = 1, 参数3 位置 = 0, 参数4 时间 = 1000ms
        time.sleep(1.1)
        servoWriteCmd(1,1,1000,2000)
        time.sleep(2.1)
    except Exception as e:
        print(e)
        break
  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
09-20 411
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值