树莓派 wiringPi 库

wiringPi是一个很棒的树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等
检查树莓派是否安装 wiringPi,在树莓派终端输入:

gpio -v   // 会在终端中输出相关 wiringPi 的信息,否则没有安装

使用 gcc 编译器时需要添加库:

gcc xxx.c -lwiringPi

wiringPi 库常用 API:

1.树莓派引脚图:

gpio readall   // 在树莓派终端输入指令查看树莓派 io 口引脚图

 +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+

2.硬件初始化函数:
使用 wiringPi 时,你必须在执行任何操作前初始化树莓派,否则程序不能正常工作

函数原型 说明
int wiringPiSetup (void); 当使用这个函数初始化树莓派引脚时,程序使用的是 wiringPi 引脚编号表,引脚的编号为 0~16,需要 root 权限,成功时返回执行状态,失败时返回 -1
int wiringPiSetupGpio (void); 当使用这个函数初始化树莓派引脚时,程序中使用的是 BCM GPIO 引脚编号表,需要 root 权限,成功时返回执行状态,失败时返回 -1

3.通用GPIO控制函数:

函数原型 参数 说明
void pinMode (int pin, int mode); int pin:引脚编号;int mode:配置的IO模式(INPUT、OUTPUT、PWM_OUTPUT,GPIO_CLOCK) 设置引脚的输入和输出模式(IO模式)以及 PWM 的输入和输出模式(IO模式),只有 wPi1(BCM18)支持 PWM 输出,只有 wPi7(BCM4)支持 GPIO_CLOCK 输出
void digitalWrite (int pin, int value); int pin:引脚编号;int value:配置的电平(HIGH、LOW) 对一个已配置为输出模式的引脚 输出指定的电平信号
int digitalRead (int pin); int pin:引脚编号;返回引脚上的电平(HIGH、LOW) 读取一个引脚的电平值

4.时间控制函数:

函数原型 说明
unsigned int millis (void); 该函数返回一个从程序执行 wiringPiSetup(); 或 wiringPiSetupGpio(); 初始化函数到当前时间所经过的毫秒数,返回值类型是 unsigned int,最大可记录大约 49天的毫秒时长
unsigned int micros (void); 该函数返回一个从程序执行 wiringPiSetup(); 或 wiringPiSetupGpio(); 初始化函数到当前时间所经过的微秒数,返回值类型是 unsigned int,最大可记录大约 71分钟的微秒时长
void delay (unsigned int howLong); 将当前执行流暂停指定的毫秒数,最大延时时间可达 49天
void delayMicroseconds (unsigned int howLong); 将执行流暂停指定的微秒数,最大延时时间可达 71分钟
1 秒(s)=1000 毫秒(ms) 1 秒(s)=1000000 微秒(μs)

5.串口通信:

#include <wiringSerial.h>	// 以下 API 包含该头文件
函数原型 参数 说明
int serialOpen(char *device, int baud); char *device:串口的地址,在 Linux 中就是设备所在的目录,默认一般是"/dev/ttyAMA0"int baud:波特率;返回值:成功返回文件描述符,失败返回 -1 打开并初始化串口
void serialClose(int fd); inf fd:文件描述符 关闭 fd 关联的串口
void serialPutchar(int fd, unsigned char c); int fd:文件描述符;unsigned char c:要发送的数据 发送一个字节的数据到串口
void serialPuts(int fd, char *s); inf fd:文件描述符;char *s:要发送的数据 发送一个字符串到串口
void serialPrintf(int fd, char *message, …); int fd:文件描述符;char *message:格式化的字符串 发送一个字符串到串口(类似 C 语言标准库中的 printf(); 函数)
int serialDataAvail(int fd); int fd:文件描述符;返回值:成功返回字节数,失败返回-1 获取串口缓存中可用的字节数
int serialGetchar(int fd); int fd:文件描述符;返回值:读取的数据 从串口读取一个字节数据并返回,如果串口缓冲区中没有可用的数据,则会等待10 秒,若 10 秒后仍无数据,则返回-1,所以读取前最好调用serialDataAvail();判断,读取多个字符则采用地址偏移的方式读取
void serialFlush(int fd); int fd:文件描述符 清空串口缓冲区的数据

头文件:

#include <wiringSerial.h>
#include <unistd.h>
函数原型 说明
ssize_t read(int fd, void *buf, size_t count); Linux下的标准IO库函数,向fd中读取count个字节的数据,存放到buf
ssize_t write(int fd, const void *buf, size_t count); Linux下的标准IO库函数,往fd中写入count个字节的数据,内容为buf的前count个字节的数据

6.点击了解更多.

猜你喜欢

转载自blog.csdn.net/lcx1837/article/details/108121837