通过NET Micro Framework测量温度、GPS、振动并设置警报






4.96/5 (36投票s)
如果您懂C#或VB,您就可以通过安装NET Micro Framework并购买兼容板(F)来学习一种理想且简单的方法,以监控您的环境状况(测量温度、湿度、GPS坐标位置、振动)并设置警报(打开或闪烁LED、蜂鸣器等)。
物联网竞赛第二阶段 - 前言
物联网(IoT)使我们的世界连接起来成为可能。如今,我们几乎到处都有互联网基础设施,并且可以随时使用。嵌入式计算设备将受到互联网的影响。嵌入式计算设备的常见实例包括MP3播放器、MRI、交通信号灯、微波炉、洗衣机和洗碗机、GPS甚至心脏监测植入物或生物芯片等。
现在重要的问题是,如何使用尖端技术来改进物联网开发及其性能,我的意思是,如何通过WIFI、高级语言以及在编写代码和配置复杂设备时减少混淆来简化物联网。有没有办法购买兼容板,然后使用C#或VB在.NET平台上编写代码,最终达到您的目的?
您的目的
通过在兼容板上安装免费开源的.NET Micro Framework,使用C#或VB在.NET平台上编写代码,测量温度、湿度、振动、GPS坐标位置,并在其值超出预期时显示警报。
引言
为什么选择.NET Micro Framework(NETMF)
优点
- 如果您想以传统方式构建系统和编写代码,那么您必须花费大量时间学习低级语言,而在这里,使用NETMF,您只需要了解C#,然后熟悉硬件目录即可。
- 传统方式需要微控制器的编译器,而在这里,您可以自由地在当前的.NET(Visual Studio 2010、2012、2013)上安装NETMF。
- NETMF是开源的。
- 您的代码可以在NETMF兼容设备范围内的其他设备上运行。
- NETMF调试与.NET调试一样简单。
缺点
- NETMF支持C#或VB.NET等高级语言,因此可能比汇编语言等低级语言慢。
要求(总计)
1. 硬件:您将通过此设备管理和控制环境的物理板。
- 板: (您应该从商店购买其中一个选项,并阅读它们的使用教程,了解如何运行它并将其与您的计算机连接,因为它们有不同的版本)
- GHI Electronics: https://www.ghielectronics.com/
- 简单板(红色):
- .NET Gadgeteer(黑色): http://www.ghielectronics.com/products/dotnet-gadgeteer
- Netduino: http://www.netduino.com/
- GHI Electronics: https://www.ghielectronics.com/
- USB电缆
2. 软件:
-
Visual Studio 2010, 2012, 2013: http://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx
-
.NET Micro Framework SDK(4.3): https://netmf.codeplex.com/releases/view/118283
NET Micro Framework (NETMF) 安装步骤
NETMF安装步骤0(重要提示)
您应该从计算机中删除并卸载任何以前版本的.NET Micro Framework,以防止系统中发生任何冲突。
NETMF安装步骤1
访问此链接: https://netmf.codeplex.com/releases/view/118283 。
然后点击SDK 4.3 (RTM QFE1) -> 下载NET Micro Framework。
NETMF安装步骤2
现在它将被放置在您的本地驱动器(C:\.... 或 D:\.....)中 -> 然后右键点击这个“zip”文件并解压它。
NETMF安装步骤3
双击解压后的文件并运行它。
NETMF安装步骤4
这是“欢迎页面”——>点击“下一步”
NETMF安装步骤5
点击“我接受..” -> 然后点击“下一步”
NETMF安装步骤6
点击“完整选项” -> 然后点击“下一步”
NETMF安装步骤7
现在是点击“安装”的时候了。
NETMF安装步骤8
等待完成...
NETMF安装步骤9
点击“完成”。现在您已经成功在您的.net上安装了NETMF。
在NETMF上运行简单代码以进行测试
NETMF运行测试步骤1
新建项目:打开您的Visual Studio 2012或2013 --> 文件(菜单)--> 新建 --> 项目
NETMF运行测试步骤2
在左侧选择您的语言 -> 选择Micro Framework -> 选择控制台应用程序
命名您的项目,确定位置和解决方案名称 -> 点击“确定”
NETMF运行测试步骤3
现在从您的解决方案窗口中选择“Program.cs” -> 在Main()内部(您从Main()开始做任何事情)
编写简单的代码,仅用于在控制台上显示,以确保一切正常。
在控制台上显示简单文本的示例代码
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using Microsoft.SPOT.IO;
using System.IO;
using System.IO.Ports;
using System.Text;
using System.Runtime.CompilerServices;
using Microsoft.SPOT.Presentation.Media;
using System.Diagnostics;
namespace MFConsoleApplication1
{
public class Program
{
public static void Main()
{
Debug.Print("This is first project on NETMF");
}
}
}
NETMF运行测试步骤4
当您遇到NETMF时,您有两种选择来在“模拟器”或“设备”上运行您的项目。现在您应该测试您的NETMF是否正常工作,所以让我们选择“模拟器”模式而不是任何设备或开发板。
在“解决方案资源管理器”中右键点击项目名称 -> 选择“属性”
NETMF运行测试步骤5
首先在左侧选择“.NET Micro Framework” -> 传输:模拟器 & 设备:Microsoft模拟器
勾选“为内部方法生成原生存根”
NETMF运行测试步骤6
要查看输出窗口中的结果:转到“视图”(菜单)-> 选择“输出”
NETMF运行测试步骤7
构建您的项目:转到“构建”(菜单)-> 选择“构建解决方案”
NETMF运行测试步骤8
按“F5”或“启动”(绿色按钮)运行
NETMF运行测试步骤9
如果您无法看到输出结果 -> 转到:“工具”(菜单)-> “导入和导出设置”
NETMF运行测试步骤10
选择“导出选定的环境设置”
NETMF运行测试步骤11
选择“导入和导出设置”
NETMF运行测试步骤12
不要做任何更改,点击“完成”
NETMF运行测试步骤13
现在再次运行您的项目“F5”或按“开始”,您将看到如下图所示。
您将在此处看到您的文本“This is first project on NETMF”
NETMF运行测试步骤14
调试: NET MF中的调试与.NET平台一样简单。点击我画出“红线”以指向红色圆圈的左侧 ——>然后运行项目“F5”——>通过代码按“F11”——>您可以使用“调用堆栈”、“即时窗口”、“局部变量”、“监视”
按“F11”
设置设备PC步骤
提示:您不应通过摩擦身体或任何物体在您的板上产生静电,以避免使您的板放电。
在PC上设置设备步骤1:“红板”
在本节中,我只解释了GHI Electronics设备(FEZ),如需更多信息,请访问: https://www.ghielectronics.com/docs/230/netmf-processor-setup
有两种类型:第一种是红板——>您应该将USB电缆从计算机连接到黑板。
在PC上设置设备步骤2:“黑板”或“Gadgeteer”
第二种是黑板,称为“Gadgeteer”——>您应该将电线从黑板(“Gadgeteer”)连接到红板上标有“D”的 插座——>然后通过USB电缆将您的PC连接到红板
在PC上设置设备步骤3:“等待加载驱动程序”
Fez Config:您将看到一个类似这样的窗口——>选择“USB”和设备名称:“X”——>然后点击“检查更新”
在PC上设置设备步骤4:“MFDeploy”
实际上,“NETMF SDK”来自“MFDeploy”,在这里它帮助我们检查设备是否正确连接。
转到:开始 -> 选择“.Net Micro Framework Deploy”
您应该看到“确认消息”,其中包括:“正在ping... TinyCLR” -> 所以现在一切都正常了。
在PC上设置设备步骤5:“从模拟器模式转换为设备模式”
在解决方案资源管理器中右键单击项目名称 -> 选择“属性”
在左侧选择“.NET Micro Framework” -> ( 传输 = USB ) & ( 设备 = 您的设备名称 )
安装 Gadgeteer 步骤
在PC上安装Gadgeteer步骤1:
如果您的设备属于如下图所示的“黑板”,则必须安装“Gadgeteer”。
转到: https://gadgeteer.codeplex.com/releases/view/119122
在PC上安装Gadgeteer步骤2
解压zip文件并运行.exe
允许其安装并等待完成。
所需程序集步骤
所需程序集步骤1:
在解决方案资源管理器中 -> 右键点击References文件夹 -> 选择“添加引用”
所需程序集步骤2:
现在您需要这些选定的引用,选择它们并点击“确定”。
所需程序集步骤3:
将这些引用添加到您的“program.cs”中
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using Microsoft.SPOT.IO;
using System.IO;
using System.IO.Ports;
using System.Text;
using System.Runtime.CompilerServices;
using Microsoft.SPOT.Presentation.Media;
using System.Diagnostics;
开启和闪烁LED步骤
开启LED步骤1:
仔细阅读您的板上的目录或任何指导性文本。 如果它提到
(输出引脚可以是“0”或“1”状态)
“此板由3.3V供电” -> 引脚设置为“1”时,输出引脚有约3.3V (接近3.3V)
-> 引脚设置为“0”时,输出引脚有约0V (接近0V)
开启LED步骤2:
FEZ板有LED引脚。现在我想编写一个示例代码来完全开启LED或FEZ板上的LED。
欲了解更多信息,请参阅: http://www.ghielectronics.com/downloads/FEZ/Beginners%20guide%20to%20NETMF.pdf
开发人员使用“Thread”在代码中创建中断(尽管只是一个非常简单的描述)。这里我使用了Thread.Sleep(Timeout.Infinite);——>它导致LED无限亮着。如果您根据毫秒插入值,这个LED将闪烁。
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using Microsoft.SPOT.IO;
using System.IO;
using System.IO.Ports;
using System.Text;
using System.Runtime.CompilerServices;
using Microsoft.SPOT.Presentation.Media;
using System.Diagnostics;
namespace MFConsoleApplication1
{
public class Program
{
public static void Main()
{
OutputPort <code>LED</code>;
<code>LED</code> = new OutputPort((Cpu.Pin)4, true);
Thread.Sleep(Timeout.Infinite);
}
}
}
或者通过将“GHIElectronics”添加到您的引用并编写
using System;
using Microsoft.SPOT;
using System.Threading;
using Microsoft.SPOT.Hardware;
using GHIElectronics.NETMF.FEZ;
namespace MFConsoleApplication1
{
public class Program
{
public static void Main()
{
OutputPort <code>LED</code>;
<code>LED</code> = new OutputPort((Cpu.Pin)FEZ_Pin.Digital.LED, true);
Thread.Sleep(Timeout.Infinite);
}
}
}
闪烁LED步骤1:
using System;
using Microsoft.SPOT;
using System.Threading;
using Microsoft.SPOT.Hardware;
using GHIElectronics.NETMF.FEZ;
namespace MFConsoleApplication1
{
public class Program
{
public static void Main()
{
OutputPort LED;
LED = new OutputPort((Cpu.Pin)FEZ_Pin.Digital.LED, true);
while (true)
{
LED.Write(!LED.Read());
Thread.Sleep(300);
}
}
}
}
使用NETduino测量温度步骤
如需更多信息,请参阅: http://forums.netduino.com/index.php?/topic/1008-analog-in-put-c-coding/
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
namespace NDP_SocketSender1
{
public class Program
{
public static void Main()
{
AnalogInput a5 = new AnalogInput(Pins.GPIO_PIN_A5);
while (true)
{
string s = a5.Read().ToString();
Debug.Print(s);
Thread.Sleep(200);
}
}
}
}
使用FEZ测量振动步骤
如需更多信息,请参阅: https://www.ghielectronics.com/community/forum/topic?id=4013
您可以测量振动以设置警报,您需要“ 压电换能器,30Vp-p ”
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using Microsoft.SPOT.IO;
using System.IO;
using System.IO.Ports;
using System.Text;
using System.Runtime.CompilerServices;
using Microsoft.SPOT.Presentation.Media;
using System.Diagnostics;
using GHIElectronics.NETMF.FEZ;
namespace MFConsoleApplication1
{
public class Program
{
public static void Main()
{
OutputPort led = new OutputPort((Cpu.Pin)FEZ_Pin.Digital.LED, ledState);
GHIElectronics.NETMF.Hardware.AnalogIn analog= new GHIElectronics.NETMF.Hardware.AnalogIn(GHIElectronics.NETMF.Hardware.AnalogIn.Pin.Ain0);
analog.SetLinearScale(-512, 512);
int MaxVibration = 0;
int analog_Value=0;
while (true)
{
Thread.Sleep(50000);
MaxVibration = 0;
for (int Count = 0; Count < 1000; Count++)
{
analog_Value = analog.Read();
analog_Value = System.Math.Abs(analog_Value);
if (MaxVibration < analog_Value)
{
MaxVibration = analog_Value;
}
}
if (MaxVibration > 100)
{
led.Write(true);
}
else
{
led.Write(false);
}
}
}
}
}
使用NETduino测量GPS的步骤
如需更多信息,请查阅
http://bobcravens.com/2010/09/gps-using-the-netduino/
http://forums.netduino.com/index.php?/topic/37-yet-another-supported-shield-question-gps/
using System;
using System.IO.Ports;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
using System.Text;
using System.Runtime.CompilerServices;
using Microsoft.SPOT.Presentation.Media;
using System.Diagnostics;
namespace MFConsoleApplication1
{
public class Program
{
public static void Main()
{
SerialPort serialPort = new SerialPort("COM1", 4800, Parity.None, 8, StopBits.One);
serialPort.Open();
OutputPort powerPin = new OutputPort(Pins.GPIO_PIN_D2, false);
while (true)
{
int bytesToRead = serialPort.BytesToRead;
if (bytesToRead > 0)
{
// waiting ........
byte[] buffer = new byte[bytesToRead];
serialPort.Read(buffer, 0, buffer.Length);
// print out our received data
Debug.Print(new String(System.Text.Encoding.UTF8.GetChars(buffer)));
}
Thread.Sleep(100); // wait ......
}
}
}
}
Netduino外形
GPS扩展板
参考文献
http://www.netmf.com/get-started/
https://www.ghielectronics.com
反馈
请随时对本文提供任何反馈;很高兴看到您的评论和投票。如果您有任何问题,请随时在此处提问。