在i.MX6ULL火起来之前,很多用户会直接使用树莓派开发项目。随着iMX6ULL的兴起,这部分用户会考虑将原来使用树莓派的项目迁移到i.MX6ULL上。 在各种操作中,GPIO的操作是最基础也是最频繁的。树莓派支持.NET Core控制GPIO,就有用户联系我,希望i.MX6ULL也能支持.NET Core。
好嘞,笔者研究研究之后将这个功能给安排上了!读者如果觉得树莓派有哪些功能使用很方便的,可以联系笔者,俺研究研究之后看能不能让iMX6ULL也支持上。当然,6ULL只是一款入门级芯片,性能还是有些不足的,所以我们也开发了iMX6DL系列。
回到正题,我们先看看树莓派上面是怎么操作GPIO的。其读GPIO的代码如下:
GpioController Gpio = new GpioController(); Gpio.OpenPin(87, PinMode.Input); PinValue SensorBody = Gpio.Read(87); Gpio.ClosePin(87);上面这段代码中的引脚序号是经过读者修改过的,这里87(87=2*32+23)表示GPIO3_IO23,也就是imx6ull芯片的LCD_D18引脚,在XLY-IMX6ULL开发板左下角通过排针引出,树莓派上不会有这个引脚的。
我发誓,.NET Core移植特别方便,这是笔者移植最顺利的一次。
搜索.NET Core,先看看怎么下载,出现在搜索框的第一个目标就是我们这次要查找的内容。 我们要在开发板上运行.NET Core,所以选择下载Linux平台下 的内容 选择平台后,网页会列出各个版本,目前最新的是.NET 5.0,为预览版。我们一般开发不使用预览版。而是使用.NET Core 3.1,这是官方推荐版本,也是一个LTS(长期支持版本) 选择版本后,网站提供了各个平台的包供我们下载,iMX6ULL开发板是ARM32平台,所以我们下载ARM32 Binaries包。 下载成功后,会得到一个dotnet-sdk-3.1.301-linux-arm.tar.gz包。在下载的同时,页面会自动跳转到https://dotnet.microsoft.com/download/dotnet-core/thank-you/sdk-3.1.301-linux-arm32-binaries,这个页面描述了如何安装SDK,如下图:
笔者习惯把包安装到/opt/目录。所以命令如下:
以下操作在XLY-IMX6ULL开发板进行
mkdir /opt/dotnet tar zxf dotnet-sdk-3.1.301-linux-arm.tar.gz -C /opt/dotnet export DOTNET_ROOT=/opt/dotnet export PATH=$PATH:/opt/dotnet安装完成后,运行dotnet和dotnet --info测试一下: 这就成功了,你敢信!如此顺利,如此easy。。。如果是我这么顺利,我就买块板子庆祝下
刚才只是简单运行了个命令,还什么都没做,想要知道是否成功,至少得跑个demo呀,还好官网已经给我们准备好了教程。 官网给出了一个简单的教程,目的是指导用户安装.NET,然后创建第一个应用。官方预计读者10分钟可以学完这个内容。我们就跟随这个教程学习使用.NET吧。
虽然网页描述了详细步骤,笔者这里还是简单再复述下。
首先打开终端,通过串口或者网络连接到开发板,在/home/xinluyao下面新建一个test目录来进行测试。
mkdir test cd test然后执行dotnet,这一步我们上次已经执行过了,所以直接Continue继续。
执行效果如下: 这个过程比较慢,需要稍微有点耐心,毕竟imx6ull只是个入门级的芯片。在上面直接编写代码开发还是有点难为它。不过后面可以在PC上开发好,生成文件后直接到开发板运行。
执行上面命令后,系统会自动创建一个APP,里面有一个main文件,文件名为Program.cs。内容如下:
using System; namespace myApp { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }这段代码是C#语法的,虽然笔者也没学过C#,不过这段代码比较简单,大家应该可以猜出其含义,Main函数就是入口,下面的那一句Console.WriteLine("Hello World!"),就是在控制台写一行内容“Hello World!”。
在命令行输入dotnet run运行app,会比较慢,因为要先进行编译,耐心等待。后面这个步骤可以放到PC做。
dotnet run程序执行效果如下: 多么亲切的Hello World哇。
别忘了我们的目的,点灯。网上查找一段树莓派操作的代码:
using System; using System.Device.Gpio; using System.Threading; namespace myApp { ...... }显示点灯需要System.Device.Gpio、延时需要用System.Threading。我们先来安装这两个包,在myApp目录下执行:
dotnet add package System.Device.Gpio dotnet add package System.Threading代码已经粘贴过几次了,直接将上面代码替换Program.cs。
using System; using System.Device.Gpio; using System.Threading; namespace myApp { class Program { static void Main(string[] args) { while(true) { GpioController Gpio = new GpioController(); Gpio.OpenPin(87, PinMode.Input); PinValue SensorBody = Gpio.Read(87); Gpio.ClosePin(87); if (SensorBody == 1) { Console.WriteLine("GPIO3_IO23(LCD_D18) Value 1"); } else { Console.WriteLine("GPIO3_IO23(LCD_D18) Value 0"); } Thread.Sleep(1000); } } } }GpioController Gpio = new GpioController(); 创建一个gpio控制对象, Gpio.OpenPin(87, PinMode.Input); 将IO作为输入打开, PinValue SensorBody = Gpio.Read(87); 读取引脚状态 Gpio.ClosePin(87); 关闭引脚。 后面if ,else判断读取到数据的值,分别打印不同的信息。这整段代码虽然是使用C#语法,但相信读者并不陌生。
引脚接高电平打印Value 1,引脚接低电平打印Value 0
直接在开发板上开发很慢,读者可以尝试在Vusual Studio中进行开发,然后发布为arm可运行的格式直接运行。这方面教程很多,笔者就不写啦。如果需要,可以联系笔者添加上这部分内容。
欢迎加QQ群:105335490 一起交流噢。