想让你的IoT项目运行在云上吗?没有问题,这篇教程会带着你创建并启动属于你自己的虚拟服务器来支持你的IoT项目。
如果你曾使用过一些新的支持Arduino的硬件平台进行开发,那么可能你已经在你的项目中使用了在线的IoT服务。在这篇文章中,我会演示如何通过搭建一个虚拟专用服务器(VPS)并配置一些软件来为你的Arduino IoT项目提供服务。
除了设置你的VPS之外,我还会告诉你如何安装一些简单的实例来通过浏览器来实现对LED、灯管的控制。下面的图示展示了如何通过浏览器定向至你自己的VPS并实现对不同设备的实时控制。在这里在线的VPS充当了代理的功能,这使得不同的用户可以通过浏览器来控制相应的设备。
使用在线服务器作为代理来实现用户和设备之间的通信有以下好处:
自己配置一个VPS听起来既复杂,成本又高,但事实上配置一个VPS是很简单的,成本也可以很低,找到一年只需要 $8 的VPS服务也是可能的。我喜欢通过lowendbox.com来为我使用的VPS成本进行预算,securedragon是我最喜欢的VPS提供商之一,三个月的租用费用不到 $6 ,一年的费用不到 $12。
在VPS的预算中很重要的一个限制条件就是可用的内存容量。在本文中我使用的VPS只有64Mbyte的内存,这很大程度上限制了我们服务器可用的IoT解决方案。在本文中我们采用的IoT解决方案是一个包含了IoT协议、web服务器、服务器端脚本语言以及数据库的应用服务器框架。软件包可以轻松地运行在预算中的VPS上,在我的测试环境中,在线的服务器最多可以连接10000个设备。我使用了一些额外的VPS来模拟大量的设备来完成了这一测试。
我预算中的VPS运行的是Linux系统。如果你从未使用过Linux,你可能会认为本文并不适合你,但是不试试又怎么知道自己不适合呢?对于Linux命令行的初学者来说,在线的VPS是最好的起点,因为无论你在VPS上做了什么错误的操作,你都可以通过VPS提供商为你提供的web控制界面上的一个按钮将你的VPS还原至初始配置。因此,线上的VPS是练习Linux命令行的最佳场所。如果你的VPS进入到了无法恢复的状态,你可以登录到VPS的web控制面板重装系统。一到两分钟之后一个全新的Linux VPS就会重新生成,你可以在上面重新开始。
你可以通过SSH(Secure Shell)来远程登录在线的VPS。如果你的电脑运行的是Windows系统,你可以下载Putty,安装之后运行即可。Mac和Linux通常都内置了SSH的命令行工具,你可以通过ssh命令进行连接。
当你注册一个VPS之后,通常你会收到一封关于你的VPS的说明邮件,其中包含了如何使用SSH登录到服务器的说明以及你的新的VPS的管理员密码(也可能是访问所需的私钥)。下面这张图展示了如何在Putty中输入IP地址以及如何以root用户的身份在命令行中完成登录。
现在,你可以随意尝试一些Linux命令了。不用担心损坏VPS,因为即使损坏了,你也可以通过web上的控制面板重装Linux系统。
在安装服务器软件之前,如果你对VPS上的Linux系统做了改动,我建议你通过控制面板重装一下系统。
安装服务器所需的软件和实例程序只需要将下面的命令拷贝并粘贴至SSH的命令行窗口即可。
source <(wget -q -O- http://makoserver.net/install/brokerX86/install.sh)
Arduino示例可以在兼容ESP8266 WiFi的Arduino板上进行测试。只要对初始代码稍作修改就可以运行在任何型号的Arduino上。
下载并解压下面链接提供的Arduino Sketch:
https://realtimelogic.com/downloads/SMQ/SMQ-Arduino.zip
在Arduino IDE中打开sketch文件SMQ.ino并向下翻直到你看到以下代码片段:
#error REMOVE THIS LINE AND SET THE TWO VARIABLES BELOW
static const char* ssid = "";
static const char* password = "";
将第一行中的ssid
变量值改为设备要链接到的无线网络ID,password
值改为无线网络的密码即可。
打开文件led-example.cpp
,向下翻直到你看到以下内容:
#define SIMPLEMQ_DOMAIN "http://simplemq.com"
将域名simplemq.com
改为你的VPS的IP地址即可。
然后将你的sketch文件编译上传至你的Arduino板子上。如果一切顺利,Arduino设备会显示在web界面上。你可以通过浏览器键入VPS的IP地址来访问web界面。
以上就是你配置在线服务器来实现通过浏览器实时访问你的Arduino设备所需的全部操作。其中完整的应用程序可以实现对于开/关元件(如LED、灯光、电机)的控制。完整的应用程序由两部分组成:(1)在你的浏览器中驱动应用程序的JavaScript脚本,它会与在线服务器建立连接。(2)运行在Arduino开发板上的Arduino代码,它也会与在线服务器建立连接。在线服务器充当了通用代理的功能并负责设备和浏览器客户端之间消息的路由。
该应用程序中使用的IoT协议称为SMQ,除了publish/subscribe模式之外,它还提供了一对一的通信功能。SMQ中的pub/sub协议类似于其他的pub/sub协议(如MQTT和AMQP)。在使用pub/sub协议时,在线服务器通常被称为代理。代理负责发布者和订阅者之间消息的路由。关于该应用中JavaScript代码和Arduino代码的详细说明可以在这里查看。
我最近写了一篇关于IoT中协议(如SMQ)安全的文章。我推荐你读一下这篇文章,因为你应当知道一些pub/sub协议的默认设置是有安全风险的。尽管本文中使用的LED/灯光控制应用程序没有使用密码加密功能,但是它仍然相当安全,因为SMQ代理不容易被检测到并且SMQ协议不允许通配符订阅方式。有关详细内容可以参考上面提到的文章。作为练习,你也可以向本文中的应用程序添加验证功能。