前面一篇文章说明了如何在Ubuntu上运行.NET Core程序,现在开始搭建第一个物联网小程序Blink。

配置GOPI接口权限 

    在开始访问GOPI时,需要设置树莓派的相关权限。一般都会告诉你使用使用sudo raspi-config命令,但是因为树莓派目前还没有正式版本的64位系统,我装的ubuntu,里面没有raspi-config,如果执行的话,会报Command Not found命令 ,所以需要安装相关模块,可以查看树莓派安装非官方系统没有raspi-config命令的解决方法。这篇文章。

   安装完成之后,执行如下命令:

ubuntu@ubuntu:~$ sudo raspi-config

就可以弹出主界面。

▲树莓派设置主界面

▲开启远程GPIO接口

开启之后,我们就可以开始针对GOPI编程了。

.NET Core代码编写

写代码之前先要看GOPI的布局

可以看到总共有40个插脚,插脚有不同类型,有的是电源(相当于正极),有的是接地(相当于是负极)。最里面的一排是接口的编号,外面一排是逻辑编号,我们在编程时,需要使用GPIO开头的那些编号。

 

需要注意的是LED等的正负极,长脚的是正极,正极要接到树莓派GPIO接口上,负极接地,一定不要弄错了。另外GPIO的电源有5V和3.3V,而LED小灯能承受的电压为1.7v,如果插在3.3V上,需要电阻来分压。不然可能会烧坏LED灯,在接其他传感器或设备时,一定要注意设备允许的电压。

   如何降压,可以串联电阻,GPIO引脚的电流约为3mA,需要降的电压为,3.3-1.7=1.8,所以串联的电阻约为1.8/0.003≈500Ω,这样串联一个500Ω的电阻到LED小灯的电阻上即可。如果不知道怎么算,可以直接在线计算降压电阻

  现在新建一个.NET Core应用程序,并引用GPIO包。

要控制LED灯亮和灭,只需要控制GPIO的输出值为高电平和低电平即可,整个代码如下:

static void Main(string[] args)
{
    int pinNumber = 17;
    int delayTime = 1000;
    using (GpioController controller = new GpioController(PinNumberingScheme.Logical))
    {
        controller.OpenPin(pinNumber, PinMode.Output);
        while (true)
        {
            Console.WriteLine($"Light for {delayTime}ms");
            controller.Write(pinNumber, PinValue.High);
            Thread.Sleep(delayTime);
            Console.WriteLine($"Dim for {delayTime} ms");
            controller.Write(pinNumber, PinValue.Low);
            Thread.Sleep(delayTime);
        }
    }
}

然后发布:

在DotNetIoT文件夹新建一个Blink文件夹,将Publish下的所有文件,包括文件夹,全部上传到Blink文件夹下:

然后在树莓派上,切换到Blink文件夹,运行dotnet Blink.dll,如果遇到如下错误:

ubuntu@ubuntu:~$ cd DotNetIoT/Blink
ubuntu@ubuntu:~/DotNetIoT/Blink$ dotnet Blink.dll
Unhandled exception. System.IO.IOException: Error 13 initializing the Gpio driver.
   at System.Device.Gpio.Drivers.RaspberryPi3Driver.Initialize()
   at System.Device.Gpio.Drivers.RaspberryPi3Driver.OpenPin(Int32 pinNumber)
   at System.Device.Gpio.GpioController.OpenPin(Int32 pinNumber)
   at Blink.Program.Main(String[] args) in D:\Study\NetCoreIoT\Blink\Program.cs:line 15
Aborted (core dumped)

 需要将dev下的gpiomem赋予读写权限

ubuntu@ubuntu:/$ sudo chmod 777 dev/gpiomem

最后再次运行

ubuntu@ubuntu:~/DotNetIoT/Blink$ dotnet Blink.dll

即可看到,效果。

参考

1:https://zhangyue.xin/Article/Content/61

2:https://www.jianshu.com/p/2e3f65f11390