回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

#物联网挑战赛#物联网课程——校园物联网系统控制大屏 简单

头像 云天 2023.06.01 541 5

   【教学背景】 

    物联网nternet of Things,IoT)是继互联网之后的新型信息基础设施,是推动大数据和人工智能等信息科技发展和普及不可或缺的重要组成部分。物联网的出现极大地拓展了人们的学习、生活和工作空间,推动了物理世界与数字世界的相互融合。

    智能家居作为物联网的典型应用之一,是在互联网影响之下物联化的体现,也是较为贴近学生生活的物联系统。 本节课以此为例,引导学生思考实现“智能家居”的关键因素-物物互联,从而让学生在实例中理解物联网的概念,初步体会物联网的实现离不开数据。分组制作“校园物联网系统控制大屏”,模拟控制教室内的风扇、灯等,让学生在案例的体验、探究中增强信息意识。

    【学情分析】

    本节课的教学对象是高一年级学生,他们已有互联网应用与创新相关知识的学习经验,对互联网及相关新技术的本质有一定的认识,具备一定的网络知识基础。他们已具有一定的算法知识基础和图形化编程能力,通过“从互联网到物联网”部分的学习,他们已经对物联网的概念有清晰的理解,知道物联网的特征和架构,但他们还不了解物联网系统的工作过程和基本原理,对物联网系统中涉及的关键设备没有具体认知,缺少实践操作的经验。

    【教学环境】

Mind+编程软件、可视化面板,米思奇编程软件,行空板,ESP32-C3,电磁继电器,传感器,台灯,风扇。

    【教学目标】

    通过实践与体验,了解物联网中控制与反馈的实现过程。

    小组合作,使用行空板加传感器对室内温度、湿度、声音等环境数据进行接收、发送,使用SIOT物联网平台保存数据,使用可视化面板读取、显示数据。并控制灯及风扇开关。

    学生结合教师演示的例子,分组完成“校园物联网大屏”。

    【教学过程】

    小组讨论,制订小组分工表,在老师的指导下,分别对每种传感器进行单独测试,完成电路连接,编写程序实现组件的控制。

    1.传感器连接行空板

    各组分别将温湿度传感器和火焰传感器连接在行空板21、22引脚上,声音和光线使用行空板内置传感器。

    教师示例:

webwxgetmsgimg.jpg

 

    2.行空板编程

    行空板连接WIFI,获取IP地址(192.168.0.105),开启SIOT物联网服务。程序中“初始化MQTT”。教师演示编程过程并讲解,学生对应自己的配置,跟随练习编写程序。

screenshots-升级行空板SIOTV2_519.mp-1685601646144.png

3.新建主题

    在物联网平台中,新建相应的“主题”,与程序相对应。

360截图20230601152244193.jpg

    4.可视化面板

    学生分组编辑可视化面板,并连接行空板本地物联网IP,示例:“192.168.0.105”,并对各组件与对应主题进行配置。

360截图20230601144304931.jpg

    5.模拟家居设施

    学生课前需对台灯、风扇进行必要改造。使用改造后的台灯、风扇模拟家居电器,通过物联网大屏进行控制。主控板使用ESP32-C3。

webwxgetmsgimg (2).jpg
webwxgetmsgimg (1).jpg

 

    6.米思奇编程

    使用米思奇软件给ESP32编程,连接SIOT物联网平台,并订阅主题,接收信息指令,控制台灯、风扇开关。

360截图20230601154423185.jpg

程序代码:

代码
import machine

# main.py
import time
from simple import MQTTClient
from gc import mem_free
import network

pin0 = machine.Pin(5, machine.Pin.OUT)


def connect_wifi(ssid, passwd):
    global wlan
    wlan = network.WLAN(network.STA_IF)  # create a wlan object
    wlan.active(True)  # Activate the network interface
    wlan.disconnect()  # Disconnect the last connected WiFi
    wlan.connect(ssid, passwd)  # connect wifi
    while (wlan.ifconfig()[0] == '0.0.0.0'):
        time.sleep(1)
    wlan_info = wlan.ifconfig()
    print("Wifi is connected with the following information:")
    print(" IP address : " + wlan_info[0])
    print("Subnet mask : " + wlan_info[1])
    print("    Gateway : " + wlan_info[2])
    print("        DNS : " + wlan_info[3])


mqtt_client = None


def sub_cb(topic, msg):
    print("接收到数据", (topic, msg.decode()))

   
    if msg.decode()=="4":
     pin0.value(1)
    elif msg.decode()=="5":
     pin0.value(0)




#broker_address = 'iot.dfrobot.com.cn'  #  MQTT服务器地址
#broker_port = '1883'   #  MQTT服务器端口
#client_id = 'X8jykxFnR101'   #  MQTT设备id
#user_name = 'X8jykxFnR'  # mqtt 设备用户名
#password = 'u8jskbFngz' # mqtt 设备密码
#publish_topic = '1DXAmWJ4g'   # 推送主题
#subscribe_topic = 'k_eT7HUVR'  # 订阅主题
#SSID = 'sxs'  # 无线网名称
#PASSWORD = 'smj080823'  #无线网密码

broker_address = '192.168.0.105'  #  MQTT服务器地址
broker_port = '1883'   #  MQTT服务器端口
client_id = 'X8jykxFnR101'   #  MQTT设备id
user_name = 'siot'  # mqtt 设备用户名
password = 'dfrobot' # mqtt 设备密码

subscribe_topic = 'siot/keting'  # 订阅主题
SSID = 'TP-LINK_CB88'  # 无线网名称
PASSWORD = 'jiaoyan2'  #无线网密码
if __name__ == '__main__':
    try:
        print("\n可用内存1: %s Byte" % str(mem_free()))
        connect_wifi(SSID, PASSWORD)
        print("\n可用内存2: %s Byte" % str(mem_free()))
        mqtt_client = MQTTClient(client_id=client_id, server=broker_address, port=broker_port, user=user_name,
                                 password=password, keepalive=300)
        mqtt_client.set_callback(sub_cb)
        mqtt_client.connect()
        mqtt_client.subscribe(subscribe_topic)
        #mqtt_client.publish(topic=publish_topic, msg="12345678900000", retain=False, qos=1)
        print("mqtt_client 1: %s" % mqtt_client.client_id)
        while True:
            mqtt_client.wait_msg()  # wait message
    except Exception as ex_results:
        print('exception1', ex_results)
    finally:
        if (mqtt_client is not None):
            mqtt_client.disconnect()
        wlan.disconnect()
        wlan.active(False)


根据需要,为每个设备编写对应程序:

if msg.decode()=="1":
    pin0.value(1)
    time.sleep(0.2)
    pin0.value(0)
    time.sleep(0.2)
   elif msg.decode()=="2":
    pin0.value(1)
    time.sleep(0.2)
    pin0.value(0)
    time.sleep(0.2)
   elif msg.decode()=="3":
    pin0.value(1)
    time.sleep(0.2)
    pin0.value(0)
    time.sleep(0.2)

 

命令信息“1”、“2”、“3”,控制风扇开关和增速。

 

    if msg.decode()=="4":
    pin0.value(1)
   elif msg.decode()=="5":
    pin0.value(0)

 

命令信息“4”、“5”,控制客厅灯

 

    if msg.decode()=="6":
    pin0.value(1)
   elif msg.decode()=="7":
    pin0.value(0)

 

命令信息“6”、“7”,控制餐厅灯

 

    if msg.decode()=="8":
    pin0.value(1)
   elif msg.decode()=="9":
    pin0.value(0)

 

命令信息“8”、“9”,控制卧室灯

    【展示分享】

    小组展示设计及实践成果,其它同学认真倾听,并对他人作品进行评价,包含优点、不足之处和改进之处等。

    【演示视频】

    【课后反思】

    本节课通过贴近学生的生活实例 ,在制作实物作品、编写程序的场景中,帮助学生理解物联网的原理和过程。

    因时间限制和安全方面等原因,不能使用物联网控制真实的大型电器如班级内的饮水机、教室灯、风扇等是本节课的教学遗憾。

评论

user-avatar
  • 花生编程

    花生编程2023.08.07

    赞赞赞

    0
    • 花生编程

      花生编程2023.08.07

      厉害厉害

      0
      • 三春牛-创客

        三春牛-创客2023.08.04

        赞赞赞

        0
        • 三春牛-创客

          三春牛-创客2023.08.04

          厉害厉害

          0
          • hacker_

            hacker_2023.08.04

            666

            0