我们越来越依赖可穿戴和互联技术,但在没有人机界面的情况下,应如何配置设备?
一个例子是我们现在用于视频会议的无线耳机。设备的初始设置具有挑战性,为了实现设备与手机或PC配对,按钮顺序有时看起来是随机的。把USB充电口连接到PC,然后在浏览器里进行配置,不是更简单吗?
另一个例子是打印机管理。通常使用USB电缆连接打印机到PC,通过主机端专用应用程序实现打印机配置,如WiFi或IP地址,纸张类型和打印质量等,同时显示状态信息。
我们在J-Link调试器中也使用相同的技术来管理IP地址等配置。
事实上,几乎所有具有USB充电口的物联网设备都可以从嵌入式Web服务器中受益,以改进和简化人机界面。
在产品中实现这种功能已经有一段时间了,然而传统的方法是在嵌入式控制器中添加web服务器,以及USB和TCP/IP协议栈,这需要相当大的处理能力、能耗,占用更多的代码空间和RAM资源。
如何减少代码和RAM占用,同时实现易用性?
剔除TCP/IP协议栈,利用USB批量连接,基于emUSB-WEB协议栈可以将网页传送到主机端的浏览器。一个简单的主机应用程序(SEGGER示例:https://www.segger.com/downloads/emusb-device/SEGGER_USB_Webserver_Windows.zip)可以轻松地将USB HTTP通信连接到浏览器。一旦连接到交互网页,即可通过主机浏览器显示配置,状态或测量数据等。
嵌入式应用可以充分利用浏览器的所有功能来调整大小,滚动和导航等,以增强用户体验。包括链接到云端资源(如图形和动画),为用户界面添加额外的维度,无需将它们嵌入到有限的代码空间中,并提供远程更新外观的机会。
如何工作?
USB web服务器由PC应用和嵌入式应用程序两部分组成。
PC应用程序负责打开一个socket,浏览器可以连接并通过USB转发浏览器请求到嵌入式应用。
嵌入式应用接收HTTP请求,并使用集成的web服务器处理。响应通过USB发送,由PC应用接收,并转发到默认浏览器。
设备识别
PC应用必须能够识别它与其通信的USB设备。
因此,嵌入式应用程序必须提供具备下列特性的USB接口:
· USBclass ID: 0xFF(特定于厂商)
· USB subclass ID: 0x57 (ASCII“W”)
· USB协议ID: 0x45 (ASCII“E”)
· 字符串描述符需包含" http "
浏览器连接是如何工作的?
PC应用和嵌入式应用程序之间通过USB Bulk通信,它必须包含至少一个USB Bulk IN和一个USB Bulk OUT端点。
枚举完成后,嵌入式应用程序开始监听来自PC应用的命令,这些命令包含一个8字节的头,描述数据包。
在读取报头后,嵌入式应用将数据传递给嵌入式web服务器。
协议栈结构
在下面的示例使用了SEGGER中间件, emUSB和emNET,也可以根据需要使用其他组件。
使用TCP/IP协议栈的典型配置如下所示。
注意emNET协议栈通过USB实现IP连接。虽然这是一种可靠的技术解决方案,但其增加的复杂性和所需的资源可能不适合嵌入式应用。
使用USB web浏览器配置,如emUSB-WEB,嵌入式协议栈变得更简单,更小,看起来类似于只需要一个USB协议栈和嵌入式web服务器。
节省代码和内存
如果我们看一下运行在SEGGER emPower评估板(基于Kinetis K66 Arm Cortex-M4 160Mhz MCU)在上的web服务器应用程序,示例下载:https://www.segger.com/downloads/emusb-device/Trial_emPower_emUSBD_USB_Webserver_GUI.zip
注意,项目没有针对缓冲区大小等进行优化,但给出了一个很好的参考。
我们可以看到代码减少了大约32%,RAM减少了大约38%。
审核编辑:刘清
-
物联网
+关注
关注
2909文章
44608浏览量
373056 -
人机界面
+关注
关注
5文章
526浏览量
44138 -
嵌入式控制器
+关注
关注
0文章
65浏览量
15180 -
调试器
+关注
关注
1文章
304浏览量
23738 -
J-Link
+关注
关注
0文章
84浏览量
22140
原文标题:如何使用emWeb实现与无头设备的互动?
文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论