朱晓光 刘好杰 王刚
摘 要:物联网是当下的“网红”,多少人都想一探究竟,但复杂的程序、高深的协议将大多数人拒之门外,本文正是针对此种状况,选择适合初学者的硬件和开发集成环境,从基本概念到具体应用,使读者从整体解释了物联网的开发流程,理解其本质。
关键词:物联网;ESP8266;Mixly;Blynk
物联网,顾名思义,即“万物相连的互联网”,是在互联网基础上延伸和扩展的网络,将各种信息传感设备与互联网结合起来而形成的一个巨大网络,实现在任何时间、任何地点,人、机、物的互联互通。它起源于互联网(计算机的网络),但它的连接实体已不仅仅局限于计算机,而是包括了汽车、家电、医疗设备、智能仪器等万事万物,正如其英文名字——The Internet of Things,简称IOT。
1 物联网基本理念
物联网的基本结构是通过无线或有线的方式将万物连接到一个服务器平台上,即所谓的“云”,云端包含了所有的信息交换,也储存了所有的信息,这就是“大数据”,这些数据加以利用,便可分析用户的各类信息,因此,在物联网的世界里,隐私是不存在的。但是,物联网带来的便利也是巨大的,最简单的应用场景:在你下班回家之前,通过手机APP控制家里的空调提前工作,当你回到家中,便是宜人的环境,舒适的温度。
当然,你也是要付出信息代价的:你的下班时间、你喜欢的温度、你空调的型号等等,利用这些信息可以分析你的工作性质、生活习惯、住房面积、甚至你的经济情况,再综合其他设备提供的信息,你的大数据就产生了。当然,这也为你的生活带来了便利,根据你的习惯和能力推荐适合你的产品。比如,在你的空调难以达到你的预设温度时,淘宝的推送就是一台大功率的空调,“云”似乎比你自己还了解你!
当前,这种情况涉及的讨论越来越多,到底是我们利用大数据实现了便捷,还是我们被大数据利用,成为数据的附庸?似乎“西部世界”中也讨论了这样的问题。这不是我们今天要讨论的重点,既然享受服务,自然要付出代价。但我们应该了解的是这一切发生的过程,当你再收到某些推送时,你应该了解的是这一系列产生的机制,哪些是你真正的需要,利用大数据的便利,而避免被“云”左右。说了这么多,只是要引出今天要介绍的一款物联网芯片——ESP8266。
2 ESP8266简介
说到连接互联网,尤其是设备通过单片机联网,之前并不是件容易的事,开发者需要增加硬件模块,掌握互联网的各类协议,编写单片机与模块的通信代码,受限于单片机的存储量和运行速度,这方面的应用并不广泛,尤其是对于业余开发者更是困难重重。直到2015年,由乐鑫公司出的一款WiFi芯片——ESP8266,它以其超低的价格,引起了物联网业界的轩然大波,大大促进了物联网的发展!由于WiFi设备需要专业的射频设计,因此使用者往往直接购买集成了ESP8266芯片的模组,如安信可的ESP-12集成了天线、Flash等元件的模组。
ESP8266准确来说是集成了WiFi功能的MCU,它的开发方式有以下几种:
1)AT指令方式:烧录AT的固件包,使用AT指令与ESP8266交互,执行相应指令。该方式开发简单,资料较多。只需知道AT指令集,以及它的通信方式即可。但缺点是浪费资源,需要额外的MCU与其通信,不能独立完成某项功能。
2)乐鑫开发包SDK,专门针对乐鑫芯片开发,但对于业余者相对吃力。
3)NodeMCU的lua开发:烧录NodeMCU的固件包,使用Lua语言开发,使用ESP内部资源。该方法节省资源,开发简单,代码量少。但lua解释器执行效率较低,需要准备相应功能的固件,烧录进去,然后使用lua语言和工具与之调试。
4)Arduino IDE下的开发:相当于直接编写固件,编译之后,烧录进ESP,使用ESP内部资源。这种方式使用当前非常流行的Arduino集成开发环境,集编程和烧录一体,使用方便。语言执行效率高,节省资源,库函数比较多,开发语言简单,能够很快上手。由于Arduino的用户量巨大,乐鑫公司也推荐使用该方式进行开发。本文将重点介绍基于Arduino的ESP8266开发。
3 Mixly(米思齐)与Blynk
硬件有了,接下来便是软件,物联网软件包括两大部分:MCU软件和客户端软件,MCU软件既ESP8266的程序,客户端软件则是在手机上或计算机上运行的与MCU进行交互的界面,两者并非直接通信,而是通过中介——云。MCU程序将设备的运行状态和各类参数上传到云端,经过云端处理后发送到客户端;客户端的各类指令同样经过云端中介后发送给MCU执行。接下来重点介绍这两种软件的集成开发环境:Mixly(米思齐)与Blynk。
Arduino是基于C语言为基础的,如果开发者有过51或AVR单片机学习经历,那么使用Arduino将得心应手,可以说更加方便简单,但对于很多非专业人员,尤其是想学习编程的青少年,仍有一定难度,加之当前编程教育的兴起,大量图形化编程工具应运而生,最为著名的便是麻省理工学院开发的Scratch。为了推广创客教育,北京师范大学教育学部创客教育实验室傅骞教授团队开发的Mixly是一款专门针对Arduino的图形化编程软件,而且它允许外加函数库,大大丰富了其资源,针对物联网开发甚至推出了專用版本——Mixly For IoT,这不得不说是广大物联网开发爱好者的福音!
Blynk既云平台,是一款服务器在国外的物联网开发软件,可以通过手机开发客户端程序,而且Mixly中已有专门针对Blynk的库函数,开发者可以不必关注低层协议,而把重点放在创意实现上。此外Blynk允许自建服务器,可以选择国内物联网爱好者搭建的一些服务平台,保证通信的稳定性;也可以搭建自己的服务器,提高数据安全,并在必要时进行数据分析。此外,云平台还有阿里云、百度云、中国移动的OneNet等等,对于初学者和个人用户,Blynk相对而言上手较为简单,应用比较灵活。
4 典型应用实例
学习一个新事物,理论看的再多也难以理解其本质,只有通过一个具体的项目,完整的开发过程才会使學习者形成整体认知,避免只见树木,不见森林的学习陷阱。我们以一个最简单的应用场景为例进行开发:远程控制。通过手机端发送指令,控制联网的设备工作,这个设备可以是热水器、空调、电饭煲……在这里我们以LED代替,也就是说,手机客户端控制LED的亮与灭。
在这里我们使用的ESP8266模块是NodeMCU,只要Arduino中安装了ESP8266的开发包,NodeMCU就包含其中,在米思齐中选择开发板型号为NodeMCU即可,其Blynk物联网函数库中也包含了大量资源,如图1所示。
在此实例的应用中,ESP8266程序只需要做一件工作——联网。在米思齐中,联网只需要一个代码模块,如图2所示。服务器地址可以选择Blynk的官方服务器blynk-cloud.com,也可以选择国内服务器,如笔者用的116.62.49.166。在此需要特别注意的是,在使用国内服务器时,需要将IP地址格式的“.”用英文输入法的“,”代替。此后便是WiFi名称和密码,根据实际情况输入即可。关键在于第四个参数Blynk授权码,此授权码是客户端与MCU端进行通信的“接头暗号”,由Blynk App创建新项目时生成的具有唯一性的编码,通过此编码,手机客户端和ESP8266开发板实现相互对应。这些信息设置完成后,上传程序,NodeMCU开发板便连接到了设定的服务器上,此后的工作便是通过手机客户端控制其端口输出0/1,D6端口连接LED,输出为“1”,灯亮,反之,灯灭。在此需要注意的是NodeMCU开发板的D6端口并不对应ESP8266的GPIO6,而是GPIO12,如图所示,因此,客户端程序对于ESP 8266的控制端应为GP12。
最后一项就是开发手机端的Blynk程序,开发流程如下:1)在注册账号时设置自定义服务器地址,否则默认官方服务器;2)创建新工程,我们命名为“远程控制”;3)在工程设置界面可以获取Blynk授权码Auth Token,此码即为前文提及的与ESP8266的“接头暗号”;4)在开发界面添加组件Button;5)对组件进行设置,名称为“按钮”,OUTPUT设置为GP12,MODE(按钮形式)设置为SWITCH,其他默认;6)完成设置后界面显示按钮及其对应端口,单击右上角三角形进行运行发布;7)如果此时ESP8266已通电并联网,界面显示设备在线信息,单击按钮可实现LED的亮灭控制。至此,远程控制LED项目完成,将硬件电路略作修改,将LED换为其他元件,如继电器等,便可实现用电设备的远程控制。
5 结束语
本文通过一个最为简单的应用场景,利用ESP8266的NodeMCU开发板,基于Mixly与Blynk实现了手机对物联网设备的远程控制,跟随笔者的步骤,可实现项目开发,激发学习热情,并结合自身学习过程遇到的问题,有效帮助初学者避开陷阱,提高学习效率,轻松入门。