从 SIoT 到网页看板的完整链路
K10 做物联网,走的是一条连续链路:电脑上启动 SIoT 服务,K10 连入同一个局域网的 WiFi,作为 MQTT 客户端连上 SIoT,向主题发布数据,最后在浏览器里查看。图形化和 MicroPython 两种方式都能走通,下面按顺序给出每一步的操作与预期结果。
电脑和 K10 必须处在同一个局域网,这是整条链路成立的前提。
电脑端启动 SIoT 服务
SIoT 是 Mind+ 配套的本地 MQTT 服务端,跑在自己电脑上,发上来的数据会保存进数据库。第一步把它跑起来:
- 在电脑上运行 SIoT_V2 目录里的 start SIoT.bat,启动本地 SIoT 服务。
- 记下这台电脑的局域网 IP,在浏览器地址栏输入该 IP 加端口 8080,打开 SIoT 网页。
- 用默认账号 siot、默认密码 dfrobot 登录。这对凭据是 SIoT 服务的默认值,登录网页和后面 K10 连 MQTT 用的是同一套。
预期结果:网页正常打开并登录成功。电脑的局域网 IP 记下来,K10 连接 MQTT 时服务器地址填的就是它。
图形化:Mind+ 里连 WiFi 并发消息
- Mind+ 中加载 WiFi 与 MQTT 模块。
- 填入热点名与密码,让 K10 连上和电脑同一个局域网的 WiFi。
- MQTT 连接里,服务器填电脑的局域网 IP,账号 siot、密码 dfrobot。
- 用「MQTT发送消息…保存数据库(SIoT V2)」积木,把数值发到主题。
主题以 siot/ 开头,后面接自己起的名字,比如 siot/env。预期结果:发送后刷新 SIoT 网页,能看到这个主题以及刚发出去的消息。
官方 FAQ 提醒:屏幕显示类积木不要放进回调函数、线程、MQTT 接收这类 hat 积木里。收到消息先把值存进变量,回到主循环再刷新界面。
MicroPython:WiFi 与 MQTT 代码
官方 MicroPython 固件把 WiFi 和 MQTT 放在 k10_base 库里,示例代码如下:
from k10_base import WiFi,MqttClient
wifi = WiFi()
wifi.connect(ssid="DFRobot-guest",psd="dfrobot@2017",timeout=50000)
wifi.status() # True/False
wifi.info() # IP、子网掩码、网关等
mqttclient.connect(server="192.168.9.172", port=1883, client_id="", user="siot", psd="dfrobot")
mqttclient.received(topic='siot/test', callback=received_1ffdf0jpLa)
mqttclient.publish(topic='siot/test', content='hello')
预期结果:连接成功后 wifi.status() 返回 True,wifi.info() 打印出 IP、子网掩码、网关等信息;publish 执行后,SIoT 网页的 siot/test 主题下出现一条 hello。received 用来订阅主题,收到消息时执行 callback 指定的处理函数,函数名换成自己定义的即可,只发数据不接收时可以不用它。
代码里的热点名、密码、服务器 IP 都是官方示例的演示值,动手时要换成自己的 WiFi 名称、密码与电脑 IP;timeout 默认 10000 毫秒,示例中的 50000 只是给较慢的网络多留时间。
在 Thonny 里要把程序保存为 main.py 到 MicroPython 设备,只存在本地时重启后会丢。这套固件官方说明仍在测试阶段,可能有 bug;跑过之后想切回 Mind+ 图形化,要在 Mind+ V1 里「恢复初始设置」,或用 Mind+ V2 连接 K10 后「擦除」,恢复时先按住 BOOT 键再接数据线,识别出端口后松开。
多块板与大屏的消息设计
公开课程案例里有几条通用做法。多块板分区域监测时,各发各的主题,例如 siot/env_zone1、siot/env_zone2,大屏放多个图表组件分别订阅。温湿度想画在同一张图上,用逗号把两个值拼成一条「温度,湿度」消息,此时大屏图表的数据列数必须设为 2、列名对应温度与湿度,否则画不出双曲线。采样间隔按数据变化速率区分:光照变化快,一秒采一次也可以;温湿度变化慢,间隔可以拉长。做阈值告警时加一个变量记录上次的告警状态,只在状态变化时才发送,避免每轮采样都刷出一条相同的告警。
连不上时怎么查
- 现象:wifi.status() 一直是 False。原因:K10 的 WiFi 只支持 2.4 GHz,路由器只开 5 GHz 时连不上。解法:确认 2.4 GHz 频段已开启。
- 现象:SIoT 网页打不开或登录失败。原因:地址、端口或凭据不对。解法:访问电脑 IP 加 8080 端口,默认账号 siot、密码 dfrobot。
- 现象:网页正常、K10 也联网了,消息却迟迟不到。原因:电脑与 K10 不在同一局域网,或 MQTT 服务器地址填错。解法:把两台设备接入同一个网络,并核对 server 填的电脑 IP。
链路走通之后,把传感器读数接进 publish,再按上面的主题划分与消息格式组织数据,就能搭出一套多点位的环境监测项目。