物联网开发,SO EASY——基于Blynk的物联网应用开发

前言

最近这两三年,“物联网”一词开始进入我们普通大众的耳朵。但对大多人来说这似乎还是一个挺高大上的事物。随着智能家居产品的兴起,其实物联网已经在逐渐走进我们的生活,比如家里的可以远程控制的扫地机器人、智能插座及空调。这些都是物联网给我们生活带来的便利,物联网将电器加上能够连接互联网的设备,使之成为互联网中的一部分,方便我们随时按需控制。
那么,我们自己可以制作物联网产品吗?答案是肯定的。今天笔者就要与大家分享一个低成本,而且简单的物联网产品的制作方法。

准备材料

(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所示。

图1 填写附加开发板管理器网址

再依次点击工具-开发板-开发板管理器,搜索关键词“8266”,搜到esp8266后点击安装,稍等几分钟后,该开发板库文件就会安装完毕,如图 2所示。
安装完毕后,再次点击工具-开发板,就可以找到WeMos D1(Retired),单击选中该选项。
图2 开发板管理器安装Esp8266开发库

安装完Esp8266开发库之后,Arduino IDE已经可以为8266类开发板上传程序,但是为了可以使用Blynk平台, 还需要安装Blynk库。从GitHub下载最新版的Blynk库,下载地址为https://github.com/blynkkk/blynk-library/releases/latest。再将Blynk库解压到Arduino项目文件夹,项目文件夹路径可以通过Arduino软件中文件-首选项找到,如图 3所示。解压后项目文件夹结构如图 4所示。
图 3查找Arduino项目文件夹

图 4 Blynk文件夹解压后文件夹结构

安装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端的准备工作就这么多,只要你耐心一步一步操作,相信不会难倒你,步骤如下图所示。

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所示。

图7设置开发板USB选项

将程序中的ssid修改成你当前位置的Wi-Fi名称,将pass修改成该Wi-Fi的密码,注意此处的引号一定要保留,如图 8所示。
图 8在代码中修改自己的Wi-Fi信息

点击上传按钮就可以将程序上传到WeMos D1开发板中,当在Arduino IDE中看到如图 9信息时表示程序上传成功。
图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开始工作
}
图 12用Blynk与WeMos D1控制小灯示意图

上面两个实例中,我们并没有修改代码,修改的只是App端的设置。其实这16行程序可以看做是多用途程序,在对I/O口进行简单读写操作时,都可以用这段程序。
如果我们继续推广,还可以在此基础上进行拓展。如果想要用WeMos D1远程控制家里的一盏台灯,只需要再加继电器模块即可。将继电器的控制端接在WeMos D1的D5端口,将台灯的火线剪断,接入继电器即可,接线如图 13所示。


图 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文件中包括了你导出的数据,有了这份数据后,如果想要做一些数据分析就变得很方便了。
几十年前竺可桢爷爷记录气象日记需要每天观察记录,而如今,我们只需要制作一个简单的物联网应用就可以轻松解决了。


图 17 App端导出历史数据

结语

通过几个简单的例子,相信你已经初步掌握了物联网应用的开发了吧。借助常用的传感器,制作一些炫酷的作品,让物联网技术尽早走进你的生活吧!

(本文发表于《无线电》2017年10月刊)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,448评论 25 707
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,599评论 1 180
  • 文章结构 <a id="1"></a>前言 前段时间从网上买了一个体重计,它自带了无线上网的功能,能够同步体重测量...
    Linsw阅读 4,492评论 4 20
  • “痛苦的滋味有31种,而那一切滋味都不是失去,而是曾经拥有。”——《我们是这样活过来的》 去图书馆蹭无线,走过新书...
    我叫辛美乐阅读 464评论 2 1
  • 当你一筹莫展 你最好选择相信 火苗会凭空燃起 如同神的计划和恩典 从不落空 从无失误
    农药般的丫头阅读 136评论 0 1