本帖最后由 木子呢 于 2021-11-9 16:53 编辑
自制通信设备(下)
课程目录:
一、实践情境
在生活中,无论是打电话还是发短信,通信往往都是能双向的。在上节课,我们实现了计算机向物联网平台发送消息,那我们是否也可以从物联网平台发送消息至计算机呢?
答案是肯定的!
二、实践目标
本实践项目将以计算机为智能终端,结合micro:bit开发板,自制一个基于WiFi的通信设备,来接收物联网平台的信息,最终实现多个智能终端借助物联网平台互相通信。
三、知识目标
1、掌握通过Python编程实现从SIoT物联网平台接收信息的方法
2、掌握结合micro:bit,通过 Python 编程采集板载按键开关数据的方法
四、实践准备
软件使用: mind+编程软件x1、SIoT系统软件x1
Tips:根据自己电脑的系统,对应下载SIoT软件压缩包。
五、实践过程
在本项目中,我们将分两步,自制一个基于WiFi的通信设备,实现多台计算机借助物联网平台进行信息的交换。
1、单台计算机接收物联网平台的消息
2、两台计算机互相通信
任务1:接收信息
1. 分析设计
在本任务中,我们可使micro:bit开发板与计算机相连接,通过计算机接收物联网平台的消息,之后将消息显示在点阵屏上。
2. 硬件搭建
通过USB连接线将micro:bit接到计算机。
3. 平台搭建
SIoT物联网平台的搭建方法与上节课相同,这里我们不再赘述。
4. 软件编写
在编写代码之前,我们依旧需要先对软件进行一些设置。
软件设置:
STEP1:创建与保存项目文件
启动Mind+软件,选择“Python模式”,另存项目并命名为“m自制通信设备(下)”。
STEP2:创建与保存python文件
创建一个python程序文件“任务一.py”,双击打开。
程序编写、运行及回顾:
STEP1:编写python程序
-
- import siot#导入siot库
-
- import time#导入时间库
-
- from pinpong.board import Board,Pin #导入pinpong.board包中的Board,Pin模块
-
- from pinpong.extension.microbit import *#导入pinpong.extension.microbit包中的所有模块
-
- Board("microbit").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
-
- SERVER = "192.168.50.248"#MQTT服务器IP地址
-
- CLIENT_ID = ""#在SIoT上,CLIENT_ID可以留空
-
- IOT_UserName ='siot'#用户名
-
- IOT_PassWord ='dfrobot'#密码
-
- IOT_pubTopic = 'microbit/001'#“topic”为“项目名称/设备名称”
-
- #定义回调函数
-
- def sub_cb(client, userdata, msg):#在这里可以写收到消息要做的事
-
- print("\nTopic:" + str(msg.topic) + " Message:" + str(msg.payload))#终端打印消息
-
- display.scroll(str(msg.payload))#点阵屏显示字符串
-
- siot.init(CLIENT_ID, SERVER, user=IOT_UserName, password=IOT_PassWord)#初始化,确定输入的用户名和密码正确
-
- siot.connect()#连接
-
- siot.subscribe(IOT_pubTopic,sub_cb)#订阅消息+回调
-
- siot.loop()#循环
复制代码
Tips:上述“SERVER”中输入的是自己电脑的IP地址。
STEP2:运行程序并观察效果
(1)运行程序,观察软件终端
点击运行按钮,终端显示“连接成功”。
(2)平台发送消息
在网页端指定位置输入“Hello World”,并点击发送。
(3)观察点阵屏与软件终端
观察micro:bit可以看到,点阵屏上滚动播放物联网平台网页端发送来的消息“Hello World”。
同时,在mind+终端内,我们也可以看到同样的消息。
STEP3:回顾程序
1、物联网平台相关操作
为了能接收物联网平台传来的消息,我们需要先创建一个回调函数,在回调函数中设定需要实现的功能,如终端显示消息。之后再通过订阅平台的消息来实现接收的效果即可。
(1)创建回调函数
def sub_cb(client, userdata, msg):#在这里可以写收到消息要做的事
print("\nTopic:" + str(msg.topic) + "Message:" + str(msg.payload))#终端打印消息
display.scroll(str(msg.payload))#点阵屏显示字符串
在“print”显示打印的内容中,这里的“\n”是换行符,“msg.topic”指的是发送消息对应的主题,“msg.payload”指的是发送的具体消息内容。
我们可以把回调函数当作一个参数,将这个函数作为一个参数传到另一个函数里面,当后面这个函数执行完之后,再执行传进去这个函数。这个过程就叫作回调。
比如,和朋友吃完饭回家,离别时,你要求朋友到家后发消息报个平安。这就是一个回调的过程。你留了个参数函数(要求对方发消息报个平安)给朋友,然后朋友回家,回家的动作就是主函数。对方必须先回到家,主函数执行完了,再执行传进去的函数,之后你就收到对方的消息了。
这里,我们创建一个回调函数,用来在终端打印消息和点阵屏显示字符串,当后续调用它时,就可以直接显示效果了。另外,这里的Topic就是指MQTT协议中消息的类型,payload指消息具体的内容。
(2)订阅物联网平台的主题消息
siot.subscribe(IOT_pubTopic,sub_cb)#订阅消息+回调
接收物联网平台发送来的消息,我们可以通过subscribe()订阅函数来实现,这里,当我们订阅接收平台主题发来的消息时,回调之前创建的函数,这样就能实现接收消息后,打印在mind+终端,并显示在点阵屏。
|
任务2:互相通信
至此,我们已经成功实现了单台计算机向物联网平台收发信息的功能,那么如何才能使两台计算机的互相通信呢?
1.分析设计
在本任务中,我们可使两台计算机各与一块micro:bit开发板相连接,各自通过micro:bit上的按键控制计算机向物联网平台发送消息,同时,也接收物联网平台的消息,并将消息显示在点阵屏上。
Tips:这里的SIoT服务只在其中一台计算机上启动即可。
2.软件编写
这里,我们依旧将先对Mind+编程软件进行设置,再编写Python程序。
软件设置:
STEP1:创建与保存python文件
新建一个python程序文件“任务二.py”,双击打开。
程序编写、运行及回顾:
STEP1:编写python程序
- import siot#导入siot库
-
- import time#导入时间库
-
- from pinpong.board import Board,Pin#导入pinpong.board包中的Board,Pin模块
-
- from pinpong.extension.microbit import * #导入pinpong.extension.microbit包中的所有模块
-
- Board("microbit").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
-
- SERVER = "192.168.50.248"#MQTT服务器IP地址
-
- CLIENT_ID = ""#在SIoT上,CLIENT_ID可以留空
-
- IOT_UserName ='siot'#用户名
-
- IOT_PassWord ='dfrobot'#密码
-
- IOT_pubTopic = 'microbit/001'#“topic”为“项目名称/设备名称”
-
- #定义回调函数
-
- def sub_cb(client, userdata, msg):#在这里可以写收到消息要做的事
-
- print("\nTopic:" + str(msg.topic) + " Message:" + str(msg.payload))#终端打印消息
-
- display.scroll(str(msg.payload))#点阵屏显示字符串
-
- siot.init(CLIENT_ID, SERVER, user=IOT_UserName, password=IOT_PassWord)#初始化,确定输入的用户名和密码正确
-
- siot.connect()#连接
-
- siot.subscribe(IOT_pubTopic,sub_cb)#订阅消息+回调
-
- siot.loop()#循环
-
- while True:#永久循环
-
- if button_a.is_pressed() == 1:#按键A是否按下
-
- a = input("请输入要发送的消息(回车键确认):")#将输入的消息内容赋值给a
-
- siot.publish(IOT_pubTopic, a) #发送消息
-
- time.sleep(1)#延时1秒
复制代码
STEP2:运行程序并观察效果
(1)分别在两台计算机上编写上述程序并运行,观察各自软件终端界面
点击运行按钮,终端显示“连接成功”。
(2)按下按键A
按下连在计算机1上的micro:bit的 A 按键1秒后松开
(3)在计算机1终端输入消息内容,并按下回车键确认
(4)观察计算机2终端界面
可以看到,计算机1的消息已成功发送至计算机2。
(5)观察计算机2上micro:bit的点阵屏
观察micro:bit可以看到,点阵屏上滚动播放计算机1发送的消息“paper tiger”。
STEP3:回顾程序
1、按键相关操作
为了能使用板载上的按键功能,我们首先需要导入“micro:bit”包中的所有模块,之后通过“buttonA_is_pressed()”函数来检测按下按键与否。
(1)导入库:
from pinpong.extension.microbit import * #导入pinpong.extension.microbit包中的所有模块
(2)判断按键是否按下:
if button_a.is_pressed() == 1:#按键A是否按下
这里的“button_a”指的是按键A,“press”的意思是按压,“button_a.is_pressed()”这个函数就是用来检测按键A是否被按下。
|
六、巩固提高
1.项目小结
本节课我们自制了一组由micro:bit开发板、带WiFi功能的计算机、SIoT系统软件构成的通信设备,完成了两台计算机之间的互相通信。首先编程实现了从物联网网页端接收消息,之后在此基础上结合发送消息的功能,使一台计算机同时兼具消息的收发,继而借助物联网平台,使在同一局域网内的计算机皆可互相通信。
2.项目拓展
在本节课的项目中,收发的消息都是我们自己编辑设定的,而在实际的物联网场景下,发送至平台的消息往往是通过智能终端自动采集收集的,那么,我们是否可以借助micro:bit上的传感器,实现自动获取数据并上传至物联网平台呢?
|