基于.net平台的Wi-Fi开发板——netduino3 Wi-Fi评测
扫描二维码
随时随地手机看文章
物联网很火!
不管你关不关心,愿不愿意,物联网都在慢慢的改变我们的生活。今天的32位微控制器(MCU)已具备了足够的能力处理一些简单的任务包括实时级别的处理。像STM32类型的MCU,对于大部分的外设信息处理已游刃有余,所以在物联网的应用中,只要给他一个网络接口,物联网就不再只是概念,哪怕是作为菜鸟的你,也能第一时间感受物联网的魅力,体验物联网的神奇!
Netduino就是这样一款开发板,为MCU插上网络的翅膀,带你遨游物联网的世界!
Netduino 3 Wi-Fi是netduino的第三代产品,硬件开源。Netduino 3 Wi-Fi开发板使用STM32F427VI作为主控,同时使用TI CC3100作为网络接口,提供网络访问能力。
贸泽电子(Mouser Electronics)近日宣布,开始分销Netduino3电子平台,能够使商业硬件解决方案和个人电子项目快速上市,同时提供了最大的设计灵活性并降低了风险。
Netduino 3 Wi-Fi的产品包装没有包装盒,打开快递包裹,欣赏下来自遥远的MEMPHIS, TN的产品。
图1:开箱
什么叫环保,连包装盒都省了,算不算环保。打开外面的塑封袋,里面是一根Micro USB转USB Type A数据线,用来配置及调试开发板。加上防静电袋封得严严实实的Netduino 3 Wi-Fi开发板。
图2:防静电包装
拆拆拆,打开防静电包装袋,Netduino 3 Wi-Fi终于出现了。
图3:netduino 3 Wi-Fi
整体黑色的PCB板,配上蓝色的Arduino兼容接口及GoBUS接口,整体感觉不错,至于GoBUS是什么,后面会简单科普一下,先不管它。除了板子及USB数据线,还附送一根GoBUS连接线,用来连接GoBUS外围设备。
Netduino 3 Wi-Fi开发板尺寸虽小(3.3”X 2.1”),还是提供了一些基本的外设,主要的几个部件包括:STM32F427VI MCU,TI CC3100无线模块,一个Micro SD卡槽以及Arduino UNO R3兼容接口,还有三个LED指示灯,用来指示开发板的不同状态。
图4:netduino 3 Wi-Fi主要资源
供电接口两个,一个是标准的DC接口,物理规格为5.25/4.7mm,内正外负,可以使用外部7.5-12 VDC给开发板供电。另外还可以使用Micro USB接口来给开发板供电,经电压调节器调节后可以输出标准5V/3.3V输出。每个引脚提供的最大电流约25mA,但整体电流值不能超过125mA。Micro USB接口除了可以给开发板供电外,还可以用来配置开发板及作软件调试之用。
图5:DC及USB
TI CC3100模块用来提供无线网络连接功能,支持802.11b/g/n无线网络,使用2.4Ghz频段,最高可以支持300Mb的接入速度。模块支持流行的网络安全标准如WEP及WPA2等;除此之外,还支持SSL 3.0及TLS 1.2的加密功能。而网络协议栈则是Netduino.IP hybrid,这是一个混合网络协议栈。
图6:TI CC3100无线模块
Arduino UNO R3兼容接口提供了与Arduino兼容的接口,然此接口非彼接口,因为低层使用的是STM32F427VI MCU,所以这些接口实际上是连接到STM32 MCU的相关引脚,具体情况请参阅STM32F427VI数据手册。虽然底层的实际情况不同,但只要是兼容的外设或扩展板,都能在软件的支持下,实现真正意义上的兼容。
STM32F427VI作为开发板的实际控制者,用来执行用户设定的各种指令序列。这是一款高性能的MCU,基于Cortex-M4内核,最高主频达168Mhz,内置FLASH/SRAM存储容量分别为1408KB/164+KB。处理能力强劲,内存容量也足够大,加上还支持单精度浮点运算,对于一般应用应是得心应手。
图7:STM32F427VI MCU
不过略为不足的是SD卡的容量,按照官方的说明,最大只支持2GB的容量。
GoBUS是什么?引用一段官方的原话:
You asked for a Netduino with more speed, more flash, and more RAM.
You asked for a Netduino with more GPIOs, more serial ports, more analog inputs, and more PWMs.
……
Today, we introduce a Netduino with more speed, flash, and RAM. And a Netduino with support for more GPIOs, serial ports, analog inputs, and PWMs. And today, we introduce a plug-and-play Netduino.
Best of all, these are all the same board.[!--empirenews.page--]
说白了,这是一种新的接口,给你更多的扩展接口,更快的速度,当然,前提条件是你的设备得符合go的要求!官方已提供了部分外设供选用。下面是一个使用GoBUS设备的效果图
图8:Go设备及连接
单从硬件方面来说,netduino 3 Wi-Fi算是配置非常合理。但它另一个有趣的地方是它的软件开发环境,这是一款基于.net平台的开发板!
说它有趣,是因为在嵌入式领域,差不多一直都是C的天地,C++有,但亦不多,这下C#程序员是不是要欢呼了!终于赶上了嵌入式的春天?当然还有Visual Studio这个最优秀的IDE。
都说喜欢一个东西不需要理由,但排斥一个东西则必定有它的理由。至少对我来说是这样子,Arduino是一个好东西,但它那个IDE实在太复古!
没错,netduino使用的平台就是.net,IDE就是Visual Studio。这对于C#工程师来说真是得心应手。所以在我们正式体验netduino 3 Wi-Fi之前,先来准备必要的开发环境。
首先安装Visual Studio,从微软的官方下载软件,推荐下载免费好用的社区版。虽然官方推荐的是Visual Studio 2013,咱还是喜欢用比较新的产品,下个VS2015吧,然后安装,next, next…。
图9:安装Visual Studio 2015社区版
接下来要安装.Net Micro Framework框架。开发人员可以在低功耗,低成本的ARM7,Cortex-M3及ARM9和Blackfin处理器上使用该框架(不需要MMU),所开发出来的软件仅需要几百Kbytes的RAM或Flash/ROM的存储空间。.NET Micro Framework技术可以应用到Windows Vista Sideshow、远程控制、智能家电、医疗电子、零售终端以及汽车电子等行业应用场景。因为.Net Micro Framework功能强大,并且能从C#.Net的PC开发快速进入,它几乎适用于所有嵌入式场合。支持.Net Micro Framework的产品成本。从http://netmf.codeplex.com/下载最新的软件,当前版本是V4.4。
图10:安装.NET Micro Framework
接下来要安装的.Net MF plug-in,这是一款插件,用来管理.Net MF。
最后要安装的就是netduino的SDK程序包了,这是netduino的底层封装,用于支持netduino系列硬件。
图11:安装Netduino SDK
这些都安装好后,实际连同netduino的硬件驱动也安装好了。现在可以上电,看看都有些什么好玩的东西。
使用附带的USB线连接开发板和netduino 3 Wi-Fi。因为可以使用USB接口给开发板上电,所以这时候开发板实际已经开始工作了。
不过这里有几点要注意的地方,一是要确认硬件驱动已安装并工作正常,因为接下来的体验就是编程及调试了。另外一个问题是如果在WINDOWS 10下开发的话,还要安装.net 3.5 sp1这个补丁包,否则在后面编程代码的时候通不过。笔者在这个上面折腾了很久,最后也是在官方论坛上爬文才找到的答案,现在免费将经验传授给你,不谢!
打开PC的设备管理器,确认netduino设备的存在。
图12:Netduino设备驱动
如果没有问题了,接下来就是写个简单的程序测试下。
启动Visual Studio,先new一个工程,按如下设置
图13:新建工程文件
待工程生成以后,打开项目管理器里的program.cs文件,这就是程序的代码文件了,先添加一点简单的逻辑,实现LED灯的闪烁功能,顺带体验一下netduino的开发流程。
在program.cs里添加代码,修改后完整的源文件内容如下
namespace NetduinoLED
{
public class Program
{
public static void Main()
{
// write your code here
OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
while (true)
{
led.Write(true);
Thread.Sleep(500);
led.Write(false);
Thread.Sleep(500);
}
}
}
}[!--empirenews.page--]
上面的代码很简单,和使用其它编程工具如MDK相比较而言,可以看出逻辑基本是一样的,设定一个GPIO端口,然后反复写入0和1,实现LED灯的闪烁。
现在来将代码写入到netduino 3 Wi-Fi开发板,看它会不会动。先设置工程的属性,使得可以正确将代码下载到开发板。打开工程文件的属性对话框,作如下设置
图14:配置工程文件
如果设置无误,就可以开始下载代码到开发板了。点击IDE工具栏上的Start按钮,就会编译代码并将它下载到开发板,稍微等几秒后,应该可以看到开发板上的LED灯开始了。
作为一款Wi-Fi开发板,怎能少得了网络功能的体验呢?接下来,咱们体验一下网络应用,建立一个小小的Web服务器,然后通过网络来控制板载的LED灯的亮和灭。仍然按照前面介绍的方面,建立一个新的工程WebServer,设定相关的参数。在Program.cs文件中添加如下代码
public class Program
{
public static void Main()
{
// write your code here
OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
int port = 80;
Thread.Sleep(8000);
Microsoft.SPOT.Net.NetworkInformation.NetworkInterface
networkInterface =
Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.
GetAllNetworkInterfaces()[0];
Debug.Print("my ip address: " + networkInterface.IPAddress.ToString());
Socket listenerSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
IPEndPoint listenerEndPoint = new IPEndPoint(IPAddress.Any, port);
Debug.Print("setting up socket");
listenerSocket.Bind(listenerEndPoint);
listenerSocket.Listen(1);
Debug.Print("listening");
while (true)
{
Debug.Print(".");
Socket clientSocket = listenerSocket.Accept();
bool dataReady = clientSocket.Poll(5000000, SelectMode.SelectRead);
if (dataReady && clientSocket.Available > 0)
{
byte[] buffer = new byte[clientSocket.Available];
int bytesRead = clientSocket.Receive(buffer);
string request =
new string(System.Text.Encoding.UTF8.GetChars(buffer));
Debug.Print(request);
if (request.IndexOf("ON") >= 0)
{
led.Write(true);
}
else if (request.IndexOf("OFF") >= 0)
{
led.Write(false);
}
string statusText = "LED is " + (led.Read() ? "ON" : "OFF") + ".";
string response =
"HTTP/1.1 200 OK\r\n" +
"Content-Type: text/html; charset=utf-8\r\n\r\n" +
"" +
"" + statusText + "";
clientSocket.Send(System.Text.Encoding.UTF8.GetBytes(response));
}
clientSocket.Close();
}
}
}[!--empirenews.page--]
这是一段简单的基于Socket通信的代码,服务器监听80端口,等待用户请求,根据请求的内容决定打开还是关闭板载的LED灯。嗯,这已经具备了物联网的基本特征,通过网络通信来采集或控制远程传感器的数据。
不过你也许会有疑惑,TI CC3100模块是如何连接到我的路由器并获取相应的IP地址的呢?问得好,确实咱们还有一个重要的步骤没有介绍,就是配置无线访问的参数。netduino 3 Wi-Fi的网络配置专门有一个程序来负责,这是一个独立的程序,包含在.Net Micro Framework中,打开Windows的开始菜单,在.Net Micro Framework程序组下有一个叫作.Net Micro Framework Deplay Tool的程序项,打开这个程序,在Device选项的下拉列表里面选择“USB”,会出现一个Netduino3_Netduino设备,然后点击Target菜单里面的connect命令,连接netduino设备。然后打开Target菜单下的Configuration/Network选项,会弹出一个对话框,
图15:配置网络
按上图中的参数进行设置,注意用你自己的路由器SSID及密码替换上图中的Pass phrase及SSID参数,然后点击update按钮,这样对网络的配置就算完成了。
需要注意的,在配置好网络参数之后,这些配置不会立即生效,需要等你下载代码到开发板或重新上电后,这些配置才会生效。另外目前暂不提供通过代码来配置网络参数,不过官方论坛已放出消息,正在完善这一功能,相信不久就可以实现在代码中配置网络的功能。
接下来就可以体验网络功能了,下载代码到开发板,注意Visual Studio中Output窗口的输出信息,大致如下
The thread '
The thread '
my ip address: 192.168.2.102
setting up socket
listening
表明TI CC3100已正确获取到IP地址,并且打开了一个监听窗口。现在打开浏览器,在地址栏内输入http://192.168.2.102/ON,然后回车,浏览器给出”LED is ON.”的信息,同时开发板的LED灯点亮。相应的,在地址栏内输入http://192.168.2.102/OFF,然后回车,出现如下信息,同时开发板上的LED灯会熄灭。
图16:WEB版远程控制
当然,更多更有创意的应用,将随着你对netduino 3 Wi-Fi的熟悉而逐渐浮现。现在,你与物联网大牛仅仅只有一步之遥!
netduino 3 Wi-Fi开发板为你打开了物联网探索与应用之门!板载STM32F427 MCU,最高168Mhz的运行频率及较大的内存组合使得开发物联网应用不必担心硬件资源的不足,加上TI CC3100模块,网络访问时不必添加三方网络模块,即刻体验网络控制与采集信息的便利,一句话,STM32F427+TI CC3100可谓黄金组合。另外不得不提一下GoBUS,单从设计理念来看,无疑是一个非常实用的功能,硬件扩展从此变得更加容易,不仅仅是物理连接更容易,软件开发也变得更轻松。
软件方面使用.Net平台,可以使用所有支持.Net平台的语言如C#、VB进行程序开发,至于底层的细节,无需关心。而你,只需要关注程序的功能及逻辑,一切都尽在掌握!在这里,你不会看到一般MCU开发中的一些繁琐操作,如时钟树的配置,底层的中断等硬件细节;你也无需考虑是否要采用RTOS来简化程序逻辑,甚至RTOS的移植等!这一点上与Arduino甚为相似,只不过相对Arduino的简单处理,.Net更是一个完善的平台。
略为美中不足的是TI CC3100,根据官方的说法:
The CC3100 module can handle 8 simultaneous unsecure sockets plus 2 simultaneous secure sockets.
参考资源:
本文系21ic原创,未经许可禁止转载





