樹莓派進階之路 (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):

 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{
 9     char device[32];                          //設備路徑
10     unsigned long baud;                      //波特率
11     int fd;                                 //設備描述符
12     unsigned char dates[1024];              //文件轉存
13     unsigned char temp;                     //字符緩存
14     int 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++));
22     return ret;                                    //引用返回地址,方便鏈式操作!!  
23 }
24 //清空serial
25 int clean_serial_port(struct serial_port *serial){
26     memset(serial->dates,0,1024);
27     serial->len = 0;
28     printf("\n");
29     return 0;
30 }
31 //字段尾部加0
32 int set_serial_dates_end(struct serial_port *serial){
33     if('\n' == serial->temp){    
34         printf("\n");
35         serial->dates[serial->len--]='\0';
36     }
37     return 0;
38 }
39 
40 //打印調試
41 int printf_serial_dates(struct serial_port *serial){
42     int i = 0;
43     if('\n' == serial->temp){
44         for(i = 0;i<=serial->len;i++){
45             printf(" %d---%x",i,serial->dates[i]);
46         }
47     }
48     return 0;
49 }
50 
51 //讀取完成清空緩存0
52 int clean_serial(struct serial_port *serial){
53     if('\n' == serial->temp){        
54         clean_serial_port(serial);
55     }
56     return 0;
57 }
58 
59 
60 int main(void){
61     struct serial_port serial;
62     wiringPi(0,0);                                      //wiringPi初始化
63     serial.fd = init_serial_port("/dev/ttyUSB0",9600);    //通過樹莓派函數打開
64     while(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);        //尾部加0
70             //printf_serial_dates(&serial);        //打印
71         
72         clean_serial(&serial);                    //讀取完成清空緩存0
73         }
74         else{                                    //出錯清空緩存
75         clean_serial_port(&serial);
76         }
77     }
78     return 0;
79 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM