硬件控制入门之树莓派GPIO操作----树莓派硬件控制学习笔记(一)

树莓派硬件控制学习笔记(一)

第一章 树莓派硬件控制入门之GPIO口的操作


前言

树莓派是最近越来越热门的一块开发板,不仅仅是入门级的开发,在越来越多的专业领域也可以见到它的身影,且它价格低廉,操作便捷,十分适合我们学生党,所以我打算使用树莓派开发一款机器人,以下是我的学习笔记。

要想控制一款开发板,首先就要做到控制其IO口的高低电平转换,而关于树莓派目前我所知的方法有如下三种,这三种库都不需要安装,在官方镜像中自带。

在这里顺便提供2020-5-27的树莓派官方镜像百度云下载,也是笔者正在使用的,亲测三种方法都可成功。

链接:https://pan.baidu.com/s/1zghbDwhnnfVyVY8yMhsJXQ
提取码:ggs1


一、背景知识:树莓派引脚编号系统

  1. BOARD编号系统。如下图中灰色部分,和树莓派物理引脚对应(USB接口面向自己,引脚丝印圈削角对应左上位置)

  2. BCM编号系统。pigpio库默认使用,如下图中黄色部分,不同版本的树莓派不一样可能要重新修改代码。

  3. 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波形的产生。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章