nanoFramework.Hardware.Esp32 1.6.19
前缀已保留
dotnet add package nanoFramework.Hardware.Esp32 --version 1.6.19
NuGet\Install-Package nanoFramework.Hardware.Esp32 -Version 1.6.19
<PackageReference Include="nanoFramework.Hardware.Esp32" Version="1.6.19" />
paket add nanoFramework.Hardware.Esp32 --version 1.6.19
#r "nuget: nanoFramework.Hardware.Esp32, 1.6.19"
// Install nanoFramework.Hardware.Esp32 as a Cake Addin #addin nuget:?package=nanoFramework.Hardware.Esp32&version=1.6.19 // Install nanoFramework.Hardware.Esp32 as a Cake Tool #tool nuget:?package=nanoFramework.Hardware.Esp32&version=1.6.19
欢迎使用 .NET nanoFramework nanoFramework.Hardware.Esp32 库仓库
构建状态
组件 | 构建状态 | NuGet 包 |
---|---|---|
nanoFramework.Hardware.Esp32 |
触控板基础
本节将为您提供有关如何在 ESP32 和 ESP32-S2 上使用触控板引脚的基本要素。
触控板与 GPIO 引脚
触控板引脚的编号与 GPIO 引脚不同。您可以使用以下方式检查哪些 GPIO 引脚对应于哪个 GPIO 引脚:
const int TouchPadNumber = 5;
var pinNum = TouchPad.GetGpioNumberFromTouchNumber(TouchPadNumber);
Console.WriteLine($"Pad {TouchPadNumber} is GPIO{pinNum}");
在 ESP32 和 S2 上,引脚编号不同。ESP32 上有 10 个有效的触控板(0 到 9),而在 S2 上有 13 个(1 到 13)。
在此示例中,触控板 5 在 ESP32 上将对应于 GPIO 12,而在 S2 上将对应于 GPIO 5。
ESP32 基本用法
在 ESP32 上,如果您触摸传感器,则值会变低,因此您必须设置一个低于校准数据的阈值
TouchPad touchpad = new(TouchPadNumber);
Console.WriteLine($"Calibrating touch pad {touchpad.TouchPadNumber}, DO NOT TOUCH it during the process.");
var calib = touchpad.GetCalibrationData();
Console.WriteLine($"calib: {calib} vs Calibration {touchpad.CalibrationData}");
// On ESP32: Setup a threshold, usually 2/3 or 80% is a good value.
touchpad.Threshold = (uint)(touchpad.CalibrationData * 2 / 3);
touchpad.ValueChanged += TouchpadValueChanged;
Thread.Sleep(Timeout.Infinite);
private static void TouchpadValueChanged(object sender, TouchPadEventArgs e)
{
Console.WriteLine($"Touchpad {e.PadNumber} is {(e.Touched ? "touched" : "not touched")}");
}
S2 基本用法
在S2上,如果您触摸传感器,值将变高,因此您需要设置一个高于校准数据的阈值,并将其触发模式设置为如下
TouchPad touchpad = new(TouchPadNumber);
Console.WriteLine($"Calibrating touch pad {touchpad.TouchPadNumber}, DO NOT TOUCH it during the process.");
var calib = touchpad.GetCalibrationData();
Console.WriteLine($"calib: {calib} vs Calibration {touchpad.CalibrationData}");
// On S2/S3, the actual read values will be higher, so let's use 20% more
TouchPad.TouchTriggerMode = TouchTriggerMode.AboveThreshold;
touchpad.Threshold = (uint)(touchpad.CalibrationData * 1.2);
touchpad.ValueChanged += TouchpadValueChanged;
Thread.Sleep(Timeout.Infinite);
private static void TouchpadValueChanged(object sender, TouchPadEventArgs e)
{
Console.WriteLine($"Touchpad {e.PadNumber} is {(e.Touched ? "touched" : "not touched")}");
}
其他功能
您还有许多其他功能可供选择,包括过滤器,一些特定去噪功能。您可以在样本仓库中查看更多详情。
睡眠模式
您可以通过触摸唤醒ESP32或ESP32-S2。
ESP32上的睡眠模式
ESP32可以通过1或2个触摸垫唤醒。以下是使用1个触摸垫的方式
Sleep.EnableWakeupByTouchPad(PadForSleep1, thresholdCoefficient: 80);
以及使用2个触摸垫的方式
Sleep.EnableWakeupByTouchPad(PadForSleep1, PadForSleep2);
请注意,系数可以通过进行几次测试来调整,默认值为80,似乎适用于所有情况。该系数表示一个百分比值。
S2上的睡眠模式
S2只能通过1个触摸垫唤醒。建议进行测试以找到最佳系数
Sleep.EnableWakeupByTouchPad(PadForSleep, thresholdCoefficient: 90);
从轻睡眠模式唤醒UART
您可以使用UART唤醒任何受支持的nanoFramework ESP32的轻睡眠模式。以下是一些需要注意的元素
必须正确设置您的串行端口号,以下为COM2
nanoFramework.Hardware.Esp32.Configuration.SetPinFunction(19, nanoFramework.Hardware.Esp32.DeviceFunction.COM2_TX); nanoFramework.Hardware.Esp32.Configuration.SetPinFunction(21, nanoFramework.Hardware.Esp32.DeviceFunction.COM2_RX);
支持COM1和COM2。请注意,默认情况下COM1用于调试。除非您已构建自己的版本,否则您可能不必将其用作常规UART。但是,您可以肯定地将其用于唤醒您的板子。在这种情况下,引脚是默认的,并且不需要执行前面的步骤。
为了唤醒板子,您需要设置一个阈值,指定接收引脚(UART的接收引脚)中必须有多少变化。根据文档,您将会丢失一些字符。因此,发送方应在协议中考虑到这一点。
使用方法简单直接
EnableWakeupByUart(WakeUpPort.COM2, 5);
StartLightSleep();
脉冲计数器
脉冲计数器允许在不设置GPIO控制器和事件的情况下计数脉冲。这是在特定时间内获取计数的快速方法。此脉冲计数器还允许使用2个不同的引脚,并根据各自的极性获取脉冲计数值。
单引脚脉冲计数器
以下代码演示了如何设置一个单引脚的计数器
GpioPulseCounter counter = new GpioPulseCounter(26);
counter.Polarity = GpioPulsePolarity.Rising;
counter.FilterPulses = 0;
counter.Start();
int inc = 0;
GpioPulseCount counterCount;
while (inc++ < 100)
{
counterCount = counter.Read();
Console.WriteLine($"{counterCount.RelativeTime}: {counterCount.Count}");
Thread.Sleep(1000);
}
counter.Stop();
counter.Dispose();
计数器始终是正数且递增的。您可以通过调用《code>Reset函数将计数重置为0
GpioPulseCount pulses = counter.Reset();
// pulses.Count contains the actual count, it is then put to 0 once the function is called
双引脚脉冲计数器
这通常是旋转编码器场景。在这种情况下,您需要2个引脚,并且它们的作用如下所示:
然后您可以使用连接到2个引脚的旋转编码器
相关的代码与单引脚相同,除了在构造函数中
GpioPulseCounter encoder = new GpioPulseCounter(12, 14);
encoder.Start();
int incEncod = 0;
GpioPulseCount counterCountEncode;
while (incEncod++ < 100)
{
counterCountEncode = encoder.Read();
Console.WriteLine($"{counterCountEncode.RelativeTime}: {counterCountEncode.Count}");
Thread.Sleep(1000);
}
encoder.Stop();
encoder.Dispose();
结果,您将得到正脉冲和负脉冲
反馈与文档
有关文档,提供反馈、问题以及了解如何贡献,请参阅主仓库。
加入我们的Discord社区 这里。
致谢
此项目的贡献者名单可在CONTRIBUTORS中找到。
许可协议
nanoFramework类库是按照MIT许可证授权的。
行为准则
本项目采用了贡献者公约中定义的行为准则,以明确我社区中预期的行为。有关更多信息,请参阅.NET基金会行为准则。
.NET基金会
本项目由.NET基金会支持。
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET Framework | net is compatible. |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.Runtime.Events (>= 1.11.18)
NuGet 包 (12)
显示依赖 nanoFramework.Hardware.Esp32 的前 5 个 NuGet 包
包 | 下载 |
---|---|
nanoFramework.M5Core2 该包包含用于 .NET nanoFramework C# 项目的 nanoFramework.M5Core2 程序集。 |
|
nanoFramework.M5StickC 该包包含用于 .NET nanoFramework C# 项目的 nanoFramework.M5StickC 程序集。 |
|
nanoFramework.M5Core 该包包含用于 .NET nanoFramework C# 项目的 nanoFramework.M5Core 程序集。 |
|
nanoFramework.M5StickCPlus 该包包含用于 .NET nanoFramework C# 项目的 nanoFramework.M5StickCPlus 程序集。 |
|
nanoFramework.AtomLite 该包包含用于 .NET nanoFramework C# 项目的 nanoFramework.AtomLite 程序集。 |
GitHub 仓库 (2)
显示依赖 nanoFramework.Hardware.Esp32 的前 2 个最受欢迎的 GitHub 仓库
仓库 | 星标 |
---|---|
nanoframework/Samples
🍬 nanoFramework 团队用于测试、构想证明和其他探索性活动的代码示例
|
|
nanoframework/nanoFramework.IoT.Device
📦 此仓库包含各种传感器、芯片、显示屏、帽子驱动程序的 .NET nanoFramework 实现
|
版本 | 下载 | 最后更新 |
---|---|---|
1.6.19 | 799 | 7/19/2024 |
1.6.18 | 53 | 7/19/2024 |
1.6.15 | 3,362 | 5/13/2024 |
1.6.12 | 7,938 | 11/9/2023 |
1.6.10 | 133 | 11/9/2023 |
1.6.8 | 4,053 | 9/4/2023 |
1.6.3 | 10,335 | 3/25/2023 |
1.6.1 | 11,352 | 2/15/2023 |
1.5.1 | 10,242 | 12/28/2022 |
1.4.8 | 18,511 | 10/21/2022 |
1.4.4 | 5,564 | 10/8/2022 |
1.4.1 | 36,959 | 8/3/2022 |
1.3.6.7 | 48,641 | 6/15/2022 |
1.3.6 | 80,237 | 3/28/2022 |
1.3.5-preview.14 | 155 | 3/28/2022 |
1.3.5-preview.12 | 136 | 3/28/2022 |
1.3.5-preview.10 | 463 | 3/17/2022 |
1.3.5-preview.9 | 316 | 3/14/2022 |
1.3.5-preview.7 | 727 | 2/17/2022 |
1.3.5-preview.6 | 818 | 1/28/2022 |
1.3.5-preview.5 | 402 | 1/20/2022 |
1.3.5-preview.3 | 516 | 12/28/2021 |
1.3.4 | 1,754 | 12/2/2021 |
1.3.4-preview.18 | 159 | 12/2/2021 |
1.3.4-preview.16 | 165 | 12/2/2021 |
1.3.4-preview.14 | 174 | 11/30/2021 |
1.3.4-preview.11 | 404 | 11/3/2021 |
1.3.4-preview.8 | 561 | 10/22/2021 |
1.3.4-preview.7 | 246 | 10/20/2021 |
1.3.4-preview.5 | 442 | 10/17/2021 |
1.3.4-preview.4 | 399 | 9/25/2021 |
1.3.3 | 1,913 | 7/16/2021 |
1.3.3-preview.24 | 214 | 7/15/2021 |
1.3.3-preview.23 | 199 | 7/14/2021 |
1.3.3-preview.22 | 848 | 6/19/2021 |
1.3.3-preview.21 | 300 | 6/7/2021 |
1.3.3-preview.20 | 243 | 6/6/2021 |
1.3.3-preview.19 | 194 | 6/4/2021 |
1.3.3-preview.18 | 259 | 6/1/2021 |
1.3.3-preview.17 | 241 | 5/31/2021 |
1.3.3-preview.16 | 204 | 5/31/2021 |
1.3.3-preview.15 | 217 | 5/30/2021 |
1.3.3-preview.14 | 281 | 5/19/2021 |
1.3.3-preview.13 | 206 | 5/19/2021 |
1.3.3-preview.12 | 214 | 5/13/2021 |
1.3.3-preview.11 | 211 | 5/11/2021 |
1.3.3-preview.10 | 193 | 5/11/2021 |
1.3.3-preview.3 | 853 | 3/21/2021 |
1.3.3-preview.1 | 577 | 3/10/2021 |
1.3.2-preview.26 | 193 | 3/8/2021 |
1.3.2-preview.24 | 200 | 3/2/2021 |
1.3.2-preview.21 | 827 | 1/6/2021 |
1.3.2-preview.19 | 404 | 12/29/2020 |
1.3.2-preview.14 | 239 | 12/7/2020 |
1.3.2-preview.11 | 358 | 10/20/2020 |
1.3.2-preview.9 | 296 | 9/30/2020 |
1.3.2-preview.7 | 265 | 9/30/2020 |
1.3.2-preview.5 | 266 | 9/28/2020 |
1.3.2-preview.1 | 240 | 9/24/2020 |
1.3.1-preview.6 | 344 | 7/2/2020 |
1.3.1-preview.4 | 273 | 7/1/2020 |
1.3.1-preview.2 | 280 | 6/16/2020 |
1.3.0 | 845 | 6/16/2020 |
1.3.0-preview.5 | 272 | 6/16/2020 |
1.2.1 | 574 | 6/12/2020 |
1.2.1-preview.17 | 264 | 6/12/2020 |
1.2.1-preview.15 | 298 | 6/11/2020 |
1.2.1-preview.12 | 365 | 5/8/2020 |
1.2.1-preview.11 | 284 | 5/8/2020 |
1.2.1-preview.10 | 279 | 4/27/2020 |
1.2.1-preview.9 | 297 | 4/16/2020 |
1.2.1-preview.8 | 269 | 4/14/2020 |
1.2.1-preview.7 | 322 | 3/15/2020 |
1.2.1-preview.5 | 265 | 3/10/2020 |
1.2.1-preview.4 | 255 | 3/10/2020 |
1.2.1-preview.3 | 288 | 3/9/2020 |
1.2.1-preview.1 | 338 | 2/27/2020 |
1.2.0-preview.8 | 413 | 11/18/2019 |
1.2.0-preview.7 | 279 | 11/7/2019 |
1.2.0-preview.6 | 297 | 11/5/2019 |
1.2.0-preview.5 | 288 | 11/4/2019 |
1.2.0-preview.4 | 281 | 10/23/2019 |
1.2.0-preview.3 | 280 | 10/18/2019 |
1.1.0 | 778 | 10/17/2019 |
1.1.0-preview.3 | 267 | 10/17/2019 |
1.0.10 | 613 | 10/15/2019 |
1.0.10-preview.31 | 278 | 10/15/2019 |
1.0.10-preview.30 | 304 | 10/15/2019 |
1.0.10-preview.29 | 293 | 9/30/2019 |
1.0.10-preview.21 | 350 | 7/18/2019 |
1.0.10-preview.18 | 297 | 7/16/2019 |
1.0.10-preview.16 | 365 | 6/23/2019 |
1.0.10-preview.9 | 330 | 6/20/2019 |
1.0.10-preview.6 | 385 | 6/12/2019 |
1.0.10-preview.2 | 329 | 6/12/2019 |
1.0.9-preview-003 | 530 | 4/24/2019 |
1.0.9-preview-001 | 686 | 4/23/2019 |
1.0.8 | 874 | 2/4/2019 |
1.0.7 | 801 | 1/22/2019 |
1.0.6-preview-022 | 559 | 4/23/2019 |
1.0.6-preview-017 | 498 | 4/7/2019 |
1.0.6-preview-015 | 483 | 4/3/2019 |
1.0.6-preview-013 | 506 | 3/11/2019 |
1.0.6-preview-009 | 497 | 3/10/2019 |
1.0.5 | 839 | 1/3/2019 |
1.0.2-preview-012 | 636 | 11/20/2018 |
1.0.2-preview-009 | 633 | 11/9/2018 |
1.0.2-preview-004 | 618 | 11/8/2018 |
1.0.0 | 908 | 10/17/2018 |
1.0.0-preview031 | 653 | 10/9/2018 |
1.0.0-preview021 | 678 | 9/18/2018 |
1.0.0-preview020 | 693 | 9/18/2018 |
1.0.0-preview017 | 676 | 9/12/2018 |
1.0.0-preview012 | 713 | 8/27/2018 |
1.0.0-preview009 | 754 | 8/9/2018 |
1.0.0-preview008 | 886 | 8/3/2018 |
1.0.0-preview007 | 744 | 7/24/2018 |
1.0.0-preview004 | 835 | 6/16/2018 |
0.0.0 | 343 | 12/27/2022 |