树莓派GPIO编号方式
通过打开终端窗口并运行命令,可以在Raspberry Pi上访问方便的参考pinout
。该工具由GPIO零 Python库提供,该库默认情况下安装在Raspbian桌面映像上,而不安装在Raspbian Lite上。
1、用Python通过PRI.GPIO命令控制GPIO(略)
2、Python脚本控制GPIO
蜂鸣器鸣叫程序测试
新建名为buzzer.py的脚本:
pi@raspberrypi:~ $ sudo nano buzzer.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setmode(18,GPIO.OUT)
//BCM 编号GPIO18 ;wPI 编号 1;物理引脚 12
while True:
GPIO.output(18,GPIO.HIGH)
time.sleep(1)
GPIO.output(18,GPIO.LOW)
time.sleep(1)
GPIO.cleanup()
nano编辑器保存退出命令依次为:
Ctrl+O
Ctrl+X
Y
说明:while True下面的循环体要缩进,用空格或Tab(但不能混用)键缩进就行。
为buzzer.py添加可执行权限:
pi@raspberrypi:~ $ sudo chmod +x buzzer.py
运行Python脚本:
pi@raspberrypi:~ $ sudo python buzzer.py
注意:提示“语法错误:不正确的语法”
File “buzzer.py”, line 9
whlie True:
^
SyntaxError: invalid syntax
停止运行命令:
Ctrl+C
来中断循环。
有兴趣的话,可以试试用Python通过PRI.GPIO命令控制GPIO。
3、借助第三方库文件控制GPIO
树莓派内核中已经编译自带了 GPIO 的驱动,我们常通过一些第三方写好的库函数来完成具体的操作,比较常见的操作库函数有:
3.1 Python 库:
Python GPIO已经集成到了树莓派内核,为树莓派官方资料中推荐且容易上手。PythonGPIO是一个小型的Python库,可以帮助用户完成raspberry相关IO口操作,但是PythonGPIO库还没有支持SPI、I2C或者1-wire等总线接口。
3.2 C语言库:
wiringPi适合那些具有C语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。wiringPi的API函数和Arduino非常相似,这也使得它广受欢迎。作者给出了大量的说明和示例代码,这些示例代码也包括UART设备,I2C设备和SPI设备等。
BCM2835 C Library可以理解为使用C语言实现的相关底层驱动,BCM2835 C Library的驱动库包括GPIO. SPI和UART等,可以通过学习BCM2835 C Library熟悉BCM2835相关的寄存器操作。如果有机会开发树莓派上的linux驱动,或自主开发python或PHP扩展驱动,可以从BCM2835 C Library找到不少的“灵感”。
4、WiringPi GPIO安装
WiringPi 是应用于树莓派平台的 GPIO 控制库函数,WiringPi 遵守 GUN Lv3。wiringPi 使用 C 或者 C++开发并且可以被其他语言包转,例如Python、ruby或者PHP等。
WiringPi 包括一套 GPIO 控制命令,使用 GPIO 命令可以控制树莓派 GPIO 管脚。用户可以利用gpio命令通过shell脚本控制或查询GPIO管脚。
4.1 WiringPi 安装
更新列表:
pi@raspberrypi:~ $ sudo apt-get update
更新软件:
pi@raspberrypi:~ $ sudo apt-get upgrade
安装 wiringpi 库:
pi@raspberrypi:~ $ sudo apt-get install wiringpi
更新wiringpi 库的方法
4.2 测试
WiringPi 包括一套 GPIO 命令,使用 GPIO 命令可以控制树莓派上的各种接口,通过以下指令可以测试 WiringPi 是否安装成功。
pi@raspberrypi:~ $ gpio -v
查看GPIO图:(这一步报错没有gpio图)
pi@raspberrypi:~ $ gpio readall
4.3 编写代码
新建一个名为buzzer.c的源程序
pi@raspberrypi:~ $ sudo nano buzzer.c
代码内容如下:
#include //注意大小写
int main(void) {
wiringPiSetup();//注意大小写
pinMode (1, OUTPUT);
for(;;) {
digitalWrite(1, HIGH);
delay (500);
digitalWrite(1, LOW);
delay (500) ;
}
}
说明:看看上一小节的图,BCM编号的GPIO18引脚在wiringPi编号中是1。
4.4 编译运行
编译:
第一种编译:pi@raspberrypi:~ $ gcc buzzer.c -o buzzer -l wiringPi
第二种编译:pi@raspberrypi:~ $ gcc buzzer -l wiringPi buzzer.c
注意:-l wiringPi
表示动态加载 wiringPi 共享库。
编译的时候这里报错 “ /usr/bin/ld: cannot find -lwiringpi
collect2: error: ld returned 1 exit status ”,原因是编译的时候 wiringPi 没有区分大小写。
运行:
第一种:pi@raspberrypi:~ $ sudo ./buzzer
第二种:pi@raspberrypi:~ $ ./buzzer
停止运行:
用 Ctrl+C
来中断循环。
参考资料