当DevOps撞上物联网

简介: DevOps 领域在近年来变得流行而普遍。它强调不同的角色之间共同协作,以及如何工作得更加紧密,就像这个词语的词根暗示的那样——开发和运维。但是DevOps和物联网有什么关系? 本文选自《DevOps实践》,将与您探讨DevOps和物联网的关系以及与您动手制作一个简单的物联网设备。

DevOps和物联网有什么关系?

  迄今为止,我们讨论的物联网的基础,基本上是寻常的互联网加上我们无法想象的节点数。我们也看到,在未来的几年中,能以各种形式联网的设备数量将继续呈指数增长。这一增长将是因特网的机器对机器部分。
  但是,对于更加关注快速交付的DevOps,真的适合关键嵌入式设备的大型网络吗?
  经典的反例是DevOps在核设施或者在诸如心脏起搏器的医疗器械中。但是单纯地更快发布不是DevOps的核心理念。它是通过将不同学科的人紧密联系在一起工作,更快、更准确地发布。
  这意味着让类产品环境的测试环境贴近开发者,同时大家的合作更加紧密。
  这么说的话,看起来DevOps可以用在保守的传统行业。
  当然,不能低估面临的挑战:

  • 嵌入式设备的生命周期比传统的客户端——服务器计算机要长。消费者不能期望在每个产品周期都升级。同样,工业设备部署的地方更换起来可能很昂贵。
  • 相比桌面计算机,物联网设备失败的模式更多。这让测试变得更加困难。
  • 在工业部门和企业部门,可追溯性和可审计性是很重要的。这和在服务器上部署是一样的,但物联网端点比服务器更多。
  • 传统的DevOps可以将很小的变更部署到用户的一个子集。如果修改不工作,我们可以修复并重新部署。如果对我们一个已知的用户群来说网页渲染很糟糕,并且这个问题可以快速修复,潜在的风险就很小。另一方面,如果一个单的物联网设备控制的物体,例如一道门或一个工业机器人出现故障时,造成的后果可能是灾难性的。

物联网领域对于DevOps来说挑战很大,但是换种方式不见得会更好。DevOps也是一个工具箱,你需要思考从中找挑出的工具是否能正确应对当前工作。
  我们仍然可以使用许多DevOps工具箱中的工具,只需要确保我们在做正确的事情,而不只是在不理解问题的前提下实现想法。
  下面是一些建议:

  • 只要你在测试实验室中,失败和快速周转是可以的。
  • 确保你的测试实验室和产品环境接近。
  • 在实验室不要只使用最新版本,也要兼容旧版本。

DevOps的物联网设备动手实验室

  为了得到动手环节的灵感,让我们来制作一个简单的物联网设备,它可以连接到Jenkins服务器并且显示出构建的状态。通过这种方式,将我们尝试的物联网设备和DevOps结合起来!
  在构建失败的情况下,将闪烁的LED作为状态显示。这个项目很简单,但是聪明的读者可以以此为基础扩展项目。为本次练习挑选的物联网设备比较灵活,可以实现比LED闪烁更多的功能。
  该项目将有助于说明一些可能性以及物联网的挑战。
  NodeMCU Amica是来自Espressif的基于ESP8266芯片的可编程的小设备。除了基本的ESP8266芯片,Amica板额外的特性让开发更加容易。
  下面是一些设计的规格:

  • Tensilica Xtensa LX106是一个32位的RISC CPU,运行频率为80MHz。
  • 它的Wi-Fi芯片允许它连接到我们的网络和Jenkins服务器。
  • NodeMCU Amica板有一个USB接口可以给固件编程并连接到电源适配器。ESP8266芯片需要一个USB到串口的适配器去连接USB接口,它由NodeMCU板提供。
  • 板子有几个输入/输出的端口,可以连接到某些硬件上来可视化构建的状态。开始我们会做得比较简单,只使用连接到设备上某个端口的板载的LED。
  • NodeMCU自带的固件可以通过Lua语言来编程。Lua是一种高级语言,可以快速实现原型。顺便提一句,它在游戏编程领域也很流行,也可以从另一方面说明Lua的高效。
  • 考虑到它提供的这么多功能,这个设备相当便宜:
    图片描述

很多地方都可以买到NodeMCU Amica,从电子商店到网上经销商。
  买到NodeMCU不难,从硬件的角度来说项目也很简单,在实践中也可以采用Arduino或者树莓派,如果它们更容易获得。
  下面是一些NodeMCU的入门提示:

  • NodeMCU包含的固件提供了交互式Lua解释器,可以通过串行端口访问。你通过串行线来直接开发代码。在你的开发机上安装串行通信软件。这样的软件有很多,比如在Linux下的Minicom和Windows下的Putty。
  • 使用串口设置9600波特率、八位、无奇偶校验和一个停止位。这个设置通常缩写为9600 8N1。
    既然我们已经有了串行终端连接,将NodeMCU连到USB端口,切换到终端,验证你在终端的窗口看到了提示符。

如果你使用的是Minicom,提示的窗口如下:
图片描述

开始写代码前,根据具体的NodeMCU的出厂设置,你可能需要往设备烧录固件的镜像。如果在前一步你看到了提示符,就不需要烧录固件的镜像。如果以后你需要在镜像中加更多的特性就得重新烧录镜像。

  下面是一个用wget命令下载固件的例子。发布的版本号用整数和浮点数表示,根据你的需要去选择具体的版本。对于嵌入式的应用来说,整数的固件版本通常就足够用了:

   wget https://github.com/nodemcu/nodemcu-firmware/releases/
   download/0.9.6-dev_20150704/nodemcu_integer_0.9.6-dev_20150704.bin

  你也可以在开发机器上通过GitHub源码直接构建固件镜像,或者也可以根据你的规格使用在线构建服务区构建一个固件。
  在线构建的服务地址是http://nodemcu-build.com/。值得一看。如果不出意外,构建统计图颇为耐人寻味。
既然已经有了一个合适的固件文件,你需要安装固件烧录工具,才能把固件镜像文件上传到NodeMCU:

git clone https://github.com/themadinventor/esptool.git

  按照代码库中的README安装指南文件来安装。
  如果不喜欢README中建议的系统安装,你可以根据你的系统发行版去安装pyserial的依赖并在git克隆的目录中运行这个工具。
  下面是安装pyserial依赖的命令例子:

sudo dnf install pyserial

  实际的固件上传需要一些时间完成,但是进度条的显示可以让你知道发生了什么。
  下面的例子是在本书撰写时,在命令行中上传0.9.6固件的命令:

sudo python ./esptool.py --port /dev/ttyUSB0 write_flash 0x00000 nodemcu_
integer_0.9.6-dev_20150704.bin

  如果在连接NodeMCU时串行命令行出现乱码,你可能需要为烧录固件的命令提供一些额外的参数:

sudo esptool.py --port=/dev/ttyUSB0 write_flash 0x0 nodemcu_
integer_0.9.6-dev_20150704.bin  -fs 32m -fm dio -ff 40m

  命令esptool也有其他的功能,可以用来验证设置:

sudo ./esptool.py read_mac
Connecting...
MAC: 18:fe:34:00:d7:21
sudo ./esptool.py flash_id
Connecting...
Manufacturer: e0
Device: 4016

  固件上传完成后,重置NodeMCU。
  这个时候你应该已经有了一个带有NodeMCU欢迎提示的串行终端。通过使用工厂提供的NodeMCU固件或者上传一个新的固件到设备都可以达到这个状态。
  现在,我们开始试试一些“hello world”风格的练习。
  一开始,只要我们连接到NodeMCU Amica板GPIO引脚0上,LED就开始闪烁。如果你有其他类型的板子,你需要找出它是否有LED,如果有,输入/输出引脚是哪根。你也可以自己包装一个LED。
  如果终端软件允许,你可以将程序作为文件上传到NodeMCU,或者直接在终端上敲击代码。
  你可以首先试着点亮LED:

   gpio.write(0, gpio.LOW)  -- turn led on

  然后用下面的命令关闭LED:

   gpio.write(0, gpio.HIGH) -- turn led off

  现在,你可以循环下面的语句,其中穿插一些延迟语句:

   while 1 do                             -- loop forever
         gpio.write(0, gpio.HIGH)     -- turn led off
         tmr.delay(1000000)               -- wait one second
         gpio.write(0, gpio.LOW)      -- turn led on
         tmr.delay(1000000)               -- wait one second
   end

  此时,你应该能够验证一个基本工作的设置。直接在终端输入代码有点原始。
  NodeMCU有不同的开发环境来提高开发的体验。
  在能够完成实验前,我们需要一些额外的提示。使用以下命令连接到无线网络:

   wifi.setmode(wifi.STATION)
   wifi.sta.config("SSID","password")

  SSID和password需要用网络真实的SSID和密码替换掉。
  如果NodeMCU正确连接你的无线网络,这个命令会打印出从网络的dhcpd服务器获得的IP地址:

   print(wifi.sta.getip())

  这段代码会连接到www.nodemcu.com的HTTP服务器并且打印返回码:

   conn=net.createConnection(net.TCP, false)
   conn:on("receive", function(conn, pl) print(pl) end)
   conn:connect(80,"121.41.33.127")
   conn:send("GET / HTTP/1.1\r\nHost: www.nodemcu.com\r\n"
       .."Connection: keep-alive\r\nAccept: */*\r\n\r\n")

  你可能还需要计时功能。下面的代码每隔1000毫秒打印hello world:

   tmr.alarm(1, 1000, 1, function()
       print("hello world")
   end )

  在这里,我们声明了一个匿名函数并将其作为参数发送给timer函数,不经意地显露出了Lua的函数型范式。匿名函数每隔1000毫秒,也就是1秒被调用一次。
  要停止timer,只需要执行:

   tmr.stop(1)

  现在,你应该明白了所有可以自行完成实验的细节。如果遇到问题,可以参考本书源代码包中的代码。玩得开心!
  本文选自《DevOps实践》。
                   图片描述
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                      图片描述

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
3月前
|
传感器 人工智能 监控
物联网+AI智慧工地云平台源码(SaaS模式)
在工地上安装扬尘噪声监测仪、车辆冲洗监测等设备,通过多系统信息融合应用,积极响应国家节能减排号召,实时、远程、自动监控工地现场的温度、湿度、pm2.5、pm10、噪音等情况,一旦数据超标,平台会马上发出预警,实现绿色施工。
52 1
|
4月前
|
边缘计算 人工智能 安全
|
传感器 存储 监控
工业企业物联网项目实施经验分享
物联网的实施很复杂,互连设备和IT服务的集成在网络、通信、数据量、实时数据分析和安全性方面构成了重大挑战。
工业企业物联网项目实施经验分享
《美的物联平台的云上实践与应用--- 人机新世代战略下的智能化探索》电子版地址
美的物联平台的云上实践与应用--- 人机新世代战略下的智能化探索
53 0
《美的物联平台的云上实践与应用--- 人机新世代战略下的智能化探索》电子版地址
|
新零售 搜索推荐 物联网
物联网应用托管之奇点魔镜培训 | 学习笔记
快速学习物联网应用托管之奇点魔镜培训
176 0
物联网应用托管之奇点魔镜培训  |  学习笔记
|
存储 运维 Kubernetes
从这些云原生企业身上,我看到了数字化创新者该有的样子
未来的数字世界是什么样子?手握云原生地图的企业,又将如何颠覆数字化?带着这些疑问,我们采访了教育、金融、新零售、互娱、传媒等领域的多位大咖,他们是数字创新的引领者,也是用云原生技术创造业务价值的践行者。接下来,就让我们一起听听通过“云原生”,他们发生了哪些改变?
45042 1
从这些云原生企业身上,我看到了数字化创新者该有的样子
|
存储 弹性计算 运维
夯实信息安全底座,统信软件“云”上跑出加速度
在网站运维方面,由于后端存储不统一,统信软件需要收集Nginx、Apache等服务器以及安全产品等不同类型日志,无法统一采集管理,为数据分析、故障排查带来了不便。为了改变这一现状,统信软件亟需构建一个高效的运维平台,提高IT运维效率。在与阿里云进行深入的沟通与交流后,统信软件采用了日志服务SLS智能运维方案。
445 0
夯实信息安全底座,统信软件“云”上跑出加速度
|
传感器 JavaScript 前端开发
HaaS样板间助物联网轻松上云实践 -《神奇的物联网》
从2020年云栖大会HaaS团队第一次发布“HaaS物联网设备云端一体开发框架”至今,HaaS团队共发布了HaaS100/ EDU K1/ 200/ 506/ 610/ 531/ 600等HaaS智能硬件。为了让广大开发者用户在拿到HaaS硬件之后不让它吃灰,我们专门打造了“HaaS JS轻应用样板间”,基于此开发者用户们可以在10分钟内快速体验一把“HaaS云端一体”的解决方案。
|
存储 边缘计算 缓存
2021云边协同大会:阿里云周哲畅聊边缘云基础设施创新发展及场景化实践
6月4日,以“开启分布式云新时代”为主题2021云边协同大会在北京举行,本次大会由中国信息通信研究院主办。阿里云边缘云计算高级技术专家周哲受邀参会,分享了阿里云在边缘云计算的探索,介绍边缘云主要产品的交互形态,如何在云基础设施升级过程中的演进,面向企业客户提供最佳业务体验。
675 0
2021云边协同大会:阿里云周哲畅聊边缘云基础设施创新发展及场景化实践