树莓派4b c语言,【树莓派4B学习】七、树莓派4B的GPIO基础操作

树莓派4b c语言,【树莓派4B学习】七、树莓派4B的GPIO基础操作链接:https://pan.baidu.com/s/1icgrCoc-piC0Eid0NlRlMA提取码:6h0b一、主流GPIO库介绍【pythonGPIO】【开发语言】——python【简单介绍】——该库更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。pythonGPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操…

大家好,又见面了,我是你们的朋友全栈君。

链接:https://pan.baidu.com/s/1icgrCoc-piC0Eid0NlRlMA 提取码:6h0b

一、主流GPIO库介绍

【python GPIO】

【开发语言】——python

【简单介绍】——该库更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。python GPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操作。但是python GPIO库还没有支持SPI、I2C或者1-wire等总线接口。除了python GPIO之外,还有众多的python扩展库(例如webiopi),毫无疑问的说python非常适合树莓派,树莓派也非常适合python。

【wiringPi】

【开发语言】——C语言

【简单介绍】——wiringPi适合那些具有C语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。wiringPi的API函数和arduino非常相似,这也使得它广受欢迎。作者给出了大量的说明和示例代码,这些示例代码也包括UART设备,I2C设备和SPI设备等,毫无疑问地说wiringPi功能非常强大。

【BCM2835 C Library】

【开发语言】——C语言

【简单介绍】BCM2835 C Library可以理解为使用C语言实现的相关底层驱动,它给我的感觉更像STM32的库函数,BCM2835 C Library的驱动库包括GPIO、SPI和UART等,可以通过学习BCM2835 C Library熟悉BCM2835相关的寄存器操作。如果有机会开发树莓派上的linux驱动,或自主开发python或PHP扩展驱动,可以从BCM2835 C Library找到不少的“灵感”。

二、管脚对应

668bfa546a46aff71d8d227ded11dd0c.png

树莓派的软件扩展库虽然很多,但也导致了扩展库“碎片化”的问题,例如操作树莓派的GPIO端口,GPIO的编号便存在三种不同的方式

【1】插座编号方式

编号侧重P1插座侧,从上到下,从左到右。正如上图的Header一栏。

【2】BCM2835编号方式

编号侧重CPU寄存器,根据BCM2835的GPIO寄存器编号。正如上图BCM GPIO一栏。

【3】wiringPi编号方式

编号侧重实现逻辑,把扩展GPIO端口从0开始编号,这种编号方便编程。正如上图WiringPi一栏。

【举例说明】

插座编号方式 11 -> BCM2835编号方式 17 -> wiringPi编号方式 GPIO0。无论如何它都是同一个IO管脚。

三、实际操练

这里就通过操作GPIO库,来操作插座(物理针脚)的11脚吧。

901c2eb87506dae51e94bfefa214c3fd.png

1、Python GPIO实现

【安装配置】

【1】输入以下指令,安装python-dev

sudo apt-get install python-dev

【2】依次输入以下指令,安装RPi.GPIO。特别说明,由于RPi.GPIO仍处于不断完善的过程中,请参考下载最新的安装代码。(或者到本文开头的网盘链接~)

761eee3b566bfd035ba3a13175cd4356.png

【3】通过FTP软件,传输到树莓派,输入以下指令进行解压

tar -zxvf RPi.GPIO-0.7.0.tar.gz

【4】进入解压后的目录

cd RPi.GPIO-0.7.0/

【5】启动安装

sudo python setup.py install

【示例代码】

windows新建名为test.py的文件,并写入以下代码,通过FTP软件传输到树莓派

# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO

import time

# BOARD编号方式,基于插座引脚编号

GPIO.setmode(GPIO.BOARD)

# 输出模式

GPIO.setup(11, GPIO.OUT)

while True:

GPIO.output(11, GPIO.HIGH)

time.sleep(1)

GPIO.output(11, GPIO.LOW)

time.sleep(1)

【运行代码】

在树莓派终端输入以下指令,运行程序。

sudo python test.py

通过万用表可明显观测到11脚的高低跳变。

以下基于BCM编号模式的,对应GPIO17

# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO

import time

# BOARD编号方式,基于BCM编号

GPIO.setmode(GPIO.BCM)

# 输出模式

GPIO.setup(17, GPIO.OUT)

while True:

GPIO.output(17, GPIO.HIGH)

time.sleep(1)

GPIO.output(17, GPIO.LOW)

time.sleep(1)

2、WiringPi实现

WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3。wiringPi使用C或者C++开发并且可以被其他语言包转,例如python、ruby或者PHP等。WiringPi中的函数类似于Arduino的wiring系统,这使得熟悉arduino的用户使用wringPi更为方便。

树莓派具有26个普通输入和输出引脚。在这26个引脚中具有8个普通输入和输出管脚,这8个引脚既可以作为输入管脚也可以作为输出管脚。除此之外,树莓派还有一个2线形式的I2C、一个4线形式的SPI和一个UART接口。树莓派上的I2C和SPI接口也可以作为普通端口使用。如果串口控制台被关闭便可以使用树莓派上的UART功能。如果不使用I2C,SPI和UART等复用接口,那么树莓派总共具有8+2+5+2 =17个普通IO。wiringPi包括一套gpio控制命令,使用gpio命令可以控制树莓派GPIO管脚。用户可以利用gpio命令通过shell脚本控制或查询GPIO管脚。wiringPi是可以扩展的,可以利用wiringPi的内部模块扩展模拟量输入芯片,可以使用MCP23x17/MCP23x08(I2C 或者SPI)扩展GPIO接口。另外可通过树莓派上的串口和Atmega(例如arduino等)扩展更多的GPIO功能。另外,用户可以自己编写扩展模块并把自定义的扩展模块集成到wiringPi中。WiringPi支持模拟量的读取和设置功能,不过在树莓派上并没有模拟量设备。但是使用WiringPi中的软件模块却可以轻松地应用AD或DA芯片。

参考:http://www.52pi.net/archives/1918

【安装配置】

依次输入一下命令

mkdir WiringPI

cd WiringPI

wget https://project-downloads.drogon.net/wiringpi-latest.deb

sudo dpkg -i wiringpi-latest.deb

4bd65a18cc52228a492d5af598a5ea7f.png

然后使用gpio -v,查看版本信息。

fc9ffa48b1eabe41a2495667366dc703.png

然后再执行:gpio readall

4b752fff1a8c013255a446821f5bff1a.png

还以物理针脚11为例,对应的wPi为GPIO0

【示例代码】

#include #include int main(void)

{

int LED = 0;

wiringPiSetup();

pinMode(LED, OUTPUT);

printf(“LED is blinking…\r\n”);

while(1)

{

printf(“LED:%d is on \r\n”, LED);

digitalWrite(LED, HIGH);delay(500);

printf(“LED:%d is off \r\n”, LED);

digitalWrite(LED, LOW);delay(500);

}

return 0;

}

【运行代码】

通过FTP软件,将test.c上传到树莓派,输入以下命令进行编译并生成可执行文件test

gcc -o test test.c -lwiringPi

然后输入./test,执行可执行文件

ce46b768cea1291934a6f65452875863.png

需要一提的是:-lwiringPi参数表示动态加载wiringPi共享库

3、BCM2835 C Library

由于BCM2835 C Library仍处于不断完善的过程中,可参考下载最新的安装代码。

注意了,这个库是针对BCM2835处理器的,树莓派4是用的BCM2711,下面的程序仅供参考。

【安装配置】

依次输入一下命令

wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.35.tar.gz

tar xvzf bcm2835-1.35.tar.gz

cd bcm2835-1.35

./configure

make

sudo make check

sudo make install

【示例代码】

在windows上编写下列代码,

#include // P1插座第11脚

#define PIN RPI_GPIO_P1_11

int main(int argc, char **argv)

{

if (!bcm2835_init())

return 1;

// 输出方式

bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);

while (1)

{

bcm2835_gpio_write(PIN, HIGH);

bcm2835_delay(500);

bcm2835_gpio_write(PIN, LOW);

bcm2835_delay(500);

}

bcm2835_close();

return 0;

}

【运行代码】

使用FTP软件下载到树莓派中,cd命令进入文件所在目录,然后依次输入下面指令

gcc -o test2 test2.c -lbcm2835

sudo ./test2

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138527.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月31日 上午11:19
下一篇 2022年5月31日 上午11:19


相关推荐

  • createcompatibledc报错_Compatible

    createcompatibledc报错_CompatibleCreateCompatibleDC函数功能:该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。函数原型:HDCCreateCompatibleDC(HDChdc);参数:hdc:现有设备上下文环境的句柄,如果该句柄为NULL,该函数创建一个与应用程序的当前显示器兼容的内存设备上下文环境。返回值:如果成功,则返回内存设备上下文环境的句柄;如果失败,则返回值为NULL

    2025年7月31日
    4
  • mysql 家谱树查询_GitHub – chenwei/FamilyTreeView: 家谱树绘制Demo

    mysql 家谱树查询_GitHub – chenwei/FamilyTreeView: 家谱树绘制DemoFamilyTreeVi 重大改进 增加仿 亲友 App 的家谱 与之前的没有任何关联 可以直接翻到第二部分 仿亲友 家谱 部分进行阅读家谱树绘制 Demo 主要使用自定义 ViewGroup 和使用 canvas 进行划线 现阶段实现了自己 配偶 兄弟姐妹 父母 祖父母 外祖父母 子女和儿媳妇 女婿以及孙子 共五代的绘制 加入了 touch 事件可以移动 代码可能写得相对比较死 基本只能使用于家谱展示 还

    2026年3月16日
    1
  • 《数据结构》C语言版(清华严蔚敏考研版) 全书知识梳理 + 练习习题详解(超详细清晰易懂)

    《数据结构》知识梳理,适合考前复习,高分冲刺。包含大量习题,偷偷告诉你,考试就考这个

    2022年4月18日
    86
  • 关于java二维数组长度(length)的知识

    关于java二维数组长度(length)的知识二话不说,呈上代码//定义一个整型数组:3行4列inta[][]=newint[3][4];//获取行数—3行intlenY=a.length;//获取列数—4列intlenX=a[0].length;其实很好理解,因为二维数组可以理解为是一维数组,只不过他的各处的元素是特殊元素—–一维数组a[0][0]a[0][1]a[0][2]…

    2022年6月13日
    86
  • 设备监控系统[通俗易懂]

    设备监控系统[通俗易懂]设备监控系统链接:https://www.zhihu.com/question/19973178/answer/75054424https://www.oneapm.com/http://ope

    2022年7月1日
    31
  • 医院管理数据库课程设计[通俗易懂]

    医院管理数据库课程设计[通俗易懂]文章目录前言医院信息管理系统摘要1.概述运行环境2. 1需求分析2.1.1基本分类需求分析2.1.2主要关系流程分析2.2可行性分析3.1概念结构设计3.1.1抽象出系统的实体3.2设计分E-R图3.3.1全局E-R图4.1逻辑结构设计5.1数据库物理设计与实施6.数据操作要求及实现6.1.1数据查询、更新操作6.1.2实现药品的入库、出库管理;6.1.3实现科室、医生、病人的管理;(1) 逻辑增删改6.1.4实现处方的登记管理6.1.5实现收费管理;6.2视图6.3触发器6.4存储过程..

    2022年5月19日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号