树莓派通过C/C++操作GPIO

1.前言

树莓派自带2*20引脚,可以像玩单片机一样玩树莓派,其有普通的GPIO,也有复用为串行通信的UART、IIC、SPI。与Arduino库和stm32的Hal库一样,树莓派也有wiringPi和Bcm2835用于IO的基础库可以使用,帮助开发者快速开发应用。
WiringPi是应用于树莓派平台的GPIO控制库函数,其使用C或者C++开发并且可以被其他语言包转,例如python、ruby等。WiringPi中的函数类似于Arduino的wiring系统,这使得熟悉arduino的用户使用wringPi更为方便。
bcm2835库是树莓派cpu芯片的库函数,相当于stm32的固件库一样,底层是直接操作寄存器。而wiringPi库和python的RPi.GPIO库其底层都是通过读写linux系统的设备文件操作设备。我使用的开发环境为:

  1. 树莓派4B;
  2. 树莓派原生Raspbian系统。

2.安装WiringPi

  1. 安装wiringpi:sudo apt-get install wiringpi

  2. wiringPi包括一套gpio命令,使用gpio命令可以控制树莓派上的各种接口,通过以下指令可以测试wiringPi是否安装成功:gpio-v

  3. 读取GPIO定义:gpio readall
    gpio readall

    BCM编号侧重CPU寄存器,根据BCM2835的GPIO寄存器编号;
    wiringPi编号侧重实现逻辑,把扩展GPIO端口从0开始编号,这种编号方便编程。
    注意:若出现Oops - unable to determine board type… model: 17
    我是使用的4B,最后发现是wiringPi版本问题;按照如下官网指引升级版本即可:
    http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b/

cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

可以访问WiringPi官网来查看使用方法和示例。

3.安装Bcm2835

bcm2835官网下载最新版本的库,然后解压安装:
在这里插入图片描述

tar zxvf bcm2835-1.xx.tar.gz
cd bcm2835-1.xx
./configure
make
sudo make check
sudo make install

在/home/pi/bcm2835-1.68/examples/blink目录下有示例blink.c,右击使用Geany(系统自带的代码编辑器)打开,为了让控制台有输出添加了两句printf,然后Ctrl+S保存:
在这里插入图片描述
在文件管理器上方“工具”中点击“在终端中打开当前文件夹”将弹出一个终端,且已经定位在当前文件夹下,依次输入

gcc -o blink blink.c -l bcm2835

sudo ./blink

其中,使用gcc编译指令时需要使用 -l bcm2835 链接到bcm库。运行时,由于bcm2835库是树莓派cpu芯片的库函数,运行时需要权限,所以要加sudo
在这里插入图片描述

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
树莓派可以使用wiringPi库来控制舵机。舵机的控制需要产生一个周期为20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机的角度。下面是一个使用wiringPi库控制舵机的C代码范例: ```c #include <wiringPi.h> #include <stdio.h> int main() { wiringPiSetupGpio(); pinMode(1, OUTPUT); while(1) { digitalWrite(1, HIGH); delayMicroseconds(500); digitalWrite(1, LOW); delayMicroseconds(19500); } return 0; } ``` 这段代码中,我们使用wiringPiSetupGpio()初始化树莓派引脚,并使用pinMode()将GPIO1设置为输出模式。在循环中,我们使用digitalWrite()函数产生500微秒的高电平脉冲,然后再产生19500微秒的低电平脉冲,以满足舵机的控制要求。 另外,如果你想调整舵机的角度,可以使用PWM方式来控制舵机。下面是一个使用PWM方式控制舵机的C代码范例: ```c #include <stdio.h> #include <wiringPi.h> int Pwmpin = 18; int main() { wiringPiSetupGpio(); pinMode(Pwmpin, PWM_OUTPUT); pwmSetMode(PWM_MODE_MS); pwmSetRange(2000); pwmSetClock(192); pwmWrite(Pwmpin, 150); // 2000对应20ms,我们让舵机转90°是1.5ms,对应150 delay(1000); pwmWrite(Pwmpin, 200); return 0; } ``` 在这个代码中,我们使用pwmSetMode()将PWM模式设置为MS模式,使用pwmSetRange()将周期设置为2000。然后,使用pwmSetClock()设置时钟和分频,以便将最终频率设置为50Hz,即20ms。使用pwmWrite()函数来控制舵机的角度,150对应90°角度。你可以根据需要调整pwmWrite()函数的参数来改变舵机的角度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值