如果您有机会使用一些支持 Arduino 的硬件平台(如 ESP8266 Wi-Fi SoC)进行游戏,您可能已经为您的项目使用了在线 IoT 服务。在本文中,我们将向您展示如何通过为 Arduino IoT 项目设置虚拟专用服务器 (VPS) 和服务器软件来设置您自己的在线服务。
您可能还喜欢:
使用 Arduino 和 IoT 云平台构建物联网系统
除了设置您自己的 VPS 外,我们还将向您展示如何安装一个简单的示例,该示例允许您使用浏览器控制 LED、灯光等。下图显示了如何通过使用浏览器导航到您自己的 VPS 来实时控制任意数量的设备。在线 VPS 充当代理,使任意数量的用户能够通过联机服务器控制设备。
使用联机服务器并将其作为用户和设备之间路由消息的代理的一些好处是:
-
使一个网络上的用户能够控制另一个网络上的设备。例如,连接到家庭网络的设备可以通过连接到蜂窝网络的智能手机进行控制。
-
设备作为网络 (TCP/IP) 客户端运行,因此无需路由器端口转发或其他技巧即可通过联机服务器访问设备。
-
作为网络客户端的设备以隐身模式运行,大大提高了设备的安全性。我们稍后会更多地考虑安全问题。
-
小型设备通常没有提供直接 Web 界面的资源。在线服务器管理为设备提供 Web 界面的所有繁重工作,从而极大地降低了设备中的代码复杂性。
虚拟专用服务器
设置您自己的 VPS 听起来可能复杂和昂贵,但实际情况是,设置 VPS 非常简单,成本可能最低。可以发现VPS服务低至每年8美元。我最喜欢的网站购买预算VPS是lowendbox.com和我最喜欢的VPS提供商之一是securedragon,在那里你可以得到一个三个月的租约低于6美元和每年租赁12美元。
内存限制
预算 VPS 的限制是可用内存量。本文中使用的预算 VPS 只有 64M 字节的内存,因此限制了可以使用的 IoT 服务器解决方案的选择。本文将使用的 IoT 解决方案是一个应用程序服务器框架,其中包括 IoT 协议、Web 服务器、服务器端脚本语言和一个单元中的数据库。此软件包可以轻松地在预算 VPS 上运行,在我的测试环境中,我能够将 10,000 台设备连接到联机服务器。我使用许多额外的虚拟专用服务器执行测试,其中我运行了许多模拟设备。
Linux
预算VPS将运行Linux。如果你从来没有使用过Linux,你可能会认为这不适合你;然而,没有什么比事实更远了。在线 VPS 是任何新手学习命令行 Linux 的最佳起点,因为无论您使用 VPS 做什么,一个易于使用的基于 Web 的 VPS 控制界面都可让您通过单击按钮将 VPS 还原到其原始配置。
因此,玩一个在线VPS是学习命令行Linux的好方法新的 Linux VPS 将在一到两分钟内可用,您可以重新开始。
通过 SSH 远程登录
使用在线 VPS,您可以使用 SSH(安全外壳)远程登录。如果您自己的计算机正在运行 Windows,请下载SSH 客户端 Putty并从任何目录启动可执行文件。Mac 和 Windows 计算机通常包括命令行 SSH 客户端,因此只需在 Linux 和 Mac 上的命令行中键入 ssh。
当您注册 VPS 服务(如预算安全龙 VPS (O64))时,您将收到一封电子邮件,其中包含如何使用 SSH 远程登录 VPS 的说明。说明包括新 VPS 的 IP 地址和根(管理员)密码。下图显示了如何在 Putty 中输入 IP 地址以及如何在命令行窗口中以用户根身份登录。
此时,请随时尝试一些 Linux 命令。不要担心损坏VPS,因为一个简单的按钮点击在VPS控制面板将重新安装Linux操作系统。
安装 IoT 服务器
要安装服务器软件和示例程序,请复制以下所有命令并将命令粘贴到 SSH 控制台窗口中。
wget http://makoserver.net/install/brokerX86/install.sh;
chmod +x install.sh;
./install.sh
以下视频显示了完整的安装顺序,从设置免费域名、登录到 VPS、安装软件,到验证其是否使用浏览器工作。
上面视频的一些注意事项:
- 建议的 VPS 提供商 Berry 已不再开展业务。使用securedragon,如上文建议,或导航到LowEndTalk,并从社区级顶级VPS提供商投票列表中选择一个VPS提供商。
- 视频的最后一部分演示如何在您自己的计算机上安装边缘节点软件以进行测试。如果您有 ESP8266,并且遵循下面的 ESP8266 软件安装说明,则无需执行此操作。
- 自制作视频以来,IoT 服务器安装脚本已更新。安装脚本现在还安装基于 Web 的源代码编辑器,该编辑器允许您使用浏览器编辑服务器端代码和 HTML UI。有关如何使用 Web IDE 的详细信息,请参阅本文中的上一段视频,在”在您自己的计算机上安装 IoT 服务器”一节中。
下载和编译阿杜伊诺素描
Arduino 示例已在与 Arduino 兼容的 ESP8266 Wi-Fi 上进行了测试。但是,您应该能够使用 Arduino,而对启动代码只有少量更改。
下载并解压缩任何目录中的 Arduino 草图:
https://realtimelogic.com/downloads/SMQ/SMQ-Arduino.zip
以下视频演示如何编译代码并将代码上载到 ESP8266
com/嵌入/aolQxPPmpiY”宽度=”560″*
在 Arduino IDE 中打开草图文件 SMQ.ino 并向下滚动,直到您看到:
#error REMOVE THIS LINE AND SET THE TWO VARIABLES BELOW
static const char* ssid = "";
static const char* password = "";
删除上面的第一行,并将变量”ssid”设置为无线网络 ID,将”密码”设置为无线密码。
打开文件 led-example.cpp 并向下滚动,直到您看到:
#define SIMPLEMQ_DOMAIN "http://simplemq.com"
将域名”simplemq.com”更改为 VPS 的 IP 地址。
编译草图文件并将其上传到您的 Arduino 板。如果一切如其时,Arduino 设备应显示在 Web 界面中。您可以使用浏览器并导航到您的 VPS IP 地址,从而访问 Web 界面。
以上是设置在线服务器所需的全部,您可以使用浏览器实时控制 Arduino 设备。完整的应用程序可以”照样”用于控制任何提供开/关状态的,如 LED、灯、电机等。完整的应用程序由两部分组成:(1) 在浏览器中运行并连接到联机服务器的 JavaScript 支持的 Web 应用程序。(2) Arduino 代码在 Arduino 板上运行,该代码也连接到联机服务器。联机服务器充当通用代理,并在设备和浏览器之间路由消息。
此应用程序中使用的 IoT 协议称为SMQ,除了发布/订阅模式之外,它还提供一对一的通信(通过在线代理)。SMQ 中的发布/订阅(发布/订阅)功能与其他发布/子协议(如 MQTT 和 AMQP)类似。使用 pub/子协议时,联机代理服务器通常称为代理。代理负责在发布者和订阅者之间路由消息。有关 JavaScript 应用程序和 Arduino 代码工作方式的详细说明,请参阅此处。
使用 FreeRTOS
Arduino 环境非常适合初学者,但 Arduino 的功能非常有限。与使用 Arduino,您也可以使用名为 esp-open-rtos 的 FreeRTOS 环境,但不要担心,您不需要通过复杂的 esp-open-rtos 设置。相反,您可以使用预配置且完全准备好使用环境的环境,以及易于使用的基于 Web 的 IDE。基于 Web 的 IDE 非常适合习惯于易于使用的 Arduino IDE 的用户。
导航到 RTL 并下载免费的ESP8266 IDE。
IDE 专为教育目的而设计,包括预先配置的 esp 开放 rtos,与易于使用的基于 Web 的 C 源代码 IDE 捆绑在一起。IDE 需要 VMWare 或虚拟框。我更喜欢 VMWare 而不是虚拟框,因为我觉得它更易于使用。请注意,VMWare 免费用于非商业用途。
下面的屏幕截图显示了连接到虚拟机的虚拟机和基于 Web 的 IDE。请注意虚拟机如何拥有 ESP8266 USB 连接的所有权。基于 Web 的 IDE 检测到此情况,并将 ESP8266 显示为已连接且已准备好使用新固件进行闪存。
请确保在虚拟机窗口中单击 IP 地址。如果窗口为空,请单击窗口,然后按输入键。您必须在浏览器中输入此 IP 地址才能打开 Web IDE。
其他平台
边缘节点 C 代码也可用于许多其他平台。有关详细信息,请参阅GitHub 上的 SMQ 页。
Java UI
如果您是 Java 程序员,并且喜欢使用 Java 而不是 HTML 来设计用户界面,请参阅Java IoT 设备管理一文。
在您自己的计算机上安装 IoT 服务器
在您自己的计算机上而不是在联机服务器上安装 IoT 服务器是开始使用 IoT 服务器进行学习的好方法。
如果您使用的是 Linux x86 或 Windows 10,则可以在您自己的计算机上使用上述 VPS 安装脚本。
安装脚本是为 Linux 设计的,但如果安装 Linux 子系统,安装脚本也适用于 Windows 10。如果您使用的是 Windows,则打开 Microsoft 应用商店并搜索”debian”。安装 Linux 的 Debian Windows 子系统并打开 bash 外壳。
以下视频演示如何在 Linux 的 Windows 子系统上使用安装脚本。您将在标准 Linux 发行版上使用相同的安装。
物联网安全性
我已经更新了这篇文章,并添加了一些有关安全性的信息。
那么,这个解决方案的安全性如何呢?
上述教程中使用的 SMQ 协议具有出色的安全功能,但这一切都归结为您必须采取的安全措施。
认证
为本教程设计的示例代码不使用 SMQ 协议的密码身份验证。您可以轻松地将密码身份验证添加到示例代码。我将不详细介绍,但 SMQ 协议支持强身份验证。通过使用所谓的基于种子哈希的身份验证,即使在非 TLS 连接上,也可以使身份验证安全。
SMQ 协议提供种子值。您只需决定要使用的哈希算法。C 函数 SMQ_init()
提供种子值作为 out 参数,并且此种子值可用于创建 HMAC 哈希,例如。然后,在调用 时,HMAC 哈希用作 SMQ_connect
凭据。有关详细信息,请参阅SMQ C 代码参考文档。服务器端身份验证回调函数使用作为参数之一提供的种子执行相同的计算。有关详细信息,请参阅SMQ 代理的身份验证回调。
授权
SMQ协议也支持授权,文章”我们是否忘记了关于建立防御系统的古老教训?”详细解释了为什么使用授权是个好主意。