树莓派进阶之路 (029) - 语音识别模块 LD3320(原创)
近几天听朋友有说到LD3320 语音模块,刚好身边有块树莓派3,就在某宝上买了块自带mcu的LD3320 。
准备:
树莓派一个(配置了wiringPi开发环境的详情见本人博客:树莓派进阶之路 (006) - 树莓派安装wiringPi)
LD3320 语音模块一片:https://detail.tmall.com/item.htm?id=41365254224&spm=a1z09.2.0.0.a3beb5clzbCiw&_u=p2cc1o5d426a
TTL下载器 一块:买模块的时候老板送了一个。
win电脑:keil (查看51工程代码),WinSCP(树莓派文件挂载),Notepad++(代码编辑)
或 Ubuntu电脑:gedit(代码编辑),scp(远程文件传输),wine(win环境模拟器为了安装keil 查看51工程代码)
开始搞机:
因为有买的模块已经有现成的51 做 mcu控制芯片,树莓派要做的就是和51做通信交互,我选用的是店家送的TTL下载器通过调用系统USB串口设备进行通信。连线常规链接方式,TTL下载器插在USB接口上:在终端输入 "ls /dev/tty*"
我们可以看到显示有USB设备的,我们只要通过调用系统函数open打开设备描述符就行了。
代码如下(Picustom.h):
# include <stdio.h>
# include <assert.h> //测试函数
# include <string.h>
# include "Picustom.h" //自定义头文件
# define uint8 unsigned char //宏定义
# define N struct serial_port{
char device[]; //设备路径
unsigned long baud; //波特率
int fd; //设备描述符
unsigned char dates[]; //文件转存
unsigned char temp; //字符缓存
int len; //长度
}; //字符串cp函数
char * my_strcpy(char *dest, const char *src){ //将源字符串加const,表明其为输入参数,起到相应的保护作用
assert(src != NULL&&dest != NULL); //对源地址和目的地址加非0断言
char *ret = dest;
while ((*dest++ = *src++));
return ret; //引用返回地址,方便链式操作!!
}
//清空serial
int clean_serial_port(struct serial_port *serial){
memset(serial->dates,,);
serial->len = ;
printf("\n");
return ;
}
//字段尾部加0
int set_serial_dates_end(struct serial_port *serial){
if('\n' == serial->temp){
printf("\n");
serial->dates[serial->len--]='\0';
}
return ;
} //打印调试
int printf_serial_dates(struct serial_port *serial){
int i = ;
if('\n' == serial->temp){
for(i = ;i<=serial->len;i++){
printf(" %d---%x",i,serial->dates[i]);
}
}
return ;
} //读取完成清空缓存0
int clean_serial(struct serial_port *serial){
if('\n' == serial->temp){
clean_serial_port(serial);
}
return ;
} int main(void){
struct serial_port serial;
wiringPi(,); //wiringPi初始化
serial.fd = init_serial_port("/dev/ttyUSB0",); //通过树莓派函数打开
while(){
serial.temp = Serial_data_read_char_10(serial.fd);
printf("%x\t",serial.temp);
if(((0xff > serial.temp)&&(0x80 < serial.temp))||(serial.temp == '\r')||(serial.temp == '\n')){
serial.dates[serial.len++] = serial.temp;
set_serial_dates_end(&serial); //尾部加0
//printf_serial_dates(&serial); //打印 clean_serial(&serial); //读取完成清空缓存0
}
else{ //出错清空缓存
clean_serial_port(&serial);
}
}
return ;
}
树莓派进阶之路 (029) - 语音识别模块 LD3320(原创)的更多相关文章
- 树莓派进阶之路 (015) - 树莓派使用DS18B20模块测量温度
参考:http://shumeipai.nxez.com/2013/10/03/raspberry-pi-temperature-sensor-monitors.html 第一步,允许单总线接口 su ...
- 树莓派进阶之路 (020) - 基于24位AD转换模块HX711的重量称量实验
参考文档:http://www.geek-workshop.com/thread-2315-1-1.html 参考文档:https://wenku.baidu.com/view/e5d5e4e2652 ...
- 树莓派进阶之路 (016) - 通过595驱动4位LED显示系统时间
模块图片,4位共阳极数码管. 我们使用树莓派wiringPi的库来通过74HC595驱动4位数码管: C 代码如下: #include <wiringPi.h> #include < ...
- 树莓派进阶之路 (012) - 树莓派配置文档 config.txt 说明
原文连接:http://elinux.org/RPi_config.txt 由于树莓派并没有传统意义上的BIOS, 所以现在各种系统配置参数通常被存在”config.txt”这个文本文件中. 树莓派的 ...
- 树莓派进阶之路 (010) - 树莓派raspi-config配置(转)
经过前面两步我们的树莓派已经正常的工作起来了,但是在真正用它开发之前还需要进行一些列的配置以及软件的安装,这样开发起来才会得心应手,下面我们介绍一下常用的软件和服务 1.配置选项: 树莓派第一次使用的 ...
- 树莓派进阶之路 (038) - P2P 文件下载机
硬件要求: 树莓派开发板 USB外接硬盘 一. Together 1. 更新安装程序 sudo apt-get update sudo apt-get upgrade sudo apt-get ins ...
- 树莓派进阶之路 (031) -字符问题(1) - GBK汉字编码表(转)
转载:http://blog.sina.com.cn/s/blog_8184e033010109ug.html 基本简介 GB码,全称是GB2312-80<信息交换用汉字编码字符集基本集&g ...
- 树莓派进阶之路 (030) -Picustom.h(原创)
写代码的时候敢接每次查wiringPi库函数挺麻烦的,自己wiringPi库封装了一下: #ifndef __PICUSTOM_H__ #define __PICUSTOM_H__ /******** ...
- 树莓派进阶之路 (028) - 树莓派SQLite3的安装
MySQL占用内存太大,而SQLite是一款轻量级零配置数据库,非常适合在树莓派和其他嵌入式系统中使用.SQLite文档详细资料丰富,本文不会详细解释SQLite数据库操作的方方面面,只能结合具体场景 ...
随机推荐
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十八)ES6.2.2 增删改查基本操作
#文档元数据 一个文档不仅仅包含它的数据 ,也包含 元数据 —— 有关 文档的信息. 三个必须的元数据元素如下:## _index 文档在哪存放 ## _type 文档表示的对象类别 ## ...
- Android 多屏适配解决方式
1.主流手机必要測量的參数(通过详细的方法.測量出,须要測试手机的 以下的这些參数,我们主要使用的仅仅是 screenwidth 这个參数,其它參数仅仅是帮助我们更好的理解 屏幕适配) Displa ...
- ASP入门(二十二)-连接数据库
ADO 简介 在 ASP 中访问数据库使用的 ADO 组件. ADO 是一项微软的技术. ADO 指 ActiveX 数据对象(ActiveX Data Objects). ADO 是微软的 Acti ...
- Android 显示网络图片
本文内容 环境 演示显示网络图片 本文演示 Android 如何显示网络图片.学习一门新的语言,最好办法就先了解该语言的语法和库,以及设计思想,再着手现实一些常用功能,毕竟以后用该语言是要写程序的,而 ...
- WIN10系统如何隐藏底部搜索框
右击任务栏,搜索,可以切换三种模式,建议还是显示搜索图标,因为这个搜索还是能比较快速定位到系统功能的,只不过显示搜索框的话比较占地方,不方便
- Java开发 - 异常 - 使用throws
如果一个方法可能会产生异常,我们需要用throws关键字给它标注会抛出什么异常, 这样就可以在方法调用的时候捕获它. 代码如下: package corejava8.exceptions; publi ...
- jquery_opacity_css透明
语法: $(selector).animate({params},speed,callback); 示例一.jquery_opacity_css透明 $(function () { $('.conta ...
- 【DB】部分MySQL操作记录
工作中涉及到部分统计工作,恰好把之前的有些SQL再熟悉回顾一下. 一.涉及到时间统计部分: 求时间差: ), (SELECT CURDATE())) AS '试用时间'; ), (SELECT CUR ...
- Rabbit mq订阅方式获取消息并可设置持久化
Rabbit 通过方式获取消息:订阅方式事实上是向queue注冊consumer,通过rpc向queue server发送注冊consumer的消息.rabbitMQ Server在收到消息后,依据消 ...
- Java定时器Timer的使用详解
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6374714.html 定时器在Web开发中使用得不是很多.这里主要列举一下使用定时器的步骤,方便日后使用时查 ...