树莓派外设开发基础(wiringPi库)

参考:树莓派外设开发基础篇
作者:丶PURSUING
发布时间:2021-02-05 18:20:53
网址:https://blog.csdn.net/weixin_44742824/article/details/113673019?spm=1001.2014.3001.5501

目录

  • 外设开发综述及wiringPi库
    • 是什么
    • 如何获取
    • 如何使用
      • EG1:控制继电器
      • EG2:超声波的使用
        • Linux下时间函数:struct timeval结构体
        • 超声波原理简述
        • 代码详解
  • 其他
    • 1.配置ssh时出现的乱码问题
    • 2. .swp文件的处理

外设开发综述及wiringPi库

是什么

树莓派中一个集成了很多API(特定平台,特定接口)的库,使得开发像printf一样简单。
初学只需会调库,之后再深入到自己写wiringPi库,IO的上层以及底层的驱动代码。

在这里插入图片描述

如何获取

树莓派的镜像固件中可能不会带有wiringPi库

使用以下命令查看

gpio -v
  • 已经安装

在这里插入图片描述

  • 未安装

由于我的树莓派自带了WiringPi库,没有亲自安装过,参考

安装教程博文中补充失效的下载连接

如何使用

EG1:控制继电器

  1. 硬件连接

查看io口详情

gpio readall

在这里插入图片描述

注意了IO口编号可不是中间排针的序号!!

继电器驱动电压3.3v
选择pin7作为信号引脚

下面是连接实物图,因为连接了WIFI,没有用到串口线。
在这里插入图片描述

  1. 编程

树莓派的接口函数详解:https://www.cnblogs.com/lulipro/p/5992172.html

包含头文件#incldue <wiringPi.h>

①硬件初始化函数

函数返回值说明
int wiringPiSetup (void)-1表示失败使用wiringPi 引脚编号表,编号为 0~16。root
int wiringPiSetupGpio (void)-1表示失败使用BCM GPIO引脚编号表。root

②通用GPIO控制函数

函数可取值(pin👉0,1,2…)说明
void pinMode (int pin, int mode)value INPUT、OUTPUT、PWM_OUTPUT,GPIO_CLOCK只有wiringPi 引脚编号下的1脚(BCM下的18脚) 支持PWM输出;只有wiringPi编号下的7(BCM下的4号)支持GPIO_CLOCK输出
void digitalWrite (int pin, int value)HIGH,LOW输出高低电平
函数参数说明说明
int digitalRead (int pin)返回引脚上的电平
void analogWrite(int pin, int value)value:输出的模拟量树莓派的引脚本身是不支持AD转换的,也就是不能使用模拟量的API,需要增加另外的模块
int analogRead (int pin)返回引脚上读取的模拟量树莓派的引脚本身是不支持AD转换的,也就是不能使用模拟量的API,需要增加另外的模块
void pwmWrite (int pin, int value)value:写入到PWM寄存器的值,范围在0~1024之间。pin只能是wiringPi 引脚编号下的1脚(BCM下的18脚)

EG:从键盘输入0,1控制继电器

  1. 编写程序
#include <wiringPi.h>
#include <stdio.h>#define SWITCHER 7int main()
{int cmd;if(wiringPiSetup() == -1){printf("硬件初始化失败\n");return -1;}pinMode(SWITCHER,OUTPUT);digitalWrite(SWITCHER,HIGH);while(1){printf("输入0-接通;1-断开并回车\n");scanf("%d",&cmd);//getchar();if(cmd == 0){digitalWrite(SWITCHER,LOW);}else if(cmd == 1){digitalWrite(SWITCHER,HIGH);}else{printf("input error\n");}}return 0;
}

编译时候记得链库 -lwiringPi

代码快速对齐
gg 回首行
=G 自动对齐

  1. 编译,运行
gcc relay.c -lwiringPi
./a.out

EG2:超声波的使用

Linux下时间函数:struct timeval结构体

  • 结构体原型
#include "sys/time.h"struct timeval  
{  
__time_t tv_sec;        /* Seconds. */  
__suseconds_t tv_usec;  /* Microseconds. */  
}; 
  • 用法

①定义2个结构体变量

struct timeval tv1;
struct timeval tv2;

②获取某个事件的开始,结束信息

gettimeofday(&tv1, NULL);
//....事件
gettimeofday(&tv2, NULL);

int gettimeofday(struct timeval *tv, struct timezone *tz);
timezone structure 已经过时了
tz 通常设置为 NULL.

③计算开始,结束的时间

long start, stop;
start = tv1.tv_sec * 1000000 + tv1.tv_usec;  //单位为us
stop  = tv2.tv_sec * 1000000 + tv2.tv_usec;

或者

unsigned long long timeSum = 0;
timeSum = tv1.tv_sec-tv2.tv_sec +(tv1.tv_usev-tv2.tv_usec)/1000000;//以s为单位

超声波原理简述

触发信号为10us的TTL,接收信号检测高电平持续的时间,再由公式计算即可。

TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑"1",0V等价于逻辑"0",这被称做TTL信号系统

代码详解

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>
#define Trig    4
#define Echo    5void ultraInit(void)
{pinMode(Echo, INPUT);pinMode(Trig, OUTPUT);
}float disMeasure(void)
{struct timeval tv1;struct timeval tv2;/**     struct timeval*     {*         time_t tv_sec;        //Seconds.*         suseconds_t tv_usec;  //Microseconds.*     };*/long start, stop;float dis;digitalWrite(Trig, LOW);delayMicroseconds(2);digitalWrite(Trig, HIGH);delayMicroseconds(10);digitalWrite(Trig, LOW);//10us的TTL//统计高电平持续的时间while(!(digitalRead(Echo) == 1));gettimeofday(&tv1, NULL);while(!(digitalRead(Echo) == 0));gettimeofday(&tv2, NULL);/** int gettimeofday(struct timeval *tv, struct timezone *tz);* The functions gettimeofday() and settimeofday() can get and set the time as well as a timezone.* timezone structure 已经过时了;* tz 通常设置为 NULL.*/start = tv1.tv_sec * 1000000 + tv1.tv_usec;  //单位为usstop  = tv2.tv_sec * 1000000 + tv2.tv_usec;dis = (float)(stop - start) / 1000000 * 34000 / 2;//s×cm/s=cmreturn dis;
}int main(void)
{float dis;if(wiringPiSetup() == -1){printf("setup wiringPi failed !");return 1;}ultraInit();while(1){dis = disMeasure();printf("distance = %0.2f cm\n",dis);delay(1000);}return 0;
}

-----------------------------------------------------------------时间控制函数-----------------------------------------------------------
void delay (unsigned int howLong)
毫秒级,最大延时49天

void delayMicroseconds (unsigned int howLong)
微妙级,最大延时71分钟

其他

1.配置ssh时出现的乱码问题

输入命令 sudo raspi-config 后如下图所示。底层逻辑无问题,可操作,仅为显示乱码
在这里插入图片描述
将字符编码由default更改为UTF-8即可

2. .swp文件的处理

2. .swp文件的处理

当两个窗口同时对同一个目标文件进行编辑时,就会提示生成隐藏文件目标.swp,警告修改编辑的可能不是最新的文件。若.swp文件存在,则每次打开目标文件都会ATTENTION

解决方法
ls -a可以看到生成的.swp隐藏文件,再用rm指令删除即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html仿百度页面代码_百度优化需要注意的4点

百度优化的技术很多&#xff0c;需要根据行业特点进行开拓和挖掘。还需要有多年的网络营销服务经验&#xff0c;进行网站分析、关键词分析、同行竞争分析&#xff0c;优化开始后监视网站流量数据。所以百度优化需要注意的4点如下&#xff1a;(1)页面优化。页面质量不高&#xf…

树莓派串口通信

目录相关概念简述半双工与全双工串口通信注重什么串口通信编程常用API初次使用需要配置树莓派和电脑串口之间读、写、交互接线编写程序其他简单了解为什么说linux一切皆文件查找文件是否存在相关概念 简述半双工与全双工 全双工允许通信双方同时互传数据&#xff1b;半双工不…

html把实线变成虚线,Html5 Canvas 绘制虚线和实线的切换方法

场景应用&#xff1a;1需朋者说上事是础一发一开程和开数的目前间)、最开始默认绘制的都新直能分支调二浏页器朋代说&#xff0c;事刚是实线。var canvas document.getElementById("canvas");var context canvas.getContext("2d");context.strokeStyle …

React引入,运行

1.引入 <script src"https://cdn.bootcss.com/react/15.5.4/react.min.js"></script> <script src"https://cdn.bootcss.com/react/15.5.4/react-dom.min.js"></script> <script src"https://cdn.bootcss.com/babel-stand…

linux与windows间共享文件夹 FileZilla树莓派文件传输

参考&#xff1a;linux与windows间的文件共享 作者&#xff1a;丶PURSUING 发布时间&#xff1a;2021-02-09 11:37:48 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/113767236?spm1001.2014.3001.5502 参考&#xff1a;利用FileZilla实现ubuntu与w…

MATLAB 快速绘制曲线图的形状,粗细,颜色

MATLAB 快速绘制曲线图的形状&#xff0c;粗细&#xff0c;颜色 在写论文的时候&#xff0c;经常要用到Matlab绘制一些曲线&#xff0c;包括曲线的形状、粗细、颜色等&#xff0c;可以通过以下的piot函数实现。 1.通过改变R-G-B 的值改变线条的颜色&#xff1a; 通过改变R-G…

安装secureCRT提示sorry的解决办法

摘自&#xff1a;你的secureCRT还在sorry吗&#xff1f; 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-12 08:21:37 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/114684721?spm1001.2014.3001.5502 此篇专门针对于学习群中部分小伙伴…

第三十三讲:tapestry表单组件详解之Label

2019独角兽企业重金招聘Python工程师标准>>> http://flywind.org/newtechnologydetail/168 转载于:https://my.oschina.net/flywind/blog/82633

c语言基础回顾 —— 其他知识点

参考&#xff1a;c语言基础回顾 —— 其他知识点 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-11 14:48:59 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/114666007 本文为学习笔记&#xff0c;结合课程内容以及下列文章 在 printf 里…

WebFlux02 SpringBoot WebFlux项目骨架搭建

1 环境搭建 1.1 版本说明 jdk -> 1.8 maven -3.5 springboot -> 2.0.3 开发工具 -> IDEA 1.2 创建项目 利用 IDEA 或者 start.spring.io 创建一个SpringBoot项目 1.2.1 选择依赖 1.2.2 pom.xml 依赖 <?xml version"1.0" encoding"UTF-8"?&g…

计算机专业 拒绝清华,高分拒绝清华北大怎么回事 为什么会拒绝

原标题&#xff1a;高分拒绝清华北大怎么回事 为什么会拒绝今年有一位来自云南的考生在高考的时候考了712分&#xff0c;成功超过清华北大的投档线&#xff0c;要是换做别人都应该会很高兴&#xff0c;终于能够上万人瞩目的名牌大学了&#xff0c;但是这位学生却拒绝了北大清华…

五大板块(1)—— 数组的定义,赋值与应用

参考&#xff1a;五大板块&#xff08;1&#xff09;—— 数组的定义&#xff0c;赋值与应用 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-18 16:00:05 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/114981166 目录数组的定义及访问完…

五大板块(2)—— 指针

参考&#xff1a;五大板块&#xff08;2&#xff09;—— 指针 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-18 16:01:22 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/114981482 本文为学习笔记&#xff0c;整合课程内容及文章如下&…

台式计算机机箱都一样吗,别以为组装台式机很简单,机箱选择大有学问

原标题&#xff1a;别以为组装台式机很简单&#xff0c;机箱选择大有学问曾经组装台式机的时候对于机箱完全没有在意&#xff0c;总觉得随便选择一款就可以了&#xff0c; 而且是挑便宜的选择&#xff0c;而那些机箱有便宜也有贵&#xff0c;其实里面的设计完全不一样&#xff…

实现连麦_微信年底放了个大招,视频号重磅升级,打赏直播连麦美颜抽奖齐上...

期待已久的视频号连麦功能来了。这次来的不仅有连麦功能&#xff0c;还有视频号打赏的微信豆体系&#xff0c;创作者想要的入口也有了。让我们一起来看看有什么新功能吧&#xff01;太长不看版本&#xff1a;「附近的人」变「附近的直播和人」连麦上线&#xff0c;还有美颜、抽…

【转】 .NET 打印水晶报表(CrystalReport)时,出现“查询引擎错误 C:/DO...

2019独角兽企业重金招聘Python工程师标准>>> 本地开发环境&#xff1a; Win XP, Visual Studio 2003 Oracle 项目背景&#xff1a; WinForm 工程&#xff0c;在一个表单中用Treeview控件显示 部门层级信息&#xff0c;然后有 按照相同格式&#xff08;layout…

html5 查看图片,html5实现图片预览和查看原图

一、页面元素只有三个简单元素&#xff1a;拖拽区域二、添加简单的样式&#xff1a;.dragarea{width:300px;height:100px;background:#ddd;text-align:center;line-height:100px;}.drag_hover{background:rgba(0,0,0,.4) !important;}.item{width:300px;height:100px;float:lef…

五大板块(4)——链表

参考&#xff1a;五大板块&#xff08;4&#xff09;——链表 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-02-15 09:33:29 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/114981905 目录一、对比链表与数组同样是存放一串数据&#xff0…

boolean类型默认值_「软帝学院」Java的基本数据类型

Java的基本数据类型Java的两大数据类型: 内置数据类型 引用数据类型内置数据类型Java语言提供了八种基本类型。六种数字类型(四个整数型&#xff0c;两个浮点型)&#xff0c;一种字符类型&#xff0c;还有一种布尔型。byte&#xff1a; byte数据类型是8位、有符号的&#xff0c…

五大板块(5)——字符串

参考&#xff1a;五大板块&#xff08;5&#xff09;——字符串 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-18 16:03:48 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/114982019 目录一、字符串的定义方式与输出二、字符串的结尾是…