继ROS学习的结束 虽然没有进行一个笔记的记录 和基于opencv和树莓派摄像头的一个人脸识别的学习的成功建立。接下来就是进行IO口控制的学习 最基本的也就是点灯了。
学习一切电子硬件从点灯 用树莓派点亮一个LED灯是非常简单的事情 但却非常重要 是利用GPIO控制外部硬件设备的基础 机器人的大部分功能都可以通过操纵GPIO来实现的。换句话说 能控制一个LED灯 就能让机器人动起来
2.GPIO引脚树莓派与普通计算机最大的区别就在于它拥有若干个可编程的GPIO 可以用来控制外部设备、从外部设备获取信息或是和硬件进行数据交互等 因此了解各个GPIO引脚的功能和使用方法是非常重要的。树莓派GPIO接口已发布了3个版本 原始的两个版本仅有26个引脚 “ ”型树莓派版本有40个引脚 本章及后续章节我们将主要介绍“ ”型树莓派版本的GPIO。
也可以通过gpio readall的命令对GPIO进行查看
树莓派的引脚编码方式有两种 wiringPi和BCM 其实就是对应两个不同的库函数。
1 wiringPi 基于WiringPi库 是树莓派平台的库函数 类似于Arduino里面的wiring。
2 BCM 基于bcm2835库 是树莓派cpu芯片的库函数 相当于stm32的固件库一样 底层直接操作寄存器。
这里引用一张3b 的引脚图对应 两张图对比来看 引脚的对应关系就非常清晰了
一个LED灯或者带LED灯的扩展板
这里引用一位博主的推荐 微雪的多功能扩展板Pioneer600 某宝上面找不到 要在微雪官网上面采购 总体来说 这款扩展板性价比不算高 但是对于初学者来说很友好 接口是pin对pin的 可以直接接上树莓派 常用的外设也比较全 LEDUARTIICSPI按键显示屏 如果能把把这些外设都调完 那去做一些小项目是基本没有问题的了。
把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Ω
树莓派控制IO口的方式有很多种。
通过shell命令直接控制通过Linux脚本控制通过wiringPi库控制通过bcm2835库控制控制的方式有多种 编程的语音也有多种 C、C 、python、Java等等 所以就导致很多初学者无从下手 到底应该选择哪种方式呢 我本身从事的工作是以C语言为主的 一开始我是想从C开始突破 但是经过我一段时间的摸索 我认为树莓派最好的方式应该是Linux系统 python编程。确定了路线之后 我后面的编程教程也都是以python编程为主。
2.python编程用python控制树莓派外设是通过python类库实现的 比如树莓派系统本身集成的RPi.GPIO就可以控制GPIO口。
树莓派官方的镜像基本都是自带python工具的 所以一般是不用再另外安装软件了。
touch led.py2.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脚 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 在树莓派可视化界面编辑
2.3运行python led.py
方式2 可视化界面运行
运行结果
LED每间隔1s闪烁一次。



