2021-11-2 17:52:28 [显示全部楼层]
457浏览
查看: 457|回复: 0

[教程] Mind+Python编程进阶系列课程—03 自制通信设备(下)

[复制链接]
本帖最后由 木子呢 于 2021-11-9 16:53 编辑

自制通信设备(下)

课程目录:

一、实践情境

在生活中,无论是打电话还是发短信,通信往往都是能双向的。在上节课,我们实现了计算机向物联网平台发送消息,那我们是否也可以从物联网平台发送消息至计算机呢?

答案是肯定的!

qw1.jpg


二、实践目标

本实践项目将以计算机为智能终端,结合micro:bit开发板,自制一个基于WiFi的通信设备,来接收物联网平台的信息,最终实现多个智能终端借助物联网平台互相通信。

三、知识目标

1、掌握通过Python编程实现从SIoT物联网平台接收信息的方法

2、掌握结合micro:bit,通过 Python 编程采集板载按键开关数据的方法

四、实践准备

qw2.jpg


软件使用: mind+编程软件x1、SIoT系统软件x1

Tips:根据自己电脑的系统,对应下载SIoT软件压缩包。

qw3.jpg

五、实践过程

在本项目中,我们将分两步,自制一个基于WiFi的通信设备,实现多台计算机借助物联网平台进行信息的交换。

1、单台计算机接收物联网平台的消息

2、两台计算机互相通信

任务1:接收信息

1. 分析设计

在本任务中,我们可使micro:bit开发板与计算机相连接,通过计算机接收物联网平台的消息,之后将消息显示在点阵屏上。

qw4.jpg

2. 硬件搭建

通过USB连接线将micro:bit接到计算机。

qw5.jpg

3. 平台搭建

SIoT物联网平台的搭建方法与上节课相同,这里我们不再赘述。

4. 软件编写

在编写代码之前,我们依旧需要先对软件进行一些设置。

软件设置:

STEP1:创建与保存项目文件

启动Mind+软件,选择“Python模式”,另存项目并命名为“m自制通信设备(下)”。

STEP2:创建与保存python文件

创建一个python程序文件“任务一.py”,双击打开。

程序编写、运行及回顾:

STEP1:编写python程序
  1. import siot#导入siot库
  2. import time#导入时间库
  3. from pinpong.board import Board,Pin #导入pinpong.board包中的Board,Pin模块
  4. from pinpong.extension.microbit import *#导入pinpong.extension.microbit包中的所有模块
  5. Board("microbit").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
  6. SERVER = "192.168.50.248"#MQTT服务器IP地址
  7. CLIENT_ID = ""#在SIoT上,CLIENT_ID可以留空
  8. IOT_UserName ='siot'#用户名
  9. IOT_PassWord ='dfrobot'#密码
  10. IOT_pubTopic  = 'microbit/001'#“topic”为“项目名称/设备名称”
  11. #定义回调函数
  12. def sub_cb(client, userdata, msg):#在这里可以写收到消息要做的事
  13.     print("\nTopic:" + str(msg.topic) + " Message:" + str(msg.payload))#终端打印消息
  14.     display.scroll(str(msg.payload))#点阵屏显示字符串
  15. siot.init(CLIENT_ID, SERVER, user=IOT_UserName, password=IOT_PassWord)#初始化,确定输入的用户名和密码正确
  16. siot.connect()#连接
  17. siot.subscribe(IOT_pubTopic,sub_cb)#订阅消息+回调
  18. siot.loop()#循环
复制代码

Tips:上述“SERVER”中输入的是自己电脑的IP地址。

STEP2:运行程序并观察效果

(1)运行程序,观察软件终端

点击运行按钮,终端显示“连接成功”。

qw6.jpg

(2)平台发送消息

在网页端指定位置输入“Hello World”,并点击发送。

qw7.jpg

(3)观察点阵屏与软件终端

观察micro:bit可以看到,点阵屏上滚动播放物联网平台网页端发送来的消息“Hello World”。

同时,在mind+终端内,我们也可以看到同样的消息。

qw8.jpg

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程序

  1. import siot#导入siot库
  2. import time#导入时间库
  3. from pinpong.board import Board,Pin#导入pinpong.board包中的Board,Pin模块
  4. from pinpong.extension.microbit import * #导入pinpong.extension.microbit包中的所有模块
  5. Board("microbit").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
  6. SERVER = "192.168.50.248"#MQTT服务器IP地址
  7. CLIENT_ID = ""#在SIoT上,CLIENT_ID可以留空
  8. IOT_UserName ='siot'#用户名
  9. IOT_PassWord ='dfrobot'#密码
  10. IOT_pubTopic  = 'microbit/001'#“topic”为“项目名称/设备名称”
  11. #定义回调函数
  12. def sub_cb(client, userdata, msg):#在这里可以写收到消息要做的事
  13.     print("\nTopic:" + str(msg.topic) + " Message:" + str(msg.payload))#终端打印消息
  14.     display.scroll(str(msg.payload))#点阵屏显示字符串
  15. siot.init(CLIENT_ID, SERVER, user=IOT_UserName, password=IOT_PassWord)#初始化,确定输入的用户名和密码正确
  16. siot.connect()#连接
  17. siot.subscribe(IOT_pubTopic,sub_cb)#订阅消息+回调
  18. siot.loop()#循环
  19. while True:#永久循环
  20.     if button_a.is_pressed() == 1:#按键A是否按下
  21.         a = input("请输入要发送的消息(回车键确认):")#将输入的消息内容赋值给a
  22.         siot.publish(IOT_pubTopic, a) #发送消息
  23.     time.sleep(1)#延时1秒
复制代码

STEP2:运行程序并观察效果

(1)分别在两台计算机上编写上述程序并运行,观察各自软件终端界面

点击运行按钮,终端显示“连接成功”。

(2)按下按键A

按下连在计算机1上的micro:bit的 A 按键1秒后松开

(3)在计算机1终端输入消息内容,并按下回车键确认

qw10.jpg

(4)观察计算机2终端界面

可以看到,计算机1的消息已成功发送至计算机2。

qw11.jpg

(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上的传感器,实现自动获取数据并上传至物联网平台呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

硬件清单

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

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

mail