本文将深入探讨如何使用
Sang.IoT.NV3030B
来驱动 NV3030B 显示屏。并介绍如何使用这个库来控制显示屏,以及在不同设备的使用方法。
1. 背景
在物联网设备中,显示屏是一个常见的输出设备。NV3030B 是一种常用的显示控制器,支持262K色显示,能清晰地展示彩色图片,在智能家居控制面板、便携式设备等场景广泛应用。在本文中,我们将介绍如何使用 Sang.IoT.NV3030B
库来控制 NV3030B 显示屏。
2. 安装
对于 SPI 的接线和设备检查,这里我们不再赘述,可以参考前面的文章。安装 Sang.IoT.NV3030B
库,可以使用以下命令:
dotnet add package Sang.IoT.NV3030B
3. 使用
安装完成后,我们可以开始编写代码来驱动LCD显示屏。
首先,我们需要引入相关的命名空间:
using Iot.Device.Graphics;
using Iot.Device.Graphics.SkiaSharpAdapter;
using Sang.IoT.NV3030B;
using System.Device.Gpio;
using System.Device.Spi;
然后,设置 GPIO 引脚:
const int pinID_DC = 25;
const int pinID_Reset = 27;
const int pinID_BL = 18;
接着,注册 SkiaSharp 适配器。注意:这里千万不要忘记注册适配器,否则无法正常使用 SkiaSharp 绘图。
SkiaSharpAdapter.Register();
接下来,设置 SPI 创建显示设备:
SpiDevice displaySPI = SpiDevice.Create(new SpiConnectionSettings(0, 0)
{
Mode = SpiMode.Mode0,
DataBitLength = 8,
ClockFrequency = 40_000_000
});
using var display = new NV3030B(displaySPI, pinID_DC, pinID_Reset, pinID_BL);
最后,我们可以使用 display
对象来控制显示屏。
4. 显示测试
基础的显示测试代码如下:
// 使用红色清空屏幕
display.ClearScreen(System.Drawing.Color.Red, true);
await Task.Delay(10000);
// 使用蓝色和绿色填充两个矩形
display.FillRect(System.Drawing.Color.Blue, 0, 0, 100, 100);
display.FillRect(System.Drawing.Color.Green, 100, 0, 100, 100);
display.SendFrame(false);
await Task.Delay(10000);
这段代码会在屏幕上显示一个红色背景,然后在屏幕上绘制两个矩形,一个蓝色,一个绿色。
图片展示方法:
using var image = BitmapImage.CreateFromFile("LCD_1inch5.jpg");
display.DrawBitmap(image);
这里的调光是通过 pinID_BL
引脚来控制的,可以通过调整 pinID_BL
引脚的电压来调整显示屏的亮度。直接使用 display.SetBacklight(100);
来设置最大亮度。
Console.WriteLine("Testing backlight...");
display.SetBacklight(20);
await Task.Delay(500);
display.SetBacklight(50);
await Task.Delay(500);
display.SetBacklight(100);
5. 在 LuckFox 上的使用
在 LuckFox 上使用时,需要先用 luckfox-config
开启 SPI 和 PWM,注意:需要先关闭 LCD 和 I2C4,否则会占用 SPI 引脚。PWM 是接给 pinID_BL
引脚的,可以自己选一个,示例中使用的是 40
,即 PWM3_M1
。
然后在代码中使用 SysFsDriver
驱动 GPIO,代码如下:
const int pinID_DC = 32;
const int pinID_Reset = 33;
const int pinID_BL = 40;
var gpioController = new GpioController(PinNumberingScheme.Logical, new SysFsDriver());
using var display = new NV3030B(displaySPI, pinID_DC, pinID_Reset, pinID_BL, gpioController: gpioController);
这样就可以在 LuckFox 上使用 NV3030B 显示屏了。
6. 总结
通过使用 Sang.IoT.NV3030B
库,我们可以方便地控制 NV3030B 显示屏。在实际项目中,我们可以根据需要,进一步扩展和优化显示功能,实现更加丰富的显示效果。
后续该库也会不断更新,提供更多功能和优化。同时会拆分基类,方便后续接入更多显示屏。