【开个空调】语音识别+红外发射

废话少说,直接上空调板子:YAPOF3。红外接收发射模块用的某宝上发现的YF-33(遗憾解码还没搞清楚,不然做个lirc.conf功能才多)。最后是语音识别用的幻尔的,某宝自然也有,它是个i2c的接口。

 

 本篇胡说八道其实纯粹为了留个地方以后知道怎么在python脚本里面写串口指令。接下来就顺带着讲一下全流程吧。

1. 先把幻尔的语音模块里面录好几个要说的话。

# initiate_yuyin.py
# encoding: utf-8
'''
Company: 深圳市幻尔科技有限公司
官网:hiwonder.com
日期:2019/9/20
by Aiden
'''
'''* 只能识别汉字,将要识别的汉字转换成拼音字母,每个汉字之间空格隔开,比如:幻尔科技 --> huan er ke ji* 最多添加50个词条,每个词条最长为79个字符,每个词条最多10个汉字* 每个词条都对应一个识别号(1~255随意设置)不同的语音词条可以对应同一个识别号,* 比如“幻尔科技”和“幻尔”都可以将识别号设置为同一个值* 模块上的STA状态灯:亮起表示正在识别语音,灭掉表示不会识别语音,当识别到语音时状态灯会变暗,或闪烁,等待读取后会恢复当前的状态指示
'''
#使用例程
import smbus
import time
import numpyclass ASR:# Global Variablesaddress = Nonebus = NoneASR_RESULT_ADDR = 100#识别结果存放处,通过不断读取此地址的值判断是否识别到语音,不同的值对应不同的语音ASR_WORDS_ERASE_ADDR = 101#擦除所有词条ASR_MODE_ADDR = 102#识别模式设置,值范围1~3#1:循环识别模式。状态灯常亮(默认模式)#2:口令模式,以第一个词条为口令。状态灯常灭,当识别到口令词时常亮,等待识别到新的语音,并且读取识别结果后即灭掉#3:按键模式,按下开始识别,不按不识别。支持掉电保存。状态灯随按键按下而亮起,不按不亮ASR_ADD_WORDS_ADDR = 160#词条添加的地址,支持掉电保存def __init__(self, address, bus=1):self.address = addressself.bus = smbus.SMBus(bus)def readByte(self):return self.bus.read_byte(self.address)def writeByte(self, val):value = self.bus.write_byte(self.address, val)if value != 0:return Falsereturn Truedef writeData(self, reg, val):self.bus.write_byte(self.address,  reg)self.bus.write_byte(self.address,  val)def getResult(self):if ASR.writeByte(self, self.ASR_RESULT_ADDR):return -1value = self.bus.read_byte(self.address)return value'''* 添加词条函数,* idNum:词条对应的识别号,1~255随意设置。识别到该号码对应的词条语音时,*        会将识别号存放到ASR_RESULT_ADDR处,等待主机读取,读取后清0* words:要识别汉字词条的拼音,汉字之间用空格隔开** 执行该函数,词条是自动往后排队添加的。'''def addWords(self, idNum, words):buf = [idNum]for i in range(0, len(words)):buf.append(eval(hex(ord(words[i]))))self.bus.write_i2c_block_data(self.address, self.ASR_ADD_WORDS_ADDR, buf)time.sleep(0.05)def eraseWords(self):result = self.bus.write_byte_data(self.address, self.ASR_WORDS_ERASE_ADDR, 0)time.sleep(0.06)if result != 0:return Falsereturn Truedef setMode(self, mode):result = self.bus.write_byte_data(self.address, self.ASR_MODE_ADDR, mode)if result != 0:return Falsereturn Trueif __name__ == "__main__":addr = 0x79 #传感器iic地址asr = ASR(addr)if 1:asr.eraseWords()asr.setMode(1)asr.addWords(1,'miao le ge mi mi mi')  # 唤醒词条在此asr.addWords(2,'da kai kong tiao zhi leng')  # 打开空调制冷asr.addWords(3,'kong tiao zhi re kai')  # 空调制热开asr.addWords(4,'guan bi kong tiao') # 关闭空调

2. 开启唤醒模式,操控空调。

# yuyin.py
# encoding: utf-8
import smbus
import time
import serialser = serial.Serial(port='/dev/ttyUSB0',baudrate=9600,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,bytesize=serial.EIGHTBITS,timeout=1)class ASR:# Global Variablesaddress = Nonebus = NoneASR_RESULT_ADDR = 100ASR_MODE_ADDR = 102ASR_ADD_WORDS_ADDR = 160#词条添加的地址,支持掉电保存def __init__(self, address, bus=1):self.address = addressself.bus = smbus.SMBus(bus)def readByte(self):return self.bus.read_byte(self.address)def writeByte(self, val):value = self.bus.write_byte(self.address, val)if value != 0:return Falsereturn Truedef writeData(self, reg, val):self.bus.write_byte(self.address,  reg)self.bus.write_byte(self.address,  val)def getResult(self):if ASR.writeByte(self, self.ASR_RESULT_ADDR):return -1value = self.bus.read_byte(self.address)return valuedef setMode(self, mode):result = self.bus.write_byte_data(self.address, self.ASR_MODE_ADDR, mode)if result != 0:return Falsereturn Trueif __name__ == "__main__":addr = 0x79 #传感器iic地址asr = ASR(addr)#来自串口指令那个图片给的发送地址。这儿就已经用了3个,这个模块一共才4个位置。arr_data2 = [0x01,0x06,0x00,0x01,0x00,0x02,0x59,0xCB]arr_data3 = [0x01,0x06,0x00,0x01,0x00,0x03,0x98,0x0B]arr_data4 = [0x01,0x06,0x00,0x01,0x00,0x01,0x19,0xCA]if 1:asr.setMode(2)  #启动唤醒模式#asr.addWords(1,'miao le ge mi mi mi')  # 唤醒#asr.addWords(2,'da kai kong tiao zhi leng')  # 打开空调制冷#asr.addWords(3,'kong tiao zhi re kai')  # 空调制热开#asr.addWords(4,'guan bi kong tiao') # 关闭空调while 1:data = asr.getResult()#print("result:", data)if data == 2:#echo -en '\x01\x06\x00\x01\x00\x02\x59\xCB' > /dev/ttyUSB0ser.write(serial.to_bytes(arr_data2))elif data == 3:#echo -en '\x01\x06\x00\x01\x00\x03\x98\x0B' > /dev/ttyUSB0ser.write(serial.to_bytes(arr_data3))elif data == 4:#echo -en '\x01\x06\x00\x01\x00\x01\x19\xCA' > /dev/ttyUSB0ser.write(serial.to_bytes(arr_data4))else:continuetime.sleep(0.5)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/80009.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 虚拟机Ubuntu22.04版本通过远程连接连接不上,输入ifconfig只能看到127.0.0.1的解决办法

之前给虚拟机配置静态IP之后,可以直接通过主机Vscode远程连接。但是前一段时间把主机的TCP/IPV4静态IP设置了一下之后,再连接虚拟机就连不上了,于是参考解决虚拟机不能上网ifconfig只显示127.0.0.1的问题,又可以连接上了&#xff…

飞天使-k8s基础组件分析-pod

文章目录 pod介绍pod 生命周期init 容器容器handlerpod中容器共享进程空间sidecar 容器共享 参考链接 pod介绍 最小的容器单元 为啥需要pod? 答: 多个进程丢一个容器里,会因为容器里个别进程出问题而出现蝴蝶效应,pod 是更高级的处理方式pod 如何共享相…

(三)行为模式:1、责任链模式(Chain of Responsibility Pattern)(C++示例)

目录 1、责任链模式(Chain of Responsibility Pattern)含义 2、责任链模式的UML图学习 3、责任链模式的应用场景 4、责任链模式的优缺点 5、C实现责任链模式的实例 1、责任链模式(Chain of Responsibility Pattern)含义 责任…

存在逻辑删除的表字段上建立唯一索引的巧办法 (逻辑删除与唯一索引)

存在逻辑删除的表字段上建立唯一索引的巧办法 首先,我们肯定是清楚地知道唯一键值逻辑删除位如果联合创建唯一索引的话,只能最多存在两条数据,无法满足不断删除新增的需求,所以需要一个巧妙的办法去实现有逻辑删除标志位的唯一索…

【Java 高阶】一文精通 Spring MVC - 基础概念(一)

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

测试框架pytest教程(2)-用例依赖库-pytest-dependency

对于 pytest 的用例依赖管理,可以使用 pytest-dependency 插件。该插件提供了更多的依赖管理功能,使你能够更灵活地定义和控制测试用例之间的依赖关系。 Using pytest-dependency — pytest-dependency 0.5.1 documentation 安装 pytest-dependency 插…

(排序) 剑指 Offer 51. 数组中的逆序对 ——【Leetcode每日一题】

❓剑指 Offer 51. 数组中的逆序对 难度:困难 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制&#xff…

Docker关于下载,镜像配置,容器启动,停止,查看等基础操作

系列文章目录 文章目录 系列文章目录前言一、安装Docker并配置镜像加速器二、下载系统镜像(Ubuntu、 centos)三、基于下载的镜像创建两个容器 (容器名一个为自己名字全拼,一个为首名字字母)四、容器的启动、 停止及重启…

STM32电源名词解释

STM32电源架构 常用名词 VCC Ccircuit 表示电路,即接入电路的电压。 VDD Ddevice 表示器件, 即器件内部的工作电压。 VSS Sseries 表示公共连接,通常指电路公共接地端电压。 VDDA Aanalog 表示模拟,是模拟电路部分的电源。主要为…

【C语言】C语言用数组算平均数,并输出大于平均数的数

题目 让用户输入一系列的正整数&#xff0c;最后输入“-1”表示输入结束&#xff0c;然后程序计算出这些数的平均数&#xff0c;最后输出输入数字的个数和平均数以及大于平均数的数 代码 #include<stdio.h> int main() {int x;double sum 0;int cnt 0;int number[100…

Linux服务——http协议及nginx服务

目录 一、HTTP协议 1、跨网络的主机间通讯方式 套接字相关的系统调用 2、HTTP协议访问网站的过程 3、http协议状态码分类 常见的http协议状态码 4、MIME 5、URL组成 6、HTTP协议版本 7、系统处理http请求的工作模式 8、apache与nginx的区别 二、I/O模型 I/O模型相关…

Docker常用操作命令(一)

Docker常用操作命令&#xff08;一&#xff09; 1、搜索镜像 docker search命令搜索存放在 Docker Hub中的镜像,此命令默认Docker会在Docker Hub中搜索镜像&#xff0c;可以配置了其他镜像仓库 [rootzch01 ~]# docker search centos NAME:镜像仓库名称DESCRIPTION:镜像仓库描…