树莓派点灯笔记(论如何学好控制IO输出)

1.前言

继ROS学习的结束(虽然没有进行一个笔记的记录),和基于opencv和树莓派摄像头的一个人脸识别的学习的成功建立。接下来就是进行IO口控制的学习,最基本的也就是点灯了。

树莓派点灯笔记(论如何学好控制IO输出)_第1张图片

学习一切电子硬件从点灯,用树莓派点亮一个LED灯是非常简单的事情,但却非常重要,是利用GPIO控制外部硬件设备的基础,机器人的大部分功能都可以通过操纵GPIO来实现的。换句话说,能控制一个LED灯,就能让机器人动起来

2.GPIO引脚

树莓派与普通计算机最大的区别就在于它拥有若干个可编程的GPIO,可以用来控制外部设备、从外部设备获取信息或是和硬件进行数据交互等,因此了解各个GPIO引脚的功能和使用方法是非常重要的。树莓派GPIO接口已发布了3个版本,原始的两个版本仅有26个引脚,“+”型树莓派版本有40个引脚,本章及后续章节我们将主要介绍“+”型树莓派版本的GPIO。

树莓派点灯笔记(论如何学好控制IO输出)_第2张图片

树莓派点灯笔记(论如何学好控制IO输出)_第3张图片

也可以通过gpio readall的命令对GPIO进行查看

 树莓派点灯笔记(论如何学好控制IO输出)_第4张图片

 树莓派的引脚编码方式有两种:wiringPi和BCM,其实就是对应两个不同的库函数。
1)wiringPi:基于WiringPi库,是树莓派平台的库函数,类似于Arduino里面的wiring。
2)BCM:基于bcm2835库,是树莓派cpu芯片的库函数,相当于stm32的固件库一样,底层直接操作寄存器。

这里引用一张3b+的引脚图对应,两张图对比来看,引脚的对应关系就非常清晰了

 三.硬件准备

一个LED灯或者带LED灯的扩展板

这里引用一位博主的推荐:微雪的多功能扩展板Pioneer600(某宝上面找不到,要在微雪官网上面采购),总体来说,这款扩展板性价比不算高,但是对于初学者来说很友好,接口是pin对pin的,可以直接接上树莓派,常用的外设也比较全(LED\UART\IIC\SPI\按键\显示屏),如果能把把这些外设都调完,那去做一些小项目是基本没有问题的了。

把LED接到树莓派任意一个GPIO口上面(如果是用的是普通插件LED灯,还要串一个1k左右的电阻,不然可能会把灯烧掉)。

限流电阻阻值计算:GPIO引脚的输出电压约为3.3V,高于LED上约1.7V的压降,如果直接串联,会有一个非常大的电流通过LED,这个电流通常大到可以损坏LED,甚至供电设备。因此,需要在LED和电源(GPIO引脚)间串联一个电阻限制电流,从而对LED和为其供电的GPIO引脚提供保护。不同厂家,不同颜色压降略有区别,我们假设所用LED的压降为1.8V,GPIO引脚的电流为3mA,限流电阻大小的计算方法如下:
R = ( 3.3V - 1.8V ) / 3mA = 500Ω

四.编写程序

1.编程方式

 树莓派控制IO口的方式有很多种。

  1. 通过shell命令直接控制
  2. 通过Linux脚本控制
  3. 通过wiringPi库控制
  4. 通过bcm2835库控制

控制的方式有多种,编程的语音也有多种,C、C++、python、Java等等,所以就导致很多初学者无从下手,到底应该选择哪种方式呢?我本身从事的工作是以C语言为主的,一开始我是想从C开始突破,但是经过我一段时间的摸索,我认为树莓派最好的方式应该是Linux系统+python编程。确定了路线之后,我后面的编程教程也都是以python编程为主。

2.python编程

用python控制树莓派外设是通过python类库实现的,比如树莓派系统本身集成的RPi.GPIO就可以控制GPIO口。
树莓派官方的镜像基本都是自带python工具的,所以一般是不用再另外安装软件了。

2.1新建py文件

touch led.py

2.2编写程序

#!/usr/bin/python                   #脚本绝对路径定义          
#-*- coding:utf-8 -*-               #文件格式为utf-8
import RPi.GPIO as GPIO             #导入RPi.GPIO库
import time                         #导入time库                   
GPIO.setwarnings(False)               #禁用警告(可以不用)
GPIO.setmode(GPIO.BCM)                #使用BCM编码的引脚号
GPIO.setup(26,GPIO.OUT)               #根据自己LED灯接的引脚配置,我这里是26脚
try:
    while True:                       #wile循环
        GPIO.output(26,GPIO.HIGH)     #引脚拉高
        time.sleep(1)                 #延时1s
        GPIO.output(26,GPIO.LOW)      #引脚拉低
        time.sleep(1)                 #延时1s
except:
    print("except")
GPIO.cleanup()

编写代码的方式有很多种,根据自己的喜欢选择一种即可。

方式1:在树莓派命令窗口编辑

vim led.py      // 用vim编辑
nano led.py     // 用nano编辑

方式2:在树莓派可视化界面编辑

树莓派点灯笔记(论如何学好控制IO输出)_第5张图片

 2.3运行

python led.py

方式2:可视化界面运行

 运行结果:
LED每间隔1s闪烁一次。

你可能感兴趣的:(自动驾驶,opencv,机器学习)