独家抢先:AGENT 智能手表模拟器,在我的手腕上托管.NET代码

[原文发表地址] Exclusive Sneak Peek: The AGENT Smart Watch Emulator and managed .NET code on my wrist! 

[原文发表时间] 2013-06-18

fdb2fb7679c4e17b878172640d852fa9_large_3

我对于智能手表非常的痴迷。从以前的Microsoft SPOT watch(那已经是10年前的产品了)到Pebble,再到现在SecretLabs推出的这款AGENT 智能手表,我可都是忠实的粉丝。Secret Labs是给我们带来Netduino的开源电子平台的那些人,这一平台使用.NET Micro框架。它的神奇之处在于你可以用它进行C#编程,无论是在64k还是64gigs的内存中,它都能运行的畅通无阻。

即将开始的会议:如果你今年七月正好在芝加哥附近,你可以考虑加入Chris Walker(来自SecretLabs)和我,一起去参加MonkeySpace会议!我们会在会议上探讨关于嵌入式系统开发和用C#开发AGENT 手表的一些细节。比如:关于电源的注意事项有哪些?这种编码的级别有多低?一种应用太耗电另一种能够使手表坚持一周吗?通知和蓝牙功能又是怎样呢?我们将会讨论以上所有的内容以及更多,快来加入我们吧!d077ee7030305ec8e20d8b32fc3d221c_large_3

对AGENT 智能手表的投资正打算再增加10万美元,其实在写这篇文章的时候,他们已经为这款手表花费了将近一百万美元!通过Kickstarter网站来实现目标只是时间问题。(记住:Kickstarter网站的宗旨是投资而不是存储)。

AGENT 手表模拟器不仅是运用了.NET Micro框架的一个设备,我们还可以用它来编写应用程序,下面是从他们的

Kickstarter站点了解到的:

传统智能手表的应用程序运行在一个无管制的环境中,而AGENT的操作系统则有一个托管运行库,这优化了我们低功率的框架结构——.NET Micro框架,它使得智能手表的应用变的更加值得信赖。

功能丰富的托管运行库还提供给开发者他们所希望的一些目前非常流行的能:基于事件的程序设计;多线程处理;资源回收;拉姆达表达式;异常处理;自动电源管理;以及更多其它功能。

你可以安装VS2012和.NET Micro Framework 4.3,现在甚至可以在你的“手腕上”用C#来编写应用程序!我在我的Xamarin talk中曾经稍微提到过“C#怎样挽救了我的婚姻”。它使你可以在嵌入式系统、手表、平板电脑、台式电脑、网站、大型的云系统等很多平台上编写.NET应用。

全面公开: 我并没有SecretLabs的金融股份,也没有和他们有什么业务关系,但是我们是朋友并且我还是他们的粉丝。我帮助Chris在Kickstarter的网页上做一些文案撰写的工作,还帮他查看一下视频什么的。我不仅没有从SecretLabs拿到过钱,而且还用自己的钱支持Kickstarter。image_3

我已经看到过AGENT Smart Watch模拟器的预览, 还从Kickstarter网站支持者Esben Bast那里看到了一些他创建的二进制时钟面盘。另外我还加载了VS2012和二进制时钟模拟器的代码。这些初始代码只有100行左右。你可以在VS的Solution Explorer里看到一些引用。SPOT 是 "Smart Personal Object Technlogy"的缩写,意思是个性化智能定制术。事实上有的模拟程序非常的庞大。但是也不用担心看不到或看不全!Agent Watch SDK在我的注册表里放置了一个对AGENT模拟器的引用,可以在Visual Studio里直接打开程序:

image_8

接着我不用到手表就可以调试我的手表应用程序了,就像编写手机应用或者网站一样。这是我在VS里的第一个类。它让我强烈感到作为一个.NET开发人员所拥有的权利,因为它意味着我已经知道怎样去为这个手表编写应用程序了, 而这种感觉在之前从来没有过……

clip_image004

这个代码对于水平比较低的人来说也非常浅显易懂。这是我们正在探讨的小型元件。

如果你已经完全掌握了哪些内容能在手表屏幕上显示,你就可以用位图去绘制任意一个你能想象的出的表盘(前提是得适合屏幕)。.NET Micro框架没有默认加载的字体,但是我们可以把它们作为资源包含进去。有一些"tinyfnt"文件保存在C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.3\Fonts文件夹中,或者可以下载或者自己制作字体。更好的方法是利用Miloush提供的TinyFontTool

我可以从资源库中加载一个下面这样的字体:

    1: font = Resources.GetFont(Resources.FontResources.small);

然后在我的UpdateTime()方法中,在我的二进制表盘上绘制时间。

    1: _bitmap.DrawText(DateTime.Now.ToString("HH:mm:ss"), font, Color.White, 45, 15);

再次运行我的模拟器,就可以看到时间显示在屏幕上了!

image_11

在代码中运用"microframework-ism"的真正意义在于降低表盘的耗电量。表盘会“去睡觉”,就好像你正在编写一个控制台程序,如果你的主函数结束了,你的应用也会跟着结束!但是既然是一个表,我们就希望它能一直不停的运行,于是我们启动了一个一秒定时装置,接着主程序就永远的进入了休眠状态。而作为事件的一切有趣的事情在后台线程中继续发生。(这个表可以控制程序的生存期和终止时间,或者在你做其他事情的时候关闭表盘的显示)。

    1: public static void Main()
    2: {
    3:     _bitmap = new Bitmap(Bitmap.MaxWidth, Bitmap.MaxHeight);
    4:     _font = Resources.GetFont(Resources.FontResources.small);
    5:  
    6:     // display the time immediately
    7:     UpdateTime(null);
    8:  
    9:     // set up timer to refresh time every minute
   10:     DateTime currentTime = DateTime.Now;
   11:     TimeSpan dueTime = new TimeSpan(0); // beginning of next minute
   12:     TimeSpan period = new TimeSpan(0, 0, 0, 1, 0); // update time every minute
   13:     _updateClockTimer = new Timer(UpdateTime, null, dueTime, period); // start our minute timer
   14:  
   15:     _button = new InterruptPort(HardwareProvider.HwProvider.GetButtonPins(Button.VK_SELECT), 
   16:         false, 
   17:         Port.ResistorMode.PullDown, 
   18:         Port.InterruptMode.InterruptEdgeBoth);
   19:     _button.OnInterrupt += _button_OnInterrupt;
   20:     // go to sleep; time updates will happen automatically every minute    
   21:     Thread.Sleep(Timeout.Infinite);
   22: }

最后一部分非常有意思。你已经有两个事件句柄,一个用来每秒更新一次时间,另一个则去监视按钮被按下的动作。如果你想使你的手表的应用程序被事件驱动……它几乎不需要做任何事情,直到时间告诉它该做些什么了。InterruptPort会监听中间的那个按钮(VK_SELECT button)。ResisterMode.PullDown方法能使按钮在被按下时显示“1”或者true InterruptEdgeBoth方法则控制了当按钮被按下或弹起时,事件被触发的边界值。

制作手表应用程序!

在Big Digits样例旁边的是Dylan Mazurek做的另外一个很酷的表盘:

image_14image_17

最后是Steve Bulgin给Pete Brown和另一个Steve概念做的世界时间的动画概念表盘:

clip_image008

接下来我们将不会再局限于表盘设计,而是要开始考虑手表使用和应用程序的设计。可能会让手表成为一个跟踪器,或者一部血糖管理仪?又或者充当一个家用温度调节器

这个礼拜二,在www.agentwatches.com.网站就可以下载到AGENT Watch模拟器了,而今天你可以先把.NET Micro Framework安装好。

手表应用程序可以在Microsoft Visual Studio 2012(免费的精简版也可以)上用C#编写。通过蓝HoH_Watch_Face_3牙来开发和交互调试只属于你的应用程序。

下载Visual Studio Express 2012 下载 .NET Micro Framework SDK v4.3

开发人员还可以把AGENT做为辅助显示器,通过蓝牙实现它与其他一些用Objective-C, C#, or Java编写的智能手机应用程序之间的远程交互。

尽管这款手表今年十一月才上市,可是我已经迫不及待开始为了它编写应用,我想我已经准备好迎接Watch App Store了(即将推出)!