IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 2021-07-09嵌入式学习---树莓派wiringPi库 -> 正文阅读

[嵌入式]2021-07-09嵌入式学习---树莓派wiringPi库

1、树莓派wiringPi库
wiringPi是一个很棒的树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等
1.安装
进入 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,会在终端中输出相关wiringPi的信息。否则安装失败。

2.查看引脚编号表格

> gpio readall

注意:查看时,将树莓派的USB接口面对自己,这样看才是正确的
在这里插入图片描述
3.wiringPi库API大全
使用wiringPi库,包含头文件 #include<wiringPi.h>。

1)硬件初始化函数
使用wiringPi时,你必须在执行任何操作前初始化树莓派,否则程序不能正常工作。
可以调用下表函数之一进行初始化,它们都会返回一个int , 返回 -1 表示初始化失败。
在这里插入图片描述
2)通用GPIO控制函数
在这里插入图片描述
在这里插入图片描述
树莓派控制继电器
继电器:
VCC----3.3V
GND—0V(GND)
IN-------GPIO 7
继电器工作原理:信号低电平导通,高电平断开

#include <wiringPi.h>
#include <stdio.h>

#define SWITCHER 7

int main()
{
	int cmd;

	if(wiringPiSetup() == 1){//引脚初始化
		printf("setuop failed\n");
	}
	pinMode(SWITCHER, OUTPUT);//配置继电器引脚
	digitalWrite(SWITCHER, HIGH);//初始化引脚为高电平,断开

	while(1){
		printf("input your nu: 0 off 1 on\n");
		scanf("%d", &cmd);
		getchar();//吸收回车符
		if(cmd == 1){
			digitalWrite(SWITCHER, LOW);
		}else if(cmd == 0){
			digitalWrite(SWITCHER, HIGH);
		}else{
			printf("input error\n");
		}
		cmd = 10;//每次循环后cmd=10,不至于一直是cmd=1/0
	}
	return 0;
}

3)时间控制函数
在这里插入图片描述
4)中断
wiringPi提供了一个中断处理注册函数,它只是一个注册函数,并不处理中断。他无需root权限。
在这里插入图片描述
5)softPwm,软件实现的PWM
树莓派硬件上支持的PWM输出的引脚有限,为了突破这个限制,wiringPi提供了软件实现的PWM输出API。
需要包含头文件:#include <softPwm.h>
编译时需要添pthread库链接 -lpthread
在这里插入图片描述
6)多线程
wiringPi提供了简单的Linux系统下的通用的 Posix threads线程库接口来支持并发。
在这里插入图片描述
在这里插入图片描述
凡是涉及到多线程编程,就会涉及到线程安全的问题,多线程访问同一个数据,需要使用同步锁来保障数据操作正确性和符合预期。
当A线程锁上 锁S 后,其他共用这个锁的竞争线程,只能等到锁被释放,才能继续执行。
成功执行了piLock 函数的线程将拥有这把锁。其他线程想要拥有这把锁必须等到这个线程释放锁,也就是这个线程执行piUnlock后。
同时要扩展的知识是:volatile 这个C/C++中的关键字,它请求编译器不缓存这个变量的数据,而是每次都从内存中读取。特别是在多线程下共享放变量,必须使用volatile关键字声明才是保险的。

7)串口通信
使用时需要包含头文件:#include <wiringSerial.h>
在这里插入图片描述
在这里插入图片描述
初次使用树莓派串口编程,需要配置

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

串口通信

#include <wiringSerial.h>
#include <wiringPi.h>
#include <stdio.h>

int main()
{	
	int fd;
	int cmd;

	wiringPiSetup();
	fd = serialOpen("/dev/ttyAMA0", 9600);
	while(1){
		if(serialDataAvail(fd) != -1){//接收数据判断
			cmd = serialGetchar(fd);//接收到数据,赋值给cmd
			printf("get data: cnmd=%d", cmd);//输出打印
		}
		//serialPutchar(fd, 'c');//发送数据
		serialPuts(fd, "kanxiansen\r\n");//发送字符串
		delayMicroseconds(1000000);//延时1秒
	}
	serialClose(fd);
	return 0;
}

树莓派和语音模块通信

#include <wiringSerial.h>
#include <wiringPi.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main()
{
	int fd;
	char cmd[128] = {'/0'};
	int nread;
	
	wiringPiSetup();
	fd = serialOpen("/dev/ttyAMA0", 9600);
	while(1){
		nread = read(fd, cmd, sizeof(cmd));
		if(strlen(cmd) == 0){//判断接收是否接收到数据
			printf("超时\n");
			continue;
		}
		if(strstr(cmd, "open") != NULL){//接收到开灯
			printf("open light\n");
		}
		if(strstr(cmd, "close") != NULL){//接收到关灯
			printf("close light\n");
		}
		memset(cmd, '\0', sizeof(cmd)/sizeof(char));//初始化接受到的数据
	}
	return 0;
}

参考资料https://www.cnblogs.com/lulipro/p/5992172.html

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-11 16:46:50  更:2021-07-11 16:47:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:21:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码