時隔多日如何使用樹莓派GPIO的教程終於來了,然.NET Core 3.1版本都出來了☺。這次我的樹莓派刷回了官方的Raspbian,因爲openmediavalut實在太難用了。
話不多說先上圖:
1. 準備
- 一塊樹莓派(本文基於截至發文時最新版的Raspbian)。
- 一個led小燈(注意輸入的電壓,太高的話要接電阻,本文使用的是一個支持3.3v-5v輸入的小燈)。
- 若干導線。
2. 樹莓派配置
Raspbian對GPIO的支持,默認是關閉的。所以這裏首先要開啓對GPIO的支持:
▼開啓GPIO
注意:Serial Console一定要設置爲Disable,這是通過串口給樹莓派發送命令用的。串口的使用,下一章節會講到。
開啓之後就到了這張圖,樹莓派的玩家對此再熟悉不過了。
▼GPIO引腳
這裏一共有三種編碼庫,任何一種都可以操作樹莓派的引腳:
- Board編碼:就是物理引腳和你樹莓派上的那兩排一一對應,從1-40號。
- BCM編碼:芯片製造商博通提供的編號方法。
- writingPi編碼:另外一種編碼庫提供的編號方法。
其中,python用的較多的就是Borad編碼和BCM編碼,C語言用的就是writingPi編碼。而我們的C#因爲使用的System.Device.Gpio,經測試這個庫也是使用的BCM編碼。以Board的11號引腳爲例,它對應的BCM引腳爲17號,對應的writingPi引腳爲0號。
注意:本文接下來所說的多少多少號引腳,都將以BCM編碼爲例。
然後將LED的正極接到17號引腳上,負極隨便接到一個GND上。
3.控制小燈
打開Visual Stuido,新建一個控制檯應用程序,選擇.NET Core 3.1 。然後nuge管理器裏搜索安裝System.Device.Gpio
。然後修改代碼如下:
static void Main(string[] args)
{
var pin = 17;//使用BCM的17號引腳
var lightTimeInMilliseconds = 500;
var dimTimeInMilliseconds = 200;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($ "Let's blink an LED!");
using(GpioController controller = new GpioController())
{
controller.OpenPin(pin, PinMode.Output);
Console.WriteLine($ "GPIO pin enabled for use: {pin}");
Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs eventArgs) =>
{
controller.Dispose();
};
while(true)
{
Console.WriteLine($ "Light for {lightTimeInMilliseconds}ms");
controller.Write(pin, PinValue.High);
Thread.Sleep(lightTimeInMilliseconds);
Console.WriteLine($ "Dim for {dimTimeInMilliseconds}ms");
controller.Write(pin, PinValue.Low);
Thread.Sleep(dimTimeInMilliseconds);
}
}
}
代碼很簡單,看一眼就能懂。編譯沒有問題之後,在項目上右鍵-發佈
選擇發佈到文件夾:
然後點擊編輯,修改配置文件的Deployment Mode爲Self-contained,這樣就不需要樹莓派上安裝.net runtime了,然後Target Runtime選擇linux-arm。
保存關閉之後,開始發佈即可。
發佈成功之後將publish下所有的文件傳到樹莓派上,至於怎麼傳,就各顯神通吧。
然後記得sudo chmod 777 SimpleLight
修改文件的可執行權限,最後執行 ./SimpleLight
命令blink blink吧。
後記:最初因爲不知道BCM、writinigPi是啥意思,把pin17當成了Board的17號引腳,導致小燈一直都是亮的。最後看了微軟Sample裏的接線圖,才明白pin17是指BCM的17號。☹
參考