3703浏览
查看: 3703|回复: 3

DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器

[复制链接]
本帖最后由 云天 于 2022-2-19 10:39 编辑

DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图1DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图3DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图2
通过DFRduino UNO R3-EDU主板+OBLOQ物联网模块+红外接收发送模块+小度音箱实现智能控制空气净化器(自带红外遥控功能)。

小度音箱通过微数据库TinyWebDB与DFRduino UNO R3-EDU主板进行信息沟通。
【微数据库TinyWebDB配置】
TinyWebDB网络数据库,每个用户可以申请一个甚至多个数据库地址。由于每一个地址都包含用户名和用户名的密钥,相互独立,互不影响,数据库的安全性比较高。除此以外,每个数据库都可以独立管理,支持使用API进行增删查改操作。
网址:TinyWebDB服务器 - APPInventor网络微数据库
1、注册
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图7

2、登陆后,可查看相关参数
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图6

3、新建
因Post的action操作中,只有“更新update、读取get、删除delete、计数count、查询search”,所以无法远程新建“变量”。要通过“数据浏览”中“修改”操作来“新建”。
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图5


DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图8

【UART OBLOQ - IoT物联网模块】

本项目使用UART OBLOQ - IoT物联网模块连网并访问TinyWebDB网络数据库进行相应操作。
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图9

DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图10

DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图12

OBLOQ插在DFRduino UNO R3_EDU主板的UART接口上

OBLOQ是一款基于ESP8266设计的串口转WIFI物联网模块,用以接收和发送物联网信息。尺寸紧凑,价格低,接口简单,即插即用,适用于3.3V~5V的控制系统。软件编程简单,无需复杂的基础知识,就能迅速搭建出一套物联网应用。
【Mind+程序——TinyWebDB配置】
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图13

1、在Mind+上传模式中,添加通信模块——OBLOQ物联网模块
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图11

2、使用Obloq http模块
WIFI相关参数填写自己的Wifi信息,IP地址为:tinywebdb.appinventor.space;端口:80。
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图14

3、通过串口显示变量“jsq”值,形式为:{"jsq": "0"}。注意:下载程序时,要将Obloq http模块拔下(占用TX,RX引脚)。
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图16

通过自己编写的模块来处理接收到的JSON数据。大家可自行下载附件安装。
下载附件yuntian-json-thirdex-V0.0.2.zip
【获取红外遥控器编码】
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图17

红外接收模块接在DFRduino UNO R3_EDU主板的D2引脚上。
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图18

Mind+添加通信模块——红外接收模块。
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图19

利用串口输出各按键的编码。
【红外发射程序】
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图20

1、Mind+添加通信模块——红外发射模块
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图21

2、从TinyWebDB接收到指令,再通过红外发射模块发射相应指令。

【硬件安装】
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图4


DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图22


【小度开放平台配置】
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图23

DuerOS开放平台 (baidu.com)
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图24

创建新技能
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图25

自定义新技能
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图26

从头开始新技能
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图27

填写相应信息,后面我将调用名称修改为:净化器技能。
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图28

创建意图
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图32

填写意图
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图29

创建多个意图
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图30

配置服务-代码编辑
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图31


语言选择:Python2.7
  1. #!/usr/bin/env python2
  2. # -*- encoding=utf-8 -*-
  3. import sys
  4. from dueros.Bot import Bot
  5. from dueros.card.TextCard import TextCard
  6. import urllib2,json
  7. reload(sys)
  8. sys.setdefaultencoding('utf8')
  9. class DuerOSBot(Bot):
  10.     def launch_request(self):
  11.         """
  12.         打开技能
  13.         """
  14.         self.wait_answer()
  15.         card = TextCard('欢迎使用技能')
  16.         return {
  17.             'card': card,
  18.             'outputSpeech': r'欢迎使用技能'
  19.         }
  20.     def ended_request(self):
  21.         """
  22.         关闭技能
  23.         """
  24.         self.wait_answer()
  25.         return {
  26.             'outputSpeech': r'感谢您的使用'
  27.         }
  28.     def __init__(self, request_data):
  29.         super(DuerOSBot, self).__init__(request_data)
  30.         self.add_launch_handler(self.launch_request)
  31.         self.add_session_ended_handler(self.ended_request)
  32.         self.add_intent_handler('open', self.open_intent)
  33.         self.add_intent_handler('close_me', self.close_me_intent)
  34.         self.add_intent_handler('speed', self.speed_intent)
  35.         self.add_intent_handler('Anion', self.Anion_intent)
  36.         self.add_intent_handler('intelligence', self.intelligence_intent)
  37.         self.add_intent_handler('disinfect', self.disinfect_intent)
  38.         self.add_intent_handler('time', self.time_intent)
  39.         self.add_intent_handler('sleep', self.sleep_intent)
  40.     def open_intent(self):
  41.         response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=0')
  42.         html =  json.loads(response.read())
  43.         if(html['status']=='success'):
  44.          card = TextCard('已为您打开净化器')
  45.          return {
  46.             'card': card,
  47.             'outputSpeech': r'已为您打开净化器'
  48.          }
  49.     def close_me_intent(self):
  50.         response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=0')
  51.         html =  json.loads(response.read())
  52.         if(html['status']=='success'):
  53.          card = TextCard('已为您关闭净化器')
  54.          return {
  55.             'card': card,
  56.             'outputSpeech': r'已为您关闭净化器'
  57.          }
  58.     def speed_intent(self):
  59.         response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=1')
  60.         html =  json.loads(response.read())
  61.         if(html['status']=='success'):
  62.          card = TextCard('已为您调整净化速度')
  63.          return {
  64.             'card': card,
  65.             'outputSpeech': r'已为您调整净化速度'
  66.          }
  67.     def Anion_intent(self):
  68.         response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=2')
  69.         html =  json.loads(response.read())
  70.         if(html['status']=='success'):
  71.          card = TextCard('已为您开启负离子')
  72.          return {
  73.             'card': card,
  74.             'outputSpeech': r'已为您开启负离子'
  75.          }
  76.     def intelligence_intent(self):
  77.         response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=3')
  78.         html =  json.loads(response.read())
  79.         if(html['status']=='success'):
  80.          card = TextCard('已为您开启智能模式')
  81.          return {
  82.             'card': card,
  83.             'outputSpeech': r'已为您开启智能模式'
  84.          }
  85.     def disinfect_intent(self):
  86.         response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=4')
  87.         html =  json.loads(response.read())
  88.         if(html['status']=='success'):
  89.          card = TextCard('已为您开启杀菌模式')
  90.          return {
  91.             'card': card,
  92.             'outputSpeech': r'已为您开启杀菌模式'
  93.          }
  94.     def time_intent(self):
  95.         response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=5')
  96.         html =  json.loads(response.read())
  97.         if(html['status']=='success'):
  98.          card = TextCard('已为您开启定时')
  99.          return {
  100.             'card': card,
  101.             'outputSpeech': r'已为您开启定时'
  102.          }
  103.     def sleep_intent(self):
  104.         response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=6')
  105.         html =  json.loads(response.read())
  106.         if(html['status']=='success'):
  107.          card = TextCard('已为您开启睡眠模式')
  108.          return {
  109.             'card': card,
  110.             'outputSpeech': r'已为您开启睡眠模式'
  111.          }
  112. def handler(event, context):
  113.     bot = DuerOSBot(event)
  114.     result = bot.run()
  115.     return result
复制代码
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图33

模拟测试
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图34

真机测试配置
【演示视频】






Arduino程序中访问微数据库前等待了5秒(微数据库网站可能有限制,频繁访问会被拒绝),所以命令响应有些不及时。解决方法,可使用物联网,如DF的Easy Iot。
改进:
【物联网Easy Iot】
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图35物联网信息
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图36
Mind+程序OBLOQ mqtt模块配置
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图37监听物联网指令,红外发送指令完整程序

下载附件智能净化器.zip
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图39
为避免与系统指令冲突,将意图进行修改,均增加净化器。


DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图40因使用到物联网库,所以要在配置服务中使用“百度云CFC”,并进行入服务配置。
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图41
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图42

DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图43
创建函数
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图44
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图45
上传函数压缩包下载附件MQTT_4769faef-cda7-412f-a335-7bbe65cb77b9.zip
压缩包中,dueros\paho\mqtt中client.py文件修改,物联网用户名及密码。
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图46
  1. #!/usr/bin/env python2
  2. # -*- encoding=utf-8 -*-
  3. import sys
  4. from dueros.Bot import Bot
  5. from dueros.card.TextCard import TextCard
  6. import urllib2,json
  7. import dueros.paho.mqtt.client as mqtt
  8. reload(sys)
  9. sys.setdefaultencoding('utf8')
  10. class DuerOSBot(Bot):
  11.     def launch_request(self):
  12.         """
  13.         打开技能
  14.         """
  15.         self.wait_answer()
  16.         card = TextCard('欢迎使用智能净化器技能')
  17.         return {
  18.             'card': card,
  19.             'outputSpeech': r'欢迎使用智能净化器技能'
  20.         }
  21.     def ended_request(self):
  22.         """
  23.         关闭技能
  24.         """
  25.         self.wait_answer()
  26.         return {
  27.             'outputSpeech': r'感谢您的使用'
  28.         }
  29.     def __init__(self, request_data):
  30.         super(DuerOSBot, self).__init__(request_data)
  31.         self.add_launch_handler(self.launch_request)
  32.         self.add_session_ended_handler(self.ended_request)
  33.         self.add_intent_handler('open', self.open_intent)
  34.         self.add_intent_handler('close_me', self.close_me_intent)
  35.         self.add_intent_handler('speed', self.speed_intent)
  36.         self.add_intent_handler('Anion', self.Anion_intent)
  37.         self.add_intent_handler('intelligence', self.intelligence_intent)
  38.         self.add_intent_handler('disinfect', self.disinfect_intent)
  39.         self.add_intent_handler('time', self.time_intent)
  40.         self.add_intent_handler('sleep', self.sleep_intent)
  41.     def open_intent(self):
  42.          on_publish("5n92uqBMg", "0", 0)#0代表保存在服务器上
  43.          card = TextCard('已为您打开净化器')
  44.          return {
  45.             'card': card,
  46.             'outputSpeech': r'已为您打开净化器'
  47.          }
  48.     def close_me_intent(self):
  49.          on_publish("5n92uqBMg", "0", 0)#0代表保存在服务器上
  50.          card = TextCard('已为您关闭净化器')
  51.          return {
  52.             'card': card,
  53.             'outputSpeech': r'已为您关闭净化器'
  54.          }
  55.     def speed_intent(self):
  56.          on_publish("5n92uqBMg", "1", 0)#0代表保存在服务器上
  57.          card = TextCard('已为您调整净化速度')
  58.          return {
  59.             'card': card,
  60.             'outputSpeech': r'已为您调整净化速度'
  61.          }
  62.     def Anion_intent(self):
  63.          on_publish("5n92uqBMg", "2", 0)#0代表保存在服务器上
  64.          card = TextCard('已为您开启负离子')
  65.          return {
  66.             'card': card,
  67.             'outputSpeech': r'已为您开启负离子'
  68.          }
  69.     def intelligence_intent(self):
  70.          on_publish("5n92uqBMg", "3", 0)#0代表保存在服务器上
  71.          card = TextCard('已为您开启智能模式')
  72.          return {
  73.             'card': card,
  74.             'outputSpeech': r'已为您开启智能模式'
  75.          }
  76.     def disinfect_intent(self):
  77.          on_publish("5n92uqBMg", "4", 0)#0代表保存在服务器上
  78.          card = TextCard('已为您开启杀菌模式')
  79.          return {
  80.             'card': card,
  81.             'outputSpeech': r'已为您开启杀菌模式'
  82.          }
  83.     def time_intent(self):
  84.          on_publish("5n92uqBMg", "5", 0)#0代表保存在服务器上
  85.          card = TextCard('已为您开启定时')
  86.          return {
  87.             'card': card,
  88.             'outputSpeech': r'已为您开启定时'
  89.          }
  90.     def sleep_intent(self):
  91.          on_publish("5n92uqBMg", "6", 0)#0代表保存在服务器上
  92.          card = TextCard('已为您开启睡眠模式')
  93.          return {
  94.             'card': card,
  95.             'outputSpeech': r'已为您开启睡眠模式'
  96.          }
  97. MQTTHOST = "182.254.130.180"
  98. MQTTPORT = 1883
  99. mqttClient = mqtt.Client()
  100.   
  101.   
  102. # 连接MQTT服务器
  103. def on_mqtt_connect():
  104.     mqttClient.connect(MQTTHOST, MQTTPORT, 60)
  105.     mqttClient.loop_start()
  106.   
  107.   
  108. # publish 消息
  109. def on_publish(topic, payload, qos):
  110.     mqttClient.publish(topic, payload, qos)
  111.     #print(topic)
  112.   
  113. # 消息处理函数
  114. def on_message_come(lient, userdata, msg):
  115.     pass
  116.     #print(msg.topic + " " + ":" + str(msg.payload))
  117.   
  118.   
  119. # subscribe 消息
  120. def on_subscribe():
  121.     mqttClient.subscribe("5n92uqBMg", 1)
  122.     mqttClient.on_message = on_message_come # 消息到来处理函数
  123. def handler(event, context):
  124.     bot = DuerOSBot(event)
  125.     result = bot.run()
  126.     return result
复制代码
index.py文件内容
DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图47
在“在线编辑”中可查看并编辑代码,DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图49
创建DuerOS触发器
并复制brn:bce:cfc:bj:22e9c36dc8536918a55386dc914811e1:function:jinghuaqi:$LATEST,粘回:

DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器图48
保存


【小度物联网演示视频】


除了每次说指令前,需要说“小度 小度 打开净化器技能”,其它的完美!

RRoy  超级版主

发表于 2022-2-23 17:21:10

赞!
回复

使用道具 举报

yangjumei  学徒

发表于 2022-3-7 14:35:56

天猫一样可以吧?
回复

使用道具 举报

小企鹅  初级技匠

发表于 2022-3-16 16:43:11

666666666666666
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail