Netduino Plus 2 简介及示例






4.98/5 (23投票s)
本文旨在分享我对 Netduino Plus 2 的学习心得及示例。
引言
本文将带您了解 Netduino 编程的第一步。这些示例非常简单,适合完全的初学者。
这是我第一次接触 Netduino,我非常兴奋能够探索这个小奇迹的更多内容,尤其令我高兴的是编程语言是 C# 而不是 Python :)
文章包含以下部分:
背景
下方关于物联网概述的文章可以作为理解物联网及其用途的良好入门。
什么是 Netduino?
如果您已经了解 Arduino,那么这个问题的答案很简单。它是一个可以用 .Net 编程的 Arduino。否则,Netduino 是一个基于 .Net Micro Framework 的原型开发平台。它使用 32 位 ARM 微控制器,并兼容大多数 Arduino Shield。
Netduino 有 5 种不同的型号,分别是:
Netduino
Netduino Plus
Netduino Plus 2
Netduino Mini
Netduino Go
以下是前 3 款型号的并排比较表。
组件和特性 | Netduino Plus | Netduino Plus 2 | Netduino Go | |
---|---|---|---|---|
处理器和内存 | 微控制器 | STMicro STM32F2 | STMicro STM32F4 | STMicro STM32F4 |
速度 | 120 MHz (Cortex-M3) | 168 MHz (Cortex-M4) | 168 MHz (Cortex-M4) | |
代码存储 | 192 KB | 384 KB | 384 KB | |
RAM | 60 KB | 100+ KB | 100+ KB | |
操作系统 | .NET Micro Framework 4.2 (或 4.3) | .NET Micro Framework 4.2 (或 4.3) | .NET Micro Framework 4.2 | |
输入与输出 | 网络 | 以太网:10 Mbps | 以太网:10 Mbps | 附加:以太网 Gobus 模块 |
Arduino Shield 兼容性 | 兼容大多数 Arduino Shield | 兼容大多数 Arduino Shield | 附加:Shield Base Gobus 模块 | |
(部分需要 .NET MF 驱动程序) | (部分需要 .NET MF 驱动程序) | |||
数字输入/输出 | 20 GPIO、6 PWM、2 UART、I2C、SPI | 22 GPIO、6 PWM、4 UART、I2C、SPI | 附加:Gobus I/O 模块 | |
(GPIO、PWM、UART、SPI 等) | ||||
模拟输入 | 6 ADC 通道 (12 位) | 6 ADC 通道 (12 位) | 附加:模拟 Gobus 模块 | |
存储 | MicroSD (最高 2 GB) | MicroSD (最高 2 GB) | 附加:SD 卡 Gobus 模块 | |
Gobus 端口 | none | none | 8 Gobus 端口 | |
环境 | 工作温度 | 0 - 70 °C (32 - 158 °F) | 0 - 70 °C (32 - 158 °F) | 0 - 70 °C (32 - 158 °F) |
RoHS | 符合 RoHS 标准 | 符合 RoHS 标准 | 符合 RoHS 标准 |
Netduino Plus 2
我们将深入研究 Netduino Plus 2,并将其用于我们今天的示例。下面是 Netduino Plus 2 板的简图,标注了端口和引脚。
Netduino 是 Netduino Plus 的增量版本,其速度是 Netduino Plus 的 4 倍,即 168 MHz 而非 48 MHz,代码空间和 RAM 也更大,使其成为当时最强大的 Netduino。
该板包含多个部件,下文是对其中一些部件的描述。
处理器/微控制器
Atmel ARM 处理器是主要部件,包含应用程序使用的 RAM 和代码空间。引脚连接到板侧面的蓝色引脚排。这些引脚用于连接外部组件和 Shield。下图是处理器照片。
模拟输入
有 6 个模拟输入引脚,可用于读取任何模拟传感器,测量以下任何一种或更多东西:
- 湿度
- 温度
- 光线
- 压力/力
- 运动
除了作为模拟引脚外,它们还可以充当数字输入/输出引脚。
下面是板上模拟引脚的简图。
数字输入/输出
数字输入输出引脚是处理数字信号作为输入或输出的引脚排。
- 共有 14 个。
- 它们可以连接到按钮、开关、通断传感器等。
- LED、继电器和开关等输出也可以连接到这些排,并进行编程。
- 数字输入输出排能够使用 I2C、SPI、UART(串行)等标准协议进行通信。
- 数字输入输出排也用于发送电脉冲作为输出,以改变电机的速度、光的强度等。
下面是板上数字 I/O 引脚的简图。
以太网
Netduino Plus 2 具有以太网接口,使我们能够将设备连接到网络,无论是本地网络还是互联网。连接到互联网可以打开全新的功能窗口,例如从远程服务器读取数据,或将连接的传感器和设备的数据发布到互联网。这将使我们能够使用 Netduino 构建物联网。
MicroSD
此版本增加了 MicroSD 插槽,可用于插入 MicroSD 卡。该卡可用于存储 Netduino 使用的数据,或者 Netduino 也可以将数据写入卡中以进行本地存储。我们甚至可以将编译好的程序存储在卡上,然后由 Netduino 执行。
LED
板上有两种 LED。
白色 LED 在板通电时亮起,作为电源指示灯。
另一个蓝色 LED 是用户 LED,可以通过 Netduino 上运行的程序进行控制。
幂
Netduino 需要 7.5V 至 12V 的电压,插头具有中心正极。可以使用带 5.5mm x 2.1mm 外径/内径插头的 AC-DC 适配器供电。
万一使用中心负极插头,板上会有集成反向电压保护保险丝。保险丝会在冷却后自动复位。
MicroUSB
- 此端口在板上具有多种功能:
- MicroUSB 端口通过 USB 转 MicroUSB 数据线将 Netduino 板连接到计算机。
- 此端口还可以为板供电。
- 用于将应用程序部署到 Netduino 板并进行交互式调试。
- 很多时候,它还可以用于连接键盘和鼠标等输入设备。
擦除区
这是数字 I/O 引脚排末端的那个小的金色点。它用于完全擦除 Netduino 并从头开始。这样做是为了使该板对黑客友好,以便 Netduino 可以作为 ARM 微控制器开发板进行重新利用。通过将 3.3v 引脚和擦除区之间连接一根线几秒钟来激活擦除功能。
擦除完成后,我们甚至可以在 Netduino 上安装新的操作系统,或者将 C++ 代码写入板上,或者重新从头开始刷写。
按钮
- 板上的按钮默认充当 Netduino 的重启按钮。
- 通常用于重启已部署应用程序的操作。
- 程序也可以将按钮作为输入进行访问,并在按下时执行操作。
- 按下按钮有助于在引导过程中通过按住按钮来使板进入固件更新的编程模式。
Netduino 的 Visual Studio IDE
正如我们已经知道的,Netduino 应用程序是用 C# 语言编写的,而且我们中的许多人已经熟悉了 Microsoft 著名的 Visual Studio IDE 进行开发。可以使用相同的 Visual Studio IDE 创建、运行和调试 Netduino 应用程序。
假设我们已经安装了 Visual Studio,让我们看看还需要安装哪些其他组件才能开始编程 Netduino 应用程序。
-
. .Net Micro Framework SDK
- 此框架使我们能够使用 Visual Studio 为像 Netduino 这样资源受限的嵌入式系统编写托管 C# 应用程序。该框架也是 Microsoft Open Technologies 的开源项目。
- 以下是来自 Microsoft 网站的关于该框架的说明摘录:
“.NET Micro Framework 的用途是什么?
.NET Micro Framework 可用于构建资源受限设备上的嵌入式设备,这些设备运行在只有几百 KB RAM 和存储空间的微控制器上。开发人员可以利用 Visual Studio、C# 和 .NET 知识快速编写嵌入式应用程序,而无需担心每个微控制器的复杂性。开发人员可以购买兼容 .NET Micro Framework 的开发板,将其连接到运行 Visual Studio 的开发计算机,然后开始为物理设备编写应用程序。无需深厚的硬件设计知识即可开始为物理设备编写代码。”
-
安装 .NetMF
- 步骤 1:从 http://netmf.codeplex.com/ 下载最新版本的 .NetMF
- 步骤 2:将 zip 文件解压到本地文件夹。
- 步骤 3:在解压后的文件夹中运行 msi 文件开始安装。
- 步骤 4:仔细阅读条款和条件。
- 步骤 5:选择典型安装类型。
- 步骤 6:安装完成,您可以单击“完成”按钮。
- 下图是上述步骤的 gif 动画。
- 步骤 1:从 http://netmf.codeplex.com/ 下载最新版本的 .NetMF
-
Netduino 软件开发工具包
- 从 http://www.netduino.com/downloads/ 下载 Netduino 软件开发工具包 (SDK)。
- 根据您的配置选择 64 位或 32 位。
- 运行下载的 exe 文件。
- 以“典型”类型完成安装。
- 下图是此过程的 GIF 动画。
示例 1: 编写一个 helloworld 程序来闪烁 Netduino 板上的 LED。
- 创建一个新项目,选择 .Net Microframework 作为项目类型。
- 创建项目后,您应该会看到 program.cs,其中包含 main 方法。
- 输入以下代码来声明输出端口。由于输出端口将是板载 LED,因此我们将代码编写为:
OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
- 现在我们已经声明了输出端口,让我们向该端口写入。LED 状态接受布尔值,设置为 true 时 LED 亮起,设置为 false 时 LED 熄灭。我们将把每 200 毫秒切换一次状态的代码放在一个无限 while 循环中。
while (true) { led.Write(!(led.Read())); Thread.Sleep(250); }
- 现在,让我们连接 Netduino 到电源,并将 micro USB 连接到我们的笔记本电脑,以便我们可以部署我们编写的代码。下图是它的样子。
- 现在选择项目属性 -> .Net Micro Framework 选项卡 -> 将传输设置为 USB。这将把代码部署到连接的 Netduino 并运行它。
- 现在我们已经准备好部署和运行代码了。单击 IDE 上的运行按钮,您将在板上看到以下内容。
恭喜!您已成功在 Netduino 上执行了您的 Hello World 程序。
示例 2: Disco LED
让我们尝试构建一些 LED,它们将按照程序中定义的特定顺序亮起。我们以 8 个 LED 为例。
- 在 Visual Studio 中创建一个项目。
- 声明一个全局变量数组 Output ports 来存储我们的 8 个 LED。
static OutputPort[] leds = new OutputPort[8];
- 现在将引脚分配给数组中的每个 Output port。
leds[0] = new OutputPort(Pins.GPIO_PIN_D2, false); leds[1] = new OutputPort(Pins.GPIO_PIN_D3, false); leds[2] = new OutputPort(Pins.GPIO_PIN_D4, false); leds[3] = new OutputPort(Pins.GPIO_PIN_D5, false); leds[4] = new OutputPort(Pins.GPIO_PIN_D6, false); leds[5] = new OutputPort(Pins.GPIO_PIN_D7, false); leds[6] = new OutputPort(Pins.GPIO_PIN_D8, false); leds[7] = new OutputPort(Pins.GPIO_PIN_D9, false);
- 编写一个方法来依次点亮一个 LED。
static void oneOnAtATime() { int delayTime = 100; for (int i = 0; i <= 7; i++) { int offLED = i - 1; if (i == 0) offLED = 7; } leds[i].Write(true); leds[offLED].Write(false); Thread.Sleep(delayTime); } }
- 在 main 函数中使用无限循环调用该方法。
while (true) { oneOnAtATime(); }
- 现在,让我们准备电路。
- 我们需要以下物品来完成设置:
电阻 – 8 个 (300 至 500 欧姆)
LED – 8 个
导线
面包板
- 将面包板的负极连接到 Netduino 的 5V 引脚。
- 将面包板的负极连接到 Netduino 的 GND 引脚。
- 现在将 8 个电阻从负极连接到面包板的水平行。
- 现在将 8 个 LED 的负极(短引脚)连接到电阻末端的同一行,将长引脚连接到下一行。
- 从 LED 长引脚所在的同一行连接 8 根导线到引脚 2 至 9。
- 电路应该看起来像这样。
- 现在让我们运行代码,您应该会看到以下效果。
我真的很想写更复杂的示例并加以解释,但已经是周日晚上了。但我会将剩下的实验交给你们,并承诺很快会添加更多示例。
保重,祝您与 Netduino 旅途愉快! :)