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

废话少说,直接上空调板子: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.mzph.cn/news/51065.shtml

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

相关文章

python 无网络安装库的方法

手动复制库文件: 在你的电脑上找到已安装库的文件,通常位于Python的Lib\site-packages目录下。将这些库文件复制到目标电脑的相同位置。请注意,这种方法仅适用于纯Python库,对于依赖于C扩展或其他系统依赖项的库可能无法正常工作。…

华为云Stack的学习(一)

一、华为云Stack架构 1.HCS 物理分散、逻辑统一、业务驱动、运管协同、业务感知 2.华为云Stack的特点 可靠性 包括整体可靠性、数据可靠性和单一设备可靠性。通过云平台的分布式架构,从整体系统上提高可靠性,降低系统对单设备可靠性的要求。 可用性…

Java后端开发面试题篇——Redis

Redis的数据持久化策略有哪些 RDB的执行原理? bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。 fork采用的是copy-on-write技术: 当主进程执行读操作时,访问共享内存…

实现外网访问本地服务

最近开发需要其他项目组的人访问我本地服务测试,但又不在同一个地方,不能使用内网访问,所以需要外网访问本地服务功能. 条件: 1.需要一台具备公网IP的服务器 我用的服务器是windows,电脑也是Windows系统 2.下载frp 软件,只需要下载一份就可以了,分别放到服务器上和本地目录既…

无涯教程-PHP - Session选项

从PHP7 起, session_start()()函数接受一系列选项,以覆盖在 php.ini 中设置的会话配置指令。这些选项支持 session.lazy_write ,默认情况下此函数为on,如果会话数据已更改,则会导致PHP覆盖任何会话文件。 添加的另一个…

TCP网络连接异常情况的处理

在网络连接中,经常会出现一些意外情况,导致TCP连接不能正常工作,对于这些意外情况,TCP内部有自己的解决方法 一.进程崩溃 在网络通讯时可能会出现进程突然崩溃的情况,当进程崩溃后进程就没了,就会导致进程…

Java实现一个简单的图书管理系统(内有源码)

简介 哈喽哈喽大家好啊,之前作者也是讲了Java不少的知识点了,为了巩固之前的知识点再为了让我们深入Java面向对象这一基本特性,就让我们完成一个图书管理系统的小项目吧。 项目简介:通过管理员和普通用户的两种操作界面&#xff0…

主力吸筹指标及其分析和使用说明

文章目录 主力吸筹指标指标代码分析使用说明使用配图主力吸筹指标 VAR1:=REF(LOW,1); VAR2:=SMA(MAX(LOW-VAR1,0),3,1)/SMA(ABS(LOW-VAR1),3,1)*100; VAR3:=EMA(VAR2,3); VAR4:=LLV(LOW,34); VAR5:=HHV(VAR3,34); VAR7:=EMA(IF(LOW<=VAR4,(VAR3+VAR5*2)/2,0),3); /*底线:0,…

让eslint的错误信息显示在项目界面上

1.需求描述 效果如下 让eslint中的错误&#xff0c;显示在项目界面上 2.问题解决 1.安装 vite-plugin-eslint 插件 npm install vite-plugin-eslint --save-dev2.配置插件 // vite.config.js import { defineConfig } from vite import vue from vitejs/plugin-vue import e…

基于黄金正弦算法优化的BP神经网络(预测应用) - 附代码

基于黄金正弦算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于黄金正弦算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.黄金正弦优化BP神经网络2.1 BP神经网络参数设置2.2 黄金正弦算法应用 4.测试结果&#xff1a;5…

C语言练习1(巩固提升)

C语言练习1 选择题 前言 “人生在勤&#xff0c;勤则不匮。”幸福不会从天降&#xff0c;美好生活靠劳动创造。全面建成小康社会的奋斗目标&#xff0c;为广大劳动群众指明了光明的未来&#xff1b;全面建成小康社会的历史任务&#xff0c;为广大劳动群众赋予了光荣的使命&…

采用typescript编写,实现ofd前端预览、验章

前言 浏览器内核已支持pdf文件的渲染&#xff0c;这极大的方便了pdf文件的阅读和推广。ofd文件作为国产板式标准&#xff0c;急需一套在浏览器中渲染方案。 本人研究ofd多年&#xff0c;分别采用qt、c# 开发了ofd阅读器。本人非前端开发人员&#xff0c;对js、typescript并不熟…

android Bitmap没有recycle()导致native内存暴增

android Bitmap没有recycle()导致native内存暴增 android8.0后&#xff0c;Bitmap从Java层转移到native层&#xff0c;此举虽然缓解了JVM的内存压力&#xff0c;也提升了图形的加载速度&#xff0c;但不恰当的Bitmap分配/释放逻辑&#xff0c;将导致内存问题深藏到native层&am…

windows开发环境搭建

下载msys2&#xff0c;官网下载即可&#xff1a; MSYS2 安装其他的编译工具&#xff08;貌似不需要把中间的命令全部执行&#xff09;&#xff1a; MSYS2使用教程——win10系统64位安装msys2最新版&#xff08;msys2-x86_xxxx.exe&#xff09;_msys64_Dreamhai的博客-CSDN博…

Maven 一键部署到 SSH 服务器

简介 利用 Maven Mojo 功能一键部署 jar 包或 war 包到远程服务器上。 配置 在 maven 的setting.xml 配置服务器 SSH 账号密码。虽然可以在工程的 pom.xml 直接配置&#xff0c;但那样不太安全。 <servers><server><id>iq</id><configuration&…

【C++代码】有序数组的平方,长度最小的子数组,螺旋矩阵 II--代码随想录

题目&#xff1a;有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 题解 数组其实是有序的&#xff0c; 只不过负数平方之后可能成为最大数了。那么数组平方的最大值就在数组的…

食品制造行业云MES系统解决方案

食品饮料行业大致可以分为初级产品加工、二次加工、食品制造、食品分装、调味品和饲料加工等几大类。由于处于产业链不同的位置&#xff0c;其管理存在一定的差异&#xff0c;那么食品行业的MES应该怎么建设呢&#xff1f; 食品饮料行业生产管理特点&#xff1a; 食品饮料行业…

定时任务,Timer,Quartz,Spring Task,Xxl-Job(分布式任务调度框架)

一、定时任务解决方案 1.Thread&#xff0c;Timer&#xff0c;Quartz&#xff0c;Spring Task Thread线程等待&#xff08;最原始最简单方式&#xff09;&#xff0c;创建一个thread&#xff0c;然后让它在while循环里一直运行着&#xff0c;通过sleep方法来达到定时任务的效…

全球Salesforce顾问薪资大揭秘!顾问如何升职加薪?

Salesforce顾问通过针对业务挑战提出、记录和分析需求&#xff0c;提供解决方案&#xff0c;从而帮助企业改善Salesforce的流程和效率。顾问是企业和Salesforce之间的桥梁。 Salesforce顾问的薪资一直是生态系统中的热门话题&#xff0c;备受求职者关注。本篇文章将分享提高顾…

Grafana Dashboard 备份方案

文章目录 Grafana Dashboard 备份方案引言工具简介支持的组件要求配置备份安装使用 pypi 安装grafana备份工具配置环境变量使用Grafana Backup Tool 进行备份恢复备份 Grafana Dashboard恢复 Grafana Dashboard结论Grafana Dashboard 备份方案 引言 每个使用 Grafana 的同学都…