65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (36投票s)

Nov 9, 2014

CPOL

8分钟阅读

viewsIcon

55674

downloadIcon

425

如果您懂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)

优点

  1. 如果您想以传统方式构建系统和编写代码,那么您必须花费大量时间学习低级语言,而在这里,使用NETMF,您只需要了解C#,然后熟悉硬件目录即可。
  2.  传统方式需要微控制器的编译器,而在这里,您可以自由地在当前的.NET(Visual Studio 2010、2012、2013)上安装NETMF。
  3. NETMF是开源的。
  4. 您的代码可以在NETMF兼容设备范围内的其他设备上运行。
  5. NETMF调试与.NET调试一样简单。

缺点

  • NETMF支持C#或VB.NET等高级语言,因此可能比汇编语言等低级语言慢。

要求(总计)

1.  硬件:您将通过此设备管理和控制环境的物理板。

2. 软件:

 

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

http://netduino.com/

http://netmf.codeplex.com/

 

 

 

反馈

请随时对本文提供任何反馈;很高兴看到您的评论和投票。如果您有任何问题,请随时在此处提问。

© . All rights reserved.