一、wiringPi 的安装


进入 wiringPi的github (https://git.drogon.net/?p=wiringPi;a=summary) 下载安装包。点击页面的第一个链接的右边的snapshot,下载安装压缩包。

然后进入安装包所在的目录执行以下命令:

>tar xfz wiringPi-98bcb20.tar.gz   //98bcb20为版本标号,可能不同
>cd wiringPi-98bcb20
>./build

验证 wiringPi 库是否安装成功在终端中 输入 gpio -v 如果有输出信息就安装成功,如果提示指令不认识就安装失败。

二、查看引脚表格

在控制台输入以下命令:

gpio readall

会出现以下表格:

树莓派4b python GPIO编程 树莓派gpio库函数_嵌入式硬件

三、wiringPi 库 API

硬件初始化函数

int wiringPiSetup(void)

返回值:执行状态,失败返回 -1

当使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。

引脚标号是 1-16 需要 root 权限

int wiringPiSetupGpio(void)

返回值:执行状态,失败返回 -1

当使用这个函数初始化树莓派引脚时,程序使用的是 BCM GPIO引脚编号表。

需要 root 权限

通用 gpio 控制函数(常用)

void pinMode(int pin,int mode)

pin :指定的引脚

mode :指定引脚的 io 模式

可取的值:INPUT、OUTPUT、

PWM_OUTPUT、GPIO_CLOCK

作用:配置引脚的 IO 模式

注意:只有 wiringPi 引脚下的 1 脚(BCM下 的18脚)支持PWM输出

只有wiringPi 引脚下的 7 脚(BCM 下的 4 脚)支持GPIO_CLOCK输出

int digitalWrite(int pin,int value)

pin :指定的引脚

value:引脚输出的电平值

可取的值:HIGH、LOW分别代表

高电平低电平

让一个已经配置为输出模式的引脚,输出指定的电平

int digitalRead (int pin)

pin:读取的引脚

返回:引脚上的电平,可以是LOW HIGH 之一

读取一个引脚的电平值 LOW HIGH ,返回

时间控制函数

unsigned int millis (void)

这个函数返回 一个 从你的程序执行 wiringPiSetup 初始化函数(或者wiringPiSetupGpio ) 到 当前时间 经过的 毫秒数。

返回类型是unsigned int,最大可记录 大约49天的毫秒时长。

unsigned int micros (void)

这个函数返回 一个 从你的程序执行 wiringPiSetup 初始化函数(或者wiringPiSetupGpio ) 到 当前时间 经过的 微秒数。

返回类型是unsigned int,最大可记录 大约71分钟的时长。

【常用】void delay (unsigned int howLong)

将当前执行流暂停 指定的毫秒数。因为Linux本身是多线程的,所以实际暂停时间可能会长一些。

参数是unsigned int 类型,最大延时时间可达49天

【常用】void delayMicroseconds (unsigned int howLong)

将执行流暂停 指定的微秒数(1000微秒 = 1毫秒 = 0.001秒)。

因为Linux本身是多线程的,所以实际暂停时间可能会长一些。参数是unsigned int 类型,最大延时时间可达71分钟

串口通信

使用时需要包含头文件:#include <wiringSerial.h>

int serialOpen(char *device, int baud)

device:串口的地址,在 Linux 中就是设备所在目录

默认一般是"/dev/ttyAMA0",我的是这样的。

baud:波特率 返回:正常返回文件描述符,失败返回-1

打开并初始串口

int serialOpen(char *device, int baud)

device:串口的地址,在 Linux 中就是设备所在目录

默认一般是"/dev/ttyAMA0",我的是这样的。

baud:波特率 返回:正常返回文件描述符,失败返回-1

打开并初始串口

void serialClose (int fd)

fd:文件描述符

关闭fd关联的串口

void serialPutchar (int fd, unsigned char c)

fd:文件描述符

c:要发送的数据

发送一个字节数据到串口

void serialPuts (int fd, char *s)

fd:文件描述符

s:发送的字符串,字符串以'\0'结尾

发送一个字符串数据到串口

int serialDataAvail(int fd)

fd:文件描述符

返回:串口缓存中已经接收到的,可读取的字节数,-1 代表错误

获取串口缓存中可用的字节数

int serialGetchar(int fd)

fd:文件描述符

返回:读取到的字符

从串口读取一个字节数据返回。

如果串口缓存中没有可用的数据,会等待10s ,如果10s后还是没有,则返回-1

所以,读取前,最好通过serialDataAvail 判断一下

*size_t read(int fd,void * buf ,size_t count);

fd:文件描述符

buf:接收数据缓存的数组

count:接收的字节数

返回值:实际读取的字节数

这是Linux 下标准IO口函数,需要包含头文件 #include <unistd.h>

当要接收的数据量大的时候wiringPi 建议用这个函数

Linux有个特性:一切皆文件,设备虽然是硬件,但在Linux中还是以未见形式存在(在根目录的 /dev 目录下)。例如:fb0(from bufer0)显示器、mem(memory内存)、ram(磁盘)、tty(例如secureCRT这个终端就是一个tty)

树莓派4b python GPIO编程 树莓派gpio库函数_嵌入式硬件_02


初次使用树莓派串口编程,需要配置。我开始搞了很久,以为是程序写错了 还一直在调试。。

这个过程就是配置串口让串口来用做通信

/* 修改 cmdline.txt文件 */
>cd /boot/
>sudo vim cmdline.txt
删除【】之间的部分
dwc_otg.lpm_enable=0 【console=ttyAMA0,115200】 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait


/*修改 inittab文件 */
>cd /etc/
>sudo vim inittab

注释掉最后一行内容:,在前面加上 # 号
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100


sudo reboot 重启