此篇为 《树莓派使用基础》 中,RPIGPIO Input功能高级应用技巧。GPIO的简单使用请参考博文 树莓派3B+ GPIO输入输出使用
目前有几种途径可以在程序中获得 GPIO 的输入信息。
如果在输入针脚上没有连接任何元件,那么它将是“浮动(float)”的。换句话说,因为没有连接任何元件,在按下按钮或开关之前,读取的值是没有意义的。由于电源的波动,获取到的值可能会有很大的变化。
为了解决这个问题,我们需要使用 上拉/下拉电阻 。这样,我们就可设定输入的默认值了。在这里,可以使用硬件或软件对电阻进行上拉/下拉。使用硬件方式,将一个 10K 的电阻连接在输入通道与 33V(上拉)或 0V(下拉)之间是常用的做法。而 RPiGPIO 也允许您通过软件的方式对配置 Broadcom SOC 来达到目的:
或者
通道编号是基于所使用的编号系统所指定的(BOARD 或 BCM)。
边缘的定义为电信号从 LOW 到 HIGH(上升临界值)或从 HIGH 到 LOW(下降临界值)状态的改变。正常情况下,对于输入的值来说,我们更关心的是输入的状态是否发生了改变。这种状态上的改变是很重要的。
为了避免程序在忙于处理其它的事物时而错过了按下按钮的 *** 作,这里有两种方法可以解决:
在检测到边缘时执行线程回调函数
注意,可以输入 GPIORISING、GPIOFALLING、GPIOBOTH 对边缘进行检测。这种方式的优点是占用 CPU 资源很少,因此系统可以有充裕的资源处理其它事物。
RPiGPIO 在第二条线程中执行回调函数。这意味着回调函数可以同您的主程序同时运行,并且可以立即对边缘进行响应。例如:
如果需要多个回调函数:
注意,在该示例中,回调函数为顺序运行而不是同时运行。这是因为当前只有一个进程供回调使用,而回调的运行顺序是依据它们被定义的顺序。
可能会注意到,每次按钮按下时,回调 *** 作被调用不止一次。这种现象被称作“开关抖动(switch bounce)”。这里有两种方法解决开关抖动问题:
或者
由于某种原因,若不希望程序检测边缘事件,可以将它停止:
原文链接
参考链接
vmstat(VirtualMeomoryStatistics,虚拟内存统计) 是Linux中监控内存的常用工具,可对 *** 作系统的虚拟内存、进程、CPU等的整体情况进行监视。
vmstat的常规用法:vmstat interval times即每隔interval秒采样一次,共采样times次,如果省略times,则一直采集数据,直到用户手动停止为止。
top命令的汇总区域显示了五个方面的系统性能信息:
1负载:时间,登陆用户数,系统平均负载;
2进程:运行,睡眠,停止,僵尸;
3cpu:用户态,核心态,NICE,空闲,等待IO,中断等;
4内存:总量,已用,空闲(系统角度),缓冲,缓存;
5交换分区:总量,已用,空闲
任务区域默认显示:进程ID,有效用户,进程优先级,NICE值,进程使用的虚拟内存,物理内存和共享内存,进程状态,CPU占用率,内存占用率,累计CPU时间,进程命令行信息。
htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。
Htop可让用户交互式 *** 作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标 *** 作。
与top相比,htop有以下优点:
▪ 可以横向或者纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。
▪ 在启动上,比top更快。
▪ 杀进程时不需要输入进程号。
▪ htop支持鼠标 *** 作
Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
用法:
netstat –npl 可以查看你要打开的端口是否已经打开。
netstat –rn 打印路由表信息。
netstat –in 提供系统上的接口信息,打印每个接口的MTU,输入分组数,输入错误,输出分组数,输出错误,冲突以及当前的输出队列的长度。
▪ 杀掉某一程序的方法:ps aux | grep mysqld | grep –v grep | awk ‘{print 2 == “Z”){print $4}}’ | xargs kill -9
跟踪程序执行过程中产生的系统调用及接收到的信号,帮助分析程序或命令执行中遇到的异常情况。
举例:查看mysqld在linux上加载哪种配置文件,可以通过运行下面的命令:
能够打印系统总共运行了多长时间和系统的平均负载,uptime命令最后输出的三个数字的含义分别是1分钟,5分钟,15分钟内系统的平均负荷。
lsof(list open files)是一个列出当前系统打开文件的工具。通过lsof工具能够查看这个列表对系统检测及排错,常见的用法:
查看文件系统阻塞 lsof /boot
查看端口号被哪个进程占用 lsof -i : 3306
查看用户打开哪些文件 lsof –u username
查看进程打开哪些文件 lsof –p 4838
查看远程已打开的网络链接 lsof –i @19216834128
perf是Linux kernel自带的系统性能优化工具。优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature,用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能。
性能调优工具如 perf,Oprofile 等的基本原理都是对被监测对象进行采样,最简单的情形是根据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序当时的上下文。假如一个程序 90% 的时间都花费在函数 foo() 上,那么 90% 的采样点都应该落在函数 foo() 的上下文中。运气不可捉摸,但我想只要采样频率足够高,采样时间足够长,那么以上推论就比较可靠。因此,通过 tick 触发采样,我们便可以了解程序中哪些地方最耗时间,从而重点分析。
>
单片机或树莓派一般使用 L298n 模块来驱动电机 。L298N的实物图如下。
12V power:L298n 的电源正极,尽管标的 12V,但你可以使用 7V ~ 35V 的电源。
GND: L298n 的电源地,树莓派的 GND 引脚也要接到这里,即 L298N 和 树莓派需要共地。
5V power: L298n 输出的 5v 电源,是用来给单片机或树莓派供电的。如果你的树莓派是单独供电,那么这个引脚悬空。
Output 的两个引脚接直流电机的两脚,而板上有 Output A 和 Output B,分别驱动电机 A 和电机 B。
A Enable : 电机 A 使能,接 GPIO 口 。可以用PWM 来调速。
Logic Input : 接 4 个 GPIO 口。 上面两个脚 Input1 、Input2 (靠近 A Enable )控制电机 A ; 下面两个脚 Input3、Input4 (靠近 B Enable)控制电机 B。
B Enable : 电机 B 使能,接 GPIO 口。 可以用 PWM 来调速。
总结一下就是 A Enable 、Input1、Input2 控制电机 A 的运行,B Enable、Input3、Input4 控制电机 B 的运行。
如何控制的呢? 下面是对电机 A 进行控制的真值表,电机 B 同理。
驱动一下试试吧!
下面是控制电机 A 的电路图:
把 L289N 的直流电源接好,然后把树莓派的 GND 与 L298N 的 GND 连在一起,因为共地后 L298N 才能识别树莓派发送的 IN1、IN2 到底是高电平还是低电平。
树莓派的 2、3、4 脚分别连到 A Enable、IN1 、IN2 。(把 Enable 上的短接帽拿掉)
由控制表可知给 2 脚高电平,3 脚高电平,4 脚低电平,电机就会正转。
编写程序:
前面提到过 A Enable 和 B Enable 可以用 pwm 控制来调速,下面是相应程序。
接线不变!这个程序可以让电机 A 以不同的速度正转。
在树莓派中运行程序后,可以看到电机的转速会随着占空比的改变而变化。
程序源码在: github
树莓派教程(持续更新)百度网盘免费资源在线学习
wuuj
树莓派教程(持续更新) 中谷教育-Python视频教程(完整版)
游戏镜像 微雪5寸显示器config 树莓派详细资料 视频教程 镜像 Voice kit语音工具包镜像 Etcher-Setup-144-x86镜像烧录工具
exeaiyprojects-2018-04-13imgxz 开启SSH-raspbian-stretchzip ubuntu-mate-16042-desktop-armhf-raspberry-piimgxz StickyFingers-Kali-Pi-armhf-180923imgxz recalboxOS-400-beta5zip 2018-11-13-raspbian-stretchzip
以上就是关于树莓派 GPIO Input 部分高级应用技巧全部的内容,包括:树莓派 GPIO Input 部分高级应用技巧、树莓派 性能分析工具、树莓派 3 + L298N模块 驱动直流电机等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)