快速入门 .NET nanoFramework 开发 ESP32-Pico 应用

简介: 本文是一篇适合初学者的 .NET nanoFramework 保姆级入门教程,并提供了基本的入门程序并介绍了微雪的 ESP32-S2-Pico 使用 .NET nanoFramework 开发过程的基础知识。

1. 背景

1.1 .NET IOT 与 .NET nanoFramework

.NET 支持物联网(IoT) 应用的开发,其提供的.NET IoT 库可以让我们在运行 Windwos 和 Linux 系统的 IoT 设备上运行应用,并利用 GPIO、SPI、I2C、PWM 和串行端口等接口使用数百个传感器、显示器、输入设备。但是这并不适用于受约束的嵌入式设备,比如 ESP32、M5Stack、STM32 等。对于这些受约束的嵌入式设备,.NET nanoFramework 提供了一个很好的方案,适用于这些微控制器,能够为受限嵌入式设备编写托管代码。开发者可以利用熟悉的 IDE Visual Studio 和 .NET(C#) 知识快速编写应用程序,而无需担心微控制器的低层硬件复杂性。更方便的是,使用 Visual Studio 可以直接在真实硬件上编写、部署、调试代码。

1.2 微控制器

使用微控制器的好处显而易见,毕竟20 ~ 50 元左右的价格,对于许多应用来说是非常实惠的,尤其是对于那些需要大量生产的应用。另外,兼具小巧体积的同时,微控制器具有较强的可编程性和可扩展性,可以通过编程来定义其功能。这使得微控制器能够应用于许多不同的领域,并且在需要更改功能时也非常方便。

Pico & ESP32

注:上图左三为 Raspberry Pi Pico 系列,最右边为 ESP32-S2-Pico,蓝色板子均为微雪产品。

1.3 实验板介绍

.NET nanoFramework 对于 Raspberry Pi Pico 系列的支持正在计划中,虽然已经有一些爱好者的非官方的尝试,但是其项目似乎已经不再更新,还是等待官方的正式支持吧,我也会一直关注。不过 .NET nanoFramework 对于 ESP32 是支持的,所以近期又买了 ESP32 的板子来做一些尝试。

ESP32-S2-Pico 体积小巧,外设接口丰富,集成了低功耗 Wi-Fi 系统级芯片(SoC)和大容量存储器,支持 Raspberry Pi Pico 扩展板生态的开发板。具有硬件加密加速器、RNG、HMAC 和数字签名 (Digital Signature) 模块,满足物联网的安全要求。另外还有多种低功耗工作状态满足在物联网 (IoT)、移动设备、可穿戴电子设备、智能家居等应用场景的功耗需求。

2. 搭建 .NET nanoFramework 开发环境

.NET nanoFramework 开发环境搭建首先需要安装好 Visual Studio 2022(也支持VS 2019),然后安装扩展和工具。另外,SDK 需要必须安装 .NET 6.0 运行时(或 .NET 6.0 SDK)

2.1 安装扩展

打开 Visual Studio ,随便打开/新建一个任意的项目或直接选择“继续但无需代码”进入主界面,通过选择菜单“扩展”>“管理扩展”来打开“管理扩展”对话框。选择左侧的“联机”类别,然后在搜索框中输入“nano”。

安装扩展

选择“.NET nanoFramework Extension” 下载安装,系统将提示重新启动 Visual Studio 以完成扩展的安装,此时关闭 Visual Studio 来进行继续的操作即可。

确认安装

2.2 安装工具库

接下来我们需要安装 .NET nanoFramework firmware 工具库,这个工具后面会使用到,这是一个 .NET Core Tool 工具,可以刷写固件(nanoBooter和nanoCLR) 到NET nanoFramework 目标,也可以进行应用程序部署(运行 .NET 应用程序所需的所有程序集)和恢复以前保存的部署映像。关于这个工具箱的更多的介绍可以前往官方仓库阅读:https://github.com/nanoframework/nanoFirmwareFlasher/blob/main/README.zh-cn.md

打开控制台,使用以下.NET Core CLI 命令即可安装 .NET nanoFramework Firmware flash 工具:

dotnet tool install -g nanoff

成功安装后,将显示调用说明和安装的工具版本。

nanoff

3. 固件安装

在这一部分,我们需要向电路板刷入 .NET nanoFramework 的固件。

3.1 设备连接

首先我们要进入 ESP32 的下载模式,不同的板子有不同的方式,这里我们可以查阅购买产品的说明书。针对这款 ESP32-S2-Pico 下载更新程序需要先按住 BOOT 按键不放再按下 RESET 按键后释放或断开 USB 按住 BOOT 键上电,此时 ESP32-S2 的 UART0(GPIO43,GPIO44)、USB 均可烧录程序。

接入设备

这里我采用按住 BOOT 按键然后与电脑的 USB 口连接上电,此时我们就可以在设备管理器看到新插入的 USB 串行设备。

COM

如果电脑存在多个已有的 COM 设备,记得注意接入设备后的变化,需要记好 COM 口的编号,后面会用到。

当然你也可以使用之前安装的 nanoff,使用下面命令列出可用的串行端口:

nanoff --listports

nanoff listports

这里我们可以看到,新接入的 ESP32-S2-Pico 的串行端口为 COM5。

3.2 刷写固件

在刷写固件时,我们需要提供正确的目标名称来执行固件刷写,否则板子可能无法工作。除了从平台来看,.NET nanoFramework 支持 esp32, stm32, cc13x2, gg11,在固件刷写时需要指定外。不同的板子虽然都是用 ESP32 但是其在设计时也会或多或少存在一些差异,ESP32 板子的构建列表 Target 可以查看这里:https://github.com/nanoframework/nf-interpreter#esp32-modules-and-boards

针对这块板子,如果我们使用官方的入门教程,你会发现这样的错误:

For ESP32-S2 series nanoff isn't able to make an educated guess on the best target to use.
Please provide a valid target name using this option '--target MY_ESP32_S2_TARGET' instead of '--platform esp32'.

Error E9000: Invalid or missing arguments.

Error E9000

出错也不奇怪,毕竟这块板子不在官方的列表当中,猜不出来是正常的。虽然根据其设计是属于 Pico 系列的,但是使用 ESP32_PICO 是无效的,刷写后设备无法启动。我们可以直接使用下面的命令,刷写同为 ESP32-S2 系列的 FEATHER_S2 ,将连接到 COM5 的 ESP32 板子的固件更新到最新的可用版本:

nanoff --target FEATHER_S2 --serialport COM5 --update

等待 30 秒左右即可刷写成功。

刷写成功

对了,上面刷写前,打印了板子的基本信息,如果你想直接查看板子信息,可以使用下面的命令:

nanoff --platform esp32 --serialport COM5 --devicedetails

devicedetails

3.3 设备固件检查

固件刷写完成后,设备是仍处于固件刷新状态,我们需要按 RESET 键使设备恢复正常状态或直接重新插拔 USB,此时如果电脑没有任何响应则需要检查是否刷写失败。

刷新成功后,我们是可以在 Visual Studio 的设备管理器中看到该设备的。设备管理器 Device Explore 可以通过 “视图”>“其他窗口”>“Device Explore” 来打开。

device explore

3.4 刷写指定版本

有时可能最新固件存在适配或某些问题,我们需要安装其他的稳定版本,使用下面的命令我们可以列出所有稳定版本的情况:

nanoff --listboards --platform esp32

如果想刷写指定的版本如 FEATHER_S2 1.8.0.741,可以使用下面的命令:

nanoff --target FEATHER_S2 --fwversion 1.8.0.741 --serialport COM5 --update

3.5 程序集的版本对齐

为什么介绍指定版本的安装,是因为不同版本之间引用的 Nuget 包需要和刷写的固定保持一致。若不一致,则会出现下面的报错:

Couldn't find a valid assembly required by mscorlib...

此时我们需要调整安装的 Nuget 包的版本和所刷写固定的需求改为一致即可。在设备管理器中点击“Device Capabilities”即可查看程序集版本和校验信息:

Device Capabilities

如下图已经标出了一个红色的不一致的包信息,根据组件包的介绍说明,改为一致即可:

包信息

4. 编写程序

前面我们已经做好了必要的准备,下面就可以开始愉快的编码时间。需要注意的一点是:创建 .NET nanoFramework 项目时,不要进行任何下拉框的筛选限制,你可以搜索 “nano” 即可看到项目模板。首次创建项目时若出现报错可忽略,关闭窗口前往文件夹打开生成的 sln 即可。

创建项目

4.1 编写 “Hello World” 应用

首次创建 .NET nanoFramework 项目,其模板因为是新增的,所以会排在第一位,直接选择 “Blank Application” 模板创建项目即可。

创建项目

该模板即是一个简单的 Hello World 应用,如果项目出现报错,则可能需要你手动安装缺失的 Nuget 包,可以通过包管理器搜索 “nano” 安装核心包 “nanoFramework.CoreLibrary” 并安装。

安装 Nuget 包

安装缺失的 Nuget 包即可点击运行,记得在“Device Explore” 中选择你要运行的设备,以下便是成功运行后的信息:

运行情况

当前的代码只是在调试的信息中打印了 Hello World ,但这似乎并没有板子什么事情,接下来我们使用其串口来输出 Hello World 信息。

4.2 串口输出 “Hello World”

使用串口我们只需要稍微改造一下代码即可,这里需要通过 Nuget 安装 nanoFramework.System.IO.Ports 包:

static SerialPort _serialDevice;

public static void Main()
{
    Debug.WriteLine("Hello from nanoFramework!");

    // 获取可用串口
    var ports = SerialPort.GetPortNames();

    Debug.WriteLine("Available ports: ");

    foreach (string port in ports)
    {
        Debug.WriteLine($" {port}");
    }

    _serialDevice = new SerialPort("COM1");

    // 设置参数
    _serialDevice.BaudRate = 9600;
    _serialDevice.Parity = Parity.None;
    _serialDevice.StopBits = StopBits.One;
    _serialDevice.Handshake = Handshake.None;
    _serialDevice.DataBits = 8;

    // 设置缓冲区大小
    _serialDevice.ReadBufferSize = 2048;

    // 使用以上设置打开串口
    _serialDevice.Open();

    _serialDevice.WriteTimeout = 500;

    for (; ; )
    {
        _serialDevice.WriteLine(DateTime.UtcNow + " hello from nanoFramework!");
        Thread.Sleep(2000);
    }
}

编译并部署上面的代码到 ESP32 板子,点击 RESET 按钮程序就会启动。此时我们连接串口即可看到打印的 Hello World 信息。

串口输出

4.3 串口连接

这一节主要介绍如何连接 ESP32 设备的串口,上一节我们在串口输出信息前打印了设备的串口情况,根据打印信息,我们可以看到 SerialPort.GetPortNames() 设备有2个串口可用:COM1 和 COM2 这里使用了 COM1,在硬件接口上通过下图可查得 UART0 的 TX 和 RX 分别为 GP43 和 GP44。

ESP32-S2-Pico 硬件接口

这里使用 USB 转 TTL 设备进行接线,TX 接 GP44,RX 接 GP43,GND 随便接一个ESP32 的 GND 口,比如 3 号物理针脚,USB 转 TTL 短接帽的电压记得选到 3V3。

USB 转 TTL

接好这三根线将串口连接电脑,即可使用串口工具(比如:MobaXterm)打开该串口查看 ESP32 打印的信息了。

注意:串口波特率 9600 ,其他均为默认,可查看下图:

MobaXterm

5. 最后

总体来说 .NET nanoFramework 的开发体验对 .NET 熟悉的同学还是非常友好的。它提供了一个熟悉的开发环境,可以让你使用 Visual Studio 和 C# 语言进行开发。此外,.NET nanoFramework 还支持与 .NET Framework 相同的语言特性和 API,因此你可以很容易地将代码迁移到 .NET nanoFramework 上。

后续我会继续进行 .NET nanoFramework 相关的研究,感兴趣的同学可以点一波关注哦,感谢!

相关文章
|
9天前
|
C# Windows
一款.NET开源、简洁易用的Windows桌面小说阅读应用
一款.NET开源、简洁易用的Windows桌面小说阅读应用
|
10天前
|
人工智能 量子技术 C#
【专栏】.NET 开发:开启数字化新时代
【4月更文挑战第29天】.NET开发在数字化新时代中发挥关键作用,借助跨平台能力、高性能和现代编程语言支持,如C#,助力企业实现数字化转型。通过企业级应用开发、移动应用和云计算集成,.NET加速业务流程和提升用户体验。未来,.NET将涉足AI、ML、MR/AR及量子计算,持续推动技术创新和数字化转型。开发者应提升技能,适应高性能需求,把握发展机遇。
|
10天前
|
缓存 监控 算法
【专栏】.NET 开发:实现卓越性能的途径
【4月更文挑战第29天】本文探讨了.NET开发中的性能优化,强调了理解性能问题根源和使用分析工具的重要性。基础优化包括代码优化(如减少计算、避免内存泄漏)、资源管理及选择合适算法。高级策略涉及并行编程、缓存策略、预编译(AOT)和微服务架构。持续性能测试与监控是关键,包括性能测试、监控分析和建立优化反馈循环。开发者应持续学习和实践性能优化,以构建高性能应用。
|
10天前
|
开发框架 .NET C#
【专栏】理解.NET 技术,提升开发水平
【4月更文挑战第29天】本文介绍了.NET技术的核心概念和应用,包括其跨平台能力、性能优化、现代编程语言支持及Web开发等特性。文章强调了深入学习.NET技术、关注社区动态、实践经验及学习现代编程理念对提升开发水平的重要性。通过这些,开发者能更好地利用.NET构建高效、可维护的多平台应用。
|
10天前
|
机器学习/深度学习 vr&ar 开发者
【专栏】.NET 技术:引领开发新方向
【4月更文挑战第29天】本文探讨了.NET技术如何引领软件开发新方向,主要体现在三方面:1) 作为跨平台开发的先锋,.NET Core支持多操作系统和移动设备,借助.NET MAUI创建统一UI,适应物联网需求;2) 提升性能和开发者生产力,采用先进技术和优化策略,同时更新C#语言特性,提高代码效率和可维护性;3) 支持现代化应用架构,包括微服务、容器化,集成Kubernetes和ASP.NET Core,保障安全性。此外,.NET还不断探索AI、ML和AR/VR技术,为软件开发带来更多创新可能。
|
10天前
|
物联网 vr&ar 开发者
【专栏】.NET 技术:为开发注入活力
【4月更文挑战第29天】本文探讨了.NET技术的创新,主要体现在三个方面:1) .NET Core实现跨平台开发革命,支持多种操作系统和硬件,如.NET MAUI用于多平台UI;2) 性能提升与生产力飞跃,C#新特性简化编程,JIT和AOT优化提升性能,Roslyn提供代码分析工具;3) 引领现代化应用架构,支持微服务、容器化,内置安全机制。未来,.NET 7将带来更多新特性和前沿技术整合,如量子计算、AI,持续推动软件开发创新。开发者掌握.NET技术将赢得竞争优势。
|
10天前
|
人工智能 前端开发 Cloud Native
【专栏】洞察.NET 技术的开发趋势
【4月更文挑战第29天】本文探讨了.NET技术的三大发展趋势:1) 跨平台与云原生技术融合,通过.NET Core支持轻量级、高性能应用,适应云计算和微服务;2) 人工智能与机器学习的集成,如ML.NET框架,使开发者能用C#构建AI模型;3) 引入现代化前端开发技术,如Blazor,实现前后端一致性。随着.NET 8等新版本的发布,期待更多创新技术如量子计算、AR/VR的融合,.NET将持续推动软件开发的创新与进步。
|
10天前
|
开发框架 物联网 测试技术
【专栏】.NET 开发:打造领先应用的基石
【4月更文挑战第29天】本文探讨了.NET开发框架为何成为构建领先应用的首选。高性能与稳定性是.NET的核心优势,它采用先进的技术和优化策略,如.NET Core的轻量级设计和JIT/AOT编译模式。跨平台兼容性让开发者能用相同代码库在不同操作系统上构建应用。现代化的开发体验,如C#语言的创新特性和Visual Studio的强大工具,提升了开发者生产力。丰富的生态系统和广泛支持,包括庞大的开发者社区和微软的持续投入,为.NET提供了坚实后盾。
|
10天前
|
人工智能 前端开发 Devops
【专栏】洞察.NET 技术在现代开发中的作用
【4月更文挑战第29天】本文探讨了.NET技术在现代软件开发中的核心价值、应用及挑战。.NET提供语言统一性与多样性,强大的Visual Studio工具,丰富的类库,跨平台能力及活跃的开发者社区。实际应用包括企业级应用、Web、移动、云服务和游戏开发。未来面临性能优化、容器化、AI集成等挑战,需持续创新。开发者应深入理解.NET,把握技术趋势,参与社区,共创美好未来。
|
11天前
|
机器学习/深度学习 人工智能 开发者
【专栏】.NET 技术:为开发带来新机遇
【4月更文挑战第29天】本文探讨了.NET技术如何为软件开发带来新机遇,分为三个部分:首先,.NET的跨平台革命,包括.NET Core的兴起、Xamarin与.NET MAUI的移动应用开发、开源社区的推动及性能优化;其次,介绍了云服务与微服务架构的集成,如Azure云服务、微服务支持、DevOps与CI/CD,以及Docker容器化;最后,讨论了AI与机器学习集成,如ML.NET、认知服务、TensorFlow和ONNX,使开发者能构建智能应用。面对这些机遇,开发者应不断学习和适应新技术,以创造更多价值。