树莓派开发—— wiringPi 库的使用

一、wiringPi 的安装

参考文献:
https://www.cnblogs.com/lulipro/p/5992172.html

进入 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

会出现以下表格:
在这里插入图片描述

三、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)

在这里插入图片描述
初次使用树莓派串口编程,需要配置。我开始搞了很久,以为是程序写错了 还一直在调试。。
这个过程就是配置串口让串口来用做通信

/* 修改 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 重启

!!!一定记得重启

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值