树莓派开发笔记03-树莓派的GPIO口输入检测

ops/2024/9/20 7:27:27/ 标签: 笔记, 树莓派, 嵌入式, 3B+

github主页:https://github.com/snqx-lqh
gitee主页:https://gitee.com/snqx-lqh
本项目github地址:https://github.com/snqx-lqh/RaspberryPiLearningNotes
本项目gitee地址:https://gitee.com/snqx-lqh/RaspberryPiLearningNotes
欢迎交流

说明

首先,树莓派的GPIO口,不同的库给他的编号不同,有基本的功能名编的引脚,然后BCM库有一种编码,然后是wiringPi有一种编码。我们下面的代码将通过检测GPIO.0的输入高低电平变化来控制GPIO.1的输出高低电平的变换。

笔记实现的功能,检测GPIO.0的输入,控制GPIO.1的输出

在这里插入图片描述

代码

wiringPi

1、int digitalRead (int pin)

pin:读取的引脚

返回:引脚上的电平,可以是LOW HIGH 之一

c文件名我命名为main.c,实现的功能就是按键端口检测为0,就设置LED端口电平为0,反之为1。

#include <wiringPi.h>
#include <stdio.h>#define LED 1
#define KEY 0int main(void)
{int key_value = 0;if(wiringPiSetup() < 0) //当使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。return 1;pinMode(KEY,INPUT);  //设置引脚为输入模式pinMode(LED,OUTPUT); //设置引脚为输出模式while (1){key_value = digitalRead(KEY); //读取引脚电平if(key_value == 0){digitalWrite(LED,0);      //设置引脚电平为0}else{ digitalWrite(LED,1);      //设置引脚电平为1}  }
}

然后编译这段代码

cc -Wall -o main main.c -lwiringPi

-Wall 表示编译时显示所有警告,-lwiringPi 表示编译时动态加载 wiringPi 库

编译完成后调用生成的main文件

sudo ./main

然后可以用示波器啥的,或者自己连接的KEY和LED灯在这两个引脚上,就可以查看到变化。

想要停止这个程序,Ctrl+c即可。

bcm2835库

1、void bcm2835_gpio_set_pud(uint8_t pin, uint8_t pud);

pin:配置的引脚

mode:指定引脚的上下拉模式,BCM2835_GPIO_PUD_OFF、BCM2835_GPIO_PUD_DOWN、BCM2835_GPIO_PUD_UP

2、uint8_t bcm2835_gpio_lev(uint8_t pin);

pin:配置的引脚

读取对应的引脚的值

bcm的引脚编号和wiringPi不同,注意,下面是一个实际例子

#include <bcm2835.h>#define LED 18
#define KEY 17int main(int argc,char **argv)
{uint8_t keyValue = 0;if(!bcm2835_init()) //初始化BCM相关的return 1;//  设置KEY输入模式bcm2835_gpio_fsel(KEY, BCM2835_GPIO_FSEL_INPT);//  设置KEY上拉模式bcm2835_gpio_set_pud(KEY, BCM2835_GPIO_PUD_UP);//  设置LED输出模式bcm2835_gpio_fsel(LED,BCM2835_GPIO_FSEL_OUTP); while(1){keyValue = bcm2835_gpio_lev(KEY);if(keyValue == 0){bcm2835_gpio_write(LED,LOW);      //设置引脚电平为0}else{ bcm2835_gpio_write(LED,HIGH);      //设置引脚电平为1}  }bcm2835_close();return 0;
}

然后编译这段代码

gcc -Wall main.c -o main -lbcm2835

-Wall 表示编译时显示所有警告,-lbcm2835 表示编译时动态加载bcm2835 库

编译完成后调用生成的main文件

sudo ./main

然后可以用示波器啥的,或者自己连接的KEY和LED灯在这两个引脚上,就可以查看到变化。

想要停止这个程序,Ctrl+c即可。

RPi.GPIO

直接给代码了

#!/usr/bin/python
# -*- coding:utf-8 -*-
import RPi.GPIO as GPIO
import timeLED = 18
KEY = 17GPIO.setmode(GPIO.BCM)    #采用BCM编号方式
GPIO.setup(LED,GPIO.OUT)  #设置输出模式
GPIO.setup(KEY, GPIO.IN, pull_up_down=GPIO.PUD_UP)  #设置输入模式,输入上拉,下拉是GPIO.PUD_DOWNkeyValue = 0try:while True:keyValue = GPIO.input(KEY)if keyValue:GPIO.output(LED,GPIO.HIGH)else:GPIO.output(LED,GPIO.LOW)
except:print("except")GPIO.cleanup()

运行执行python main.py即可


http://www.ppmy.cn/ops/95665.html

相关文章

响应式Web设计:纯HTML和CSS的实现技巧

互联网已经成为人们日常生活中不可或缺的一部分&#xff0c;随着移动设备的普及&#xff0c;用户访问网站的方式也发生了巨大变化。因此&#xff0c;响应式Web设计&#xff08;Responsive Web Design, RWD&#xff09;应运而生。它的目标是使Web页面能够根据不同设备屏幕的大小…

[数据集][图像分类]电力场景避雷针悬挂处腐蚀分类数据集909张2类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;909 分类类别数&#xff1a;2 类别名称:["corrosion","norm…

YOLOV8网络结构|搞懂Backbone-Conv

参数量计算: (输入通道*w)*(输出通道*w)*k^2+(输出通道*w)*2 w是模型缩放里面的width - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2 输出通道c2=64,k=3,s=2 P1/2 特征图变小一半 先定义算子层 再搭一个forward前向传播 class Conv(nn.Module):"""Standard convo…

苍穹外卖项目DAY01

苍穹外卖项目Day01 1、软件开发整体介绍 1.1、软件开发流程 1.2、角色分工 项目经理&#xff1a;对整个项目负责&#xff0c;任务分配、把控进度产品经理&#xff1a;进行需求调研&#xff0c;输出需求调研文档、产品原型等UI设计师&#xff1a;根据产品原型输出界面效果图架…

全球最强AI程序员 “Genie” 横空出世

全球最强AI程序员 “Genie” 横空出世 Genie 是什么Genie not just a copilot那么如何训练一名AI工程师呢Genie启动 World’s best AI Software Engineer. Genie is the best AI software engineer in the world by far - achieving a 30% eval score on the industry standard…

css实现水滴效果图

效果图&#xff1a; <template><div style"width: 100%;height:500px;padding:20px;"><div class"water"></div></div> </template> <script> export default {data() {return {};},watch: {},created() {},me…

记录|C#主界面设计【Web风格】

目录 前言一、页面效果二、布局设计2.1 左边菜单栏搭建框架Step1. panelMenu &#xff1a;Step2. panelLogoStep3. button模板Step4. 复制buttonStep5. 微调Button 2.2 界面颜色变换Step1. ThemeColor类Step2. From1.csStep3. 更换按钮点击颜色效果 2.3 按钮点击事件2.4 顶部ti…

Grafana+Influxdb(Prometheus)+Apache Jmeter搭建可视化性能测试监控平台

此性能测试监控平台&#xff0c;架构可以是&#xff1a; GrafanaInfluxdbJmeterGrafanaPrometheusJmeter Influxdb和Prometheus在这里都是时序性数据库 在测试环境中&#xff0c;压测数据对存储和持久化的要求不高&#xff0c;所以这里的组件可以都通过docker-compose.yml文件…

Linux环境开发工具【yum与vim】

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 文章目录 1.Linux软件包管理器yum1.1 快速使用yum 2. Linux编辑器-vim的使用2.1 vim的基本…

浙大数据结构慕课课后题(04-树6 Complete Binary Search Tree)

题目要求&#xff1a; A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the nodes key.The right subtree of a node contains only nodes wit…

php根据截止时间计算剩余的时间,并且在剩余时间不足1天时仅显示小时数

//获取政策库文章public function getIndexZckList(){$fl_id = input(fl_id);if(empty(

fastzdp_sqlmodel框架是如何实现更新和删除相关的功能封装的,20240817,Python的国产新ORM框架

根据模型对象更新 初步封装的方法 def update(engine, model_obj, update_dict):"""修改数据:param engine: 连接数据库的引擎对象:param model_obj: 模型对象:param update_dict: 更新字典:return:"""with Session(engine) as session:if not…

数据结构之数组

写在前面 看下数组。 1&#xff1a;巴拉巴拉 数组是一种线性数据结构&#xff0c;使用连续的内存空间来存储数据&#xff0c;存储的数据要求有相同的数据类型&#xff0c;并且每个元素占用的内存空间相同。获取元素速度非常快&#xff0c;为O(1)常量时间复杂度&#xff0c;所…

AI学习笔记:pdf-document-layout-analysis

一直在学AI&#xff0c;但没有连续的时间来尝试。现在终于失业了&#xff0c;有大把连续的时间来动手。 之前准备了一台I5-1400FRTX3600 12G的电脑&#xff0c;现在终于派上用场了。 由于一直在从事无线通信相关的工作&#xff0c;所以&#xff0c;拿到一份很长的 AI可能与通…

视图变换 - 等比例变换防止视图拉伸

文章目录 使用场景等比变换等高填充等宽填充代码进行比目标宽高计算超出部分处理设置负的 marginclip 裁剪 End参考&#xff1a; 转载请注明出处 使用场景 在日常开发中&#xff0c;经常会遇到的一个需求是将图片/视频从界面的一个位置&#xff0c;变换到另一个位置。在处理这…

Lambda表达式与流式编程

一、Lambda表达式 1.1 什么是lambda表达式 Lambda表达式是 jdk1.8 引入的一个新特性&#xff0c;它是函数式编程在Java中的一种体现。也是1.8最值得学习的新特性。 1. Lambda表达式实际上就是匿名内部类的简化版本。 2. Lambda表达式是jdk1.8引入的一个最重要的新特性&…

linux cpu问题排查及性能优化

cpu性能 一、cpu啥时候才叫有瓶颈 cpu运行的快还是慢、cpu有没有问题&#xff0c;cpu是不是还需要优化。这些是平常开发和运维中经常遇到的问题。那么我门到底如何去判断机器cpu运行的到底有没有异常呢。 从我排查问题来说&#xff0c;单看系统指标不能完全反应应用运行的状态…

jar打包命令[java自带的打包工具]

将目标类打包成可执行Jar包 jar -cfe yourjarname.jar yourmainclass yourfolder 例如&#xff1a;jar -cfe demo.jar com.example.App * // 打包当前位置下的所有文件 jar --create --file yourjarname.jar --main-class yourmainclass yourfolder 例如&#xff1a…

Spring Data REST

Spring Data REST Getting Strated引入依赖开发 repository 引入在线调试&#xff08;knife4jSwagger3&#xff09;AbstractRepositoryEventListenerRepositoryRestResource属性 自定义查询方法RestSource注意 自定义配置 SpringDataRest 是 SpringMVC 的一个扩展他可以通过少量…

在IntelliJ IDEA中使用Git推送项目

去gitee网站注册用户 gitee网站地址:https://gitee.com/ github网站地址:https://github.com/ 一、创建仓库 以下以gitee为例进行介绍&#xff0c;github操作雷同。 1、创建仓库 点击页面右上方的"“并选择"创建仓库” 2、设置仓库相关信息 首先输入仓库名&…