2012年10月23日星期二

無線網路的未來在哪裡?

无线网络在日益发展的个人电脑网络中扮演着关键角色,它有强大的流动性和延伸性,甚至发展到了很多还没有配备墙内CAT-10的地方(包括公司和大多数家庭)。

近几年来,无线网在其已成熟的应用方面展现出优势,比如在电话领域(智能机)和音频视频频率分布领域(网络硬盘录像机)等。随着“热点”的数量和覆盖面积的增长,无线网络连接形成了一种“多功能多效用”的趋势,并远远超过了缆线网络连接形式,并从根本上取代了它。不难想象在不久的将来,几乎所有的手机和电视都会装配无线网功能作为其标准配置。



1. 做你自己的事

那么,是什么使得无线网这么受欢迎呢?答案是“物联网”(简称IoT)。它连接了几乎所有电子产品到移动互联网。如图1所示,第一代物联网设备已经推广到市场了,这只是个开始。你根本想象不到所有的应用程序都连接到“云网络”之后会发展成什么样,其中无疑会有一些被抹杀。


图1:如今你可以买到能连入互联网的商品


2. 展望未来

我在朋友的办公室里发现他桌子上有一盏球形灯,是那种像水晶球一样,并且能发出柔和的红光。他说这是一个股票市场的“珠宝”,如果我们的会议一切进展顺利,灯光会变绿,说明杜琼斯工业平均指数(DJIA)对我们有利。
他的“珠宝”来自一个叫做Ambient Devices的公司,该公司的Ambient股票球(如图2所示)依赖于安装在手机网络上的一个特殊数据发送服务器。当有数据被释放(比如说杜琼斯工业平均指数),数据检测方就会察觉并传递数据(到球形灯上),但是数据的传递需要付费预定。


          图2:Ambient公司的股票球

下面咱们自己动手做一个“无线球”吧。它能让你监视所有你在网上找到的东西,价格免费。感谢March of Silicon公司的单片机,无线网接口和他们的软件。图3是我们需要的PCB板(Parallax, Inc.’s Propeller™ Board of Education® (BoE) 图中左边),图中右侧的是微知纳特公司(WIZnet)的产品WizFi210无线模块演示板。大板作为原型,简单但是不能满足我们的全部需要。一个真正的“无线球”只需要Propeller电路板的核心(EEPROM系列单片机和位于水晶球下方的红色发光二级管)以及仅有邮票大小的WizFi210芯片


     图3:左边是BoE电路板,右边是微知纳特公司WizFi210演示板

Propeller电路板有一个独特的多芯闪存微控制器,特点是非常适合于搞开发。快速转换的IDE意味着编辑编译下载周期只需要几秒钟。同样还需要一个预先定义的库软件作为“目标”,以及更多的在线“对象交换”。目标的优势在于将重点集中于怎样用编码实现特有的应用程序,取代之前的公式化样本文件。

无线网部分是便携的微知纳特公司产品WizFi210嵌入式无线模块。它有一个标准的串行接口,可以简单地与Propeller电路板相连。该模块的内部技术含量非常高,所以把一切事物都变得简单了。用它上网就有点大材小用了,它还可以编辑并发行一些高级命令。

像使用其他任何无线装置一样,第一步先配置WizFi210让它可以访问您的无线网络。这就意味着设置它登录你的无线网(即无线局域网),安全机制(即共享密钥和密码),网关和服务器地址等等。WizFi210有一个内置无线网配置网页,也可以通过串行端口输入命令来对其控制。设置完成后,将配置文件保存到WizFi的闪存,以便将来功能升级。



3. 海量数据

毫无疑问,你可以在网上无数次地搜索杜琼斯工业平均指数,但我都是在雅虎网上看这些数据的(如图4),所以你为什么不去那看呢?


                     图4:雅虎上的杜琼斯工业平均指数

WizFi210有很多的内置命令,所以它可以很容易浏览网站。它们被称为“AT”命令,该命令起源于拨号调制解调器。但是好的一方面是WizFi210的命令和响应都是ASCII码,所以使用像超级终端这样的终端模拟器就可以简单地输入命令对它进行控制和查看。假设WizFi210的配置可以达到接入点,这里就是你需要的雅虎主页(命令被发送到WizFi210上并以粗体显示)。

第一步是关联接入点使用的无线网名称(即无线局域网名)。

at+wa=your_ap_ssid

IP
SubNet
Gateway
10.0.0.20:
255.255.255.0:
10.0.0.1
[OK] 

现在你可以访问你的域名服务器并找到当前雅虎的IP地址。

at+dnslookup=www.yahoo.com
IP:72.30.2.43
[OK]


定义一个卡用户端并连接到雅虎的IP地址,端口80。

at+nauto=0,1,72.30.2.43,80
[OK]


现在开启和雅虎的连接,并且将WizFi210从命令模式切换到数据传输模式。

ata2
[OK]


此时WizFi210拒绝接受“AT”命令,并且变成一个简单的串口无线网转换器。无论是什么信息进入WizFi210的串行端口,都会通过无线网来传递,反之亦然。仔细地输入(不要出错)GET( 空格,对应ASCII码中的$20),换行(键盘上的CTRL+J,ASCII码表示为$0A)。
一会之后,雅虎主页就出现在终端屏幕上了。随时掌控杜琼斯工业平均指数动态就像在标签栏里搜索“Dow”那么简单了!标志的位置(在一个固定值周围偏移)杜琼斯工业平均指数平均值(即12861.2)如图5所示。

                            图5 雅虎主页

4. 少既是多

我写了一个关于从雅虎网上更新并能存储杜琼斯工业平均指数的简短的测试程序,并将它烧入Propeller电路板,它工作起来太完美了。(见图6)


  图6 在雅虎主页上搜索“Dow”得到的杜琼斯工业平均指数数据

不幸的是,必须得筛选雅虎主页上超过66,000字节的信息才能找出几个你能用到的字节!
当我寻找更多解决方案的时候,我想到了另一个设计灵感(使用Tannenbaum代码http://www.gadgetgangster.com/news/54/520)这一想法让我想到了另一个数据供给来源:谷歌(见图7)。

                             图7 谷歌财政API

我调整了测试程序,使用谷歌财务数据将程序转换到小于1000字节(见图8)。


  图8 使用谷歌财务API获得杜琼斯工业平均指数

5. 深入

让我们通过Propeller程序获得谷歌财务数据。在经过几次失败的尝试后成功了,但并不是就可以放心。如果找不到接入点,或者网站关闭了,或者你打错了一些代码(无线局域网名字,网站地址,获取请求,搜索密码等等),你的程序就挂掉了。好好考虑需要处理的网络问题,然后设计一个策略来处理这些问题,避免过于依赖网络。

从Propeller库程序启动几个目标。调试Parallax的终端仿真器和WizFi串口,建立连接,连接到WizFi210.下一步,变量用来定义存储目标网站地址(ipaddr)和检索数据(xmls)。现在是最关键的一步,通过数据结构定义路径所需的信息,如无线网络,目标网站,获取命令,代码和搜索密码等。然后开始执行,初始化后进行WizFi目标调试,然后程序进入主回路。

OBJ
Debug : “Parallax Serial Terminal”
WizFi : “FullDuplexSerial”
CON
lenipaddr = 18 ‘max length ip address string incl. cr/lf
lenxml = 50 ‘max length xml field data
VAR
byte i,j,k,ipaddr[lenipaddr],xmls[lenxml]
DAT
ssid byte “your_ap_ssid”,$d,0 ‘
替换你的无线网络
website byte “www.google.com”,$d,0 ‘
使用谷歌
get byte “GET /ig/api?stock=” ‘
财务数据api ‘
symbol byte “.dji”,$a,0 ‘
股票符号ex:.dji,aapl,ibm
numkeys byte 4
keys byte “last”,0,”perc”,0,”trade_date”,0,”trade_time”,0′xml keys
PUB WizFiOrb ‘program gets xml data item from a webpage
Debug.start(115_200) ‘
开始调试终端
WizFi.start(6,7,0,57600) ‘
开始异步连接到WizFi
REPEAT ‘forever 


第一步是启动WizFi210(就是将它从休眠状态循环唤醒),然后启动并确定与无线网连接成功。之后,然后就很容易通过其他指令,最后显示在雅虎的例子里,然后发送请求。我想写一个代码,能巩固每次握手的指令(比如说,发布命令,检查反应,重试,直到WizFi说【确定】)。但注意有一些命令需要特殊处理(例如:at+psdpsleep没有返回,+++需要延时)。

此外,它更容易为个别命令添加调试代码使其保持独立。通用的AT命令处理程序会包含很多选项,包括预期反应(如果有的话),数据和命令超时,重试次数与间隔,调试回声的开关等等。

REPEAT
WizFi.str(string(“at”,$d)) ‘
虚拟命令唤醒WizFi
REPEAT
UNTIL WizFi.rx == $5B ‘
查找[
UNTIL WizFi.rx=="O" '
重复尝试直到WizFi 显示 [OK]
REPEAT
WizFi.str(string(“at+wa=”))
WizFi.str(@ssid) ’
尝试连接
REPEAT
UNTIL WizFi.rx == $5B ’
查找[
UNTIL WizFi.rx == "O" '
WizFi 显示 [OK]时连接
WizFi.str(string(“at+dnslookup=”)) ’
查找网站IP地址WizFi.str(@website)
REPEAT
UNTIL WizFi.rx == “:” ’:
做标记并且返回IP地址
REPEAT i from 0 to lenipaddr-1
ipaddr[i] := WizFi.rx ’
保存IP地址位数
IF ipaddr[i] == $d ’
终止并回车
quit
REPEAT
WizFi.str(string(“at+nauto=0,1,”))’
创建客户端连接
i:=0
REPEAT UNTIL ipaddr[i]==$d
WizFi.tx(ipaddr[i]) ’
发送IP地址位数
i++
WizFi.str(string(“,80″,$d)) ’
端口 80
REPEAT
UNTIL WizFi.rx == $5B ’
查找[
UNTIL WizFi.rx=="O" '
重试直到WizFi 显示 [OK]
REPEAT
WizFi.str(string(“ata2″,$d)) ’
链接网站
REPEAT
UNTIL WizFi.rx == $5B ‘
查找 [
UNTIL WizFi.rx=="O" ‘
WizFi 显示 [OK]时连接
WizFi.str(@get) ‘
向网站发送请求

在GET请求被发送之后,网页信息将会存入Propeller.程序会自动搜索进来的数据并匹配DAT(a)单元中定义的密码,并且建立一个反应字符串,确定每个回车之间检测到的数据项。按键本身只需要足够长的时间就可以显示其特殊性,但是它们可以变得更长(最长是“=”键)。例如,你可以使用“trade_time”来增加可读性,或者使用“de_time”来节省空间。需要注意的是,DAT(a)部分的按键指令必须要在网页中显示出来。限制条件被加强了以便于搜索行为可以在系统繁忙状态下从单一端口(通常不取决于位置的搜索键)通过来完成,而不必存储在网页内存中。查询成功之后,被检索到的数据会显示在调试终端中。

k:=0 ‘k 作为所有按键的开始
j:=0 ‘j
是建立 xml 的指针
REPEAT numkeys ‘
每一个关键按键
i:=0 ‘i
计数连续的字符匹配配 REPEAT ‘通过键盘搜索进入的网页
CASE WizFi.rx == keys[k+i] ‘
连续字符匹配键
TRUE : i++ ‘
如果匹配就+1
FALSE : i:=0 ‘
否则清零
UNTIL keys[k+i+1] == 0 ‘
直到键匹配
k:=k+i+2 ‘
指向下一个键
REPEAT ‘
寻找开放的双引号
UNTIL WizFi.rx == $22
REPEAT ‘
收集所需数据
xmls[j]:=WizFi.rx
j++
UNTIL xmls[j-1] == $22 ‘
直到关闭双引号
xmls[j-1]:=$d ‘
传输完数据后回车
k:=0 ‘k 展示关键字符
j:=0 ‘j
展示数据字符
Debug.str(string($d,”Symbol = “))
Debug.str(@symbol)
REPEAT numkeys ‘
适用于任何键
Debug.str(string(” “))
REPEAT ‘
显示键
Debug.char(keys[k])
k++
UNTIL keys[k] == 0
Debug.str(string(” = “))
REPEAT ‘
显示数据
Debug.char(xmls[j])
j++
UNTIL xmls[j-1] == $d


在进行下一个演示之前,咱们设置系统进入睡眠状态。三个“+”(+++)其实是一个特殊的转义序列,在一秒延时之后,WizFi210会将它作为一个退出请求数据处理,并返回到命令模式。然后AT命令会被发出使其与无线网断开,进入睡眠状态。最后,Propeller会设置自己进入睡眠状态,直到下一个演示开始。谷歌的数据一般来讲,每隔几分钟就会更新一次,有时会更频繁一些,所以保守点儿说,90秒比较合理。

REPEAT
WizFi.str(string(“+++”)) ’
要求 WizFi 转变成命令模式
waitcnt(clkfreq + cnt) ’
等待 WizFi 转变成命令模式
WizFi.str(string(“at”,$d)) ’
批准 WizFi 转变成命令模式
REPEAT
UNTIL WizFi.rx == $5B ’
查找 [
UNTIL WizFi.rx=="O" '
重复尝试直到 WizFi 显示 [OK]
REPEAT
WizFi.str(string(“ath”,$d)) ‘
等待 i.e.
REPEAT
UNTIL WizFi.rx == $5B ‘
查找 “["
UNTIL WizFi.rx=="O" '
重复尝试直到 WizFi 显示 [OK]
WizFi.str(string(“at+psdpsleep”,$d))’
WizFi 进入休眠模式
waitcnt((clkfreq*45)+cnt) ‘
MCU 进入休眠模式
waitcnt((clkfreq*45)+cnt) ‘
MCU 休眠模式

图9显示的是程序正在被演示。使用不同的按键你可以采集到个别,或者全部你觉得有用的信息。

          图9 来自谷歌的财务数据

现在咱们来放松一下,看看怎么定义“ambientiza”数据。Propeller电路板上有红色和绿色的LED灯,所以可以通过设置xml按键来控制它们。

CASE xml[0] == “-“ 百分比变化是否为负
TRUE : OUTA[15..16] := %01 ‘
红灯亮,绿灯灭
FALSE : OUTA[15..16] := %10 ‘
绿灯亮,红灯灭

现在你就得到一个迷你球了!

电路板提供了一些更有趣的设置。你可以通过VGA端口将它连接到屏幕或者电视上。这看起来好像跟“ambience”没有关系。但是取代了典型的数字和图片形式,你可以(通过这些LED灯)制作一个丰富多彩的道琼斯工业平均指数“灯光秀”,以更有创意的形式传达出市场氛围。

同样是耐人寻味的电路板音频设置,包括一个麦克风和一个立体声耳机插座。当市场额度上升时,一些Wagner条可以唱赞美歌。电路板上有一个SD卡插槽,我可以将一个电脑里的wav音频文件设置循环播放,并通过Propeller中的立体声耳机插座播放出来。或者我可以使用麦克风录制我自己的声音效果,前景不可小觑啊。


6. 永远的Wi-Fi

1913年在洛杉矶的水库,William Mulholland在成千上万的观众面前,将他的工程师完成的最后一个指示转动车轮泵打开,看到奔腾的水倾泻而下,在阳光的照耀下跳舞、闪闪发光,蔓延到水库里,然后Mulholland转身面向高官们说:“就是它先生们,使用它吧!”

现在,基本的硬件模块组件我们都拥有了。最精彩的部分到了。什么可以将原先那些相互独立的电子设备利用网站知识掌握与鼓掌之中?谁拥有了信息?又是谁会保证它将来会准确和有效?(谁会对它负责?)又是什么确保了安全和隐私?只要物联网设备联网,所有的答案都会清楚明朗。实际上无线网在众多家庭和企业中展现出了引人瞩目的优势。就像一个饥渴的城市对水源的渴望!不需要转动什么伟大的齿轮,闸门已经打开,这就是无线网!使用它吧!




编译:Ben

源地址:Wi-Fi Orb Sees All ,By Tom Cantrell, Convergence Promotions LLC


“本文内容仅代表源作者观点,本站只是做了翻译工作,不代表本公司观点,最终解释权归源作者所属。”

没有评论:

发表评论