2022-12-1 17:00:07 [显示全部楼层]
12208浏览
查看: 12208|回复: 0

[教程] 【行空板图形化Python入门教程】第11课:IoT数据助手

[复制链接]
第11课 IoT数据助手


你还记得学校体测时,体育老师是怎样记录体测数据的吗?老师一般有一个体测项目的名册表,每次体测时,老师会按照名单点名分组进行测试,测试完成后将学生体测数据填写到表格中。这种传统记录数据的方式,非常不利于老师开展工作。

物联网是一个非常强大的数据存储服务器,如果测试时,能够使用物联网来记录体测数据,体测完成后,老师只需要登录物联网平台就可以查看数据,这样就可以更好地帮助老师记录数据。接下来,我们就制作一款这样的IoT数据助手,来帮助老师吧!

qw1.jpg


任务目标

将检测到的肺活量数据,按照学号加肺活量数据的形式发送到SIoT物联网平台。



知识点

1. 了解物联网的概念

2. 认识SIoT物联网平台

3. 了解MQTT协议

4. 了解字符串

5. 掌握行空板物联网发送数据与接收数据的方法

材料清单

1. 硬件清单

qw2.jpg


行空板x1


qw3.jpg


Type-C&Micro二合一USB线x1


2. 软件使用

Mind+编程软件x1

下载地址:https://www.mindplus.cc

qw4.jpg



动手实践

上一节课程中,学习了如何将检测到的肺活量数据存放在列表中。虽然列表里可以存储数据,但是行空板一旦掉电,列表里的数据也不会被保存。如何才能有效地存储数据呢?接下来,从以下三个任务来实现如何将数据存储到SIoT物联网平台。

任务一:行空板向SIoT平台发送数据

学习使用行空板MQTT指令,在行空板上开启SIoT服务器,并向SIoT平台发送消息,登录SIoT平台后,学会查看对应主题中的数据。

任务二:行空板接收SIoT平台的数据

行空板接收SIoT平台的数据,并将接收到的数据在Mind+终端中打印出来。

任务三:行空板向SIoT平台发送肺活量数据

将检测到的实时肺活量数据,发送到SIoT物联网平台。


任务一:行空板向SIoT平台发送数据


1. 硬件搭建

使用USB连接线将行空板连接到计算机。

qw5.jpg


2. 软件准备

打开Mind+,按照下面图示完成软件准备过程。

qw6.jpg


3. 编写程序

这个任务,主要是学习行空板如何向SIoT物联网平台发送一条“hello”的文本消息,在发送消息之前需要做哪些准备。接下来,就一起来学习一下行空板开启和使用物联网需要哪些步骤吧!

注意:关于“物联网及物联网SIoT平台”的相关介绍见知识园地

(1) 检查SIoT是否开启

长按行空板的“Home”键进入菜单页,点击“应用开关”,检查SIoT服务是否开启,如果显示“已禁用”,点击SIoT选项,切换SIoT状态为“已启用”。

具体操作如图所示:

qw7.jpg


(2) MQTT-py库

要向SIoT平台发送数据,要有发送相关指令才能实现。但是现在行空板的指令区中没有这样的指令,该怎么办呢?

点击“拓展”,在官方库中找到“MQTT-py”并点击,完成添加。

qw8.jpg

(3) MQTT初始化

指令添加完成后,要使用MQTT构建物联网,首先需要使用指令 初始化MQTT,点击“设置”图标,将“SIoT服务器”的内容修改为行空板连接电脑的默认IP地址“10.1.2.3”。

qw9.jpg


初始化设置完成后,MQTT发起连接,使用指令MQTT发起连接;连接成功后,需要保持连接,使用指令 MQTT保持连接永久

qw10.jpg


要向SIoT平台发送数据,就需要先订阅要发送到SIoT平台的主题,使用指令 MQTT订阅 。需要特别说明的是,MQTT订阅指令中填写的主题,并且固定的格式为“项目ID/设备号”。

qw11.jpg


(4) 行空板向SIoT物联网平台发送数据

完成了“MQTT的初始化——发起连接——保持连接——订阅”这四个步骤后,接下来,就可以向SIoT平台发送数据了,使用 MQTT发布 指令。

qw12.jpg


每隔5秒,向SIoT平台发送一条“hello”的文本数据。

qw13.jpg


4. 程序运行

运行程序,程序运行成功后,Mind+终端界面上打印“连接结果:连接成功”。

qw14.jpg


程序设置每隔5秒给SIoT平台发送一条“hello”的文本数据。但是当数据发送成功后,行空板屏幕上没有任何反馈,数据又应该怎么查看呢?

查看数据需要使用网页进入行空板服务页面,双击打开浏览器在地址栏输入“10.1.2.3”。

qw15.jpg


进入行空板服务页面后,点击“应用开关”,找到SIoT并点击下方的“打开页面”,进入SIoT服务页。

qw16.jpg


输入对应的账号和密码,点击登录。

账号:siot

密码:dfrobot

qw17.jpg


登录成功后,点击“设备列表”,找到订阅的主题。

qw18.jpg


点击“查看消息”,就可以看到对应的数据了。

qw19.jpg


5. 试一试

要实现按下A按键后,向物联网SIoT平台发送一条内容为“hello”的消息,程序应该怎么修改呢?

提示:使用 当按键A被按下 指令。

qw20.jpg



任务二:行空板接收SIoT平台的数据

1. 编写程序


上一个任务学习了如何向SIoT平台发送数据,接下来,一起学习行空板如何接收SIoT平台数据的方法,并且将该数据在Mind+终端中打印出来。

(1) SIoT平台向行空板发送消息

SIoT平台查看消息界面上,有一个发送消息的消息内容框,在消息内容框里输入“你好,行空板!”,按下发送按钮,完成消息发送。消息发送成功后,Topic里面会多一条“你好,行空板!”的消息。

qw21.jpg


(2) 行空板接收SIoT平台发送的数据

行空板要接收来自SIoT平台发送的消息数据,需要使用指令 当MQTT从MQTT主题接收到MQTT消息

qw22.jpg


接收数据,首先需要判断数据是否是来自“肺活量/1班”这个主题。需要注意的是,MQTT消息的数据类型为字符串型,在进行MQTT消息判断时,需要将判断数据“肺活量/1班”放入英文状态下的引号内

qw23.jpg


MQTT主题判断成功后,将接收到的 MQTT消息 在Mind+终端中打印出来。

qw24.jpg


完整程序如下:

qw25.jpg


2. 程序运行

点击运行,程序运行成功后,Mind+终端界面上打印“连接结果:连接成功”的消息。然后在SIoT平台的消息内容框中输入“你好,行空板!”,点击发送按钮,Mind+中终端打印接收到的消息数据“你好,行空板!”。

qw26.jpg


qw27.jpg


3. 试一试

行空板能够接收到SIoT平台发送的数据,并且可以将接收到的数据在Mind+终端打印出来。接下来,大家试一下将接收到的数据显示在行空板屏幕上。行空板屏幕显示效果如下图:

qw28.jpg



任务三:行空板向SIoT平台发送肺活量数据

1. 编写程序


第十一课的任务一中,完成了对肺活量数据的检测。接下来,就在该程序的基础上,添加一个选择学号功能和发送数据功能,通过“+/-”按钮来进行学号选择,按下A键开始检测肺活量,进度条反应肺活量的大小。按下B按键,将数据发送到SIoT平台的“肺活量/1班”的主题中。行空板界面效果图如下:

qw29.jpg


(1) 选择学号功能

选择学号功能,当按下“+”按钮,学号加一;按下“-”按钮,学号减一。这个功能中用到的 文字对象按钮对象 以及 变量 ,都是学习过的知识,这里就不做详细地讲解了。

qw30.jpg


(2) MQTT准备工作

实现行空板与SIoT物联网平台联网的第一步,先完成MQTT的准备工作。

qw31.jpg


(3) 发送肺活量数据

按下B按键,将检测到的肺活量数据发送到SIoT物联网平台的“肺活量/1班”主题中。判断B按键是否按下,使用指令 当按键B被按下 ;向SIoT平台发送数据,使用 MQTT发布 指令。

qw32.jpg


增加一个数据发送成功的反馈,数据发送成功后,蜂鸣器会响起,并清除检测到的数据和进度条。

qw33.jpg


(4) 发送带学号的肺活量数据

上面程序中使用 MQTT发布 指令,发布的数据是肺活量数据,没有学号,即使SIoT平台接收到了数据,也不知道该数据是哪位同学的。所以在发送数据时,最好带上学号标识,将学号和肺活量数据合并后一起发送到SIoT平台。合并字符使用文本指令区的 合并字符 指令。

注意:关于“字符串”的相关介绍见知识园地

qw34.jpg


修改 MQTT发布 指令中的内容为合并后的学号和肺活量数据。

qw35.jpg


完整程序如下:

qw36.jpg


2. 程序运行

点击运行,程序运行成功后,通过行空板屏幕上的“+/-”按钮,选择对应的学号。然后按下A按键,开始测量肺活量,测量结束后,按下B按键,将带学号的肺活量数据发送到SIoT平台。

qw37.jpg


3. 试一试

为了避免重复多次的测量,当一个班的学生都测试完成后,行空板就不能再向SIoT平台发送肺活量数据了。接下来我们以一个班十个学生为例,当这十个学生都测试完成后,就断开MQTT连接,SIoT平台不再接收行空板发送的消息。

提示:十个学生测试完成后,使用指令 MQTT断开连接

qw38.jpg



知识园地

1. 什么是物联网


物联网(Internet of Things,简称IoT)是借助互联网、传统电信网等,让具有一定功能的设备实现互联互通的网络。比如在智能家居场景下,通过房间里的无线网,将灯、风扇、摄像头等设备与手机相连,这就形成了万物互联

qw39.jpg


物联网的原理
是什么呢?

一个完整的物联网系统包含三个部分,分别是服务器、智能终端、移动终端。以智能家居场景为例,我们可以通过手机控制和查看灯、风扇、摄像头这些设备的状态,手机就是物联网系统中的移动终端;而那些可以直接连接网络的灯、摄像头等智能家电就是物联网系统中的智能终端;另外,在物联网系统中,移动终端和智能终端不能直接传输数据,它们之间还需要一个枢纽,用来存储和收发数据,这就是服务器

qw40.jpg


行空板也可以构建这种有智能终端、移动终端、服务器的智能家居系统,如果我们手上只有一块行空板时,可以让这块行空板做智能终端,连接灯、风扇、摄像头这些设备,使用行空板自带的SIoT平台做物联网服务器端,我们的手机或者电脑做移动终端

qw41.jpg


需要说明的是,本节课项目中的行空板,即是智能终端又是服务器,而电脑则对应移动终端。其中电脑是使用USB线这种有线连接的方式去查看服务器数据的。

qw42.jpg


其实,移动终端访问服务器数据还可以使用无线连接方式,这种方式是通过行空板自带的WIFI模块功能实现,详细操作,你可以进入行空板官网“物联网项目”进行查看,地址如下:

https://wiki.unihiker.com/iot_project

2. 物联网SIoT平台

物联网中的服务器是通过物联网平台(又称IoT平台)实现的,常用的IoT平台有Easy IoT、SIoT。要实现物联网中的设备通信,通常采用HTTP协议或者MQTT协议。这节课使用到的是物联网SIoT平台,行空板与SIoT平台之间的通信采用MQTT协议,接下来,一起来了解一下什么是SIoT平台,什么是MQTT协议吧!

SIoT是行空板自带的物联网服务器平台,你可以通过有线或无线的形式快速开启本地物联网服务器。SIoT重点关注物联网数据的收集导出,是采集科学数据的最好选择之一。

qw43.jpg


3. MQTT协议

什么是MQTT协议?

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一个基于客户端-服务器的消息发布/订阅传输协议

MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。

qw44.jpg


MQTT协议在行空板与SIoT平台中起到一个什么作用呢?

我们可以将MQTT协议理解为行空板与SIoT平台通信的桥梁,在行空板和物联网SIoT平台通信过程中,MQTT协议有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是设备端(行空板),消息代理是服务器,消息发布者可以同时是订阅者。

换种简单的理解方式,我们可以将这个消息代理理解为一个群,如果你想在这个群里发消息,首先你得进入这个群,才能发送消息,而进群的方式就是MQTT协议。进群后,发消息这个人就是发布者,群就是服务器,其他群成员就是订阅者,你发的消息自己也能看到,因此发布者也可以是订阅者。

4.什么是字符串

什么是字符串?字符串是一种数据类型,Python中有六种标准的数据类型,分别是字符串(文本)、数字、列表、元组、集合、字典。

qw45.jpg


大家注意一下,上面的字符串指令里都有一对引号。我们可以将字符串理解为放在引号里面的一系列字符,通俗的理解,就是由标点符号、字母、数字、文字组成的单词或句子就是字符串。其中组成字符串的标点符号、字母、数字、文字就是字符,字符串就是字符的集合

现在你知道为什么任务二中,判断 MQTT主题 时,需要将“肺活量/1班”放入引号内了吗?

qw46.jpg


因为 MQTT主题 的数据类型是字符串,如果不将“肺活量/1班”放入引号内,两个数据就不能作比较,因为数据类型不一样。

如果觉得不好理解,简单地举个例子,现在有两组数据,一组是23,另一组是“23”。第一组数据的数据类型是数字型,第二组数据类型是字符型,两组数据的类型不一样,不能做比较。只有当两组数据类型一样时才可以作比较,所以“肺活量/1班”需要放入引号内。

qw47.jpg


为什么要用 合并字符 指令呢?

举个例,现在有“你”、“好”“,”、“行”、“空”、“板”、“!”这七个字符。如果不组合,那就是单个的字符,而 合并字符 指令的作用就是将这些字符组成一个完整的句子“你好,行空板!”。

5. 指令学习


qw48.jpg


该指令用于初始化设置MQTT,使用时需要点击设置图标,选择MQTT平台,写明服务器IP、服务器端口号、用户名以及密码。




qw49.jpg


该指令用于发起并建立MQTT连接。




qw50.jpg


该指令用于一直保持MQTT连接。




qw51.jpg


该指令用于订阅MQTT服务器的设备主题。主题名(topic)的格式为“项目ID/设备号”。




qw52.jpg


该指令用于向MQTT服务器的对应主题发送数据。




qw53.jpg


该指令用于接收SIoT物联网平台的数据,指令中包含MQTT主题和MQTT消息。




qw54.jpg


该指令用于合并两个及以上的字符。


挑战自我


学号和肺活量数据合并后,学号确实发送成功了。如果学号两位数,学号和肺活量数据合并后,很难分清数据。如果在学号与肺活量数据中间添加冒号(:)将学号和肺活量数据隔开,发送的数据形式为:学号:肺活量数据,这样就可以分清数据了。接下来,大家一起来试一下吧!

提示:添加冒号使用 合并字符 指令,在合并字符指令中嵌套合并字符指令。



SIoT接收到的消息如下图:

qw56.jpg


附件下载
第十一课资料.rar (14.99 MB, 下载次数: 66)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2023 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail