这是我已经思考了一段时间的主题,尤其是因为“ IoT”概念近来已经浮出水面。

我将以我所说的“ IoT”开始。我知道物联网一词可能意味着不同的含义,有时会被误用。它可能是一个没有明确定义的术语,并且可能引起围绕其确切含义的广泛讨论,我自己也不知道该术语的正确和广泛接受的定义。因此,对我而言,物联网是一个概念,它定义了从另一个嵌入式设备或从手机通过Internet远程连接到嵌入式设备的能力。就这么简单。

在这种情况下,连接的目的无关紧要,无论您是可以将办公室中的一台设备与家里的另一台设备连接,还是可以连接到一台设备在家中通过手机,所有这些都通过互联网,然后我们谈论的是物联网设备(嵌入式设备,而不是电话)。现在描述我要实现的目标。

我要实现的目标正是我对IoT定义的描述。


我希望在家中通过以太网或wifi将一个或多个嵌入式设备连接到我的Internet路由器,并能够与远程位置的另一台嵌入式设备远程连接(而远程是指不在同一网络上)也许还可以通过手机上的监控应用程序连接到它们


例如,我可能有一个简单的嵌入式设备,用作通向我车库的开/关开关开门器和另一个嵌入式设备在工作中充当我的办公桌上的红色大按钮,这样我就可以按下办公桌上的红色按钮,车库门就会打开。另一个示例是拥有一个具有ADC功能的嵌入式设备,该设备可以监视我的房屋的温度,并在达到阈值时向我发送警报。通知可以通过一个简单的android应用程序接收,也可以通过另一个在桌面上工作的嵌入式设备接收通知。

这些示例可能很愚蠢,但只是为了说明可能的情况和使用我正在努力实现的案例。最后,想法是相同的,通过互联网将一个嵌入式设备与另一个嵌入式设备连接。要澄清的另一件事是,这些设备之间的数据交换非常轻巧,只有几个字节每次都不需要在设备之间交换数百KB的数据。 cortex-m4微控制器。这一点很重要,因为在这些设备上不会运行任何Linux或复杂的库。最后,这是浪费资源,完全没有必要拥有运行Linux的强大处理器来打开和关闭灯泡。无论如何,我计划将BeagleBoard,Raspberry Pi或类似的任何其他板用作嵌入式设备。只是微控制器,因为它所需要的复杂性就不那么多了。当我开始寻找通过互联网将一个嵌入式设备与另一个嵌入式设备连接的方法时,我偶然发现了两个具有IoT服务的站点。

我知道有些IoT云服务,例如:


Blynk
Google Cloud Platform
外部IoT平台
Ayla IoT平台

仅举几个。这些方面的主要问题是成本和复杂性。您需要付费才能获得这些服务,还必须学习如何实现它们拥有的所有服务,以防万一您需要它们,以及它们的API以及可能对我来说似乎不是必需的其他一些东西。只能在设备之间交换一些字节。我只想要比这更简单的东西,我自己可以做的事情。为了简单起见,请使用这些类型的服务,但是主要有两个原因,我想知道如何实现自己的IoT服务。

主要原因是我想自己做。我不想依靠第三方来将我的设备彼此连接,并且由于我将为我的设备开发代码和硬件,所以最好也创建自己的方法将它们作为物联网设备连接。

第二个原因是要学习如何做。通过了解实现此目标所需的所有必要知识,我将对IoT世界有了更好的了解。日常操作系统,无论是在工作还是在家里,都应避免使用Windows,因为这对我没有用。我不担心我需要为嵌入式设备或Linux在C中实现任何东西,以实现实现我的目标所需的一切。

所以我的问题是,实现什么是必要的,

这个问题我可以用来在我们自己的服务器上创建IoT?具有类似但封闭但没有任何答案的内容,还假定要使用现有的云基础架构。所以对我没有帮助。

另一篇文章哪些IoT服务可用于在云中存储/发送/发布通用数据?有一个类似的问题,但是OP明确要求提供IoT服务,而我正努力避免这种情况。

评论

服务器如何成为“现有的云基础架构”?服务器只是一台计算机。云基础架构还有很多。

另请注意,当我们拥有无处不在的IPv6时,您也许可以让您的IoT设备直接相互通信,而无需中央服务器/云。

相关:iot.stackexchange.com/questions/1119/…

#1 楼

也许我错过了问题的重点,但是我认为这是一个很好的答案。

您至少需要三件事。永远在线的计算节点,用于汇总数据。这不需要强大,它可以是在NAS上运行的一个进程,甚至在理论上也可以在路由器上运行。为了简单起见,假设它是Raspberry Pi。这也可以提供您将来决定支持的任何高级无线电协议。尽管从理论上讲,您可以在所有暴露于Internet的节点上运行对等网络,但是更容易提名一个节点为主节点,并由它来处理数据整理和发布(到应用程序/用户)。当然,集线器也可以是节点,特别是如果您使用功能中等的WiFi节点。 mqtt是您在这里需要的东西,再加上一个可以在其上运行的操作系统。
DNS和端口转发可促进从更广泛的Internet访问您的服务器。忘记安全。这样,您将更接近打开家庭网络上的所有内容进行攻击。也许只有一点点,但是意识到风险是一件好事。您可以试着保重,但要假设您会犯错误。

评论


我不确定这是否是您想要的答案。它应该有助于解决您需要问的问题。

– Sean Houlihane
17年2月22日在18:50

感谢您的帮助!那么,您的意思是我需要某种集线器或网关?

– m4l490n
17-2-22在21:26

是的,您需要一个或多个网关,如果只有一个节点,则显然可能是您的节点。我对答案做了一点编辑。

– Sean Houlihane
17-2-22在21:31



#2 楼

如前所述,轻量级设备和几个字节的日期速率要求使用MQTT。您的传感器节点可能基于独立的ESP8266模块,这些模块的功能足以托管MQTT客户端实现。或者,您也可以将这些模块与外部微控制器一起用作AT命令控制的Wi-Fi模块。具有4 kB的闪存。

您可以在计算机上托管代理,尽管运行Raspberry Pi可能更省电。同样,如果您喜欢编码,则可以实现自己的MQTT代理。我个人认为Mosquitto非常适合此用途。

缺点是所有传感器节点都需要TCP / IP连接。


可以使用电池友好型解决方案启用了LoraWAN或ZigBee的传感器/执行器节点,并在Raspberry / BeagleBone上实现了网关,该网关也可以托管一个简单的Web服务器,可以从您的电话或其他设备访问该服务器。如果一切都变坏了,则使您的集线器,网关或服务器可以在专用网络之外访问。有更多的方法可以做到这一点,并且主要的关注点始终是安全性。我认为这是最危险的部分。

@Sean很好地总结了基本要求。

评论


根据您的回答和@Sean的回答,我看到我需要某种集线器或网关。这是绝对必要的吗?我的意思是,我不能仅通过知道它的IP地址或主机名直接连接到任何节点吗?不是我要避开集线器或网关,而是想了解是否有必要以及为什么。感谢您的帮助!

– m4l490n
17-2-22在21:23



您是否发现Raspberry Pi可以作为“始终在线”设备使用?我在Pi上插入了一个小的HDD,我将其用作网络存储,但总是将其保留。如果可以的话可以吗? (FWIW我上面有小的散热器)

–布鲁斯·韦恩(BruceWayne)
17年2月23日在1:31

@ m4l490n使用集线器或网关使其更简单。这样,您必须为集线器或网关设置端口转发等。如果要直接连接到路由器后面的所有设备,则必须为每个设备设置端口转发。当您打开进入专用网络的更多方式并进行更多工作时,风险会更大。

– Bence Kaulics
17年2月23日在8:15

@BruceWayne我同意。同样在RaspberryPi.SE上,他们已经详细讨论了该主题。

– Bence Kaulics
17年2月23日在8:17

#3 楼

您已经问过关于控制器/集线器需求的两个先前答案。考虑到要使事情发生,您需要规则。如果要按红色大按钮打开车库门,则必须遵循一些规则将传感器(按钮)绑定到所需的动作(打开门)。有两种方法可以实现:可以将规则直接放在按钮中,也可以将规则放在单独的计算机中。如果您向按钮讲解车库门,则您的按钮会内部保存规则。该按钮需要车库门的ID,因此,如果您更换车库门,该按钮将不起作用。如果按钮在您的办公桌上,并且您的房屋使用专有网络,则该按钮必须同时知道家庭网关的地址和门的地址。该按钮需要知道特定的协议以向您的门打开发出信号-所有制造商是否都制造出兼容的按钮,从而知道所有门的信号?除非对该按钮进行重新编程,否则该按钮将无法执行其他操作-您是否有用于该按钮芯片的Flash编程器,并且该编程器是否与任何其他设备兼容?如果您想打开车库门,然后在5分钟后关闭,则您的按钮需要保持实时时钟的所有复杂性。您的按钮不会知道门的状态,因此很难知道您是要关闭门还是要打开门。以及如何备份规则,以便如果按钮损坏,则替换按钮可以胜任工作?从好的方面来说,这听起来很便宜:您不需要单独的计算机。

使用控制器,情况就不同了。来自所有传感器的所有消息均传递到控制器。每个传感器都很简单:将信号发送到控制器。然后,控制器可以将所需的任何输入应用于非常复杂的规则:它可以检查阳光传感器并且除非天黑否则不打开室外灯,或者如果该月的平均降雨量高于平均水平并且当前温度不运行洒水器比平均水平低5度。控制器可以跟踪状态。如果您需要“关闭车库门”按钮而不是“打开车库门”按钮,那么这可能很重要(当我出门在外时,我很少要打开门,但是如果确实要关闭,我肯定要关闭它意外地打开。)

控制器可以为知道如何听按钮的设备驱动程序和知道如何对门讲话的其他驱动程序提供场所。与塞在按钮内的小芯片相比,该控制器可能更易于升级为新设备和设备类型。

控制器还可以对基础结构任务具有更复杂的逻辑,例如通过提供特定级别的服务来传递消息。例如,MQTT协议允许三个不同的级别:尝试传递一次消息,重复传递直到至少看到一次为止,或者仅一次传递一次。

控制器提供了一个从体系结构上讲逻辑上的位置,可以合并往返通信网关的所有消息,从而允许使用外部接口。这意味着您的按钮和手机都可以发送信号,并且规则可以确定允许任何一个打开车库门。网关还可以提供安全性。您不必将按钮和车库门放在互联网上;您可以将它们都放置在专用的隔离网络上,并使用网关承载信号。控制器还提供了一个单点来备份系统的所有规则。

控制器的缺点是增加了延迟和额外的复杂性。令人惊讶的是,控制器并没有使成本明显上升。您可以在Raspberry Pi上实现一个控制器,而成本却比一个普通的远程可控电灯便宜。不要仅仅基于成本就打折这个想法。

评论


好吧,似乎非常需要HUB或控制器,特别是如果我需要在我的所有IoT设备上使用基于规则的功能以充分利用整个网络时,尤其如此。

– m4l490n
17年2月23日在22:13

因此,如果我理解正确,则可以建立对等连接,前提是我不需要复杂的规则甚至不需要复杂的IoT设备网络,并且这还将假定IoT设备与其他品牌,例如一个按钮将始终与同一开门器捆绑在一起。

– m4l490n
17年2月23日在22:15

否则,如果需要更多的灵活性和功能性,那么我应该拥有一个HUB。那是对的吗?

– m4l490n
17年2月23日在22:15

是的,那是一个准确的总结。几乎每个人最终都需要某种集线器/控制器。商业中心和开源中心都有很多选择。

–约翰·迪特斯
17年2月23日在23:14