青少年从零动手学物联网,Blynk+Mixly+Arduino一本搞定

异步社区官方博客

有的小朋友会做可以远程控制的台灯?有的小朋友给妈妈做了花草监护器?还有小朋友给爸爸做了减肥沙发?“别人家的孩子”这么厉害了吗!?你们也能!

只需要拥有这样一本书,然后认真学习就可以啦!

物联网So Easy 基于Blynk平台的IOT项目实践,作者裘炯涛,陈众贤著。

实用的远程烟雾报警器、酷炫的舞台七彩灯,那个叫“麦熊战车”的停车位检测装置、神奇的教室感应灯,还有足以引出很多烧脑迷题的教室人数统计器……所有这些,都能在这本书里找到!

我们一起来找一些可以利用的材料(LED灯、传感器小模块以及Laserblock-loT木板),打开手机端Blynk App,一步一步,做出你们自己的物联网创意作品吧!

《物联网So Easy》先介绍物联网的一些概念,并在认识物联网开发板的基础上介绍搭建物联网开发环境的方法;接着通过实现远程控制台灯、定时风扇等初级项目,引导读者利用手机与硬件完成互相发送简单命令、实现远程控制、远程数据获取等任务。随着项目的深入,《物联网So Easy》将介绍网络校准时钟、校园气象站等中级项目,进而介绍远程红绿灯、教室人数统计器等高级项目,最终帮助读者掌握复杂数据的发送与接收、硬件与硬件之间的通信与桥接等技能。

通过阅读本书,读者可以掌握Blynk物联网开发技术的相关知识,了解物联网的开发原理与步骤,能够独立开发物联网项目。

本书适合具有图形化编程(Scratch、Mixly等)基础的小学高年级学生以及对物联网等创客技术感兴趣的初、高中学生阅读,也可供中小学信息技术教师、培训机构的创客教师阅读参考。

主体目录:

第一部分 准备篇免费

样章试读:

远程控制台灯



项目背景

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-0.jpg{74%}

材料准备

USB电源模块

USB电源模块是一款数字信号执行器,可以通过程序控制其数字信号的高低电平,从而控制连接在其USB接口上的设备的工作状态。在USB电源模块上写有大写字母“D”(Digital),表明这是一款数字执行器,可以连接在物联网开发板的任何一个数字管脚上。比如,在USB电源模块连接一个USB台灯,就可以通过程序来控制台灯的开关和亮度。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\19.png{31%}

USB电源模块

USB小台灯

右图所示的是一款小巧便携的,可以连接在电脑USB接口或充电宝等设备上的小台灯。其内部采用LED发光,具有亮度高和能耗低的特点,在创客项目制作中常用于模拟台灯。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\P24-USB_小台灯.jpg{15%}

USB小台灯

识点:数字信号

简单地说,数字信号就是只有0和1两种状态的信号。在生活中,数字信号的例子随处可见,比如电灯的开和关就可以与数字信号的1和0对应,声音的有和无也可以与数字信号的1和0对应。在电路中,数字信号可以表现为通路和断路,当然也可以表现为高电平和低电平。

思路分析

一个完整的物联网控制系统需要包含以下几个模块。

以上各模块的关系图如图4-1所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\6.png{78%}

图4-1 物联网控制系统各模块的关系图

当我们使用手机控制小台灯时,手机会发送一个命令到Blynk服务器上。为了准确控制某一块开发板上某一个接口的设备,发送的命令必须包含以下信息:授权码(用于App与物联网开发板匹配)、管脚号(台灯连接管脚号)和命令(开或关)。

手机发送的命令会存储在Blynk服务器中,而物联网开发板会时刻[1]与Blynk服务器保持联系。一旦物联网开发板获取到手机发送的命令,就会执行该命令。

在本项目中,按下手机上的按钮,将台灯设为“开”后,物联网开发板就会点亮GPIO 12号管脚的台灯。

知识点:授权码(Auth Taken)

授权码是在Blynk App中创建新项目时生成的一串具有唯一性的编码。在编写程序时,需要将该授权码写入程序。将手机和物联网开发板连接到网络后,手机App与物联网开发板凭授权码互相对应。

硬件连接

将USB电源模块连接到物联网开发板的GPIO 12号管脚,再将USB小台灯连接到USB电源模块上,电路连接如图4-2所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-2.png{67%}

图4-2 电路连接

创建项目

创建项目的具体步骤如下。

步骤一:添加项目

打开手机上的Blynk App,通过单击“New Project”来新建项目,如图4-3所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-3.png{29%}

图4-3 新建项目

在“Create New Project”(新建项目)页面输入项目名称,选择ESP8266硬件类型,然后单击“Create”按钮,即可创建项目,如图4-4所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-4.png{29%}

图4-4 设置项目名称

项目创建完成后,系统就会给你的邮箱发送一封包含授权码的邮件。当然,你也可以在项目设置中再次找到该授权码,如图4-5所示。项目初始页面如图4-6所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-5.png{29%}

图4-5 发送授权码

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-6.jpg{29%}

图4-6 项目初始页面

在“Project Settings”(项目设置)中,找到AUTH TOKENS(授权码)。它有两个功能:“Email all”(发送全部授权码到邮箱)和“Copy all”(复制全部授权码到剪贴板)。我们可以选择“Copy all”,然后通过QQ、微信等即时通讯工具将授权码从手机发送到电脑,如图4-7所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-7.png{29%}

图4-7 项目设置页面

创建好项目后,相当于在Blynk App中创建了一个控制台灯App,当然这个App目前是空白的,没有任何功能。

常见的台灯往往只有一个开关,而一部分台灯还会带有调光的功能。那么在Blynk App中,和这两个功能对应的是“Button”(按钮)组件和 “Slider”(滑杆)组件,如图4-8所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-8.png{29%}

图4-8 添加组件

步骤二:添加Button (按钮)组件

选择“Button”,项目页面上就会出现一个Button组件,如图4-9所示。在本项目中,Button组件用于控制台灯的亮灭。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-9.png{29%}

图4-9 添加Button组件

单击项目页面上的Button组件,进入其设置页面,如图4-10所示,各项参数设置详见表4-1。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-10.png{29%}

图4-10 Button组件的参数设置

表4-1 Button组件参数设置与说明

设置项 推荐值 说明
设置组件名称 开关 设置该Button组件的名称,建议少于4个字
OUTPUT GP12 该管脚号要设置为该Button组件要控制的管脚号,此项目中为USB电源模块连接管脚
OFF 0 当按钮处于关闭状态时,发送的电平值一般设置为0;如果所控制的传感器为高电平有效,则要设置为1
ON 1 当按钮处于开启状态时,发送的电平值一般设置为1;如果所控制的传感器为低电平有效,则要设置为0
MODE SWITCH SWITCH为切换开关,按下发送ON,再按一次发送OFF;PUSH为轻触开关,按下发送ON,松开发送OFF
OFF LABELS 按钮处于关闭状态时的标签文本,一般可以设置为表示关闭的文字,如关闭、熄灭、停止等
ON LABELS 按钮处于开启状态时的标签文本,一般可以设置为表示开启的文字,如开启、点亮、运行等

步骤三:添加Slider (滑杆)组件

设置完Button组件后,我们再来添加一个Slider组件,用于控制台灯的亮度。Slider组件跟滑杆传感器类似,可以通过滑杆让物联网开发板输出一个模拟值,这个模拟值一般可以用来控制灯的亮度、风扇的转速等,如图4-11所示,Slider组件各参数设置详见表4-2。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-11.png{29%}

图4-11 Slider组件参数设置

表4-2 Slider组件参数设置与说明

设置项 推荐值 说明
设置组件名称 开关 设置该Slider组件的名称,建议少于4个字
OUTPUT GP12 该管脚号要设置为该Slider组件要控制的管脚号,在本项目中为USB电源模块连接管脚
MIN 0 Slider组件发送的最小值
MAX 1023 Slider组件发送的最大值
SEND ON RELEASE ON 松开滑杆发送数据,可以设为关闭或者开启
SHOW VALUE ON 在项目页面显示滑杆对应的数值,可以设为关闭或者开启

知识点:模拟信号

在日常生活中,灯的开关、声音的有无可以用数字信号来表示。数字信号是最简单的信号,只有0和1两种状态。但是,生活中还有很多物理量不是简单的数字信号可以表示的,比如光的强弱、声音的大小,这些物理量在有和无之间还有很多中间状态。为了表示这些中间状态,可以对0和1之间的值再次细分。由于物联网开发板的细分精度为10bit,因此可以细分成210份,即1024份。

比如,将台灯亮度设置100,是比较暗的;如果将亮度设置为500,就会亮很多;当设置值达到1023时,亮度最高。

知识点:能量值(Engrey)

在Blynk App中添加组件时,我们发现每添加一个组件都需要消耗能量。组件的功能越复杂,需要消耗的能量也越多。在注册Blynk账号时,系统会提供2000点初始能量。如果想要使用更多的能量,你可以自行搭建Blynk服务器(详见附录)。

程序实现

用Mixly编写程序

打开Mixly软件,首先选择正确的开发板类型“Generic_ESP8266”,如图4-12所示。在后续章节中,如无特殊说明,开发板将默认选择Generic_ESP8266,不再赘述。

F:\paiban\电子书\19-10-51946\51946-排版文件\51946-排版文件\“ZW-02”文件夹\Links\新增图4-12.png{85%}

图4-12 选择开发板类型Generic_ESP8266

然后在“模块”界面中选择“Blynk IoT”,将“服务器信息”模块拖动到代码区,如图4-13所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-12.png{75%}

图4-13 Blynk IoT类别

为了让物联网开发板能够受手机的控制,你需要知道家里的Wi-Fi名称和Wi-Fi密码,这样就能将物联网开发板连接到网络中。另外,还需要知道Blynk App上产生的授权码。授权码是Blynk App与物联网开发板之间互相对应的唯一编码。有了这3个信息后,我们就可以用手机控制物联网开发板了。远程控制台灯的Mixly程序如图4-14所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-13.png{56%}

图4-14 远程控制台灯的Mixly程序

编写好程序后,检查开发板类型是否正确,选择正确的端口,上传程序,此时需要稍等片刻,如图4-15所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-14.png{60%}

图4-15 Mixly上传程序

程序上传完成后,打开串口监视器后,按下物联网开发板上的RESET按键。如果能在串口监视器中看到类似于图4-16所示的信息,就说明已经成功连接到Blynk服务器。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-15.png{60%}

图4-16 Mixly串口监视器输出信息

连接成功后,打开Blynk App,可以看到物联网开发板已经连接到App。

如果连接失败,则要检查Wi-Fi信息、授权码等是否填写正确。

用Arduino IDE编写程序

打开 Arduino IDE软件,选择“文件”→“示例”→“Blynk”→“GettingStarted”→“BlynkBlink”,打开示例项目。

一个Arduino程序至少包含setup函数和loop函数。setup函数主要包括程序的初始化操作,程序只会被执行一次。loop函数中的程序作为主程序会被反复执行。

在Blynk物联网编程中,首先需要引入与物联网通信相关的库文件。

#define BLYNK_PRINT Serial // 开启串口监视
#include <ESP8266Wi-Fi.h>
#include <BlynkSimpleESP8266.h>

还要将授权码写入程序中。

char auth[] = "c6832f4a969b403c98ded86677bc16cc";//授权码

要将物联网开发板连接到网络中,需获取所在环境的Wi-Fi名称和Wi-Fi密码。

char ssid[] = "ssid";//Wi-Fi名称
char pass[] = "psssword";//Wi-Fi密码

有了这些信息之后,在setup函数中,可以通过Blynk.begin()函数让物联网开发板连接到Blynk服务器上。

void setup()
{
 Serial.begin(9600);
 Blynk.begin(auth, ssid, pass);//官方服务器
}

而在loop函数中,通过调用Blynk.run();就可以让物联网开发板与Blynk服务器保持联系。

void loop()
{
 Blynk.run();
}

上传程序前,要根据所使用的物联网开发板进行设置。选择“工具”→“开发板:”Generic_ESP8266””[2],选择“Generic_ESP8266”,如图4-17所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\图像323210.png{70%}

图4-17 选择开发板类型

再选择物联网开发板连接的端口,此处选择COM3,如图4-18所示。

图片{70%}

图4-18 选择端口

完成以上两项设置后,我们就可以将程序上传到开发板上了。单击Arduino IDE软件左上角的“上传”按钮,上传程序,如图4-19所示。

{30%}

图4-19 “上传”按钮

稍等片刻,程序正常上传后,界面中会显示出上传成功的消息,如图4-20所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\图像323232.png{70%}

图4-20 上传成功消息

程序上传完成后,我们怎么才能知道物联网开发板已经连接到Blynk服务器上了呢?

在Arduino IDE软件右上角,打开串口监视器,如图4-21所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\图像323239.png{55%}

图4-21 串口监视器

打开串口监视器后,按下物联网开发板上的“RESET”按键。如果能在串口监视器中看到类似图4-22所示的信息,就说明物联网已经成功连接到Blynk服务器了。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-21.jpg{65%}

图4-22 Arduino IDE串口监视器输出信息

如果没有看到Ready信息,那么说明没有将物联网开发板正确连接到Blynk服务器,请再次检查Wi-Fi信息和授权码是否正确。

效果演示

我们可以利用Laserblock-IoT木板搭建一个台灯模型,将主板隐藏在木板下方,并在模型上写上图4-23所示的文字。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-22.jpg{46%}

图4-23 远程控制台灯作品完成图

当程序上传完成后,在Blynk App中,按钮处于关闭状态,实际的USB小台灯也处于关闭状态,如图4-24所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-23a.jpg{32%}

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-221.jpg{38%}

图4-24 台灯处于关闭状态

按下Blynk App上的开关键,USB小台灯立刻点亮,如图4-25所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-24a.jpg{32%}

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-24-2.jpg{38%}

图4-25 台灯处于开启状态

测试调光功能,拖动亮度滑杆,将亮度设为202,看到小台灯灯光比较暗,如图4-26所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-25a.jpg{32%}

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\图像323311.png{39%}

图4-26 台灯亮度设置为202

继续向右侧滑动滑杆,将亮度设置为508,效果如图4-27所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-26a.jpg{32%}

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-26-2.jpg{39%}

图4-27 台灯亮度设置为508

继续向右侧滑动滑杆,将亮度设置为971,效果如图4-28所示。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-27a.jpg{32%}

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-27.jpg{38%}

图4-28 台灯亮度设置为971

经过测试,确定开关能控制小台灯的亮灭,亮度滑块能控制小台灯的亮度。

视频演示,扫描二维码查看视频演示效果。

F:\paiban\电子书\19-10-51946\51946-排版文件\51946-排版文件\“ZW-02”文件夹\Links\1.png

远程控制台灯

项目小结

制作完远程控制台灯之后,我们再回过头来复习一下这个项目,回顾一下整个开发流程。可以发现,其中有3个参数非常重要,它们分别是授权码、Wi-Fi名称和Wi-Fi密码。

将物联网开发板接入互联网需要用到Wi-Fi名称和Wi-Fi密码。Blynk App和开发板的对应关系由授权码决定。

F:\paiban\电子书\19-10-51946\ZW-02-web-resources\image\4-27b.jpg{77%}

课堂评价

项目 自评 互评 师评
电路连接是否正确
程序编写是否正确
开发板类型是否正确
端口选择是否正确
能否通过串口监视器查看信息
是否理解了模拟信号概念
是否理解了Blynk中能量值概念
Blynk App项目是否创建正确
App是否能控制小台灯开关

课后拓展

完成远程控制台灯的制作之后,你觉得用同样的程序还可以做出什么富有创意的物联网作品呢?请将你的想法写下来并付诸实践吧!


[1] 物联网开发板与Blynk服务器之间的通信并非真正的“时刻保持”,而大概是每100ms通信一次,相当于1 s通信10次。

[2] “Generic_ESP8266”是之前已经选好的开发板。实际操作中,会因之前所选开发板类型的不同而稍有差异。