600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 树莓派进阶之路 (029) - 语音识别模块 LD3320(原创)

树莓派进阶之路 (029) - 语音识别模块 LD3320(原创)

时间:2021-08-19 12:51:03

相关推荐

树莓派进阶之路 (029) - 语音识别模块 LD3320(原创)

近几天听朋友有说到LD3320 语音模块,刚好身边有块树莓派3,就在某宝上买了块自带mcu的LD3320 。

准备:

树莓派一个(配置了wiringPi开发环境的详情见本人博客:树莓派进阶之路 (006) - 树莓派安装wiringPi)

LD3320 语音模块一片:/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):

1 # include <stdio.h> 2 # include <assert.h> //测试函数 3 # include <string.h> 4 # include "Picustom.h" //自定义头文件 5 # define uint8 unsigned char//宏定义 6 # define N 124 7 8 struct serial_port{ 9char device[32];//设备路径10unsigned long baud; //波特率11int fd; //设备描述符12unsigned char dates[1024]; //文件转存13unsigned char temp; //字符缓存14int len; //长度15 };16 17 //字符串cp函数18 char * my_strcpy(char *dest, const char *src){ //将源字符串加const,表明其为输入参数,起到相应的保护作用 19 assert(src != NULL&&dest != NULL); //对源地址和目的地址加非0断言 20 char *ret = dest; 21 while ((*dest++ = *src++));22return ret;//引用返回地址,方便链式操作!! 23 }24 //清空serial25 int clean_serial_port(struct serial_port *serial){26memset(serial->dates,0,1024);27serial->len = 0;28printf("\n");29return 0;30 }31 //字段尾部加032 int set_serial_dates_end(struct serial_port *serial){33if('\n' == serial->temp){ 34 printf("\n");35 serial->dates[serial->len--]='\0';36}37return 0;38 }39 40 //打印调试41 int printf_serial_dates(struct serial_port *serial){42int i = 0;43if('\n' == serial->temp){44 for(i = 0;i<=serial->len;i++){45 printf(" %d---%x",i,serial->dates[i]);46 }47}48return 0;49 }50 51 //读取完成清空缓存052 int clean_serial(struct serial_port *serial){53if('\n' == serial->temp){ 54 clean_serial_port(serial);55}56return 0;57 }58 59 60 int main(void){61struct serial_port serial;62wiringPi(0,0); //wiringPi初始化63serial.fd = init_serial_port("/dev/ttyUSB0",9600); //通过树莓派函数打开64while(1){65 serial.temp = Serial_data_read_char_10(serial.fd);66 printf("%x\t",serial.temp);67 if(((0xff > serial.temp)&&(0x80 < serial.temp))||(serial.temp == '\r')||(serial.temp == '\n')){68 serial.dates[serial.len++] = serial.temp;69 set_serial_dates_end(&serial); //尾部加070 //printf_serial_dates(&serial); //打印71 72 clean_serial(&serial);//读取完成清空缓存073 }74 else{//出错清空缓存75 clean_serial_port(&serial);76 }77}78return 0;79 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。