树莓派手册介绍
1 树莓派使用教程
1.1 新手入门--树莓派
1.1.1 树莓派介绍-哪家是真正的树莓派
1.1.2 懒人教程-新手玩树莓派
1.1.3 初次尝试-树莓派
1.1.3.1 系统安装-树莓派
1.1.3.2 连接开机-树莓派
1.1.3.3 进入图形界面-树莓派
1.1.3.4 SSH连接-树莓派
1.1.3.5 网络设置-静态IP-树莓派
1.1.3.6 VNC安装-树莓派
1.1.3.7 VNC自动启动-树莓派
1.1.4 新手入门教程-树莓派新手入门指南必看
1.1.5 新手入门教程-树莓派快速入门指南
1.1.6 显示器 修改config.txt--HDMI接口/VGA接口
1.1.7 树莓派config.txt文件存放在哪里
1.1.8 树莓派config配置文件参数具体说明
1.1.9 树莓派外壳安装的教程
1.1.10 Config文件详细说明
1.1.11 树莓派完美运行最新 Android 7.0牛轧糖
1.2 网络相关--树莓派
1.2.1 树莓派手动指定静态IP和DNS 终极解决大法
1.2.2 命令行配置wifi无线连接
1.2.3 命令行配置蓝牙连接-BlueTooth
1.2.4 如何打开蓝牙-树莓派
1.2.5 随时随地远程登录-树莓派
1.2.6 通过花生壳穿透内网-树莓派
1.2.7 花生壳穿透内网改进版-树莓派
1.2.8 windows远程树莓派
1.2.9 设置静态IP方法
1.2.10 配置多个WIFI
1.2.11 连接Wifi最稳定的办法
1.2.12 安装VNC Server并设置为自动启动
1.2.13 Linux系统安装XRDP+VNC实现远程桌面访问
1.2.14 系统内置VNC Server
1.3 外设相关-树莓派
1.3.1 GPIO功能学习
1.4 显示相关-树莓派
1.4.1 脱离显示器使用树莓派

GPIO功能学习

2017-02-17 10:23:17
啊超
1227
最后编辑:啊超 于 2017-02-17 10:33:01
简介: 树莓派学习笔记——GPIO功能学习

 

树莓派学习笔记——GPIO功能学习

摘自:xukai871105博客

0.前言

    树莓派现在越来越火,网上树莓派的资料也越来越多。树莓派源自英国,国外嵌入式开源领域具有良好的分享精神,树莓派各种集成库也层出不穷,下面推荐几个。

    【python GPIO
    【开发语言】——python
    【简单介绍】——该库更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。python GPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操作。但是python GPIO库还没有支持SPI、I2C或者1-wire等总线接口。除了python GPIO之外,还有众多的python扩展库(例如webiopi),毫无疑问的说python非常适合树莓派,树莓派也非常适合python。

    【wiringPi
    【开发语言】——C语言
    【简单介绍】——wiringPi适合那些具有C语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。wiringPi的API函数和arduino非常相似,这也使得它广受欢迎。作者给出了大量的说明和示例代码,这些示例代码也包括UART设备,I2C设备和SPI设备等,毫无疑问地说wiringPi功能非常强大。

    【BCM2835 C Library
    【开发语言】——C语言
    【简单介绍】BCM2835 C Library可以理解为使用C语言实现的相关底层驱动,它给我的感觉更像STM32的库函数,BCM2835 C Library的驱动库包括GPIO、SPI和UART等,可以通过学习BCM2835 C Library熟悉BCM2835相关的寄存器操作。如果有机会开发树莓派上的linux驱动,或自主开发python或PHP扩展驱动,可以从BCM2835 C Library找到不少的“灵感”。
    
    【相关博文】
    更多树莓派学习笔记请参考——【树莓派学习笔记——索引博文

1.硬件准备

    【树莓派】——在开始所有的实验之前,你需要一块完整的树莓派。
    【IO扩展板】——可以通过淘宝购买IO扩展板,或者购买万用板和杜邦线自行制作IO扩展板。

图1 树莓派扩展板——图片来自 天猫 大菠萝数码专营店


图2 运行效果图

2.注意事项

    【编号方式】

图3 GPIO编号方式——该图片来自wiringPi说明文档

    树莓派的软件扩展库虽然很多,但也导致了扩展库“碎片化”的问题,例如操作树莓派的GPIO端口,GPIO的编号便存在三种不同的方式
    【1】插座编号方式
   编号侧重P1插座侧,从上到下,从左到右。正如图3的Header一栏。
    【2】BCM2835编号方式
    编号侧重CPU寄存器,根据BCM2835的GPIO寄存器编号。正如图3 BCM GPIO一栏。
    【3】wiringPi编号方式
    编号侧重实现逻辑,把扩展GPIO端口从0开始编号,这种编号方便编程。正如图3 WiringPi一栏。
    【举例说明】
    插座编号方式 11 -> BCM2835编号方式 17 -> wiringPi编号方式 GPIO0。无论如何它都是同一个IO管脚。
    
    【代码写在哪里】
    【1】直接在树莓派中编写
    树莓派中有几款代码(文本)编辑软件,可以在树莓派中编写代码。
    【2】在windows中编写
    可以在windows中编写代码,如果是Python脚本可通过FTP软件传输到树莓派中,然后使用SSH客户端登录到树莓派中执行Python脚本。如果是C语言文件,除了使用FTP传输之外还需要在树莓派上编译才可以生成可执行文件(相当于windows上的exe文件)。相关软件操作请参考【树莓派学习笔记——常用软件汇总
    【3】在其他linux中编写
    与windows中编写代码不同,在其他linux发行版(例如ubuntu)中可安装交叉工具链,交叉编译C文件生成在树莓派的可执行文件,那么使用FTP传输可执行文件至树莓派即可。其实方式【1】和方式【3】是几乎相同的。

    【本例原理图】
    为了说明问题本例只有一个LED,接在了树莓派IO扩展插座的11脚。

图4 原理图
    

2 Python GPIO实现

    【安装过程】
        【1】先安装python-dev,输入以下指令。
sudo apt-get install python-dev
        【2】安装RPi.GPIO,依次输入以下指令。特别说明,由于RPi.GPIO仍处于不断完善的过程中,请参考前言中的链接下载最新的安装代码。
# 下载 
$ wget http://raspberry-gpio-python.googlecode.com/files/RPi.GPIO-0.5.3a.tar.gz
# 解压缩 
$ tar xvzf RPi.GPIO-0.5.3a.tar.gz 
# 进入解压之后的目录 
$ cd RPi.GPIO-0.5.3a 
# 启动安装 
$ sudo python setup.py install

    【示例代码】
    新建一个名为led.py的文件,该文件具体内容如下:
[python] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. # -*- coding: utf-8 -*-  
  2. import RPi.GPIO as GPIO  
  3. import time  
  4. # BOARD编号方式,基于插座引脚编号  
  5. GPIO.setmode(GPIO.BOARD)  
  6. # 输出模式  
  7. GPIO.setup(11, GPIO.OUT)  
  8.   
  9. while True:  
  10.     GPIO.output(11, GPIO.HIGH)  
  11.     time.sleep(1)  
  12.     GPIO.output(11, GPIO.LOW)  
  13.     time.sleep(1)  
    【运行】
    如果在windows上编写代码,请使用FTP软件下载到树莓派中,使用SSH客户端登陆树莓派,cd命令进入文件所在目录,然后输入指令
    sudo python led.py
    好吧,扩展板上的LED等开始闪烁了。最后使用Ctrl+C结束Python程序。
    【简单说明】
    【1】GPIO.setmode(GPIO.BOARD),采用插座引脚编号方式。
    【2】由于采用插座引脚编号方式,此处的11脚相当于BCM2835寄存器编号方式的引脚11。

4 WiringPi实现

    【安装过程】
    【示例代码】
    新建一个名为blink.c文件,该文件具体内容如下:
[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <wiringPi.h>  
  2. int main(void)  
  3. {  
  4.   wiringPiSetup() ;  
  5.   pinMode (0, OUTPUT) ;  
  6.   for(;;)   
  7.   {  
  8.     digitalWrite(0, HIGH) ; delay (500) ;  
  9.     digitalWrite(0,  LOW) ; delay (500) ;  
  10.   }  
  11. }  
    【运行】    
    如果在windows上编写代码,请使用FTP软件下载到树莓派中,使用SSH客户端登陆树莓派,cd命令进入文件所在目录,然后输入gcc指令
    gcc -Wall -o blink blink.c -lwiringPi
    接着输入以下命令执行程序
    sudo ./blink
    程序顺利运行,最后使用ctrl+c可以结束程序。

    【简单说明】
    【1】不确定的最后状态,由于程序停止的时间未知,所有LED可能为点亮状态也可能会熄灭状态。
    【2】和python的程序相比,GPIO的端口号似乎发生了变化,但是实际上为同一个IO,只是IO的编号方式略有不同。
    【3】-lwiringPi表示动态加载wiringPi共享库,如果不熟悉gcc指令和makefile,请参考系列博文——【Linux学习笔记——例说makefile 索引博文

5 BCM2835 C Library

    【安装过程】
    特别说明,由于BCM2835 C Library仍处于不断完善的过程中,请参考前言中的链接下载最新的安装代码。
# 下载
$ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.35.tar.gz 
# 解压缩
$ tar xvzf bcm2835-1.35.tar.gz 
# 进入压缩之后的目录
$ cd bcm2835-1.35
# 配置
./configure
# 从源代码生成安装包
make
# 执行检查
sudo make check
# 安装 bcm2835库
sudo make install

    【示例代码】
    新建一个名为blink.c的程序,程序的具体内容如下:
[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <bcm2835.h>  
  2.   
  3. // P1插座第11脚  
  4. #define PIN RPI_GPIO_P1_11  
  5.   
  6. int main(int argc, char **argv)  
  7. {  
  8.   if (!bcm2835_init())  
  9.   return 1;  
  10.   
  11.   // 输出方式  
  12.   bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);  
  13.   
  14.   while (1)  
  15.   {  
  16.     bcm2835_gpio_write(PIN, HIGH);  
  17.     bcm2835_delay(100);  
  18.       
  19.     bcm2835_gpio_write(PIN, LOW);  
  20.     bcm2835_delay(100);  
  21.   }  
  22.   bcm2835_close();  
  23.   return 0;  
  24. }  
    【运行】       
    如果在windows上编写代码,请使用FTP软件下载到树莓派中,使用SSH客户端登陆树莓派,cd命令进入文件所在目录,然后输入gcc指令
    gcc -o blink blink.c -lbcm2835
    接着执行该程序,输入以下指令
    sudo ./blink
    程序顺利运行,最后使用ctrl+c可以结束程序。
    【1】和wiringPi的情况相似,若关闭程序LED灯可能点亮也可能熄灭。
    【2】虽然GPIO端口再次发生了变化,但还是指向那个LED灯。
    【3】-lbcm2835表示动态加载bcm2835共享库,如果不熟悉gcc指令和makefile,请看看我的其他博文吧。

6 未来做些什么

    实践GPIO输入功能,实践SPI功能,实践I2C功能等。最后综合以上若干内容结合web做