nanoFramework.Iot.Device.Pcd8544 1.0.519

已保留前缀
dotnet add package nanoFramework.Iot.Device.Pcd8544 --version 1.0.519                
NuGet\Install-Package nanoFramework.Iot.Device.Pcd8544 -Version 1.0.519                
该命令旨在在Visual Studio的包管理器控制台中使用,因为它使用了NuGet模块的Install-Package版本。
<PackageReference Include="nanoFramework.Iot.Device.Pcd8544" Version="1.0.519" />                
对于支持PackageReference的项目,将此XML节点复制到项目文件中以引用该包。
paket add nanoFramework.Iot.Device.Pcd8544 --version 1.0.519                
#r "nuget: nanoFramework.Iot.Device.Pcd8544, 1.0.519"                
使用 #r 指令可以在F#交互式和Polyglot Notebooks中引用包。将此内容复制到交互式工具或脚本的源代码中。
// Install nanoFramework.Iot.Device.Pcd8544 as a Cake Addin
#addin nuget:?package=nanoFramework.Iot.Device.Pcd8544&version=1.0.519

// Install nanoFramework.Iot.Device.Pcd8544 as a Cake Tool
#tool nuget:?package=nanoFramework.Iot.Device.Pcd8544&version=1.0.519                

PCD8544 - 48 × 84像素矩阵LCD,著名的Nokia 5110屏幕

这是Nokia 5110使用的著名屏幕。它是一种基于SPI的设备。这款Nokia 5110非常流行,我们很多人手里都曾有过它,那一代年轻人也曾在图片中见过它。这种LCD相当便宜且易于使用。

文档

电路

Connecting ESP32 & Pcd8544

它使用SPI,并且可以将PWM添加到控制屏幕周围的4个LED亮度。这些引脚有不同的名称,如BL或LED。

它还需要在SPI设备顶部添加GPIO控制器,该控制器具有一个名为数据控制(Data Control)的引脚,通常表示为DC。

在本方案中,芯片选择(低电平有效)通常称为CE。SPI时钟必须连接到CLK或SCLK。MOSI引脚连接到DIN或MOSI。引脚的名称略有不同。

复位引脚有时称为RST。

供电电压可变,3.3 或 5V,最多可接受7V。确保在亮度LED和您要插入的控制板之间有电流限制电阻。大多数您买的套件都会有。如果不添加,将会损坏外部亮度LED。

以下示例显示了如何使用PWM设置屏幕亮度

var resetPin = 32;
var dataCommandPin = 33;
var backlightPin = 21;

var gpioController = new GpioController();
var spiConnectionSettings = new SpiConnectionSettings(1, 5)
{
    ClockFrequency = 5_000_000,
    Mode = SpiMode.Mode0,
    DataFlow = DataFlow.MsbFirst,
    ChipSelectLineActiveState = PinValue.Low
};
var spiDevice = new SpiDevice(spiConnectionSettings);
var pwmChannel = PwmChannel.CreateFromPin(backlightPin);

var lcd = new Iot.Device.Pcd8544(dataCommandPin, spiDevice, resetPin, pwmChannel, gpioController, false);

如果您既不想PWM也不要复位引脚,您可以为复位提供一个负引脚号,为PWM提供一个空值

lcd = new(27, spi, -1, null);

var lcd = new Iot.Device.Pcd8544(dataCommandPin, spiDevice, -1, null);

请注意,您还可以为背光提供一个普通引脚号。在这种情况下,当BacklightBrightness属性大于0.5时,灯会亮,否则关闭。

显示文本

与其他存储库中的显示屏绑定一样,您有WriteSetCursorPosition来写入文本和设置光标位置。

有一种特定的字体可供使用,并针对屏幕进行了优化。该字体只包含有限数量的字符,并将忽略任何未知字符。

lcd.SetCursorPosition(0, 0);
lcd.WriteLine("First line");
lcd.Write("Second one");
lcd.SetCursorPosition(0, 5);
lcd.Write("last line");

光标位置随着您写入的文本而移动。屏幕总共有6行。字符宽度为5像素,高度为8像素。

您还可以使用 Write(ReadOnlySpan<byte> text) 函数提供自己的字符。

绘制线条、矩形和点

可提供点、线和矩形原语

lcd.DrawPoint(5, 5, true);
lcd.DrawLine(0, 0, 15, 35, true);
lcd.DrawRectangle(10, 30, 10, 20, true, true);
lcd.DrawRectangle(12, 32, 6, 16, false, true);
// You should not forget to draw what you have in memory
lcd.Draw();

每个都可以接受PointSizeRectangle作为输入。您必须决定是否想要开启或关闭点,以及是否填充矩形。

完成绘图后,您应该调用一次Refresh来刷新屏幕。所有绘图都在内存中,需要将其推送到屏幕。

显示原始图像

SetByteMap函数允许您绘制任何内容,您只需提供原始缓冲区。大小为504字节,表示从右上角的列到下一行的8像素列。总共可用6个原始图像,每个84列。

以下是一个示例,说明您如何转换现有图像以提取原始数据,然后将它转换为C#数组以复制到您的代码中

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;

var imageFilePath = args[0];
using var image = Image.Load<Rgba32>(imageFilePath);
image.Mutate(x => x.Resize(new Size(84, 48)));
image.Mutate(x => x.BlackWhite());

var colWhite = new Rgba32(255, 255, 255);
var width = 84;
var result = new byte[504];
for (var pos = 0; pos < result.Length; pos++)
{
    byte toStore = 0;
    for (int bit = 0; bit < 8; bit++)
    {
        var x = pos % width;
        var y = pos / width * 8 + bit;
        toStore = (byte)(toStore | ((image[x, y] == colWhite ? 0 : 1) << bit));
    }

    result[pos] = toStore;
}

var resultString = $"var bitmap = new byte[] {{{String.Join(",", result.Select(b => $"0x{b.ToString("X2")}"))}}}";
Console.WriteLine(resultString);
Console.ReadKey();

如果您想转换与84x48屏幕尺寸不同的现有图像,您必须使用ImageSharp将该图片调整大小,并将其转换为黑白

// Open an image and resize it
using var image = Image.Load<Rgba32>(imageFilePath);
bitmapLarge.Mutate(x => x.Resize(new Size(84, 48)));
bitmapLarge.Mutate(x => x.BlackWhite());
...

注意:您可能需要根据需要首先反转颜色。

此代码作为简单的C#控制台应用程序在Img2Pcd8544中提供,您可以使用以下命令执行它

Img2Pcd8544 <图像文件路径>

高级功能

您可以调整几个因素,如BiasTemperatureContrastBrightness。示例将运行所有这些,以便您可以了解它们各自的影响。Bias会增加电压并使屏幕变暗。

一般来说,如果您处于正常条件下,建议将温度保持在0系数。正常条件下的默认值可以将其设置为4。

然后,您可以使用Contrast属性来调整对比度。通常,正常条件下值为0x30的是一个很好的值。

但是,可能需要根据您所处环境的光线和温度来调整这些值。

亮度

亮度控制PWM。如果没有传递PWM控制器,此设置对屏幕没有影响。亮度从0.0到0.1f。

lcd.BacklightBrightness = 0.2f;
反转颜色

支持反转模式,它只是反转屏幕颜色。因此,白色像素变成黑色,反之亦然

lcd.InvertedColors = true;
已启用

您可以使用Enabled属性完全打开或关闭屏幕

lcd.Enabled = true;
产品 兼容和额外的计算目标框架版本。
.NET框架 net兼容。
兼容目标框架
包含的目标框架(在包中)
更多关于目标框架.NET Standard的信息。

NuGet包

此包未被任何NuGet包使用。

GitHub仓库

此包未被任何流行的GitHub仓库使用。

版本 下载 上次更新
1.0.519 64 7/24/2024
1.0.516 54 7/22/2024
1.0.514 54 7/17/2024
1.0.504 81 6/28/2024
1.0.494 75 6/14/2024
1.0.484 80 5/29/2024
1.0.472 88 5/15/2024
1.0.466 92 5/1/2024
1.0.461 84 4/15/2024
1.0.460 74 4/15/2024
1.0.438 105 3/22/2024
1.0.432 98 3/5/2024
1.0.370 227 11/17/2023
1.0.360 111 11/10/2023
1.0.340 103 11/8/2023
1.0.253 158 5/26/2023
1.0.237 128 5/12/2023
1.0.232 129 5/11/2023
1.0.226 137 5/10/2023
1.0.222 135 5/5/2023
1.0.221 138 5/3/2023
1.0.200 187 3/22/2023
1.0.197 199 3/17/2023
1.0.139 283 1/6/2023
1.0.136 283 1/5/2023
1.0.134 302 1/4/2023
1.0.132 287 1/3/2023
1.0.129 274 12/30/2022
1.0.127 276 12/28/2022
1.0.88 326 11/16/2022
1.0.85 302 11/15/2022
1.0.83 328 11/14/2022
1.0.79 325 11/6/2022
1.0.77 347 11/5/2022
1.0.65 381 10/25/2022
1.0.52 365 10/22/2022
1.0.50 376 10/13/2022
1.0.46 417 10/12/2022
1.0.42 411 10/11/2022
1.0.41 427 10/10/2022
1.0.38 398 10/8/2022
1.0.32 378 10/7/2022
1.0.30 456 9/25/2022
1.0.28 407 9/24/2022
1.0.21 443 9/22/2022
1.0.19 414 9/22/2022
1.0.11 467 9/15/2022
1.0.1 392 9/9/2022