广州网站建设总结,wordpress纯代码,网上注册公司流程图,媒体公关公司背景最近几年#xff0c;边缘计算的需求急剧爆发。人工智能、物联网和 5G 的演进给边缘计算带来了无限的可能性。因为工作原因#xff0c;有幸在2019开始接触了英伟达 Jetson 家族的各种边缘计算设备#xff1a;Nano#xff0c;TX2#xff0c;AGX#xff0c;NX等#xf… 背景最近几年边缘计算的需求急剧爆发。人工智能、物联网和 5G 的演进给边缘计算带来了无限的可能性。因为工作原因有幸在2019开始接触了英伟达 Jetson 家族的各种边缘计算设备NanoTX2AGXNX等其操作系统使用的是 Ubuntu 18.02。我们可以作为独立的小型服务器使用试问又有哪一个程序猿会拒绝拥有一台自己的小电脑呢在其上特别是拥有GPU的服务器上我们可以折腾无限的可能。Jetson在Jetson设备的开发版载板上一般都有一个40针引脚的SPIO与GPIO通过它我们可以扩展出更多好玩的东西。比如说一块I2C的OLED显示屏然后通过.Net来驱动它显示一些好玩的东西软件状态设备状态其他关键数据指标等。屏幕安装屏幕这里选用的是一块0.96寸黄蓝双色OLED液晶屏模块一共4个接口3.3V正极VCC负极GNG以及负责I2C通讯的SDA和SCL。那么如何将显示器与Jetson设备相连呢这里演示基于早期的Nano开发者套件的载板其它系列官方载板的引脚基本类似你也可以查找硬件说明书或参考官网的指引[1]来找到I2C接口即可。Jetson Nano 40-pin我使用的是I2C1接的针脚是 1356 按照定义安装好OLED 显示屏。配置 I2C 总线安装好屏幕后必须要配置I2C我们自己登录的账户才能在非Root权限下访问I2C总线。将下面命令的 username 改为你登录的账户名sudo usermod -aG i2c username最好重启一下设备如果执行下面命令可以正常显示那就也没啥问题。i2cdetect -y -r 1在下图中OLED 显示屏的地址 3c 被特别突出显示。I2C用.NET驱动显示驱动这个oled屏幕我们需要用到微软的IoT相关的库 System.Device.Gpio 通过这个库我们可以实现和外接设备的I2C通讯当然驱动OLED显示器需要用到熟悉其驱动芯片的各种指令这里的驱动芯片是SSD1306拥有最大128*64像素支持广泛应用在小尺寸OLED显示屏的驱动中。在这里我们不介绍相关的驱动和指令相关原理性的东西我已经将相关指令封装为一个库可以直接使用库已开源感兴趣的同学可自行查阅相关知识和源码。下面我们通过在Jetson Nano上的使用演示如何使用 “Sang.IoT.SSD1306” 库来控制OLED显示画面。安装.Net开发环境因为 Jetson 是 arm64 的设备我们直接前往.Net官网选择下载.Net6[2]的 Arm64 版本。执行安装mkdir -p $HOME/dotnet tar zxf dotnet-sdk-6.0.301-linux-arm64.tar.gz -C $HOME/dotnet然后更改用户目录下文件在末尾加入以下环境配置export DOTNET_ROOT$HOME/dotnet
export PATH$PATH:$HOME/dotnet运行dotnet命令检查安装情况。使用演示创建控制台程序dotnet new console -o i2c_oled添加驱动库dotnet add package Sang.IoT.SSD1306修改代码using Sang.IoT.SSD1306;using (var oled new SSD1306_128_64(1)) {oled.Begin();// 需要发往显示器的显示内容byte[] c new byte[128*64]{...};oled.SetBuffer(c);oled.Display();
}要想将数组数据显示到屏幕就需要将数据存入SSD1306的RAM。这里的RAM大小为128x64位分为8页从0页到7页用于单色128x64点矩阵显示。以上代码可能平时也用不到主要是自定义的内容显示接口。图片显示这里类库用到了微软的 SkiaSharp 跨平台的图片处理库关于跨平台的图片处理库如果你也有相关需求可以看这一篇文章来对比了解[3] 。这里演示用的图片为下图我们将其在 OLED 显示屏上展示。test imgusing Sang.IoT.SSD1306;using (var oled new SSD1306_128_64(1)) {oled.Begin();oled.Image(assets/test.png);oled.Display();
}效果如下图片效果显示文字那么如何显示文字呢当然一样的思路我们首先通过 SkiaSharp 创建位图然后显示出来就可以了所以加载字体文件显示中文字体也不是难事。using Sang.IoT.SSD1306;
using SkiaSharp;using (var oled new SSD1306_128_64(1)) {oled.Begin();oled.Clear();using(var bitmap new SKBitmap(128, 64, true)){SKCanvas canvas new SKCanvas(bitmap);SKPaint paint new SKPaint() { Color new SKColor(255, 255, 255),StrokeWidth 1, //画笔宽度Typeface SKTypeface.FromFile(/home/sangsq/i2c_led/SourceHanSansCN-Normal.ttf),TextSize 13, //字体大小Style SKPaintStyle.Fill,};canvas.DrawText(公众号sangxiao99 , 0, 13, paint);paint.TextSize 30;canvas.DrawText(桑榆肖物 , 0, 50, paint);oled.Image(bitmap.Encode(SKEncodedImageFormat.Png, 100).ToArray());}oled.Display();
}效果如下文字效果清除显示oled.Clear();结语如果对IoT这个领域比较感兴趣或者想折腾手头的开发板的话可以前往官网了解更多.Net的IoT资源[4]。刚刚到了一个SPI接口的LCD彩色显示屏又有新玩具可以玩了。References[1] 参考官网的指引: https://developer.nvidia.com/embedded/learn/getting-started-jetson[2] .Net6: https://dotnet.microsoft.com/en-us/download/dotnet/6.0[3] 看这一篇文章来对比了解: https://devblogs.microsoft.com/dotnet/net-core-image-processing/[4] .Net的IoT资源: https://dotnet.microsoft.com/zh-cn/apps/iot