云天 发表于 2020-4-6 22:49:29

【掌控小度】小度智能音箱与Microbit智控电视(Easy Iot)

https://mc.dfrobot.com.cn/data/attachment/forum/202003/23/172112guvouox1ocmuzfx1.png

一、基本信息
作品名称小度智能音箱与Microbit智控电视(Easy Iot)
作者姓名宋秀双
作者单位河北省涿鹿县涿鹿中学

教材名称《万物智控》
教材类型自编教材
教材简介高中信息技术人工智能、编程设计
执教年级高二
课时长度2课时
涉及器材小度智能音箱、掌控板
涉及软件小度技能开放平台、Mind+软件、Microbit、OBLOQ物联网模块
文件清单教学设计、教学课件、演示视频、任务单、评价表、配套代码

二、作品内容小度智能音箱与Microbit智控电视(Easy Iot)
【硬件搭建】
Microbit连接扩展板,OBLOQ物联网模块接在P0口、P1口。小度智能音箱按使用说明配置好。注意:登录小度音箱的帐号与登录小度音箱开发平台的帐号为同一个,进行调试。
【作品功能】
实现通过小度智能音箱控制电视。结合“【掌控小度】开启小度智能音箱与掌控板“智控”之旅”课堂,学习Microbit、OBLOQ物联网模块的使用。



【教学内容】
本课主要内容是设计小度智能音箱控制掌控板开关台灯,目的是让学生通过小度音箱开发平台对Python编程实现简单应用,通过Mind+实现WIFI连接,Microbit、OBLOQ物联网模块使用。
【学情分析】
高二年级学生,对编程及网络使用已经有一定的基础,先通过TinyWebDB微数据库进行小度音箱与控掌控板简单连接,逐步过渡到使用MQTT物理网进行连接,先控制彩灯,再到电机、舵机、电磁继电器……,从此开启智控万物。
让学生亲身体验人工智能技术的应用给我们的生活带来的方便,并尽量通过讨论、实践与想象设计,发挥学生的能动性,使全体学生都能自主探索并获取新知。
【教学目标与要求】1. 知识与技能学习小度智能音箱开放平台使用,Python编程简单应用,Microbit、OBLOQ物联网模块使用,Mind+实现WIFI连接。2. 过程与方法(1)通过视频展示、亲自实践、创意设计等环节,提高对语音智能控制及其应用的认识;(2)通过对实验器材LED灯、电机、舵机、电磁继电器等的实践,了解Microbit、OBLOQ物联网模块使用,并设计相关的语音人工智能控制实际应用。
3. 情感、态度与价值观(1)在体验与实践相结合的过程中感受语音人工智能控制的应用,产生并保持学习的兴趣;(2)通过分组讨论、小组合作等方式开展多种形式的团队合作,培养学生的动手能力、解决实际问题的能力,提高团队协作能力;(3)通过对创意设计的交流与展示,培养学生的创新能力与语言表达能力;(4)能辩证地认识语音人工智能控制对社会发展、科技进步和日常生活产生的影响。
【教学重点与难点】重点:小度智能音箱控制Microbit的设计与应用。难点:OBLOQ物联网模块的原理及使用方法。
【教学方法与手段】体验式教学。通过制作一个小度智能音箱控制Microbit来了解其语音控制技术,对OBLOQ物联网模块进行全面的剖析。
【教学准备】1、准备百度帐号:https://dueros.baidu.com/open,小度智能音箱开放平台(DuerOS智能设备开放平台)。2、准备Easy Iot 物联网帐号:https://iot.dfrobot.com.cn/3、小度音箱、Microbit、扩展板、OBLOQ物联网模块【教学过程】一、演示小度智能控制电视(课前)教师活动:演示小度智能控制电视,通过物联网https://v.youku.com/v_show/id_XNDYyMTQxNzgwNA==.html
学生活动:思考、讨论。
二、DFRobot OBLOQ模块——工作原理讲解
如果你觉得连接物联网比较难的话,DFRobot OBLOQ模块将是你连接物联网的理想选择。物联网是将嵌入式系统技术、移动技术、网页技术全都融合在一起的,其发展的灵魂是以用户体验为核心,特点是与硬件、网络、平台、服务等完全不同的产业领域的相关者直接合作或者融合。目前国内外已有多个成熟物联网平台,但绝大部分物联网平台都是面向专业开发人员,操作复杂,上手困难。为此我们推出了OBLOQ物联网模块,搭配DFRobot自有的物联网平台,大大降低了物联网的使用门槛,并且OBLOQ还能够连接 Microsoft Azure IoT和其他标准的MQTT协议的IoT。无需复杂的基础知识,就能迅速搭建出一套物联网应用。
https://www.dfrobot.com.cn/images/upload/Image/2018011815475208txoa.png学生活动:学生自学IoT应用示例--OBLOQhttps://iot.dfrobot.com.cn/document.html

三、学思践悟——走近小度智能音箱教师活动:指导学生登陆开放平台https://dueros.baidu.com/open1、创建意图增加好如下意图:
2、”服务配置“中要选择“百度云CFC”,利用百度云CFC服务,点击即可进行服务配置,配置好,复制BRN码,填写到指定位置。
3、学生活动复习:配置服务中“百度云CFC”,创建函数、使用涵数模板、加载paho-mqtt、BRN码的使用

以下代码为Python2.7#!/usr/bin/env python2
# -*- encoding=utf-8 -*-

import dueros.paho.mqtt.client as mqtt

import sys
from dueros.Bot import Bot
from dueros.card.TextCard import TextCard

reload(sys)
sys.setdefaultencoding('utf8')

class DuerOSBot(Bot):

    def launch_request(self):
      """
      打开技能
      """
      self.wait_answer()
      card = TextCard('欢迎使用电视机控制功能')
      return {
            'card': card,
            'outputSpeech': r'欢迎使用电视机控制功能'
      }

    def ended_request(self):
      """
      关闭技能
      """
      self.wait_answer()
      return {
            'outputSpeech': r'感谢您的使用'
      }

    def __init__(self, request_data):
      super(DuerOSBot, self).__init__(request_data)
      self.add_launch_handler(self.launch_request)
      self.add_session_ended_handler(self.ended_request)
      self.add_intent_handler('sports', self.sports_intent)
      self.add_intent_handler('beijing', self.beijing_intent)
      self.add_intent_handler('jiangsu', self.jiangsu_intent)
      self.add_intent_handler('zhejiang', self.zhejiang_intent)
      self.add_intent_handler('news', self.news_intent)
      self.add_intent_handler('jilu', self.jilu_intent)
      self.add_intent_handler('voice_small', self.voice_small_intent)
      self.add_intent_handler('voice_big', self.voice_big_intent)
      self.add_intent_handler('hunan', self.hunan_intent)
      self.add_intent_handler('down', self.down_intent)
      self.add_intent_handler('up', self.up_intent)
      self.add_intent_handler('backward', self.backward_intent)
      self.add_intent_handler('last', self.last_intent)
      self.add_intent_handler('front', self.front_intent)
      self.add_intent_handler('next', self.next_intent)
      self.add_intent_handler('enter', self.enter_intent)
      self.add_intent_handler('home', self.home_intent)
      self.add_intent_handler('close', self.close_intent)
      self.add_intent_handler('open', self.open_intent)

    def sports_intent(self):
      on_publish("s2JTvfBZR", "R", 0)#0代表保存在服务器上
      card = TextCard('已为您播放体育频道')
      return {
            'card': card,
            'outputSpeech': r'已为您播放体育频道'
      }

    def beijing_intent(self):
      on_publish("s2JTvfBZR", "Q", 0)#0代表保存在服务器上
      card = TextCard('已为您播放北京卫视')
      return {
            'card': card,
            'outputSpeech': r'已为您播放北京卫视'
      }

    def jiangsu_intent(self):
      on_publish("s2JTvfBZR", "P", 0)#0代表保存在服务器上
      card = TextCard('已为您播放江苏卫视')
      return {
            'card': card,
            'outputSpeech': r'已为您播放江苏卫视'
      }

    def zhejiang_intent(self):
      on_publish("s2JTvfBZR", "O", 0)#0代表保存在服务器上
      card = TextCard('已为您播放浙江卫视')
      return {
            'card': card,
            'outputSpeech': r'已为您播放浙江卫视'
      }

    def news_intent(self):
      on_publish("s2JTvfBZR", "N", 0)#0代表保存在服务器上
      card = TextCard('已为您播放新闻频道')
      return {
            'card': card,
            'outputSpeech': r'已为您播放新闻频道'
      }

    def jilu_intent(self):
      on_publish("s2JTvfBZR", "M", 0)#0代表保存在服务器上
      card = TextCard('已为您播放纪录频道')
      return {
            'card': card,
            'outputSpeech': r'已为您播放纪录频道'
      }
    def voice_small_intent(self):
      on_publish("s2JTvfBZR", "C", 0)#0代表保存在服务器上
      card = TextCard('已为您降低音量')
      return {
            'card': card,
            'outputSpeech': r'已为您降低音量'
      }

    def voice_big_intent(self):
      on_publish("s2JTvfBZR", "D", 0)#0代表保存在服务器上
      card = TextCard('已为您提高音量')
      return {
            'card': card,
            'outputSpeech': r'已为您提高音量'
      }

    def hunan_intent(self):
      on_publish("s2JTvfBZR", "L", 0)#0代表保存在服务器上
      card = TextCard('已为您播放湖南卫视')
      return {
            'card': card,
            'outputSpeech': r'已为您播放湖南卫视'
      }

    def down_intent(self):
      on_publish("s2JTvfBZR", "K", 0)#0代表保存在服务器上
      card = TextCard('已为您向下')
      return {
            'card': card,
            'outputSpeech': r'已为您向下'
      }

    def up_intent(self):
      on_publish("s2JTvfBZR", "J", 0)#0代表保存在服务器上
      card = TextCard('已为您向上')
      return {
            'card': card,
            'outputSpeech': r'已为您向上'
      }

    def backward_intent(self):
      on_publish("s2JTvfBZR", "I", 0)#0代表保存在服务器上
      card = TextCard('已为您向后')
      return {
            'card': card,
            'outputSpeech': r'已为您向后'
      }

    def last_intent(self):
      on_publish("s2JTvfBZR", "A", 0)#0代表保存在服务器上
      card = TextCard('已为您播放上一个节目')
      return {
            'card': card,
            'outputSpeech': r'已为您播放上一个节目'
      }

    def front_intent(self):
      on_publish("s2JTvfBZR", "G", 0)#0代表保存在服务器上
      card = TextCard('已为您向前')
      return {
            'card': card,
            'outputSpeech': r'已为您向前'
      }

    def next_intent(self):
      on_publish("s2JTvfBZR", "B", 0)#0代表保存在服务器上
      card = TextCard('已为您播放下一个节目')
      return {
            'card': card,
            'outputSpeech': r'已为您播放下一个节目'
      }

    def enter_intent(self):
      on_publish("s2JTvfBZR", "E", 0)#0代表保存在服务器上
      card = TextCard('已为您确认')
      return {
            'card': card,
            'outputSpeech': r'已为您确认'
      }

    def home_intent(self):
      on_publish("s2JTvfBZR", "F", 0)#0代表保存在服务器上
      card = TextCard('已为您返回')
      return {
            'card': card,
            'outputSpeech': r'已为您返回'
      }

    def close_intent(self):
      on_publish("s2JTvfBZR", "H", 0)#0代表保存在服务器上
      card = TextCard('已为您关闭电视')
      return {
            'card': card,
            'outputSpeech': r'已为您关闭电视'
      }

    def open_intent(self):
      on_publish("s2JTvfBZR", "H", 0)#0代表保存在服务器上
      card = TextCard('已为您打开电视')
      return {
            'card': card,
            'outputSpeech': r'已为您打开电视'
      }


MQTTHOST = "182.254.130.180"
MQTTPORT = 1883
mqttClient = mqtt.Client()


# 连接MQTT服务器
def on_mqtt_connect():
    mqttClient.connect(MQTTHOST, MQTTPORT, 60)
    mqttClient.loop_start()


# publish 消息
def on_publish(topic, payload, qos):
    mqttClient.publish(topic, payload, qos)
    #print(topic)

# 消息处理函数
def on_message_come(lient, userdata, msg):

    print(msg.topic + " " + ":" + str(msg.payload))


# subscribe 消息
def on_subscribe():
    mqttClient.subscribe("E1RcL1tZg", 1)
    mqttClient.on_message = on_message_come # 消息到来处理函数

def handler(event, context):
    on_mqtt_connect()

    bot = DuerOSBot(event)
    result = bot.run()
    return result



四、自学探究自学Easy IOT物联网使用:https://mc.dfrobot.com.cn/thread-276708-1-1.html,修改以上代码。引导学习不断测试,发现问题。
五、Mind+程序设计
1、Mind+OBLOQ物联网模块连接Wifi、Easy IOT物联网


播放如”湖南卫视“,红外发射数字。中间有间隔时间。最好开始时也有时间间隔。

程序有冲突提醒,运行时有可能出现问题。

六、进行测试
1、模拟测试
2、真机测试

七、发布上线

八、总结提升——憧憬未来
能使用物联网,就可以开启智联万物了。同学们可以结合之前的学习内容,说说我们能不能继续完善,解决这节课存在的问题,引导学生说出下次我们要进行的内容,语音控制小车运动的使用。




Sev7nKarat克拉 发表于 2020-8-15 16:43:20

本帖最后由 Sev7nKarat克拉 于 2020-9-5 09:00 编辑

就很NICE
页: [1]
查看完整版本: 【掌控小度】小度智能音箱与Microbit智控电视(Easy Iot)