news 2026/5/12 8:52:02

树莓派4B学习笔记——IO输入检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派4B学习笔记——IO输入检测

文章目录

  • 树莓派输入检测
    • 模块介绍
    • 接线图
    • 获取方式
      • GPIO命令获取(BCM编码)
      • C语言获取IO状态(wPi编码)
      • Python获取IO状态(设置成了wPi编码模式)
  • 总结
  • 树莓派4B入门学习笔记汇总

树莓派输入检测

GPIO口的作用无非就是输入输出和通信,前面在LED控制中已经了解了输出功能的用法,今天通过一个寻迹模块作为输入传感器来试试树莓派的输入检测功能。IO口的输入模块可以说很多很多,例如常见的按键、光电开关、磁性开关等等,这些都可以作为我们一个系统的输入传感器,他们的输入信号既有数字信号又有模拟信号,这些输入信号在输入我们的控制器之前都需要经过其过程通道进行调理转换,例如按键这类开关量的输入信号就需要经过消抖处理,交变信号需要经过检波、采集有效值、放大等一系列操作转换成直流信号,有关过程通道的详细介绍可以参考笔者另外一个系列智能车浅谈——过程通道篇。

模块介绍

厂家介绍:(下图来自某宝优信电子模块详情)
实物图如下:

原理图如下:

相信参加了近几年的电赛或者是自己做过寻迹小车的同学对此模块都很熟悉了,这里我们简单捋一下整电路的原理,这个来说原理是一个电压比较器,其中负相输入端是通过一个变阻器来给定参考电压(通过调节变阻器阻止可以改变灵敏度),正向输入端接了一个TCRT5000的红外传感器,它的原理是当发射管的光反射到接收管就导通;当没有东西遮挡红外对管时,接收管无法接收发射管的红外光,不导通,此时正向端电压存在,且比参考电压高,D0输出高电平,开关指示灯不工作;当有东西遮挡红外对管,切不是黑色物体时,红外光被反射给接收管,接收管导通,正向输入电压被拉地,此时正向段电压小于参考电压,D0输出低电平,开关指示灯开始工作。

接线图

笔者此处还是使用的板载编码为7的引脚,接线图如下所示:

树莓派红外模块
5VVCC
GNDGND
GPIO7D0

获取方式

GPIO命令获取(BCM编码)

在点亮LED中我们最开始使用的GPIO命令中我们就有使用过查询IO口状态的指令,需要注意,商家的注意事项已经提示,树莓派玩家需要将I/O口设置成输入模式,才能正常使用。

了解这些后咱来实际操作一下:
emmm突然忘记了引脚编码、不急啊,打开终端命令,输入gpio readall,回车就会出现你想看见的东西。

输入命令gpio -g mode 4 input回车(设置引脚模式为输入)
然后输入 gpio -g read 4 回车(读取引脚状态)
笔者此时的传感器已经导通,输出为低电平,可以看见返回的也是0

然后将传感器远离遮挡物或者朝天花板,当开关指示灯熄灭时

输入gpio -g read 4 回车,会发现返回的是1。

C语言获取IO状态(wPi编码)

打开C语言IDE Geany,输入以下代码:

#include<stdio.h>#include<stdlib.h>#include<wiringPi.h>#defineKEY7//wiringPi模式第7号脚intmain(){if(wiringPiSetup()==-1){perror("树莓派启动失败");exit(-1);}pinMode(KEY,INPUT);//设置引脚为输入while(1){if(digitalRead(KEY)==0){//遮挡低电平,未遮挡高电平puts("被遮挡...");}}return0;}

需要进一步了解wiringpi库中函数的参考此博文。
按照之前的操作命名key.c,保存到桌面,然后打开终端命令;
输入 cd Desktop 切换至桌面目录
然后入gcc -o key key.c -lwiringPi编译和生成key的执行文件,
最后输入sudo ./key回车。

此时遮挡传感器就会看见命令行出现以下效果。

可以发现命令窗口打印了一堆被遮挡,这显然有些不太友好
我们先按Ctrl+C关闭当前运行,对代码进行修改。
Ctrl + C 终止
Ctrl + D 退出
Ctrl + S 挂起
Ctrl + Q 解挂
修改代码如下:(其实就类似与我们对按键输入执行了一个消抖)

// An highlighted block#include<stdio.h>#include<stdlib.h>#include<wiringPi.h>#defineKEY7//wiringPi模式第7号脚intmain(){if(wiringPiSetup()==-1){perror("树莓派启动失败");exit(-1);}pinMode(KEY,INPUT);//设置输入//判断是否遮挡while(1){if(digitalRead(KEY)==0){//遮挡低电平,未遮挡高电平//第一次判断是否遮挡delayMicroseconds(20000);//延时20msif(digitalRead(KEY)==0){//第二次判断是否遮挡while(digitalRead(KEY)==0);//等待puts("按下...");}}}return0;}

然后再次打开命令终端,一套龙操作,就可以实现以下效果。

Python获取IO状态(设置成了wPi编码模式)

打开Thonny,输入以下代码并保存,

// An highlighted blockimportwiringpi GPIO_Output_Pin=0#定义GPIO_Output_Pin为0脚 GPIO_Intput_Pin=7#定义GPIO_Intput_Pin为7OUTPUT=1#定义OUTPUT1即输出INPUT=0#定义INPUT0即输入HIGH=1#定义HIGH1即高点平LOW=0#定义HIGH1即高点平 wiringpi.wiringPiSetup()#设置GPIO编号为wPi方式 wiringpi.pinMode(GPIO_Output_Pin,OUTPUT)#设置GPIO_Output_Pin为OUTPUT输出模式 wiringpi.pinMode(GPIO_Intput_Pin,INPUT)#设置GPIO_Intput_Pin为INPUT输入模式while1:wiringpi.digitalWrite(GPIO_Output_Pin,HIGH)#设置GPIO_Output_Pin输出高电平print('GPIO_Output_Pin OUTPUT =>HIGH')print('GPIO_Intput_Pin INPUT <=',wiringpi.digitalRead(GPIO_Intput_Pin))#打印从GPIO_Intput_Pin读到的数据 wiringpi.delay(1000)#延时1000msprint()#为了输出美观 打印换行 wiringpi.digitalWrite(GPIO_Output_Pin,LOW)#设置GPIO_Output_Pin输出低电平print('GPIO_Output_Pin OUTPUT =>LOW')print('GPIO_Intput_Pin INPUT <=',wiringpi.digitalRead(GPIO_Intput_Pin))#打印从GPIO_Intput_Pin读到的数据 wiringpi.delay(1000)#延时1000msprint()#为了输出美观 打印换行


总结

有关树莓派输入就记录到这,至于能做啥,大家就自由发挥吧,有啥高级的项目欢迎大家投食,总不能一直高射炮打蚊子,如有不妥之处欢迎大家指导。

树莓派4B入门学习笔记汇总

树莓派4B学习笔记——系统烧录及初次开机
树莓派4B学习笔记——点亮你的LED
树莓派4B学习笔记——IO输入检测
树莓派4B学习笔记——IO通信篇(I2C)
树莓派4B学习笔记——IO通信篇(SPI)
树莓派4B学习笔记——IO通信篇(1-Wire)
树莓派4B学习笔记——IO通信篇(UART)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 8:51:40

掌握高效游戏管理:Snap.Hutao原神工具箱的实用功能解析

掌握高效游戏管理&#xff1a;Snap.Hutao原神工具箱的实用功能解析 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 &#x1f9f0; / Multifunctional Open-Source Genshin Impact Toolkit &#x1f9f0; 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hu…

作者头像 李华
网站建设 2026/4/9 16:14:09

如何让魔兽世界操作效率提升300%?GSE智能宏系统的全方位解析

如何让魔兽世界操作效率提升300%&#xff1f;GSE智能宏系统的全方位解析 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. 项目地址: https://gitcode.com/gh_mirrors/gs/GSE-Advanced-Macro-…

作者头像 李华
网站建设 2026/4/9 16:13:58

解锁Mac散热潜能:让Intel Mac保持凉爽的开源风扇控制工具

解锁Mac散热潜能&#xff1a;让Intel Mac保持凉爽的开源风扇控制工具 【免费下载链接】smcFanControl Control the fans of every Intel Mac to make it run cooler 项目地址: https://gitcode.com/gh_mirrors/smc/smcFanControl 当您的Intel Mac在运行大型应用时突然变…

作者头像 李华
网站建设 2026/4/9 16:12:14

英雄联盟智能助手ChampR:免费提升游戏水平的终极指南

英雄联盟智能助手ChampR&#xff1a;免费提升游戏水平的终极指南 【免费下载链接】champr &#x1f436; Yet another League of Legends helper 项目地址: https://gitcode.com/gh_mirrors/ch/champr 想要在英雄联盟中快速提升游戏水平吗&#xff1f;ChampR智能助手为你…

作者头像 李华
网站建设 2026/4/9 16:11:38

OpenClaw Token 消耗实测:6 项配置调整后省了 40% 费用

跑了一周 OpenClaw&#xff0c;账单吓了一跳。逐项排查后发现&#xff0c;默认配置下有大量 token 浪费在心跳、上下文回放和重复探索上。本文分享 6 项实测有效的配置优化&#xff0c;附具体参数。钱花在哪了&#xff1f;先看 Token 消耗结构 OpenClaw 每次 API 调用的 token …

作者头像 李华
网站建设 2026/4/9 16:11:38

xiaozhi-esp32-server:构建智能终端交互系统的全栈技术指南

xiaozhi-esp32-server&#xff1a;构建智能终端交互系统的全栈技术指南 【免费下载链接】xiaozhi-esp32-server 本项目为xiaozhi-esp32提供后端服务&#xff0c;帮助您快速搭建ESP32设备控制服务器。Backend service for xiaozhi-esp32, helps you quickly build an ESP32 devi…

作者头像 李华