「BXY」掌控板 高中信息技术教程—可以远程遥控的灯
一、实践情境在冬天的晚上,我们有时候会因忘记关灯而不得不重新爬出被窝,这为我们带来了许多烦恼。为此,在这节课上,我们将设计一个物联网灯控系统,能够实现远程开关灯。
## 二、实践目标
本实践项目运用掌控板作为智能终端,通过掌控自带WiFi模块来搭建SIoT物联网平台,并与平台进行通信,继而结合彩色灯带实现平台发送消息控制灯的亮灭。
## 三、知识目标
1. 认识彩色灯带灯;
2. 理解彩色灯带的使用和接线方法,能根据连线图进行实物连接;
3. 掌握搭建SIoT物联网平台并查看消息记录的方法;
4. 掌握以掌控板为智能终端,通过BXY软件编写代码与SIoT物联网平台进行通信的方法.
## 四、实践准备
### 硬件清单
| ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627884078143-image003.png)| ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627884087352-image005.png)| ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627885901451-image007.png) |![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627884106968-image009.png)|
| --- | --- | --- | --- |
|[掌控板](https://www.dfrobot.com.cn/goods-1902.html)x2 |(https://www.dfrobot.com.cn/goods-1966.html)x1 |[全彩灯带](https://www.dfrobot.com.cn/goods-2629.html) x1 | (https://www.dfrobot.com.cn/goods-2843.html)x1|
---
### 软件使用:(https://bxy.dfrobot.com.cn/)、(https://mindplus.dfrobot.com.cn/SIoT)
> Tips:SIoT下载地址:https://mindplus.dfrobot.com.cn/SIoT
根据自己电脑的系统,对应下载SIoT软件压缩包,例如Windows系统下载win32。
> 注:SIoT使用方法详见附录1
#### 知识链接
- SOIT
> **简介**:SIoT是一个为中小学STEM教育定制的跨平台的开源MQTT服务器程序,S指科学(Science)、简单(Simple)的意思。
> ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886733133-image011.png)
- 物联网
> **简介**:物联网(Internet of Things,缩写IoT)是互联网的一个延伸,互联网的终端是计算机(PC、服务器),而物联网的终端是硬件设备,无论是家电、工业设备、汽车、监测仪器,所有这些终端都可以互联,可以总结为万物互联。
> ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886751911-image013.png)
- MQTT
> **简介**:MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。
>![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886770575-image015.png)
- 全彩灯带
> **简介**:全彩灯带由7个全彩LED组成。两头PH2.0-3P接口,可任意级联,实现可长可短的灯带。采用柔软的FPCB板为基板,可随意对接,弯曲,裁剪及任意固定在凹凸表面。
>
> 该灯带仅需一根信号线即可控制所有LED,每一颗LED都是一个独立的像素点,每个像素点都是由R,G,B三基色颜色组成,可实现256级亮度显示,完成16777216种颜色的全真色彩显示,同时像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还内置信号整形电路,有效保证了像素点光的颜色高度一致。
## 五、实践过程
在本项目中,我们将利用掌控板自带的WiFi模块和全彩灯带,分两步设计一个物联网灯控系统系统,实现智能终端与物联网平台进行通信。
1. 发送信息至物联网平台
2. 接收网络平台的信息并控制灯的亮灭
---
### 任务1:发送消息至物联网平台
#### 1、硬件搭建
**STEP1**:将一块掌控板插入I/O扩展板,注意正反
**STEP2**:通过USB连接线将掌控板接到计算机。
#### 2、软件编写
**STEP1**:软件设置
1、创建与保存项目文件
(1)启动BXY编程软件,选择主控类型“掌控板”。
(2)新建项目,保存并命名为“z6.1”。
**STEP2**:程序编写
```
from mpython import *
from umqtt.simple import MQTTClient
from machine import Timer
SERVER = "192.168.43.194" # MQTT服务器IP,即运行SIoT的电脑IP
username='siot' # SIoT默认用户名(user)为:siot
password='dfrobot' # 默认密码(pwd)为:dfrobot
CLIENT_ID = "" # Client ID 可为空
TOPIC='df/sdf' # 自定义topic,命名方式:项目ID/设备名,不可缺少符号/
mywifi=wifi() # 实例化wifi类
mywifi.connectWiFi("Jiao P30","syj12345678") # 连接wifi,替换成你的wifi
try:
def sub_cb(topic, msg): # 当接收到订阅消息时的回调函数
print((topic, msg)) # 打印接收的主题消息
c = MQTTClient(CLIENT_ID, SERVER,1883,username,password,keepalive=30)
# MQTTClient类实例,并设置连接保持时间间隔为30秒
c.connect() # 连接mqtt
c.set_callback(sub_cb) # 设置回调函数
c.subscribe(TOPIC) # 订阅主题
print("Connected to %s" % SERVER)
tim1 = Timer(1) # 创建定时器1
tim1.init(period=20000, mode=Timer.PERIODIC,callback=lambda n:c.ping())
# 20秒间隔发送Ping,保持连接
while True:
c.wait_msg() # 循环等待消息
c.publish(TOPIC,"hello")
finally:
c.disconnect() # 异常时,断开mqtt连接
```
#### 3、运行调试
**STEP1**:点击“烧录”上传程序并运行
在浏览器上打开SIoT网页端,可以看到设备发送的hello.
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886808192-image018.png)
---
### 任务2:控制灯的亮灭
在上个任务中,我们已经实现了智能终端通过编程向物联网平台实现消息的发送。而信息的交换是双向的。因此,接下来,我们将通过物联网平台发送消息至智能终端,并控制灯的亮灭。
#### 1、硬件搭建
**STEP1**:按下
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886818930-image020.png)
图在上述连接的基础上将全彩灯带接入扩展板。
#### 2、软件编写
**STEP1**:软件设置
1、创建与保存项目文件
(1)启动BXY编程软件,选择主控类型“掌控板”。
(2)新建项目,保存并命名为“z6.2”。
**STEP2**:程序编写
```
from umqtt.simple import MQTTClient
from mpython import *
from machine import Timer
import neopixel #导入灯带模块
np = neopixel.NeoPixel(Pin(Pin.P8), n=7,bpp=3,timing=1) # 初始化灯带
SERVER = "192.168.43.194" # MQTT服务器IP,即运行SIoT的电脑IP
username='siot' # SIoT默认用户名(user)为:siot
password='dfrobot' # 默认密码(pwd)为:dfrobot
CLIENT_ID = "" # Client ID 可为空
TOPIC='df/sdf' # 自定义topic,命名方式:项目ID/设备名,不可缺少符号/
mywifi=wifi() # 实例化wifi类
mywifi.connectWiFi("Jiao P30","syj12345678") # 连接wifi,替换成你的wifi
try:
def sub_cb(topic, msg): # 当接收到订阅消息时的回调函数
print((topic, msg)) # 打印接收的主题消息
if topic == TOPIC.encode(): # 如果topic为我们设备的topic时,由于收到为字节类型。这里需要将 TOPIC 转换为字节类型。
if msg == b"on": # 如果消息为“on”,亮灯
np.fill((0,100,0))
np.write()
elif msg == b"off": # 如果消息为“off”,灭灯
np.fill((0,0,0))
np.write()
c = MQTTClient(CLIENT_ID, SERVER,1883,username,password,keepalive=30) # MQTTClient类实例,并设置连接保持时间间隔为30秒
c.connect() # mqtt连接
c.set_callback(sub_cb) # 设置回调函数
c.subscribe(TOPIC) # 订阅主题
print("Connected to %s" % SERVER)
c.publish(TOPIC,"hello")
tim1 = Timer(1) # 创建定时器1
tim1.init(period=20000, mode=Timer.PERIODIC,callback=lambda n:c.ping()) # 20秒间隔发送Ping,保持连接
while True:
c.wait_msg() # 循环等待消息
finally:
c.disconnect() # 异常时,断开mqtt连接
```
#### 3、运行调试
**STEP1**:点击“烧录”上传程序并运行
在SIoT物联网平台上 发送 “ON” 后,灯带亮起,在SIoT 发送 “OFF”后,灯带熄灭
## 六、延伸拓展
1. 灯带可以亮出各种不同的颜色。尝试编写程序,在SIoT平台上发送不同的数字实现亮不同颜色的灯!
2. 尝试添加舵机,安装在家中的开关面板上试一试吧!
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886842778-image022.png)
---
## 附录
### 附录1:扩展阅读
**SIoT使用教程-服务器搭建**
在开始编辑控制程序和组装框架之前,我们需要做一些准备工作。
- 1、首先我们需要下载SIoT软件:下载地址:https://mindplus.dfrobot.com.cn/SIoT
根据自己电脑的系统,对应下载SIoT软件压缩包。SIoT是一个绿色软件,将下载的压缩包解压并打开。
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886856087-image024.png)
- 2、我们运行SIoT,打开软件,会弹出一个窗口,如图。我们只需要在使用SIoT的期间保持这个窗口的开启就可以了。
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886861646-image026.png)
- 3、将电脑连接WIFI(提供WIFI的路由器或手机热点可以不连接互联网,因为使用SIoT实现物联网应用时,只需要使用路由器或手机热点建立一个局域网即可)。
- 4、获取电脑IP,电脑每次连接WIFI,都会生成一个IP地址,每个IP地址对应的电脑都是唯一的。运行SIoT程序后会在电脑上建立一个SIoT服务器,其他设备要访问这个服务器,需要知道这个SIoT服务器所在电脑的IP地址。
> 1)同时按下键盘上“WIN”+“R”,弹出如下运行窗口,输入CMD,点击确定。
>
> ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886901067-image028.png)
>
> ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886907134-image030.png)
>
> 2)在弹出的窗口中,输入“ipconfig”,点击键盘“回车”,在小黑框中可以看到IPv4,后面的部分就是电脑的IP地址,如下图IP为192.168.7.199。(每次连接不同的WIFI,电脑的IP地址都可能会发生变化,需要通过上述方法重新获取。)
>
> ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886922505-image033.png)
- 5、打开SIoT网页端,打开浏览器,在地址栏输入在上步获取的IP地址,在最后加上“:8080”,如192.168.7.199:8080 。
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886972745-image035.png)
- 6、按下回车,即进去SIoT网页端了。
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627886990909-image037.png)
- 7、登录SIoT。
> 账号:SIoT 密码:dfrobot(SIoT网页端账号、密码都是统一的)
>
> 输入账号、密码后,点击“登陆”,登陆后页面如下:
> ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627887005768-image039.png)
到这里,SIoT平台搭建的部分就完成了。
---
**SIoT物联网相关功能**
- 【SIoT】--- SIoT物联网相关功能
SIoT库将提供我们设置SIoT参数,首发消息等功能。
要使用此模块首先需要:
- import SIoT
> 函数
- init(CLIENT_ID, SERVER, port=1883, user=IOT_UserName, password=IOT_PassWord)
> 初始化SIoT
- SERVER = "192.168.9.107"
> 设置MQTT服务器IP,这里IP地址需要替换为开启SIoT平台的PC端的IP地址
- CLIENT_ID = ""
> 用户编号,在SIoT上,CLIENT_ID可以留空
- IOT_pubTopic= 'xzr/001'
> 设置项目名称和设备名称,“topic”格式为“项目名称/设备名称”,实例中即xzr项目001设备
- IOT_UserName ='SIoT'
- IOT_PassWord ='dfrobot'
> 输入用户名和密码,示例为默认值,一般情况下不用修改
- connect()
> 连接服务器
- publish(IOT_pubTopic, data)
> 发送数据
- subscribe(IOT_pubTopic, cb)
- getsubscribe(IOT_pubTopic)
> 接收数据
- set_callback(cb)
> 设置回调函数
- stop()
> 断开链接
页:
[1]