前言
最近这两三年,“物联网”一词开始进入我们普通大众的耳朵。但对大多人来说这似乎还是一个挺高大上的事物。随着智能家居产品的兴起,其实物联网已经在逐渐走进我们的生活,比如家里的可以远程控制的扫地机器人、智能插座及空调。这些都是物联网给我们生活带来的便利,物联网将电器加上能够连接互联网的设备,使之成为互联网中的一部分,方便我们随时按需控制。
那么,我们自己可以制作物联网产品吗?答案是肯定的。今天笔者就要与大家分享一个低成本,而且简单的物联网产品的制作方法。
准备材料
(1)WeMos D1开发板一块:WeMos是一块基于ESP8266的Arduino UNO 兼容Wi-Fi开发板,这么说起来似乎有点难懂。我们可以把它理解成是一块带Wi-Fi功能的Arduino UNO开发板。
(2)电子元器件若干,如:5mm LED,LM35温度传感器,DHT11温湿度传感器等。
(3)智能手机一部(苹果或安卓手机):用于远程控制WeMos D1主控板。
准备工作
安装Arduino
先从Arduino官网下载最新版的Arduino(下载地址为:http://www.arduino.cc)。双击arduino-1.8.2-windows.exe安装Arduino官方版本,点击下一步,按照默认参数安装即可。
安装ESP8266库
打开Arduino软件,找到文件-首选项,在首选项的附加开发板管理器网址中输入以下地址:http://arduino.esp8266.com/stable/package_esp8266com_index.json,如图 1所示。
再依次点击工具-开发板-开发板管理器,搜索关键词“8266”,搜到esp8266后点击安装,稍等几分钟后,该开发板库文件就会安装完毕,如图 2所示。
安装完毕后,再次点击工具-开发板,就可以找到WeMos D1(Retired),单击选中该选项。
安装完Esp8266开发库之后,Arduino IDE已经可以为8266类开发板上传程序,但是为了可以使用Blynk平台, 还需要安装Blynk库。从GitHub下载最新版的Blynk库,下载地址为https://github.com/blynkkk/blynk-library/releases/latest。再将Blynk库解压到Arduino项目文件夹,项目文件夹路径可以通过Arduino软件中文件-首选项找到,如图 3所示。解压后项目文件夹结构如图 4所示。
安装Blynk APP并初始设置
安卓用户扫描下方二维码安装Blynk App。
iOS用户可以在App Store 中搜索Blynk并安装。
安装好App后,打开App后点击Create New Account(注册新用户),然后在注册页面填写自己的邮箱和密码即可完成注册。首次登录后可以看到App内暂时还没有任何项目,点击Create New Project(创建新项目)。在创建项目页面填写项目基本信息,其中的CHOOSE DEVICE (选择设备)要选择WeMos D1,下面的CONNECTION TYPE(连接类型)选择Wi-Fi并保存。保存之后,App会提示授权码已经生成并发送到了你的邮箱。App端的准备工作就这么多,只要你耐心一步一步操作,相信不会难倒你,步骤如下图所示。
牛刀小试:远程开灯
一切准备就绪之后,我们就可以通过Blynk来远程控制一盏小灯啦。在控制小灯的过程中,我们一起来了解它的工作原理。
生成案例代码
首先利用Blynk案例生成器(https://examples.blynk.cc/)产生一段简单的范例程序。网站左侧的设置如图 6所示,其中的Auth Token是在App端创建项目之后邮箱中收到的授权码,将它复制进来即可。
![图 6在Blynk案例生成器中填写授权码](http://upload-images.jianshu.io/upload_images/10215886-7798b2c16d858263.png?!将右侧生成的代码全部复制到Arduino IDE中,在IDE中的选择开发板信息,其中开发板选择WeMos D1(Retired),CPU频率选择80MHz,Upload Speed选择115200,端口选择WeMos D1所在的端口,设置如图 7所示。
将程序中的ssid修改成你当前位置的Wi-Fi名称,将pass修改成该Wi-Fi的密码,注意此处的引号一定要保留,如图 8所示。
点击上传按钮就可以将程序上传到WeMos D1开发板中,当在Arduino IDE中看到如图 9信息时表示程序上传成功。
App端项目设置
开发板的程序上传好之后,接下来需要设置手机上的App端。这样通过App就可以控制开发板了。点击空白处增加组件。选择第一个组件——Button,然后在按钮设置界面设置按钮信息。WeMos D1板载的LED在D5口,所以在output处选择D5,MODE可以选择PUSH(按住有效)或者SWITCH(按下有效),再设置按钮标签文本。
全部设置完毕后,返回主界面,点击右上角的三角图标,启动该项目。然后按下自己创建的按钮试一试,当你按下时,WeMos D1开发板上的SCK灯就会点亮;松开按钮,SCK灯就会熄灭,步骤如下图所示。
通过这个小项目,是不是发现控制一盏小灯其实很简单?除了修改几个参数,我们自己并不需要写一行代码。
当你完成这个实例之后,你还可以试着创建一个Slider组件。OUTPUT也选择D5,再启动该项目,拖动slider的滑块,观察SCK灯,是不是还可以用这个滑块控制SCK灯的亮度呢?slider组件可以输出PWM值,而WeMos D1开发板除了D0口,其他接口全部支持PWM输出,因此我们就可以通过一个slider组件来控制D5接口的LED亮度。如果D5接口连接的是一个小风扇,那么是不是也可以用该方法控制风速呢?
程序剖析
当我们实现了远程控制开发板上的LED之后,我们再来研究程序,梳理思路。
删除注释之后,我们发现,在WeMos D1开发板上传的程序只有短短的16行,那么这16行分别有什么含义呢?
#define BLYNK_PRINT Serial//宏定义
#include <ESP8266WiFi.h>//导入库文件
#include <BlynkSimpleEsp8266.h>//导入库文件
char auth[] = "YourAuthToken";//设置授权码,该授权码是App端创建项目后生产的唯一的授权码。手机app通过该授权码与开发板通信。
char ssid[] = "YourNetworkName";//Wi-Fi名称
char pass[] = "YourPassword";//Wi-Fi密码
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);//连接到blynk云
}
void loop()
{
Blynk.run();//blynk开始工作
}
上面两个实例中,我们并没有修改代码,修改的只是App端的设置。其实这16行程序可以看做是多用途程序,在对I/O口进行简单读写操作时,都可以用这段程序。
如果我们继续推广,还可以在此基础上进行拓展。如果想要用WeMos D1远程控制家里的一盏台灯,只需要再加继电器模块即可。将继电器的控制端接在WeMos D1的D5端口,将台灯的火线剪断,接入继电器即可,接线如图 13所示。
看到这里,我们已经可以利用Blynk制作物联网应用,实现很多神奇的功能了,而实现这些功能并不需要太多的代码。
远程获取数据
在物联网应用中,除了简单的控制以外,我们也常常会有其他的需求。比如远程获取温度就是一种常用的情况。当我们人在外面,希望通过手机查看家里的温度。此时,该如何借助Blynk远程读取LM35温度传感器的数据呢?
硬件连接
LM35温度传感器是一款线性模拟电压传感器,该传感器的输出电压与摄氏温度呈线性关系,0℃时输出电压为0V,每升高1℃,输出电压增加10mv。WeMos D1开发板上支持模拟输入的引脚只有A0,那么就可以将LM35温度传感器连接在A0引脚。温度与A0口读数之间的换算公式为:温度=A0读数×3.3÷1024×100。(注:WeMos D1开发板的A0接口输出电压为3.3V)
APP端设置
在手机端需要设置一个可以显示数值的模块,这个数值是从开发板传输过来的。在App端可以增加Value Display 或者Labeled Value组件,前者只能显示数值,后者可以标注数值名称及单位。
在此,选择Labeled Value组件,在组件设置中设置参数,如下图所示。其中最关键的是要将INPUT一栏设置成V1,此处要与程序中设置的端口保持一致。
程序剖析
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char auth[] = "xxxxxxxxxxx";//授权码
char ssid[] = "wifi-ssid";//wifi名称
char pass[] = "wifi-password";//wifi密码
BlynkTimer timer;
int value,Temperature;
void myTimerEvent()
{
value=analogRead(A0);//获取到A0口测得数据
Temperature=value3.3/1024100;//计算温度值
Blynk.virtualWrite(V1, Temperature);//将温度值写入V1端口
}
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, myTimerEvent);//每隔1秒执行一次myTimerEvent
}
void loop()
{
Blynk.run();
timer.run();
}
程序效果
将程序上传后,开启App端,则可以看到温度组件可以显示当前测到的温度。如果给传感器适当加热,APP端的数值马上就会发生变化。如果想要在App端显示温度的变化曲线,还可以增加History Graph组件,利用该组件就可以很方便地显示温度变化曲线了,效果如下图所示。
如果想要把记录的数值导出来,可以在History Graph组件上向左滑动,会出现导出数据和擦除数据选项,如图 17所示。选择导出数据,你就可以收到一份邮件,邮件中的.csv文件中包括了你导出的数据,有了这份数据后,如果想要做一些数据分析就变得很方便了。
几十年前竺可桢爷爷记录气象日记需要每天观察记录,而如今,我们只需要制作一个简单的物联网应用就可以轻松解决了。
结语
通过几个简单的例子,相信你已经初步掌握了物联网应用的开发了吧。借助常用的传感器,制作一些炫酷的作品,让物联网技术尽早走进你的生活吧!
(本文发表于《无线电》2017年10月刊)