搭建你自己的Arduino IOT云服务器

想让你的IoT项目运行在云上吗?没有问题,这篇教程会带着你创建并启动属于你自己的虚拟服务器来支持你的IoT项目。

如果你曾使用过一些新的支持Arduino的硬件平台进行开发,那么可能你已经在你的项目中使用了在线的IoT服务。在这篇文章中,我会演示如何通过搭建一个虚拟专用服务器(VPS)并配置一些软件来为你的Arduino IoT项目提供服务。

除了设置你的VPS之外,我还会告诉你如何安装一些简单的实例来通过浏览器来实现对LED、灯管的控制。下面的图示展示了如何通过浏览器定向至你自己的VPS并实现对不同设备的实时控制。在这里在线的VPS充当了代理的功能,这使得不同的用户可以通过浏览器来控制相应的设备。

使用在线服务器作为代理来实现用户和设备之间的通信有以下好处:

  • 用户可以跨网络控制设备。比方说,你可以通过手机的移动网络来控制连接到家庭网络上的设备。
  • 设备以(TCP/IP)网络客户端的身份运行,可以通过浏览器直接实现对设备的控制,而不需要使用像端口转发之类的其他技巧。
  • 设备以网络客户端的身份隐性运行显著地提升了设备的安全性。关于安全性,我们后面会进一步讨论。
  • 小型的设备通常并没有足够的资源来直接提供web接口。而在线的服务器可以承担为设备提供web接口的责任,这可以显著减少设备上的代码复杂度。

虚拟专用服务器

自己配置一个VPS听起来既复杂,成本又高,但事实上配置一个VPS是很简单的,成本也可以很低,找到一年只需要 $8 的VPS服务也是可能的。我喜欢通过lowendbox.com来为我使用的VPS成本进行预算,securedragon是我最喜欢的VPS提供商之一,三个月的租用费用不到 $6 ,一年的费用不到 $12。

内存限制

在VPS的预算中很重要的一个限制条件就是可用的内存容量。在本文中我使用的VPS只有64Mbyte的内存,这很大程度上限制了我们服务器可用的IoT解决方案。在本文中我们采用的IoT解决方案是一个包含了IoT协议、web服务器、服务器端脚本语言以及数据库的应用服务器框架。软件包可以轻松地运行在预算中的VPS上,在我的测试环境中,在线的服务器最多可以连接10000个设备。我使用了一些额外的VPS来模拟大量的设备来完成了这一测试。

Linux

我预算中的VPS运行的是Linux系统。如果你从未使用过Linux,你可能会认为本文并不适合你,但是不试试又怎么知道自己不适合呢?对于Linux命令行的初学者来说,在线的VPS是最好的起点,因为无论你在VPS上做了什么错误的操作,你都可以通过VPS提供商为你提供的web控制界面上的一个按钮将你的VPS还原至初始配置。因此,线上的VPS是练习Linux命令行的最佳场所。如果你的VPS进入到了无法恢复的状态,你可以登录到VPS的web控制面板重装系统。一到两分钟之后一个全新的Linux VPS就会重新生成,你可以在上面重新开始。

通过SSH实现远程登录

你可以通过SSH(Secure Shell)来远程登录在线的VPS。如果你的电脑运行的是Windows系统,你可以下载Putty,安装之后运行即可。Mac和Linux通常都内置了SSH的命令行工具,你可以通过ssh命令进行连接。

当你注册一个VPS之后,通常你会收到一封关于你的VPS的说明邮件,其中包含了如何使用SSH登录到服务器的说明以及你的新的VPS的管理员密码(也可能是访问所需的私钥)。下面这张图展示了如何在Putty中输入IP地址以及如何以root用户的身份在命令行中完成登录。

现在,你可以随意尝试一些Linux命令了。不用担心损坏VPS,因为即使损坏了,你也可以通过web上的控制面板重装Linux系统。

安装IoT服务器

在安装服务器软件之前,如果你对VPS上的Linux系统做了改动,我建议你通过控制面板重装一下系统。

安装服务器所需的软件和实例程序只需要将下面的命令拷贝并粘贴至SSH的命令行窗口即可。

source <(wget -q -O- http://makoserver.net/install/brokerX86/install.sh)

下载并编译Arduino Sketch

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的安全性

我最近写了一篇关于IoT中协议(如SMQ)安全的文章。我推荐你读一下这篇文章,因为你应当知道一些pub/sub协议的默认设置是有安全风险的。尽管本文中使用的LED/灯光控制应用程序没有使用密码加密功能,但是它仍然相当安全,因为SMQ代理不容易被检测到并且SMQ协议不允许通配符订阅方式。有关详细内容可以参考上面提到的文章。作为练习,你也可以向本文中的应用程序添加验证功能。

本文的版权归 ArrayZoneYour 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大魏分享(微信公众号:david-share)

后容器时代技术制高点:API管理平台3Scale的架构设计与部署

99320
来自专栏魏艾斯博客www.vpsss.net

如何下载安装使用 SSH 软件

24550
来自专栏deed博客

安卓SDK镜像

27740
来自专栏企鹅号快讯

在 KubeCon 大会上备受关注的 K8S Helm 到底是什么?

作者:王青,JFrog 中国首席架构师,之前在 IBM,HPE,爱奇艺,新浪,VIPKID 等公司做过研发和架构,是有十多年开发经验的互联网老兵,专注于软件生命...

35980
来自专栏皮振伟的专栏

[linux][qemu]PVPanic的实现原理以及应用

在虚拟化场景下,我们尽量会尝试使用带外监控的方式,来发现虚拟机的异常。pvpanic就是一种常见的方式,虚拟化场景的windows蓝屏检查也是基于如此。

22630
来自专栏JackeyGao的博客

使用DoMonit监控Docker

本篇的目的是介绍Python包Domonit, 一个基于Python语言开发的API封装的轻量监控程序.

12120
来自专栏IT大咖说

如何利用开源DevOps工具完成云上的自动运维

内容概况 云计算的特点是开箱即用,可以随时的扩缩容,不用考虑硬件的损坏问题,也有丰富的云服务和云平台供我们选择。在本次演讲中,黎山通过实际应用场景为我们讲述了基...

47170
来自专栏云计算D1net

容器管理必备:掌握工具和技能

当制订容器管理策略时,选择正确的工具只是万里长征迈出了第一步。 那些在云应用开发和应序迁移过程中应用容器技术(例如Docker)的用户很快就会认识到使用容器管理...

361120
来自专栏Java架构

百度微服务架构师随手笔记:教你如何手写Docker涉及到的技术Hello world要有Shell彻底分离

20630
来自专栏安恒信息

HTTP.sys 远程执行代码漏洞WAF应急响应

4月14日微软发布了一个针对IIS服务器的远程代码执行漏洞补丁,此漏洞危害非常大,远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HT...

30250

扫码关注云+社区

领取腾讯云代金券