【开个空调】语音识别+红外发射
废话少说,直接上空调板子: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)
相关文章:

【开个空调】语音识别+红外发射
废话少说,直接上空调板子:YAPOF3。红外接收发射模块用的某宝上发现的YF-33(遗憾解码还没搞清楚,不然做个lirc.conf功能才多)。最后是语音识别用的幻尔的,某宝自然也有,它是个i2c的接口。 本篇胡说八道其实纯粹为了留个…...
【hibernate validator】(二)声明和验证Bean约束
首发博客地址 https://blog.zysicyj.top/ 一、声明bean约束 1. 字段级别约束 不支持静态类型字段 验证引擎直接访问实例变量,不会调用属性的访问器 在验证字节码增强的对象时,应适用属性级别约束,因为字节码增库无法通过反射确定字段访问 pac…...
Redis持久化机制之RDB,AOF与混合AOF
Redis是一款高性能的NoSQL数据库,它的速度非常快,同时也支持多种持久化机制,其中最常用的是RDB和AOF,还有一种混合AOF方式。那么这些持久化机制到底是什么,有什么不同呢? RDB是Redis默认的持久化方式&…...

为啥外卖小哥宁愿600一月租电动车,也不花2、3千买一辆送外卖!背后的原因......
大家好!我是菜哥! 又到周末了,我们聊点非技术的东西。最近知乎“为何那些穿梭于城市大街小巷的外卖小哥,宁愿每月掏出600块租一辆电动车,也不愿意掏出2、3千买一辆呢?” 冲上热榜! 听起来有点“…...

分布式定时任务框架Quartz总结和实践(2)—持久化到Mysql数据库
本文主要介绍分布式定时任务框架Quartz集成SpringBoot持久化数据到Mysql数据库的操作,上一篇文章使用Quartz创建定时任务都是保存在内存中,如果服务重启定时任务就会失效,所以Quartz官方也提供将定时任务等信息持久化到Mysql数据库的功能&…...
Linux 服务器搭建配置,开发效率一飞冲天 - Centos 篇
大家好,我是比特桃。最近白嫖了一台 Centos 云服务器,用来做日常开发,特此记录一下搭建配置的过程。 我之前有篇文章是基于 Ubuntu 的:Linux 服务器搭建配置,开发效率一飞冲天 - Ubuntu 篇 如同个人电脑一样࿰…...

Day46|leetcode 139.单词拆分
leetcode 139.单词拆分 题目链接:139. 单词拆分 - 力扣(LeetCode) 视频链接:动态规划之完全背包,你的背包如何装满?| LeetCode:139.单词拆分_哔哩哔哩_bilibili 题目概述 给你一个字符串 s 和一…...
深入理解高并发编程 - Thread 类的 stop () 和 interrupt ()
stop() stop() 方法被用于停止线程。然而,需要注意的是,stop() 方法已经被标记为已废弃(deprecated),并且不推荐使用。这是因为使用该方法可能导致不可预料的问题和数据不一致性,因此它被认为是不安全的。…...

C语言之三子棋游戏实现篇
目录 主函数test.c 菜单函数 选择实现 游戏函数 (函数调用) 打印棋盘数据 打印展示棋盘 玩家下棋 电脑下棋 判断输赢 循环 test.c总代码 头文件&函数声明game.h 头文件的包含 游戏符号声明 游戏函数声明 game.h总代码 游戏函数ga…...

jupyter notebook 插件nbextensions的安装
安装步骤: 1、打开 jupyter notebook,新建一个 python 文件; 2、 分别输入以下代码,然后运行,出现 warning 不影响使用,如果出现 errors,则说明下载有问题: !python -m pip install…...

Spring boot 集成单元测试
1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> 2. 3.编写测试类 package com.enterprise;import com.enterpr…...

基于C++的QT实现贪吃蛇小游戏
文章目录: 一:效果演示 二:实现思路 三:代码实现 widget.h widget.cpp main.cpp 一:效果演示 效果图◕‿◕✌✌✌ 代码下载 二:实现思路 通过按键控制蛇的移动,每吃一个商品蛇身就会加长…...

Spring Boot整合RabbitMQ之路由模式(Direct)
RabbitMQ中的路由模式(Direct模式)应该是在实际工作中运用的比较多的一种模式了,这个模式和发布与订阅模式的区别在于路由模式需要有一个routingKey,在配置上,交换机类型需要注入DirectExchange类型的交换机bean对象。…...

行式存储与列式存储
1.概述 数据处理大致可分为两大类,联机事务处理OLTP(on-line transaction processing) 和联机分析处理OLAP(on-line analytical processing)。 OLTP是传统关系型数据库的主要应用,用来执行一些基本的、日常的事务处理,比如数据库记录的增、删…...

windows上sqlserver的ldf日志文件和数据mdf文件分别放到不同的磁盘
之前我的windows上已安装好了sqlserver2017,有一个名为TestDb的数据库。ldf文件和mdf文件都一起放在D:\Database目录下。现在需要把ldf日志文件到E盘的database目录下。 重要的事情先说三遍 先停止网关(例如nginx)并备份数据库 先停止网关&am…...

vue3+uni——watch监听props中的数据(组件参数接收与传递defineProps、defineEmits)
案例说明 A页面引用的子组件B A页面 <template><view>//引用组件<serviceOrder change"change" :list"list" :current"type"></serviceOrder></view> </template><script setup>import serviceOrd…...

mybatis与spring集成与spring aop集成pagehelper插件
Mybatis与Spring的集成 Mybatis是一款轻量级的ORM框架,而Spring是一个全栈式的框架,二者的结合可以让我们更加高效地进行数据持久化操作。 Mybatis与Spring的集成主要有两种方式:使用Spring的Mybatis支持和使用Mybatis的Spring支持。 使用…...

Mybatis基础
...

TypeScript-- 配置Typescript环境(1)ts 转js,tsc --watch 实时编译
文章目录 安装Typescript判断是否有运行权限编写第一Typescript文件手动编译Ts文件转Js文件实时编译 安装Typescript npm install -g typescript 判断是否有运行权限 命令行运行 tsc -v 遇到了权限问题 用管理员打开window自带的powershell 运行如下指令即可: Set-…...

Dockerfile快速搭建自己专属的LAMP环境,生成镜像lamp:v1.1,并推送到私有仓库
环境: CentOS 7 Linux 3.10.0-1160.el7.x86_64 具体要求如下: (1)基于centos:6基础镜像; (2)指定作者信息; (3)安装httpd、mysql、mysql-server、php、ph…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...