树莓派GPIO口相关介绍
就像学习一门新的语言,一定要打印“Hello world”,学习某一种芯片,一定是点亮一个灯。想要使用GPIO,我们需要先下载相关的软件包,如果使用python编程,下载RPI.GPIO,如果使用C语言编程,需要先下载wiring pi,下面两条是安装RPI.GPIO的指令:sudo apt-get update;sudo apt-get install python-rpi.gpio
使用GPIO时的一般设置
1.导入GPIO库
import RPI.GPIO as GPIO
2.设定GPIO引脚使用编号模式(看引脚原理图)
基于插座引脚编号:GPIO.setmode(GPIO.BOARD)
基于CPU寄存器编号:GPIO.setmode(GPIO.BCM)
3.设定对应GPIO模式
输出模式:GPIO.setup(引脚号,GPIO.OUT)
输入模式:GPIO.setup( 引脚号,GPIO.IN)
4.电平设置
输出模式下,对应管脚电平置高或置低;输入模式下,读取相应管脚电平即可。
输出高电平:GPIO.output(引脚号,GPIO.HIGH/True)
输出低电平:GPIO.output(引脚号,GPIO.LOW/False)
点灯源代码
下面是python编程实现每0.5秒闪烁一次的源程序。(注:运行时如果有错,把注释删掉,不是python中正确的中文注释方式)
/********************代码led.py********************************/
import RPi.GPIO as GPIO #导入GPIO模块并重命名
from time import sleep #导入time模块sleep函数,延时用
GPIO.setmode(GPIO.BCM) #引脚采用BCM模式
GPIO.setwarnings(False) #消除警告
GPIO.setup(3,GPIO.OUT) #引脚3设为输出模式
while True:
GPIO.output(3,GPIO.HIGH) #输出高电平
sleep(0.5) #延时0.5秒
GPIO.output(3,GPIO.LOW)
sleep(0.5)
如何实现小车各个方向的运动
小车最基本的运动无非就是前进,后退,左右转向,其中转向利用的两个轮子的差速。本项目使用的L298N电机驱动模块,下面给出该模块实现各个方向运动的逻辑图。(此图针对本人实际接线图,根据每人接线不同,仅供参考)
方向 | IN1(左轮) | IN2(左轮) | IN3(右轮) | IN4(右轮) |
---|---|---|---|---|
前进 | 高 | 低 | 高 | 低 |
后退 | 低 | 高 | 低 | 高 |
左转 | 低 | 低 | 高 | 低 |
右转 | 高 | 低 | 低 | 低 |
注:高低指得是L298n电机驱动模块控制管脚的电平高低
源代码
IN1-4分别接的是BOARD模式下31,33,35,37引脚,程序的功能是循环实现小车前进,后退,左转,右转各3秒
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
IN1 = 31
IN2 = 33
IN3 = 35
IN4 = 37
def init():
GPIO.setup(IN1,GPIO.OUT)
GPIO.setup(IN2,GPIO.OUT)
GPIO.setup(IN3,GPIO.OUT)
GPIO.setup(IN4,GPIO.OUT)
def qianjin(sleep_time):
GPIO.output(IN1,GPIO.HIGH)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN4,GPIO.LOW)
time.sleep(sleep_time)
def back(sleep_time):
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.HIGH)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.HIGH)
time.sleep(sleep_time)
def left(sleep_time):
GPIO.output(IN1,False)
GPIO.output(IN2,False)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN4,GPIO.LOW)
time.sleep(sleep_time)
def right(sleep_time):
GPIO.output(IN1,GPIO.HIGH)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,False)
GPIO.output(IN4,False)
time.sleep(sleep_time)
init()
while True:
qianjin(3)
back(3)
left(3)
right(3)