首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >树莓派 python 百度语音控制 gpio 控制开关灯

树莓派 python 百度语音控制 gpio 控制开关灯

作者头像
十四君
发布于 2019-11-27 15:20:51
发布于 2019-11-27 15:20:51
2.1K00
代码可运行
举报
文章被收录于专栏:UrlteamUrlteam
运行总次数:0
代码可运行

最初拿到树莓派的时候测试过,没成功,后来发现一张华丽丽的说明图,顿时醒悟了..记录下来,

主要学习自  : http://blog.csdn.net/xdw1985829/article/details/39580401/

一定要看这个图,不然找不到io口的位置和编号

1、安装

Python2安装GPIO库需要输入命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio

Python3安装GPIO库需要输入命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install python-dev
sudo apt-get install python3-rpi.gpio

2 测试gpio

建立一个测试文件,test.py

然后运行之:  sudo python test.py

注意:首先要sudo 要有管理员权限才能控制io口.其次你的连线得注意一下,下面gpio.high是代表11口输出高电平,大概不到3.3的电压,而且电流也比较小,一般而言是用作继电器或者放大电路中的信号元.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-    
import RPi.GPIO as GPIO    
import time    
# BOARD编号方式,基于插座引脚编号    
GPIO.setmode(GPIO.BOARD)    
# 输出模式    
GPIO.setup(11, GPIO.OUT)    
    
while True:    
    GPIO.output(11, GPIO.HIGH)    
    time.sleep(1)    
    GPIO.output(11, GPIO.LOW)    
    time.sleep(1)

如果你能出现灯光闪烁,那么就算是成功拉,

3.语音部分

主要部分请参照这文章,还有之前有很多可以

python语音智能对话聊天机器人,linux&&树莓派双平台兼容

然后在其中加入判断就可以了

注意”开门后面的逗号要中文编码下的逗号”

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(cmp(duihua,'开门,')==0):
    print "识别开门"
    GPIO.output(11, GPIO.LOW)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(cmp(duihua,'关门,')==0):
    print "识别关门"
    GPIO.output(11, GPIO.HIGH)

注意在开头要加上下面的申明.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-    
import RPi.GPIO as GPIO    
import time    
# BOARD编号方式,基于插座引脚编号    
GPIO.setmode(GPIO.BOARD)    
# 输出模式    
GPIO.setup(11, GPIO.OUT)

4.树莓派下源代码

说明:环境挺麻烦,请看前面给出的链接,然后需要将建立文件夹:yuyinduihua 放在/home/pi 下,因为下面有使用绝对路径的地方,.需要调整.

有可能出错的地方是百度语音的token需要自己粘帖上去..这个有点懒的改了.

.就是在这里后面tok的一串数字是他的识别码,过一段时间就会更换,失效,所以需要自己输出token函数的内容,然后再粘帖过去,,希望还是需要多学习一下之前几篇关于百度语音的才能控制自如.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url = "http://tsn.baidu.com/text2audio?tex="+dic_json['text']+"&lan=zh&per=0&pit=1&spd=7&cuid=7519663&ctp=1&tok=24.ece6cfa6b5821f481deceef114da892e.2592000.1467287744.282335-7519663"
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
#from pyaudio import PyAudio, paInt16
import numpy as np
from datetime import datetime
import wave
import time
import urllib, urllib2, pycurl
import base64
import json
import os
import sys
import RPi.GPIO as GPIO 
import time 
# BOARD编号方式,基于插座引脚编号 
GPIO.setmode(GPIO.BOARD) 
# 输出模式 
GPIO.setup(11, GPIO.OUT) 
 
reload(sys)
sys.setdefaultencoding( "utf-8" )
 
save_count = 0
save_buffer = []
t = 0
sum = 0
time_flag = 0
flag_num = 0
filename = '2.wav'
duihua = '1'
def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html
 
def get_token():
    apiKey = "Ll0c53MSac6GBOtpg22ZSGAU"
    secretKey = "44c8af396038a24e34936227d4a19dc2"
    auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apiKey + "&client_secret=" + secretKey;
    res = urllib2.urlopen(auth_url)
    json_data = res.read()
    return json.loads(json_data)['access_token']
 
def dump_res(buf):
    global duihua
    print "字符串类型"
    print (buf)
    a = eval(buf)
    print type(a)
    if a['err_msg']=='success.':
        #print a['result'][0]#终于搞定了,在这里可以输出,返回的语句
        duihua = a['result'][0]
        print duihua
 
def use_cloud(token):
    fp = wave.open(filename, 'rb')
    nf = fp.getnframes()
    f_len = nf * 2
    audio_data = fp.readframes(nf)
    cuid = "7519663" #产品id
    srv_url = 'http://vop.baidu.com/server_api' + '?cuid=' + cuid + '&token=' + token
    http_header = [
        'Content-Type: audio/pcm; rate=8000',
        'Content-Length: %d' % f_len
    ]
 
    c = pycurl.Curl()
    c.setopt(pycurl.URL, str(srv_url)) #curl doesn't support unicode
    #c.setopt(c.RETURNTRANSFER, 1)
    c.setopt(c.HTTPHEADER, http_header)   #must be list, not dict
    c.setopt(c.POST, 1)
    c.setopt(c.CONNECTTIMEOUT, 30)
    c.setopt(c.TIMEOUT, 30)
    c.setopt(c.WRITEFUNCTION, dump_res)
    c.setopt(c.POSTFIELDS, audio_data)
    c.setopt(c.POSTFIELDSIZE, f_len)
    c.perform() #pycurl.perform() has no return val
 
# 将data中的数据保存到名为filename的WAV文件中
def save_wave_file(filename, data):
    wf = wave.open(filename, 'wb')
    wf.setnchannels(1)
    wf.setsampwidth(2)
    wf.setframerate(SAMPLING_RATE)
    wf.writeframes("".join(data))
    wf.close()
 
 
NUM_SAMPLES = 2000      # pyAudio内部缓存的块的大小
SAMPLING_RATE = 8000    # 取样频率
LEVEL = 1500            # 声音保存的阈值
COUNT_NUM = 20          # NUM_SAMPLES个取样之内出现COUNT_NUM个大于LEVEL的取样则记录声音
SAVE_LENGTH = 8         # 声音记录的最小长度:SAVE_LENGTH * NUM_SAMPLES 个取样
 
 
token = get_token()
key = '05ba411481c8cfa61b91124ef7389767'
api = 'http://www.tuling123.com/openapi/api?key=' + key + '&info='
 
 
while(True):
    print "kaishi"
    os.system('arecord -D "plughw:1,0" -f S16_LE -d 3 -r 8000 /home/pi/yuyinduihua/2.wav')
    use_cloud(token)
    print "输入内容"
    print duihua
    ############
    #语音识别进行开门的设置#
    ############
    if(cmp(duihua,'开门,')==0):
         print "识别开门"
         GPIO.output(11, GPIO.LOW)
 
    info = duihua
    duihua = ""
    request = api + info
    response = getHtml(request)
    dic_json = json.loads(response)
 
    #print '机器人: '.decode('utf-8') + dic_json['text']
    #huida = ' '.decode('utf-8') + dic_json['text']
    a = dic_json['text']
    print type(a)
    unicodestring = a
 
    # 将Unicode转化为普通Python字符串:"encode"
    utf8string = unicodestring.encode("utf-8")
 
    print type(utf8string)
    print str(a)
    url = "http://tsn.baidu.com/text2audio?tex="+dic_json['text']+"&lan=zh&per=0&pit=1&spd=7&cuid=7519663&ctp=1&tok=24.ece6cfa6b5821f481deceef114da892e.2592000.1467287744.282335-7519663"
    os.system('mpg123 "%s"'%(url))
    print "wait..1s"
    time.sleep(1)

原创文章,转载请注明: 转载自URl-team

本文链接地址: 树莓派 python 百度语音控制 gpio 控制开关灯

Related posts:

  1. 学习—用 Python 和 OpenCV 检测和跟踪运动对象
  2. 使用pyaiml机器人模块快速做个和你智能对话的大脑
  3. python-opencv人脸识别与树莓派摄像头转头跟随()
  4. face++人脸识别与人脸库匹配python实现笔记一
  5. 让树莓派开机运行Python脚本
  6. python_face++ 上传本地图片进行解析
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
树莓派基础实验5:激光传感器实验
   由于其良好的指向性和能量集中性,激光广泛用于医疗军事等领域,顾名思义,激光发射模块是一种可以发射激光的模块。
张国平
2020/09/28
1.5K0
树莓派基础实验5:激光传感器实验
python语音智能对话聊天机器人,linux&&树莓派双平台兼容
项目简介:运用百度语音进行声音转中文的识别与合成,智能对话使用图灵机器人,录音则,linux端用pythonaudio 模块.树莓派端因为pythonaudio不兼容问题,因此用arecord进行录音.最终代码约150行.代码发布在github上.https://github.com/luyishisi/python_yuyinduihua
十四君
2019/11/28
6.2K0
使用树莓派实现的口罩检测
使用的口罩检测 项目是AIZOO团队实现的 使用的是目标检测常用的SSD算法。 该团队也提供了数据集,大家也可以自己去训练一下。 (由于疫情在家 连不上实验室的服务器我还无法训练) 项目GitHub链接
全栈程序员站长
2022/09/05
1.2K0
使用树莓派实现的口罩检测
树莓派基础实验4:继电器实验
   继电器是一种用于响应施加的输入信号,而在两个或多个点或设备之间提供连接的设备。换句话说,继电器提供了控制器和设备之间的隔离,因为我们知道设备可以在AC和DC上工作,但是他们从微控制器接收信号,因此,我们需要一个继电器来弥补差距。当需要用小电信号控制大量电流或电压时,继电器非常有用。
张国平
2020/09/28
3.1K0
树莓派基础实验4:继电器实验
树莓派综合项目3:AI视觉机械臂小车(二)轻触按键
树莓派综合项目3:AI视觉机械臂小车(一)蜂鸣器 树莓派基础实验   本实验也是一个简单的轻触按键实验,在基础实验系列中讲过类似的一篇,树莓派基础实验6:轻触开关按键实验,当中使用了 interrupt( 中断 )式( edge detection 边缘检测 ),GPIO.add_event_detect()方法。本实验中直接使用While循环检测按键输入的电平为高还是低,同时介绍一个Python控制GPIO的库“gpiozero”,gpiozero库的操作更加人性化,而且简单好用、易于上手,树莓派镜像默认安装了gpiozero库,无需额外安装。
张国平
2021/05/13
1.3K0
树莓派综合项目3:AI视觉机械臂小车(二)轻触按键
树莓派4b c语言,【树莓派4B学习】七、树莓派4B的GPIO基础操作
链接:https://pan.baidu.com/s/1icgrCoc-piC0Eid0NlRlMA 提取码:6h0b
全栈程序员站长
2022/09/02
2.4K0
树莓派4b c语言,【树莓派4B学习】七、树莓派4B的GPIO基础操作
树莓派从温湿度传感器DHT11读取数据
树莓派作为一个完整的主机,除了能在上面跑系统外,也提供了40个引脚提供电路开发的功能。本来我在工作中常接触linux,但没啥机会接触硬件,正好手头上有一台raspberry 3b,本来是用来学linux相关的包的,闲的没事,网上买了几个传感器玩玩。很短时间就能上手从dht11读取数据了,虽然也看了好多文档,GPIO学起来还是挺简单的。   第一次写gpio程序, 我还是参考了别人的代码,主题代码基本一样,这里我多解释下我的代码吧。 重要的是这里有几个magic number,比如cnt 小于100和cnt > 12。     首先我们可以在网上找下DHT11的相关文档。你向传感器发送一个复位信号(大于18us的低电位,然后高电位),然后传感器会传送40-50us的低电位,紧接着40-50us的高电位。在往后就是以12-14us间隔的40个数据位了。   40个数据位编码方式如下。
xindoo
2021/01/21
1.2K0
树莓派综合项目1:智能温度测量系统实验
  我们可以在编程时通过操纵杆PS2调整下限和上限值。操纵杆PS2有五个操作方向:向上、向下、向左、向右和向下按压。在这个项目中,我们将使用左右方向来控制上限值,上下方向来控制下限值。如果按一下操纵杆,系统将退出。
张国平
2020/09/27
1.4K1
简单WiFi控制小车系统(树莓派+python+web控制界面)
   蛇皮走位演示视频: https://pan.baidu.com/s/1RHHr8bRHWzSEAkrpwu99aw
Fivecc
2022/11/21
1.7K0
简单WiFi控制小车系统(树莓派+python+web控制界面)
树莓派基础实验7:倾斜开关实验
  在倾斜开关中球以不同的倾斜角度移动,以制造触发电路。倾斜开关模块使用双向传导的球形倾斜开关。当它向一侧倾斜时,只要倾斜度和力满足条件开关就会通电,从而输出低电平信号。
张国平
2020/09/27
1.3K0
树莓派基础实验8:振动开关实验
   振动开关也称为弹簧开关或振动传感器,是一种电子开关。它会产生振动力,并将结果传送给电路装置,从而触发其工作。它包含以下部分:导电振动弹簧,开关主体,触发销和包装壳。
张国平
2020/09/27
2K0
开源图书《Python完全自学教程》12.7树莓派开发
本节的标题很大,但内容仅限于演示一个在树莓派上应用 Python 语言进行开发的示例,如果读者对本节标题相关的内容有兴趣,推荐查阅有关专门资料。
老齐
2022/12/09
1.3K0
开源图书《Python完全自学教程》12.7树莓派开发
树莓派基础实验16:霍尔传感器实验
   霍尔传感器是根据霍尔效应制作的一种磁场传感器。霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。后来发现半导体、导电流体等也有这种效应,而半导体的霍尔效应比金属强得多,利用这现象制成的各种霍尔元件,广泛地应用于工业自动化技术、检测技术及信息处理等方面。
张国平
2020/09/27
1.6K0
【极客大讲堂】如何用树莓派控制交通红绿灯?
涉及硬件:树莓派以及相关套件、LED红绿灯 涉及知识:电路实验板、CanaKit 当准备好以上,我们就可以开始啦。使用树莓派进行LED原型控制。 首先要明白的是,接入所有的电线、电阻器以及工具包附带的指示灯需要谨慎操作,毕竟如果你设置操作不当将有可能损坏你的硬件。 为了简化与树莓派和LED的接触,也为了方便编写控制代码,我决定编写一个叫做Pi交通灯的小玩意,这是用树莓派控制LED的第一步。 有了这个“红绿灯”之后,你要做的就只是把这个小装置直接插到树莓派的GPIO接口上。你不需要担心连接到线路板
FB客服
2018/02/07
2K0
【极客大讲堂】如何用树莓派控制交通红绿灯?
树莓派基础实验10:干簧管传感器实验
   磁簧开关(Reed Switch)也称之为干簧管,它是一个通过所施加的磁场操作的电开关。基本型式是将两片磁簧片密封在玻璃管内,两片虽重叠,但中间间隔有一小空隙。当外来磁场时将使两片磁簧片接触,进而导通。 一旦磁体被拉到远离开关,磁簧开关将返回到其原来的位置。可以用来计数或限制位置。
张国平
2020/09/27
1.4K0
4步实现树莓派人脸识别、拍照与推送、舵机旋转
大部分童鞋的树莓派是不是一直在吃灰呢?一直闲置着,倒不如用它做一个简易监控,如果检测到人脸后,就拍照上传到指定地方,或发消息提醒。
小锋学长生活大爆炸
2022/03/29
7500
4步实现树莓派人脸识别、拍照与推送、舵机旋转
树莓派综合项目3:AI视觉机械臂小车(三)基本运动
树莓派综合项目3:AI视觉机械臂小车(一)蜂鸣器 树莓派综合项目3:AI视觉机械臂小车(二)轻触按键   本实验将实现履带车的基本运动,前进、后退、左转、右转。在以前的文章中有更基础细致的讲解可以参考: 树莓派基础实验34:L298N模块驱动直流电机实验 树莓派综合项目2:智能小车(一)四轮驱动
张国平
2021/05/17
1.8K1
树莓派综合项目3:AI视觉机械臂小车(三)基本运动
树莓派 GPIO操作.1(Python版本)
今天的最后一篇文章,一共7篇,很久没有写这么满了。后面的硬件就不测试了,大概率是正确的,我只写源代码。而且这些代码放在Jetson Nano上面也是可以的。
云深无际
2021/07/23
1.3K0
树莓派 GPIO操作.1(Python版本)
树莓派基础实验33:TCRT5000红外循迹传感器实验
  红外跟踪循迹传感器使用TCRT5000循迹模块。TCRT5000采用的是蓝色的LED发射管,通电后发出人眼看不到的红外线。传感器的黑色部分用于接收,内部电阻器的电阻随所接受的红外光而变化。
张国平
2020/09/27
3K0
用家里旧的红外遥控器控制树莓派小车
红外遥控是一种无线、非接触控制技术,在工业控制、航空航天、家电等领域都得到了广泛应用。大部分的电视的遥控器,空调遥控器就都是红外遥控。在baidu上检索了树莓派小车的各种控制方案,没有找到红外遥控的控制方案。所以本文尝试使用红外控制方案对树莓派小车进行控制。
FB客服
2019/05/15
1.2K0
用家里旧的红外遥控器控制树莓派小车
推荐阅读
相关推荐
树莓派基础实验5:激光传感器实验
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验