拙网论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 310|回复: 0

C#调用bcm2835/wiringPi的C语言库操作GPI

[复制链接]

949

主题

1001

帖子

3736

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3736
发表于 2021-10-16 07:34:33 | 显示全部楼层 |阅读模式
【树莓派/RaspberryPi】C#调用bcm2835/wiringPi的C语言库操作GPIO/I2C/SPI/PWM
网络上相关使用C#/CSharp调用树莓派GPIO口的资料还是比较少,而且大部分都是国外的资料看起来都比较吃力,我这里就分享一些我自己使用C#操作树莓派/RPI的GPIO接口的一些相关经验。
刚开始接触树莓派的时候我在网络上搜索了一大堆C#操作GPIO口的相关资料,的确发现了不少外国人写的一些操作库,而且都有在GIT上面公开,如果你有兴趣的话可以用必应搜索去找,如果有条件可以使用谷歌也行,百度很难找到国外的关于这方面的相关东西。
我这里直接使用C语言封装bcm2835的函数库,然后使用C#进行调用即可,因为bcm2835大部分操作都是比较底层的东西,这样让我更加喜欢他。
开始的时候我本来打算封装 wiringPi 的函数库的,但是不知道为什么我在C语言下使用树莓派3b树莓派4b调用wiringPi的pinMode函数总是出错,捣鼓了半天也没发现到什么问题,后来放弃了wiringPi转向bcm2835。我是从易语言转到C#的最后也学了一些C语言,个人感觉wiringPi的函数命令更加符合我的一些操作逻辑,bcm2835的函数看起来有些小纠结情节,但是不影响我们的正常使用。
开始正题,这里先给出一些相关链接
wiringPi 官方地址:http://wiringpi.com/
bcm2835 C库地址:http://www.airspayce.com/mikem/bcm2835/index.html
  1. 我们先安装好一些基础环境
  2. sudo apt-get install gcc g++ wget make -y

  3. cd /home/pi

  4. 按照bcm2835官网提供的下载地址下载源代码
  5. wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz

  6. 解压源代码压缩包文件
  7. tar zxvf bcm2835-1.60.tar.gz

  8. cd bcm2835-1.60

  9. ./configure
  10. make
  11. sudo make check
  12. sudo make install
复制代码
按照上面的指令进行操作,如果没有错误就说明一切都准备就绪了,接下来我们就把 bcm2835.c 这个源代码文件编译为 so 文件,在linux下 so 文件就类似于windows下的 dll 动态链接库文件,我们只需要在C#里面像声明dll函数一样,声明函数就可以调用到bcm2835.so 里面的函数了。
  1. 进入代码文件目录
  2. cd src/

  3. 编译 bcm2835.c 这个文件为so共享库文件
  4. gcc -shared -o bcm2835.so bcm2835.c
复制代码
上面的指令执行编译完毕后,会在当前目录下生成一个 bcm2835.so 的文件,这个就是我们需要的文件,下面我们试试编写C#代码来测试一下是否可以正常使用。
  1. using System;
  2. using System.Runtime.InteropServices;
  3.    
  4. namespace sotest
  5. {
  6.     class Program
  7.     {
  8.         //我这里引用 bcm2835.so 库的绝对路径,你也可以通过添加环境变量使用相对路径进行调用
  9.         [DllImport("/home/pi/Downloads/sotest/bcm2835.so",EntryPoint="bcm2835_init")]
  10.         static extern int bcm2835_init();
  11.         [DllImport("/home/pi/Downloads/sotest/bcm2835.so",EntryPoint="bcm2835_close")]
  12.         static extern int bcm2835_close ();
  13.         [DllImport("/home/pi/Downloads/sotest/bcm2835.so",EntryPoint="bcm2835_set_debug")]
  14.         static extern void bcm2835_set_debug();
  15.         [DllImport("/home/pi/Downloads/sotest/bcm2835.so",EntryPoint="bcm2835_version")]
  16.         static extern double bcm2835_version();
  17.         
  18.         
  19.         public static void Main(string[] args)
  20.         {
  21.             Console.Write("bcm2835_version : {0}\n",bcm2835_version());
  22.             Console.Write("bcm2835_init : {0}\n",bcm2835_init());
  23.             Console.Write("Press any key to continue . . . \n");
  24.             Console.ReadKey(true);
  25.         }
  26.     }
  27. }
复制代码
经过测试,是可以正常调用 bcm2835.so 共享库函数的,由于我这里使用了虚拟机进行测试编写文章的,虚拟机没有GPIO接口所以调用函数出现了错误,在实际树莓派上是可以正常使用的。
温馨提醒:bcm2835 库里面调用的函数有部分函数需要 root 权限,最好建议你运行程序的时候使用管理员权限来调用。
  1. 使用管理员权限运行程序
  2. sudo mono sotest.exe
复制代码
这里我就不写如何封装 wiringPi 了,封装方法和 bcm2835 的一样,具体自己尝试一下。

https://www.tqwba.com/x_d/jishu/285384.html


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|抱朴守拙BBS

GMT+8, 2025-5-25 19:08 , Processed in 0.231612 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表