树莓派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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java对象与JSON字符串互相转换

    Java对象与JSON字符串互相转换目录一、Java对象转为JSON字符串二、JSON字符串转为Java对象JSON解析器,常见的解析器:Jsonlib,Gson,fastjson,jackson介绍:Jackson一、Java对象转为JSON字符串1、引入需要的Jackson所需要的jar包(三个)2、创建一个Person类(代码见后面)注解1,@JsonIgnore作用:排除属性 注解2…

    2022年9月21日
    4
  • dhcp option 67_DHCP HOST

    dhcp option 67_DHCP HOST1)DHCP客户端在初始化时广播发送请求报文,这时的请求报文并不包含option82选项。2)DHCP中继代理将option82选项添加到接收到的请求报文尾部后中继转发给DHCP服务器。DHCPOPTION82选项的子选项1(代理电路ID)默认是DHCP客户端所连接的交换机的接口信息(VLan名加物理端口名),也可以由用户自己配置代理电路ID,option82选项的子选项2(代理远程ID)是DHCP中继设备本身的MAC地址。3)DHCP服务器收到DHCP中继设备转发的DHCP请求…

    2022年10月16日
    0
  • php域名免备案转发,免备案高防CDN支持过墙域名跳转解决域名DNS污染

    php域名免备案转发,免备案高防CDN支持过墙域名跳转解决域名DNS污染免备案服务器联系咨询我QQ:281846000全国节点,自动切换,保证业务的安全和稳定1.301跳转,解决域名被墙,国内免备案不限制内容服务器。2.域名防劫持,DNS防护专属套餐,视频***CDN加速等业务(免&备*案CDN)3.出租海内外高防服务器(TB级防护)4.解决域名DNS被污染问题。(被DNS污染期间不要回源到自己网站,使用过墙DNS24-48小时自动恢复,不要轻易转入他人…

    2025年10月18日
    3
  • PetShop4 架构解析

    PetShop4 架构解析PetShop4架构解析 
    2010-07-26来源:网络 
    PetShop数据库解读
    PetShop数据访问层之数据库访问设计
    PetShop的工厂模式
    PetShop之业务逻辑层设计PetShop数据库解读
    PetShop4.0使用了四个数据库,分别为:MSPetShop4、MSPetShop4Orders、MSPetShop4Profile、MSPetShop4Services  
    一、MSPetShop4

    2022年10月17日
    4
  • 路由器有线桥接的两种方式异同

    路由器有线桥接的两种方式异同根据这篇文章 http www gezila com tutorials 46010 html 我小结下两种方式之要点及异同另主路由器为路由器 A 副路由器为路由器 B 方式一 LAN WAN1 A 的 LAN 口接到 B 的 WAN 口 2 B 的以太网接入方式 WAN 口接入类型 选择动态 ip 这个 ip 实质是由 A 的 DHCP 服务分配的 如图 可见 A 给 B 分配的 ip 地

    2025年6月17日
    5
  • uniapp 小程序上传图片

    uniapp 小程序上传图片本文使用了u-view框架<u-upload :fileList=”fileList1″ accept=’image’ width=’60’ height=”60″ :capture=’capture’ @afterRead=”afterRead” @delete=”deletePic” name=”1″ multiple :maxCount=”10″></u-upload>data(){ return{ capture:[‘album’,’c

    2022年6月17日
    41

发表回复

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

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