树莓派硬件控制学习笔记(一)
第一章 树莓派硬件控制入门之GPIO口的操作文章目录
- 树莓派硬件控制学习笔记(一)
- 前言
- 一、背景知识:树莓派引脚编号系统
- 二、使用树莓派官方自带的RPi.GPIO 库(Python)操纵GPIO口
-
- 1.引入库并命名要修改的GPIO口
- 2.配置IO口为输入模式
- 3.配置IO口为输出模式
- 4.输出模式下的引脚高低电平操纵
- 5.释放引脚
- 三、使用Pigpio库(Python)操纵GPIO口
-
- 1.启动守护进程
- 2.引入库
- 2.设置输出模式下电平
- 3.释放引脚
- 四、使用WiringPi库(C语言)操纵GPIO口
-
- 1.gcc编译器生成命令
- 2.引入库及自检
- 3.设置IO口模式
- 4.设置输出模式下IO口高低电平
- 5.释放引脚
- 总结
前言
树莓派是最近越来越热门的一块开发板,不仅仅是入门级的开发,在越来越多的专业领域也可以见到它的身影,且它价格低廉,操作便捷,十分适合我们学生党,所以我打算使用树莓派开发一款机器人,以下是我的学习笔记。
要想控制一款开发板,首先就要做到控制其IO口的高低电平转换,而关于树莓派目前我所知的方法有如下三种,这三种库都不需要安装,在官方镜像中自带。
在这里顺便提供2020-5-27的树莓派官方镜像百度云下载,也是笔者正在使用的,亲测三种方法都可成功。
链接:https://pan.baidu.com/s/1zghbDwhnnfVyVY8yMhsJXQ
提取码:ggs1
一、背景知识:树莓派引脚编号系统
-
BOARD编号系统。如下图中灰色部分,和树莓派物理引脚对应(USB接口面向自己,引脚丝印圈削角对应左上位置)
-
BCM编号系统。pigpio库默认使用,如下图中黄色部分,不同版本的树莓派不一样可能要重新修改代码。
-
wiringPi编号系统,此编号系统是wiringP库专用的编号,如下图中黄色部分。
这三种编号系统都可以通过下图一一对应。
二、使用树莓派官方自带的RPi.GPIO 库(Python)操纵GPIO口
1.引入库并命名要修改的GPIO口
在树莓派上运行python和c程序的方法很多文章都介绍过,这里不再赘述,直接上代码。
import RPi.GPIO as GPIO #注意这里的i是小写=.=
GPIO.setmode(GPIO.BOARD) #指定为BOARD编号
#or
#GPIO.setmode(GPIO.BCM)#指定为BCM编号
pins_1=12
将要修改的GPIO.1,也就是BOARD编码下的12号针脚命名为pins_1,其位置具体见第一节的引脚图,注意这是在BOARD编码模式下,看灰色的部分。
2.配置IO口为输入模式
GPIO.setup(pins_1,GPIO.OUT)
#还可以设置上拉电阻(具体用处后面会介绍)
#GPIO.setup(pins_1,GPIO.IN,pull_up_down=GPIO.PUD_UP)
#下拉电阻
#GPIO.setup(pins_1,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
输入模式相比于输出模式较难,后面的笔记将会介绍
3.配置IO口为输出模式
GPIO.setup(pins_1,GPIO.OUT)
#还可以设置为输出并初始为为HIGH或LOW
#GPIO.setup(pins_1, GPIO.OUT, initial=GPIO.HIGH)
#可以同时设置多个引脚
#chan_list = [ 11 ,12 ]
#你可以用元组代替,即:
#chan_list =(11,12)
#GPIO.setup(chan_list, GPIO.OUT)
4.输出模式下的引脚高低电平操纵
GPIO.output(pins_1, state)
#state可以是0 / GPIO.LOW / False --- 低电平
#或者 1 / GPIO.HIGH / True --- 高电平
5.释放引脚
在程序执行完毕后一定要加入这一步,否则高电平引脚一旦不小心碰到GND将会烧毁树莓派。
GPIO.cleanup()
三、使用Pigpio库(Python)操纵GPIO口
pigpio是一个由C语言编写的库函数,并提供Python接口这个库的优点是软PWM频率上限比RPi库稳定,经过笔者用示波器实测,RPi库输出的PWM波占空比会出现0.5%左右的波动,而pigpio库的波动在0.1%左右,注意pigpio库使用的是BCM编码,所以无需再设置编码模式
1.启动守护进程
启动Linux终端,输入这条命令
sudo pigpiod
2.引入库
import pigpio
pi = pigpio.pi()
2.设置输出模式下电平
pi.write(4, 0) # 将4号引脚设置为低电平(GPIO.7)注意这是BCM编码
pi.write(4, 1) # 将4号引脚设置为高电平(GPIO.7)
pi.read(4) # 获取目前4号引脚的电平(GPIO.7)
3.释放引脚
pi.write(4, 0)
四、使用WiringPi库(C语言)操纵GPIO口
wiringPi是一个很棒的树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等。java 的pi4j项目也是基于wiringPi的。
wiring库使用的编码模式是wiringPi编码。
1.gcc编译器生成命令
编译:
g++ -Wall -o LEDtest LEDtest.cpp -lwiringPi //使用C++编程 , -Wall 是为了使能所有警告,以便发现程序中的问题
gcc -Wall -o LEDtest LEDtest.c -lwiringPi //使用C语言编程
运行:
sudo ./LEDtest
2.引入库及自检
#include<wiringPi.h>//引入库
if(wiringPiSetup() == -1)//利用库自带初始化函数自检
{
printf("setup wiringPi failed !");
return 1;
}
3.设置IO口模式
pinMode(7, OUTPUT);//将wiring库的7号引脚也就是GPIO.7设置为输出模式
//pinMode(7, INPUT);//设置为输入模式
输入模式相比于输出模式较难,后面的笔记将会介绍
4.设置输出模式下IO口高低电平
digitalWrite(7, HIGH);//设置为高电平
//digitalWrite(7, LOW);//设置为低电平
5.释放引脚
digitalWrite(7, LOW);//设置为低电平
总结
以上就是今天要讲的内容,本文仅仅简单介绍了树莓派GPIO口的操纵,后面的笔记还会详细讲解输入模式及PWM波形的产生。