DFRduino UNO R3-EDU+OBLOQ+红外+小度=智能空气净化器
本帖最后由 云天 于 2022-2-19 10:39 编辑通过DFRduino UNO R3-EDU主板+OBLOQ物联网模块+红外接收发送模块+小度音箱实现智能控制空气净化器(自带红外遥控功能)。
小度音箱通过微数据库TinyWebDB与DFRduino UNO R3-EDU主板进行信息沟通。
【微数据库TinyWebDB配置】
TinyWebDB网络数据库,每个用户可以申请一个甚至多个数据库地址。由于每一个地址都包含用户名和用户名的密钥,相互独立,互不影响,数据库的安全性比较高。除此以外,每个数据库都可以独立管理,支持使用API进行增删查改操作。
网址:TinyWebDB服务器 - APPInventor网络微数据库
1、注册
2、登陆后,可查看相关参数
3、新建
因Post的action操作中,只有“更新update、读取get、删除delete、计数count、查询search”,所以无法远程新建“变量”。要通过“数据浏览”中“修改”操作来“新建”。
【UART OBLOQ - IoT物联网模块】
本项目使用UART OBLOQ - IoT物联网模块连网并访问TinyWebDB网络数据库进行相应操作。
(OBLOQ插在DFRduino UNO R3_EDU主板的UART接口上)
OBLOQ是一款基于ESP8266设计的串口转WIFI物联网模块,用以接收和发送物联网信息。尺寸紧凑,价格低,接口简单,即插即用,适用于3.3V~5V的控制系统。软件编程简单,无需复杂的基础知识,就能迅速搭建出一套物联网应用。
【Mind+程序——TinyWebDB配置】
1、在Mind+上传模式中,添加通信模块——OBLOQ物联网模块
2、使用Obloq http模块
WIFI相关参数填写自己的Wifi信息,IP地址为:tinywebdb.appinventor.space;端口:80。
3、通过串口显示变量“jsq”值,形式为:{"jsq": "0"}。注意:下载程序时,要将Obloq http模块拔下(占用TX,RX引脚)。
通过自己编写的模块来处理接收到的JSON数据。大家可自行下载附件安装。
【获取红外遥控器编码】
红外接收模块接在DFRduino UNO R3_EDU主板的D2引脚上。
Mind+添加通信模块——红外接收模块。
利用串口输出各按键的编码。
【红外发射程序】
1、Mind+添加通信模块——红外发射模块
2、从TinyWebDB接收到指令,再通过红外发射模块发射相应指令。
【硬件安装】
【小度开放平台配置】
DuerOS开放平台 (baidu.com)
创建新技能
自定义新技能
从头开始新技能
填写相应信息,后面我将调用名称修改为:净化器技能。
创建意图
填写意图
创建多个意图
配置服务-代码编辑
语言选择:Python2.7
#!/usr/bin/env python2
# -*- encoding=utf-8 -*-
import sys
from dueros.Bot import Bot
from dueros.card.TextCard import TextCard
import urllib2,json
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('open', self.open_intent)
self.add_intent_handler('close_me', self.close_me_intent)
self.add_intent_handler('speed', self.speed_intent)
self.add_intent_handler('Anion', self.Anion_intent)
self.add_intent_handler('intelligence', self.intelligence_intent)
self.add_intent_handler('disinfect', self.disinfect_intent)
self.add_intent_handler('time', self.time_intent)
self.add_intent_handler('sleep', self.sleep_intent)
def open_intent(self):
response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=0')
html =json.loads(response.read())
if(html['status']=='success'):
card = TextCard('已为您打开净化器')
return {
'card': card,
'outputSpeech': r'已为您打开净化器'
}
def close_me_intent(self):
response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=0')
html =json.loads(response.read())
if(html['status']=='success'):
card = TextCard('已为您关闭净化器')
return {
'card': card,
'outputSpeech': r'已为您关闭净化器'
}
def speed_intent(self):
response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=1')
html =json.loads(response.read())
if(html['status']=='success'):
card = TextCard('已为您调整净化速度')
return {
'card': card,
'outputSpeech': r'已为您调整净化速度'
}
def Anion_intent(self):
response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=2')
html =json.loads(response.read())
if(html['status']=='success'):
card = TextCard('已为您开启负离子')
return {
'card': card,
'outputSpeech': r'已为您开启负离子'
}
def intelligence_intent(self):
response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=3')
html =json.loads(response.read())
if(html['status']=='success'):
card = TextCard('已为您开启智能模式')
return {
'card': card,
'outputSpeech': r'已为您开启智能模式'
}
def disinfect_intent(self):
response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=4')
html =json.loads(response.read())
if(html['status']=='success'):
card = TextCard('已为您开启杀菌模式')
return {
'card': card,
'outputSpeech': r'已为您开启杀菌模式'
}
def time_intent(self):
response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=5')
html =json.loads(response.read())
if(html['status']=='success'):
card = TextCard('已为您开启定时')
return {
'card': card,
'outputSpeech': r'已为您开启定时'
}
def sleep_intent(self):
response = urllib2.urlopen('http://tinywebdb.appinventor.space/api?user=yuntian23&secret=be430126&action=update&tag=jsq&value=6')
html =json.loads(response.read())
if(html['status']=='success'):
card = TextCard('已为您开启睡眠模式')
return {
'card': card,
'outputSpeech': r'已为您开启睡眠模式'
}
def handler(event, context):
bot = DuerOSBot(event)
result = bot.run()
return result
模拟测试
真机测试配置
【演示视频】
https://www.bilibili.com/video/BV1UL411K7Ev?share_source=copy_web
因Arduino程序中访问微数据库前等待了5秒(微数据库网站可能有限制,频繁访问会被拒绝),所以命令响应有些不及时。解决方法,可使用物联网,如DF的Easy Iot。
改进:
【物联网Easy Iot】
物联网信息
Mind+程序OBLOQ mqtt模块配置
监听物联网指令,红外发送指令完整程序
为避免与系统指令冲突,将意图进行修改,均增加净化器。
因使用到物联网库,所以要在配置服务中使用“百度云CFC”,并进行入服务配置。
创建函数
上传函数压缩包
压缩包中,dueros\paho\mqtt中client.py文件修改,物联网用户名及密码。
#!/usr/bin/env python2
# -*- encoding=utf-8 -*-
import sys
from dueros.Bot import Bot
from dueros.card.TextCard import TextCard
import urllib2,json
import dueros.paho.mqtt.client as mqtt
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('open', self.open_intent)
self.add_intent_handler('close_me', self.close_me_intent)
self.add_intent_handler('speed', self.speed_intent)
self.add_intent_handler('Anion', self.Anion_intent)
self.add_intent_handler('intelligence', self.intelligence_intent)
self.add_intent_handler('disinfect', self.disinfect_intent)
self.add_intent_handler('time', self.time_intent)
self.add_intent_handler('sleep', self.sleep_intent)
def open_intent(self):
on_publish("5n92uqBMg", "0", 0)#0代表保存在服务器上
card = TextCard('已为您打开净化器')
return {
'card': card,
'outputSpeech': r'已为您打开净化器'
}
def close_me_intent(self):
on_publish("5n92uqBMg", "0", 0)#0代表保存在服务器上
card = TextCard('已为您关闭净化器')
return {
'card': card,
'outputSpeech': r'已为您关闭净化器'
}
def speed_intent(self):
on_publish("5n92uqBMg", "1", 0)#0代表保存在服务器上
card = TextCard('已为您调整净化速度')
return {
'card': card,
'outputSpeech': r'已为您调整净化速度'
}
def Anion_intent(self):
on_publish("5n92uqBMg", "2", 0)#0代表保存在服务器上
card = TextCard('已为您开启负离子')
return {
'card': card,
'outputSpeech': r'已为您开启负离子'
}
def intelligence_intent(self):
on_publish("5n92uqBMg", "3", 0)#0代表保存在服务器上
card = TextCard('已为您开启智能模式')
return {
'card': card,
'outputSpeech': r'已为您开启智能模式'
}
def disinfect_intent(self):
on_publish("5n92uqBMg", "4", 0)#0代表保存在服务器上
card = TextCard('已为您开启杀菌模式')
return {
'card': card,
'outputSpeech': r'已为您开启杀菌模式'
}
def time_intent(self):
on_publish("5n92uqBMg", "5", 0)#0代表保存在服务器上
card = TextCard('已为您开启定时')
return {
'card': card,
'outputSpeech': r'已为您开启定时'
}
def sleep_intent(self):
on_publish("5n92uqBMg", "6", 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):
pass
#print(msg.topic + " " + ":" + str(msg.payload))
# subscribe 消息
def on_subscribe():
mqttClient.subscribe("5n92uqBMg", 1)
mqttClient.on_message = on_message_come # 消息到来处理函数
def handler(event, context):
bot = DuerOSBot(event)
result = bot.run()
return result
index.py文件内容
在“在线编辑”中可查看并编辑代码,
创建DuerOS触发器
并复制brn:bce:cfc:bj:22e9c36dc8536918a55386dc914811e1:function:jinghuaqi:$LATEST,粘回:
保存
【小度物联网演示视频】
https://www.bilibili.com/video/BV1k44y1J7iH?share_source=copy_web
除了每次说指令前,需要说“小度 小度 打开净化器技能”,其它的完美!
赞!{:5_179:} 天猫一样可以吧? 666666666666666
页:
[1]