TinyWebIO服务协议详解
熟悉App Inventor网络数据库(tinyWebDB)组件的读者都应该知道如何利用该组件进行信息的存储和提取,那就是使用它的两个内置过程“保存数据”和“请求数据”(两个紫色的代码块)。无论是请求还是保存,一个关键的参数就是“标记”,它相当于我们向数据库存取数据的钥匙,凭借这个钥匙(一个字符串),保存和提取的操作才能成功。
在前两篇文章中,我们介绍了如何在App Inventor中实现与掌控板的协作,并给出了一个声控灯的例子,其中用到了tinyWebDB组件,而且必须将该组件的服务器地址属性设置为掌控板在局域网中的ip地址,这说明在手机与掌控板的协作过程中,掌控板充当了服务器的角色,而手机上的App则是客户端,客户端通过ip地址访问服务器,从而实现两者之间的信息往来。掌控板之所以能够成为服务器,是因为板上刷入了一个服务器软件——tinyWebIO.py(第一篇文章中介绍了刷入文件的方法),这个文件一旦启动运行,它会随时准备好接受来自客户端的请求,并根据请求的类型(保存数据或请求数据)以及请求信息中的“标记”参数,决定如何响应请求。两者之间的协作机制如图1所示。
图1 掌控板与安卓应用之间的协作机制
如图1中所示,当客户端发出保存数据请求时,请求信息中会携带两个参数: 标记和数据,服务器会将“标记”解释为掌控板上的输出资源,例如,当标记为buzz时,输出资源为蜂鸣器,并将“数值”解释为具体的输出值,如蜂鸣器的鸣响频率。同样,当客户端发出读取数据请求时,会携带一个“标记”参数,服务器会将参数解释为掌控板上的某个资源,并将该资源的状态返回给客户端,例如,当标记为“buttona”时,掌控板将返回按键A的状态(1为断开,0为连通)。
由此可知,如果想在安卓应用中获取掌控板的状态数据,或控制掌控板的输出,就必须清楚地知道掌控板上各项资源的标记、名称,以及接收数据的规格,这也正是本文的目的所在。下面表格中列出的相关信息,可以帮助开发者实现安卓应用与掌控板之间的协作。
表1 TinyWebIO服务协议
注:表中出现的<n>为相应资源编号,编写时需替换为具体数值(0、1、2等),例如,模拟引脚0写作“pina0”,三个LED灯珠分别写作“rgb0”、“rgb1”、“rgb2”等。
另,关于各项资源的详细说明,请参见掌控板官方网站:https://mpython.readthedocs.io。