4337浏览
查看: 4337|回复: 27

[MP动手做] MicroPython动手做(29)——物联网之SIoT

[复制链接]
MicroPython动手做(29)——物联网之SIoT图1

SIoT
一个为教育定制的跨平台的MQTT服务器程序,S指科学(Science)、简单(simple)的意思。SIoT支持Win10、Win7、Mac、Linux等操作系统,一键启动,无需注册即可使用。SIoT针对学校场景的开源免费的MQTT服务器软件,可一键创建本地物联网服务器,摆脱联网困扰。SIoT重点关注物联网数据的收集和导出,是采集科学数据的最好选择之一。

那什么是物联网?什么又是MQTT呢?

物联网(Internet of Things,缩写IoT)是互联网的一个延伸,互联网的终端是计算机(PC、服务器),而物联网的终端是硬件设备,无论是家电、工业设备、汽车、监测仪器,所有这些终端都可以互联,可以总结为万物互联。

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

SIoT为“虚谷物联”项目的核心软件,是为了帮助中小学生理解物联网原理,并且能够基于物联网技术开发各种创意应用。

驴友花雕  中级技神
 楼主|

发表于 2020-6-13 10:51:16

10、通过主题消息“on”和“off”开关LED灯

[mw_shl_code=python,false]#MicroPython动手做(29)——物联网之SIoT
#通过主题消息“on”和“off”开关LED灯

from mpython import *
import network
from umqtt.simple import MQTTClient
import music
import time
from machine import Timer
import ubinascii

my_wifi = wifi()

my_wifi.connectWiFi("zh", "zy1567")

mqtt = MQTTClient("ok", "192.168.31.248", 1883, "siot", "dfrobot", keepalive=30)

try:
    mqtt.connect()
    print('Connected')
except:
    print('Disconnected')

def mqtt_topic_6561676c6572382f7a6b6231(_msg):
    global i
    if str(_msg) == "on":
        rgb.fill((int(255), int(0), int(0)))
        rgb.write()
        time.sleep_ms(1)
        oled.DispChar("                 开灯", 0, 32, 1)
        oled.show()
    if str(_msg) == "off":
        rgb.fill( (0, 0, 0) )
        rgb.write()
        time.sleep_ms(1)
        oled.DispChar("                关灯", 0, 32, 1)
        oled.show()

def on_button_a_down(_):
    global i
    time.sleep_ms(10)
    if button_a.value() == 1: return
    mqtt.publish("eagler8/zkb1", "on")
    music.play('E5:1')

def on_button_b_down(_):
    global i
    time.sleep_ms(10)
    if button_b.value() == 1: return
    mqtt.publish("eagler8/zkb1", "off")
    music.play('D5:1')

def mqtt_callback(topic, msg):
    try:
        topic = topic.decode('utf-8', 'ignore')
        _msg = msg.decode('utf-8', 'ignore')
        eval('mqtt_topic_' + bytes.decode(ubinascii.hexlify(topic)) + '("' + _msg + '")')
    except: print((topic, msg))

mqtt.set_callback(mqtt_callback)

mqtt.subscribe("eagler8/zkb1")

def timer14_tick(_):
    mqtt.ping()

tim14 = Timer(14)
tim14.init(period=20000, mode=Timer.PERIODIC, callback=timer14_tick)

button_a.irq(trigger=Pin.IRQ_FALLING, handler=on_button_a_down)

button_b.irq(trigger=Pin.IRQ_FALLING, handler=on_button_b_down)


mqtt.publish("eagler8/zkb1", "hello")
music.play('G5:1')
oled.fill(0)
oled.DispChar("        连接SIoT成功", 0, 16, 1)
oled.show()
rgb[1] = (int(0), int(51), int(0))
rgb.write()
time.sleep_ms(1)
while True:
    mqtt.wait_msg()[/mw_shl_code]
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-7 12:13:47

6、尝试在SIoT平台输入消息,控制点亮或熄灭板载LED灯

[mw_shl_code=python,false]#MicroPython动手做(29)——物联网之SIoT
#尝试在SIoT平台输入消息,控制点亮或熄灭板载LED灯

from umqtt.simple import MQTTClient
from machine import Timer
from mpython import *
import ubinascii
import network
import music


_mqtt_topic_list = []

def timer14_tick(_):
  global mqtt
  mqtt.ping()

def mqtt_callback(topic, msg):
  try:
    topic = topic.decode('utf-8', 'ignore')
    _msg = msg.decode('utf-8', 'ignore')
    eval('mqtt_topic_' + bytes.decode(ubinascii.hexlify(topic)) + '("' + _msg + '")')
  except:
    print((topic, msg))

brightness=9

# 事件回调函数
def mqtt_topic_6561676c6572382f7a6b6231(_msg):
  global g_my_variable
  if (_msg == on):
    music.pitch(196, 50)
    rgb.fill((255*brightness//9, 255*brightness//9, 153*brightness//9))
    rgb.write()
  if (_msg == off):
    music.pitch(784, 50)
    rgb.fill( (0, 0, 0) )
    rgb.write()


my_wifi = wifi()
tim14 = Timer(14)
my_wifi.connectWiFi("zh","zy1567")
mqtt = MQTTClient("", "192.168.31.248", 1883, "siot", "dfrobot")
try:
  mqtt.connect()
  print('Connected')
except:
  print('Disconnected')
mqtt.set_callback(mqtt_callback)
tim14.init(period=20000, mode=Timer.PERIODIC, callback=timer14_tick)
mqtt.subscribe("eagler8/zkb1")
rgb[1] = (0*brightness//9, 102*brightness//9, 0*brightness//9)
rgb.write()
music.pitch(392, 50)
mqtt.publish("eagler8/zkb1","on")[/mw_shl_code]
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-12 10:05:08

8、读取环境光强度发送至SIoT网页端


[mw_shl_code=python,false]#MicroPython动手做(29)——物联网之SIoT
#读取环境光强度发送至SIoT网页端

from umqtt.simple import MQTTClient
from mpython import *
import network
import music
import time


brightness=9

# 事件回调函数
def on_button_a_down(_):
  global g_my_variable
  time.sleep_ms(10)
  if button_a.value() == 1: return
  oled.DispChar("           采集光线值", 0, (3-1)*16, 1)
  oled.show()
  while True:
    mqtt.publish("eagler8/zkb1",(str(light.read())))
    time.sleep(2)


my_wifi = wifi()
button_a.irq(trigger=Pin.IRQ_FALLING, handler=on_button_a_down)
my_wifi.connectWiFi("zh","zy1567")
while not (my_wifi.sta.isconnected()):
  pass
mqtt = MQTTClient("", "192.168.31.248", 1883, "siot", "dfrobot")
try:
  mqtt.connect()
  print('Connected')
except:
  print('Disconnected')
rgb[1] = (0*brightness//9, 102*brightness//9, 0*brightness//9)
rgb.write()
music.pitch(392, 50)
mqtt.publish("eagler8/zkb1","hello")
oled.invert(0)
oled.DispChar("         SIoT连接成功", 0, (2-1)*16, 1)
oled.show()[/mw_shl_code]
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-5 11:22:25

SIoT下载链接

系统集合  http://download3.dfrobot.com.cn/SIoT/SIoT1.2_full.zip

版本V1.2:
windows 32&64位系统
Mac系统
linux系统
虚谷号系统

MicroPython动手做(29)——物联网之SIoT图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-5 11:43:44

1、SIoT采用GO语言编写

具有如下特点:

(1)跨平台。支持Win10、Win7、Mac、Linux等操作系统。只要启动这一程序,普通计算机(包括拿铁熊猫、虚谷号和树莓派等微型计算机)就可以成为标准的MQTT服务器。

(2)一键运行。纯绿色软件,不需要安装,下载后解压就可以使用,对中小学的物联网技术教学尤其适合。

(3)使用简单。软件运行后,不需要任何设置就可以使用。利用特定的“Topic”的名称(“项目名称/设备名称”),就能自动在数据库中添加项目和设备的名称,并将消息数据存入数据库。

(4)支持数据导出。所有的物联网消息数据都可以在线导出,系统采用SQLite数据库,同时支持Mysql数据库。

(5)支持标准的MQTT协议。QoS级别为0。

(6)支持WebAPI。系统系统了完善的WebAPI,方便各种软件以HTTP的方式调用,支持App inventor、Scratch、VB等默认不支持MQTT的中小学生常用编程软件调用。

(7)支持插件开发。

(8)SIoT的资源 GitHub:https://github.com/vvlink/SIoT/ 提供文档、案例、课程。


SIoT软件开发团队

核心人员:苏宇、谢作如、夏青

技术支持:张路、叶琛、李冬冬

系统测试:李亮、林淼焱、张喻


注:SIoT软件的开发得到温州市科技局2019年科技创新项目的资助,为《物联网与科学探究创意实验课程开发》项目的成果之一,软件采用MIT协议开源。



MicroPython动手做(29)——物联网之SIoT图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-5 11:49:16

2、SIoT使用手册
简介
介绍物联网、MQTT和SIoT软件。
下载和安装
介绍SIoT软件的下载、安装、运行以及软件操作界面。
客户端连接范例
介绍各种客户端和SIoT软件的连接。SIoT为标准的MQTT服务器,支持绝大多数的客户端程序连接。
典型应用案例
介绍各种利用物联网技术实现的典型应用案例,重点关注如何利用物联网技术进行科学探究。
高级操作技巧
介绍SIoT的一些高级操作,如安全设置、WebAPI和数据导出等。

《SIoT使用手册》在线版
https://siot.readthedocs.io/zh_CN/latest/index.html

SIoT文档开发团队
负责人:谢作如
参与人员:
谢作如(温州中学)
林淼焱(温州大学)
郑祥(温州四中)
郝晴(天津师大)
张喻(温州大学)
邱奕盛(温州中学)
许靖宇(天津师大)
宋达(天津师大)
毛雁(天津师大)
夏青(上海蘑菇云)
陆雅楠(上海师范大学)
……

MicroPython动手做(29)——物联网之SIoT图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-7 08:01:05

3、在电脑上运行SIoT系统


(1)双击运行SIoT_win.exe,可以看到一个黑色的CMD窗口。
* 使用SIoT过程中一定不要关该窗口。


MicroPython动手做(29)——物联网之SIoT图1


(2)将电脑连接到WIFI。
* 提供WIFI的路由器或手机热点可以不连接互联网,因为使用SIoT实现物联网应用时,只需要使用路由器或手机热点建立一个局域网即可。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-7 09:11:18

本帖最后由 驴友花雕 于 2020-6-7 09:19 编辑

4、 打开SIoT网页端

a、打开电脑浏览器,在网址栏输入在“STEP3”中获得的IP地址加上“:8080”,如:192.168.31.24:8080
* “:” 需在在英文输入法下。


b、点击键盘enter键,打开即为SIoT网页端,如下图:


MicroPython动手做(29)——物联网之SIoT图1

打不开的话——

     ■ 检查siot的小黑窗是否打开
     ■ 检查ip地址是否错误,如果有多个ip地址就一个一个尝试
     ■ 关闭网络防火墙


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-7 09:19:27

5、登陆SIoT网页端

账号:siot
密码:dfrobot
输入账号、密码后,点击“登陆”,
登陆后页面如下:

MicroPython动手做(29)——物联网之SIoT图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-7 12:54:26

Mind+ 实验图形编程

MicroPython动手做(29)——物联网之SIoT图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-7 13:05:59

运行后出错,信息如下:

reader:  read tcp 192.168.31.248:1883->192.168.31.221:53734: wsarecv: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

读取器:读取tcp 192.168.31.24:1883->192.168.31.221:53734:wsarecv:连接尝试失败,因为一段时间后被连接方未正确响应,或者由于连接的主机未能响应而建立连接失败。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-7 13:12:15

在网页端,能查询到SIoT平台发出的消息,但无法控制板载LED灯

MicroPython动手做(29)——物联网之SIoT图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-10 18:22:47

本帖最后由 驴友花雕 于 2020-6-10 18:28 编辑

7、发布“hello”至主题“eagler8/zkb1”


[mw_shl_code=python,false]#MicroPython动手做(29)——物联网之SIoT
#发布“hello”至主题“eagler8/zkb1”

# MindPlus
# mpython
from umqtt.simple import MQTTClient
from mpython import *
import network
import music


brightness=9


my_wifi = wifi()
my_wifi.connectWiFi("zh","zy1567")
while not (my_wifi.sta.isconnected()):
  pass
oled.invert(0)
oled.DispChar("          Wifi连接成功", 0, (2-1)*16, 1)
mqtt = MQTTClient("", "192.168.31.248", 1883, "siot", "dfrobot")
try:
  mqtt.connect()
  print('Connected')
except:
  print('Disconnected')
rgb[1] = (0*brightness//9, 102*brightness//9, 0*brightness//9)
rgb.write()
music.pitch(392, 50)
mqtt.publish("eagler8/zkb1","hello")
oled.invert(0)
oled.DispChar("         SIoT连接成功", 0, (2-1)*16, 1)
oled.show()[/mw_shl_code]

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-10 18:34:25

Mind+ 实验图形编程

MicroPython动手做(29)——物联网之SIoT图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-10 18:45:36

SIoT网页端收到的消息

MicroPython动手做(29)——物联网之SIoT图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-10 18:52:22

SIoT 初始化参数

MicroPython动手做(29)——物联网之SIoT图1

MicroPython动手做(29)——物联网之SIoT图2
回复

使用道具 举报

gada888  版主

发表于 2020-6-11 19:07:25

了解一下
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-12 05:18:07


谢谢鼓励
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-12 10:08:53

MicroPython动手做(29)——物联网之SIoT图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-12 10:13:09

Mind+ 实验图形编程

MicroPython动手做(29)——物联网之SIoT图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-6-12 10:17:39

SIoT网页端上读取到的光线值

MicroPython动手做(29)——物联网之SIoT图1
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

硬件清单

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

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

mail