ASRPRO语音识别模块

news2024/12/22 13:22:38

ASRPRO语音识别模块

SOFT IIC 与PCA9685模块通信

pca9685 iic通信 地址位 ADDR<<1|0  左移一位 #define I2C_WRITE 0

#define I2C_READ  1

否则通信地址错误

asrpro

通过UART与电脑连接,可以进行简单的交互

将STM32作为接口扩展,通过SPI或IIC进行端口扩展

ASRPRO常见问题

烧写:请是否连接

换好一点的USB转TTL 或是用官方的下载器

SSD1306 SPI代码

 ASRPRO端源码

#define ST7735_CS_PIN 2

#define ST7735_CS_GPIO_PIN gpio_pin_2

#define ST7735_DC_PIN 3

#define ST7735_DC_GPIO_PIN gpio_pin_3

#define ST7735_RST_PIN 1

#define ST7735_RST_GPIO_PIN gpio_pin_1

#define ST7735_SCK_PIN 5

#define ST7735_MOSI_PIN 6

// #define ST7735_SCK_PIN 6

// #define ST7735_MOSI_PIN 5

//#define ST7735_SCK_GPIO_PIN gpio_pin_5

//#define ST7735_MOSI_GPIO_PIN gpio_pin_6

/* 宏定义 --------------------------------------------------------------------*/

#define MOSI  ST7735_MOSI_PIN

#define SCK ST7735_SCK_PIN

#define DC ST7735_DC_PIN

#define CS ST7735_CS_PIN

#include "asr.h"

extern "C"{ void * __dso_handle = 0 ;}

#include "setup.h"

#include "myLib/luxiaoban.h"

#include "HardwareSerial.h"

#include "../U8G2/u8g2ASR.h"

   

int ndelay_interupt = 0;

bool stop_sign = 0;

u8g2_class u8g2c;

void hardware_init();

void emo_class();

void weather_class();

void draw_string(const char *s);

void PlayWeatherAndDate();

void process(); //主处理函数

bool ndelay(int wait);

void drawImage();

void Show_Time();

QueueHandle_t message1=NULL;

QueueHandle_t message2=NULL;

uint32_t rec_1 = 0;

uint32_t rec_2 = 0;

uint32_t var = 0;

unsigned char COMPUTER_CONTROL = 0; //电脑接管

int CUR_X=0;

int CUR_Y = 12;//set curlsor

int draw_color = 1;

int i = 0;

int data_k = 0;

uint32_t snid;

extern "C" uint8_t myfont1[];

   

char cmd[20];

int cmd_k = 0; //cmd count

int m_cmd = 0;

char buff[1024]  = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xfe,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,

0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,

0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,

0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,

0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,

0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xfe,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };

/*-------------------------------OLED---------*/

void Oled()

{

  while(1)

  {

    if(COMPUTER_CONTROL == 0){

      emo_class();

      Show_Time();

      weather_class();

     

    }

   

    if(xQueueReceive(message1,&rec_1,0)){

     

      ndelay_interupt = 0;

      stop_sign = 0;

     

      if(rec_1 == 'e' )

      {

        Serial.println("MSG emo");

        emo_class();

      }

     

      else if(rec_1 == 's' )

      {

        Serial.println("MSG string");

        draw_string(cmd);

      }

      else if(rec_1 == 'w' )

      {

        Serial.println("MSG weatherData");

        PlayWeatherAndDate();

      }

      else if(rec_1 == 'd')

      {

        Serial.println("msg display");

        drawImage();

      }

    }//queuemessage end

   

    // delay(1);

   

  }//while end

    vTaskDelete(NULL);

}

/*-------------------------------msg_process---------*/

void msg_Process(char * cmd){

   if(cmd[1] == 'I')  //send imag data

    {

      Serial.print("recv I");

      i = 1024;

    }

    else if(cmd[1] == 'D')  //display imag data

    {

      Serial.print("recv D");

      m_cmd = 'd';

      ndelay_interupt = 1;

      var = xQueueSend(message1,&m_cmd,0);

     

    }

    else if(cmd[1] == '5')  //show str

    {

      Serial.print("recv 5");

     

      cmd[cmd_k-2] =0;

     

      m_cmd = 's';

      ndelay_interupt = 1;

     

      var = xQueueSend(message1,&m_cmd,0);

    }

    else if(cmd[1] == 'W') //play weather

    {

      Serial.print("recv 4");

      m_cmd = 'w';

      ndelay_interupt = 1;

      var = xQueueSend(message1,&m_cmd,0);

      //PlayWeatherAndDate();

    }

    else if(cmd[1] =='E')  //play emo

    {

      Serial.print("recv 3");

      m_cmd = 'e';

      ndelay_interupt =1;

      var = xQueueSend(message1,&m_cmd,0);

      //emo_class();

    }

    else if(cmd[1] == 'T') //show Time

    {

     

    }

    else

    {

      Serial.println("no cmd");

    }

  //command select

    if(strcmp(cmd,"weather")==0)  //4

    {

       Serial.println("play weather");

        m_cmd = 'w';

        ndelay_interupt = 1;

        var = xQueueSend(message1,&m_cmd,0);

        //PlayWeatherAndDate();

    }

    else if(strcmp(cmd,"emo") == 0)  //3

    {

      Serial.println("play emo");

        m_cmd = 'e';

        ndelay_interupt = 1;

        var = xQueueSend(message1,&m_cmd,0);

      //emo_class();

    }

                      //command end

}

/*-------------------------------ASR---------*/

  //{speak:娇娇-邻家女声,vol:10,speed:10,platform:haohaodada}

  //{playid:10001,voice:天问五幺唤醒我。}

  //{playid:10002,voice:记得叫醒我哦}

  //{ID:0,keyword:"唤醒词",ASR:"天问五幺",ASRTO:"哎 我在"}

void ASR_CODE()

{

  //emo_tst(&u8g2);

  //{ID:500,keyword:"唤醒词",ASR:"小鹿同学",ASRTO:"哎 我在呢"}

  //{ID:501,keyword:"唤醒词",ASR:"小鹿小鹿",ASRTO:"哎"}

  //{ID:506,keyword:"命令词",ASR:"关灯",ASRTO:"好的"}

  if(snid == 503){

  }

  //{ID:505,keyword:"命令词",ASR:"开灯",ASRTO:"好的"}

  else if(snid == 505){

    //luxiaoban_digital_write(0,0);

    Serial.println("开灯");

    digitalWrite(4,1);

   

  }

  if(snid == 506){

    Serial.println("关灯");

    digitalWrite(4,0);

   

    //luxiaoban_digital_write(0,1);

  }

  //{ID:1,keyword:"命令词",ASR:"开机",ASRTO:"好的"}

  else if(snid == 1){

    Serial.println("开机");

    //luxiaoban_digital_write(0,1);

  }

  //{ID:2,keyword:"命令词",ASR:"关机",ASRTO:"好的"}

  else if(snid == 2){

    Serial.println("关机");

  //luxiaoban_digital_write(0,1);

  }

  //{ID:3,keyword:"命令词",ASR:"播放音乐",ASRTO:"好的"}

  else if(snid == 3){

    Serial.println("播放音乐");

  }

  //{ID:4,keyword:"命令词",ASR:"天气",ASRTO:"好的"}

  else if(snid == 4){

    Serial.println("weather");

    //luxiaoban_digital_write(0,1);

  }

  //{ID:5,keyword:"命令词",ASR:"时间",ASRTO:"好的"}

  else if(snid == 5){

    Serial.println("时间");

    //luxiaoban_digital_write(0,1);

  }

}

   

char schar;

void process()  //serial process

{

  while(1)

  {

       

        while(Serial.available()> 0 )

        {

          COMPUTER_CONTROL = 1;

         

          schar = Serial.read();

        

          //Serial.println(schar);  //important?

         

         

          if(i != 0) {  //recive data

            buff[data_k] = schar;

            data_k = data_k + 1;

            i = i -1;

            cmd_k = 0;

           

            Serial.print("i = ");

            Serial.print(i);

           

          }

           

          else{

           

            cmd[cmd_k] = schar;

            cmd_k = cmd_k +1;

            if(cmd[cmd_k-1] == '\n')

            {

              cmd[cmd_k-1] = 0;

              Serial.println(cmd);  //IMPORTANT?

              //draw_string(cmd);

             

                //接收协议 M开头  操作码OP 附加信息AD M结尾

                //OP = 0 命令 1 数据

                //AD OP =1 数据长度

                if(cmd[0]== 'M' & cmd[cmd_k-2]=='M' )

                {

                  Serial.println("in xiyi");

                  Serial.println(cmd[1]);

                 

                  msg_Process(cmd);

     

                    

                     

             

            }  // end  cmd[0]== 'M' 

            cmd_k = 0;

            } //end  '\n'

          }  //end if i !=0

        } //end  Serial.Avalible

        delay(2);  // important error no recv

  }//end while(1)

  vTaskDelete(NULL);

}

//创建线程

void hardware_init(){

  message1=xQueueCreate(5,4);

  message2=xQueueCreate(5,4);

  xTaskCreate(process,"process",256,NULL,4,NULL);

  xTaskCreate(Oled,"oled",256,NULL,4,NULL);

  vTaskDelete(NULL);

}

void emo_class()

{

  ndelay_interupt = 0;

  int draw_color = 1;

  u8g2c.setFont(myfont1);

  u8g2c.setColorIndex(draw_color);

  for(int m = 0;m<1;m++)

    { int k = 0;

      for(int i = 0;i<30;i++)

      {

       

       

        u8g2c.clearBuffer();

       

        u8g2c.drawGlyph(34,60,96+k%6);

        if(ndelay(100))

           return ;

        

        u8g2c.sendBuffer();

        k = k+1;

       

      }

  }

  // vTaskDelete(NULL);

}

void weather_class(void)

{

//天气

  ndelay_interupt = 0;

  int draw_color = 1;

  u8g2c.setColorIndex(draw_color);

  u8g2c.setFont(u8g2_font_open_iconic_weather_6x_t);

  for(int m = 0;m<5;m++)

    { int k = 0;

      for(int i = 0 ;i<5;i ++)

      {

      

          u8g2c.clearBuffer();

          u8g2c.drawGlyph(30,60,65+k%5);

          if(ndelay(100))

            return ;

          u8g2c.sendBuffer();

          k = k+1;

         

         

       // Serial.print(k);

        k = k+1;

       

      }

    }

}

void Show_Time()

{

    u8g2c.setColorIndex(draw_color);

    u8g2c.setFont(u8g2_font_tenfatguys_tn);

    u8g2c.clearBuffer();

    u8g2c.drawStrX2(20,40,"11:20");

    if(ndelay(100))

      return ;

    u8g2c.sendBuffer();

}

void setup()

{

//Serial 0

  setPinFun(13,SECOND_FUNCTION);

  setPinFun(14,SECOND_FUNCTION);

  Serial.begin((9600));

  Serial.println("setup");

//u8g2 初始化

//      u8g2Init(&u8g2);

  u8g2c.u8g2_init();

pinMode(20,output); //pc4

pinMode(4,output);  //pa4

setPinFun(4,FIRST_FUNCTION);

              

        xTaskCreate(hardware_init,"hardware_init",256,NULL,100,NULL);

       

}

void PlayWeatherAndDate()

{

  unsigned char r = 0;

  for(int i = 0;i<100;i ++)

  {

    r = r % 40;

  u8g2c.setColorIndex(draw_color);

  u8g2c.clearBuffer();

  u8g2c.setFont(u8g2_font_8x13B_tf);

  u8g2c.drawStr(40,60, "12月20日");

  u8g2c.setFont(u8g2_font_open_iconic_weather_4x_t);

  u8g2c.drawGlyph(65,40,65);

  u8g2c.drawCircle(30,30,r );

  u8g2c.sendBuffer();

  if(ndelay(10))

    return ;

  r = r+1;

  }

}

//draw string

void draw_string(const char *s) {

  // assign default color value

  int draw_color = 1;

  u8g2c.setColorIndex(draw_color);

  u8g2c.setFont(u8g2_font_8x13B_tf);

   

    u8g2c.clearBuffer();

    u8g2c.drawStr(0,12, s);

    u8g2c.sendBuffer();

   

  if(ndelay(1000))

  return ;

}

void interrupt(){

  ndelay_interupt = 1;

}

bool ndelay(int wait)

{

  int w = wait;

  while(w >0)

  {

    if(ndelay_interupt == 1  )

    {

      //ndelay_interupt = 0;

      stop_sign = 1;

      Serial.println("ndelay interrup");

     

      return 1;

    }

    delay(1);

    w= w-1;

  }

  return 0;

}

void drawImage()

{

  u8g2c.drawBitmap(0, 0, 16,64, buff); //right 128/8 X64

  u8g2c.sendBuffer();

  ndelay(1000);

}

    //if(xQueueReceive(message2,&rec_2,0)){

    //  Serial.println(rec_2);

电脑端PY源码

import serial

import threading

import time

from PIL import Image

import datetime

import json

import requests

img = ''

##with Image.open(r"tst2.png") as im:

##    img = im.tobytes()

##    im.show()

   

##print(img)

##img = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x07\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x07\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x1f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00?\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00?\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00?\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x1f\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x07\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00?\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x0f\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x01\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

print("image len:",len(img))

def get_data(): ##https://baijiahao.baidu.com/s?id=1769484471382177983&wfr=spider&for=pc

    now = datetime.datetime.now()

    h = int(now.strftime("%M"))

    m = int(now.strftime("%M"))

    return [h,m]

def get_weather(): ##https://blog.csdn.net/gschen_cn/article/details/131886954

    url = 'http://t.weather.sojson.com/api/weather/city/'

    response = requests.get(url+'101280101')

    d = response.json()

    print( d["data"]["forecast"][0]["type"])

   

    pass

   

   

##处理信息

def recv_msg(msg):

    if msg == '开机':

        print("msg is boot")

        pass

    if msg == '关机':

        print("msg is shutdown")

        pass

    if msg == '播放音乐':

        pass

   

##print(img)

sr = serial.Serial("COM12",9600,timeout = 0.1)

##sr.baudrate = 9600

##sr.bytesize = 8

##sr.parity = 'N'

##sr.stopbits = 1

time.sleep(3)

sr.set_buffer_size(2,2)

def rec_thread():

    while(1):

        data = ''

        if(sr.inWaiting()>0):

            print("receive:<------",end = '')

            data = sr.read(sr.inWaiting())

            print(str(data))

            s1 = str(data.decode("gb2312"))

            print(s1)

##            if(s1 == '开灯\r\n'):

##                print("is boot")

##            else:

##                print("is kaiden")

           

            recv_msg(s1[0:-2])

            time.sleep(0.1)

           

            print("receive end//")

def send_imag():

   

    sr.write("MIM\n".encode("utf-8"))

    send_num = 256

    k = 0;

    for i in range(int(len(img)/send_num)+1):

        sr.write(img[k:k+send_num])

        print("send---->:",img[k:k+send_num])

        k = k + send_num

        sr.flush()

        print("send -----------512")

        time.sleep(0.5)

    sr.write("MDM\n".encode("utf-8"))

   

           

if __name__ == "__main__":

    t1 = threading.Thread(target = rec_thread)

    t1.start()

   

    get_weather()

   

    while(1):

        pass

##        a = input("exit:q")

##        if(a == 'q'):

##            exit()

####            break;

##        sr.write((a+'\n').encode("utf-8"))

    print("---------")

   

   

   

PCA9685代码

 使用asrpro自带的asr_softiic.h 和 arduino Adafruit_PWMServoDriver驱动库

修改处

softiic.start(_i2caddr<<1|0); // 写 0 ,读 1 (地址要左移一位

注释requestfrom ; return 0

#include "asr.h"

extern "C"{ void * __dso_handle = 0 ;}

#include "setup.h"

#include "HardwareSerial.h"

#include "asr_softiic.h"

uint32_t snid;

void hardware_init();

void LED();

void ASR_CODE();

#define PCA9685_SUBADR1 0x2

#define PCA9685_SUBADR2 0x3

#define PCA9685_SUBADR3 0x4

#define PCA9685_MODE1 0x0

#define PCA9685_PRESCALE 0xFE

#define LED0_ON_L 0x6

#define LED0_ON_H 0x7

#define LED0_OFF_L 0x8

#define LED0_OFF_H 0x9

#define ALLLED_ON_L 0xFA

#define ALLLED_ON_H 0xFB

#define ALLLED_OFF_L 0xFC

#define ALLLED_OFF_H 0xFD

class Adafruit_PWMServoDriver {

 public:

  Adafruit_PWMServoDriver(uint8_t addr = 0x40);

  void begin(void);

  void reset(void);

  void setPWMFreq(float freq);

  void setPWM(uint8_t num, uint16_t on, uint16_t off);

  void setPin(uint8_t num, uint16_t val, bool invert=false);

 private:

  uint8_t _i2caddr;

  uint8_t read8(uint8_t addr);

  void write8(uint8_t addr, uint8_t d);

};

// class MySoftIIC

// {

//   public:

//   void begin(){softiic.begin(0,1);}

//   void stop(){softiic.stop();}

//   void write(uint8_t d){softiic.write(d);}

//   uint8_t read(bool b ){softiic.read(b);}

//   void requestFrom(uint8_t addr,uint8_t d){};

//   int start(uint8_t addr){return softiic.start(addr<<1|0);}

//   void beginTransmission(uint8_t addr){start(addr);}

//   void stop(){softiic.stop();}

// };

// MySoftIIC WIRE;

// Set to true to print some debug messages, or false to disable them.

#define ENABLE_DEBUG_OUTPUT false

Adafruit_PWMServoDriver::Adafruit_PWMServoDriver(uint8_t addr) {

  _i2caddr = addr;

}

void Adafruit_PWMServoDriver::begin(void) {

 softiic.begin(0,1);

 reset();

}

void Adafruit_PWMServoDriver::reset(void) {

 write8(PCA9685_MODE1, 0x0);

}

void Adafruit_PWMServoDriver::setPWMFreq(float freq) {

  //Serial.print("Attempting to set freq ");

  //Serial.println(freq);

  freq *= 0.9;  // Correct for overshoot in the frequency setting (see issue #11).

  float prescaleval = 25000000;

  prescaleval /= 4096;

  prescaleval /= freq;

  prescaleval -= 1;

  if (ENABLE_DEBUG_OUTPUT) {

    Serial.print("Estimated pre-scale: "); Serial.println(prescaleval);

  }

  uint8_t prescale = floor(prescaleval + 0.5);

  if (ENABLE_DEBUG_OUTPUT) {

    Serial.print("Final pre-scale: "); Serial.println(prescale);

  }

  uint8_t oldmode = read8(PCA9685_MODE1);

  uint8_t newmode = (oldmode&0x7F) | 0x10; // sleep

  write8(PCA9685_MODE1, newmode); // go to sleep

  write8(PCA9685_PRESCALE, prescale); // set the prescaler

  write8(PCA9685_MODE1, oldmode);

  delay(5);

  write8(PCA9685_MODE1, oldmode | 0xa1);  //  This sets the MODE1 register to turn on auto increment.

                                          // This is why the beginTransmission below was not working.

  //  Serial.print("Mode now 0x"); Serial.println(read8(PCA9685_MODE1), HEX);

}

void Adafruit_PWMServoDriver::setPWM(uint8_t num, uint16_t on, uint16_t off) {

  //Serial.print("Setting PWM "); Serial.print(num); Serial.print(": "); Serial.print(on); Serial.print("->"); Serial.println(off);

  softiic.start(_i2caddr<<1|0);

  softiic.write(LED0_ON_L+4*num);

  softiic.write(on);

  softiic.write(on>>8);

  softiic.write(off);

  softiic.write(off>>8);

  softiic.stop();

}

// Sets pin without having to deal with on/off tick placement and properly handles

// a zero value as completely off.  Optional invert parameter supports inverting

// the pulse for sinking to ground.  Val should be a value from 0 to 4095 inclusive.

void Adafruit_PWMServoDriver::setPin(uint8_t num, uint16_t val, bool invert)

{

  // Clamp value between 0 and 4095 inclusive.

  if(val > 4095)

    val = 4095;

  if (invert) {

    if (val == 0) {

      // Special value for signal fully on.

      setPWM(num, 4096, 0);

    }

    else if (val == 4095) {

      // Special value for signal fully off.

      setPWM(num, 0, 4096);

    }

    else {

      setPWM(num, 0, 4095-val);

    }

  }

  else {

    if (val == 4095) {

      // Special value for signal fully on.

      setPWM(num, 4096, 0);

    }

    else if (val == 0) {

      // Special value for signal fully off.

      setPWM(num, 0, 4096);

    }

    else {

      setPWM(num, 0, val);

    }

  }

}

uint8_t Adafruit_PWMServoDriver::read8(uint8_t addr) {

  softiic.start(_i2caddr<<1|0);

  softiic.write(addr);

  softiic.stop();

  //softiic.requestFrom((uint8_t)_i2caddr, (uint8_t)1);

  //return softiic.read();

  return 0;

}

void Adafruit_PWMServoDriver::write8(uint8_t addr, uint8_t d) {

  softiic.start(_i2caddr<<1|0);

  softiic.write(addr);

  softiic.write(d);

  softiic.stop();

}

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

//--------------------------------------------------------

///**************************************************************

bool bl = 0;

int i=0;

void LED(){

  while (1) {

   

    //扫描设备

    for(int i = 1;i<0x7f;i++)

    {

      // int val = softiic.start(i<<1 | 0);

      // softiic.stop();

      // Serial.print(i,HEX);

      // Serial.print("ox ");

      // Serial.println(val,HEX);

      pwm.begin();

      pwm.setPWMFreq(1600);

      pwm.setPin(4,i*46,0);

      delay(100);

     

    }

   

  }

  vTaskDelete(NULL);

}

//------------------------------------------------

void setup()

{

  Serial.begin(9600);

   delay(100);

  //softiic.begin(0,1);

    pinMode(4,output);

  setPinFun(4,FIRST_FUNCTION);

  digitalWrite(4,0);

  //{speak:小蝶-清新女声,vol:10,speed:10,platform:haohaodada}

  //{playid:10001,voice:欢迎使用语音助手,用天问五幺唤醒我。}

  //{playid:10002,voice:我退下了,用天问五幺唤醒我}

  //{ID:0,keyword:"唤醒词",ASR:"天问五幺",ASRTO:"我在"}

  //{ID:1,keyword:"命令词",ASR:"打开灯光",ASRTO:"好的,马上打开灯光"}

  //{ID:2,keyword:"命令词",ASR:"关闭灯光",ASRTO:"好的,马上关闭灯光"}

  xTaskCreate(hardware_init,"hardware_init",256,NULL,100,NULL);

}

//--------------------------------------------------------

//{ID:250,keyword:"命令词",ASR:"最大音量",ASRTO:"音量调整到最大"}

//{ID:251,keyword:"命令词",ASR:"中等音量",ASRTO:"音量调整到中等"}

//{ID:252,keyword:"命令词",ASR:"最小音量",ASRTO:"音量调整到最小"}

void hardware_init(){

  xTaskCreate(LED,"LED",256,NULL,4,NULL);

  vTaskDelete(NULL);

}

/*描述该功能...

*/

void ASR_CODE(){

  switch (snid) {

   case 1:

    //digitalWrite(4,0);

    break;

   case 2:

    //digitalWrite(4,1);

    break;

  }

}

天问51 aspro ssd1306 SPI U8G2 类

接线引脚  MOSI PA5    SCK PA6     DC PA3    CS PA2

#define ST7735_CS_PIN 2

#define ST7735_CS_GPIO_PIN gpio_pin_2

#define ST7735_DC_PIN 3

#define ST7735_DC_GPIO_PIN gpio_pin_3

#define ST7735_RST_PIN 1

#define ST7735_RST_GPIO_PIN gpio_pin_1

// #define ST7735_SCK_PIN 5

// #define ST7735_MOSI_PIN 6

#define ST7735_SCK_PIN 6

#define ST7735_MOSI_PIN 5

//#define ST7735_SCK_GPIO_PIN gpio_pin_5

//#define ST7735_MOSI_GPIO_PIN gpio_pin_6

/* 宏定义 --------------------------------------------------------------------*/

#define MOSI  ST7735_MOSI_PIN

#define SCK ST7735_SCK_PIN

#define DC ST7735_DC_PIN

#define CS ST7735_CS_PIN

#include "asr.h"

extern "C"{ void * __dso_handle = 0 ;}

#include "setup.h"

#include "myLib/luxiaoban.h"

#include "HardwareSerial.h"

#include "../U8G2/u8g2.h"

void hardware_init();

void emo_class();

void weather_class();

//u8g2_t u8g2;

/my init

  void ssd1306_spi_init()

  {

  pinMode(CS,output);

        pinMode(DC,output);

        //pinMode(ST7735_RST_PIN,output);

        pinMode(SCK,output);

        pinMode(MOSI,output);

  }

uint8_t u8x8_avr_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)

  {

        // Re-use library for delays

        switch(msg)

        {

          //ms

                case U8X8_MSG_DELAY_MILLI:

        delay(1);

      break;

     

      //10 us

      case U8X8_MSG_DELAY_10MICRO:

        delay10us();

      break;

     

      //1 ns

           case U8X8_MSG_DELAY_NANO:

        delay1us();

      break;

     

    case U8X8_MSG_DELAY_100NANO:

      delay1us();

      break;

     

               case U8X8_MSG_GPIO_AND_DELAY_INIT:  // called once during init phase of u8g2/u8x8

        ssd1306_spi_init();

                       break;              // can be used to setup pins

               case U8X8_MSG_GPIO_SPI_CLOCK:        // Clock pin: Output level in arg_int

                       if(arg_int)

                               digitalWrite(SCK,1);

                       else

                               digitalWrite(SCK,0);

                       break;

               case U8X8_MSG_GPIO_SPI_DATA:        // MOSI pin: Output level in arg_int

                       if(arg_int)

                               digitalWrite(MOSI,1);

                       else

                               digitalWrite(MOSI,0);

                       break;

               case U8X8_MSG_GPIO_CS:        // CS (chip select) pin: Output level in arg_int

                       if(arg_int)

                               digitalWrite(CS,1);

                       else

                               digitalWrite(CS,0);

                       break;

               case U8X8_MSG_GPIO_DC:        // DC (data/cmd, A0, register select) pin: Output level in arg_int

      if(arg_int)

                               digitalWrite(DC,1);

                       else

                               digitalWrite(DC,0);

                       break;

              

               case U8X8_MSG_GPIO_RESET:     // Reset pin: Output level in arg_int

               default:

                 break;

        }

        return 1;

}

void u8g2Init(u8g2_t *u8g2)

{

  u8g2_Setup_ssd1306_128x64_noname_f(u8g2, U8G2_R0, u8x8_byte_4wire_sw_spi, u8x8_avr_gpio_and_delay);

        u8g2_InitDisplay(u8g2);

        u8g2_SetPowerSave(u8g2, 0);

        u8g2_ClearBuffer(u8g2);

}

class u8g2_class

{

  public:

  u8g2_t u8g2;

  void u8g2_init()

  {

    u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_4wire_sw_spi, u8x8_avr_gpio_and_delay);

        u8g2_InitDisplay(&u8g2);

        u8g2_SetPowerSave(&u8g2, 0);

        u8g2_ClearBuffer(&u8g2);

  }

  void sendBuffer(void) { u8g2_SendBuffer(&u8g2); }

  void clearBuffer(void) { u8g2_ClearBuffer(&u8g2); }   

  u8g2_uint_t drawGlyph(u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { return u8g2_DrawGlyph(&u8g2, x, y, encoding); }   

  u8g2_uint_t drawGlyphX2(u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { return u8g2_DrawGlyphX2(&u8g2, x, y, encoding); }   

  void setColorIndex(uint8_t color_index) { u8g2_SetDrawColor(&u8g2, color_index); }

  void setFont(const uint8_t  *font) {u8g2_SetFont(&u8g2, font); }

  void setFontMode(uint8_t  is_transparent) {u8g2_SetFontMode(&u8g2, is_transparent); }

      void setBitmapMode(uint8_t is_transparent)

      { u8g2_SetBitmapMode(&u8g2, is_transparent); }

    void drawBitmap(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t cnt, u8g2_uint_t h, const uint8_t *bitmap)

      { u8g2_DrawBitmap(&u8g2, x, y, cnt, h, bitmap); }

    void drawXBM(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap)

      { u8g2_DrawXBM(&u8g2, x, y, w, h, bitmap); }

    void drawXBMP(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap)

      { u8g2_DrawXBMP(&u8g2, x, y, w, h, bitmap); }

};

//创建线程

void hardware_init(){

  xTaskCreate(emo_class,"emo",256,NULL,4,NULL);

  vTaskDelete(NULL);

}

uint32_t snid;

extern "C" uint8_t myfont1[];

u8g2_class u8g2c;

void emo_class()

{

  int draw_color = 1;

  u8g2c.setFont(myfont1);

  u8g2c.setColorIndex(draw_color);

  while(1)

    { int k = 0;

      for(int i = 0;i<72;i++)

      {

       

       

        u8g2c.clearBuffer();

        u8g2c.drawGlyph(34,60,65+k%71);

        u8g2c.sendBuffer();

        k = k+1;

        delay(100);

      }

  }

   vTaskDelete(NULL);

}

void weather_class(void)

{

//天气

  int draw_color = 1;

  u8g2c.setColorIndex(draw_color);

  u8g2c.setFont(u8g2_font_open_iconic_weather_6x_t);

  while(true)

    { int k = 0;

      for(int i = 0 ;i<5;i ++)

      {

      

          u8g2c.clearBuffer();

          u8g2c.drawGlyph(30,60,65+k%5);

          u8g2c.sendBuffer();

          k = k+1;

          delay(100);

         

       // Serial.print(k);

        k = k+1;

       

      }

    }

}

//{ID:250,keyword:"命令词",ASR:"最大音量",ASRTO:"音量调整到最大"}

//{speak:小美-娇美女声,vol:20,speed:10}

//{playid:10001,voice:鹿唤醒我}

//{playid:10002,voice:我退}

void ASR_CODE()

{

  //emo_tst(&u8g2);

  //{ID:500,keyword:"唤醒词",ASR:"小鹿同学",ASRTO:"我在呢"}

  //{ID:501,keyword:"唤醒词",ASR:"小鹿小鹿",ASRTO:"AI"}

  if(snid == 503){

    luxiaoban_digital_write(0,0);

  }

  //{ID:505,keyword:"命令词",ASR:"请开灯",ASRTO:"灯已打开,亮度为最亮"}

  if(snid == 505){

    luxiaoban_digital_write(0,0);

  }

  //{ID:506,keyword:"命令词",ASR:"关灯",ASRTO:"灯已关闭"}

  if(snid == 506){

    luxiaoban_digital_write(0,1);

  }

}

void setup()

{

  Serial.begin((9600));

//u8g2 初始化

//      u8g2Init(&u8g2);

  u8g2c.u8g2_init();

              

        xTaskCreate(hardware_init,"hardware_init",256,NULL,100,NULL);

       

}

asrpro U8G2 SPI

下载U8G2
安装VS CODE
项目在VSCODE中打开


下载U8G2源码,复制U8G2->CSRC下所有文件到 天问Block\asrpro\asr_pro_sdk\U8G2(新建文件平)

引脚定义 PA

VCC->3.3 GND ->GND  

#define MOSI  5
#define SCK 6
#define DC 3
#define CS 2


1将U8G2 CSRC下所有文件复制到asr_pro_sdk\U8G2

//U8G2       

source-file: U8G2/u8g2lib.cpp

source-file: U8G2/u8g2_bitmap.c

source-file: U8G2/u8g2_box.c

source-file: U8G2/u8g2_buffer.c

source-file: U8G2/u8g2_button.c

source-file: U8G2/u8g2_circle.c

source-file: U8G2/u8g2_cleardisplay.c

source-file: U8G2/u8g2_d_memory.c

source-file: U8G2/u8g2_d_setup.c

source-file: U8G2/u8g2_font.c

source-file: U8G2/u8g2_fonts.c

source-file: U8G2/u8g2_hvline.c

source-file: U8G2/u8g2_input_value.c

source-file: U8G2/u8g2_intersection.c

source-file: U8G2/u8g2_kerning.c

source-file: U8G2/u8g2_line.c

source-file: U8G2/u8g2_ll_hvline.c

source-file: U8G2/u8g2_message.c

source-file: U8G2/u8g2_polygon.c

source-file: U8G2/u8g2_selection_list.c

source-file: U8G2/u8g2_setup.c

source-file: U8G2/u8x8lib.cpp

source-file: U8G2/u8x8_8x8.c

source-file: U8G2/u8x8_byte.c

source-file: U8G2/u8x8_cad.c

source-file: U8G2/u8x8_capture.c

source-file: U8G2/u8x8_debounce.c

source-file: U8G2/u8x8_display.c

source-file: U8G2/u8x8_d_ssd1306_128x64_noname.c

source-file: U8G2/u8x8_fonts.c

source-file: U8G2/u8x8_gpio.c

source-file: U8G2/u8x8_input_value.c

source-file: U8G2/u8x8_message.c

source-file: U8G2/u8x8_selection_list.c

source-file: U8G2/u8x8_setup.c

source-file: U8G2/u8x8_string.c

source-file: U8G2/u8x8_u16toa.c

source-file: U8G2/u8x8_u8toa.c

//header file path.

include-path: U8G2

完整的source_file.prj文件

 天问Block\asrpro\asr_pro_sdk\projects\offline_asr_sample\project_file\source_file.prj

//source files.

//U8G2       

source-file: U8G2/u8g2lib.cpp

source-file: U8G2/u8g2_bitmap.c

source-file: U8G2/u8g2_box.c

source-file: U8G2/u8g2_buffer.c

source-file: U8G2/u8g2_button.c

source-file: U8G2/u8g2_circle.c

source-file: U8G2/u8g2_cleardisplay.c

source-file: U8G2/u8g2_d_memory.c

source-file: U8G2/u8g2_d_setup.c

source-file: U8G2/u8g2_font.c

source-file: U8G2/u8g2_fonts.c

source-file: U8G2/u8g2_hvline.c

source-file: U8G2/u8g2_input_value.c

source-file: U8G2/u8g2_intersection.c

source-file: U8G2/u8g2_kerning.c

source-file: U8G2/u8g2_line.c

source-file: U8G2/u8g2_ll_hvline.c

source-file: U8G2/u8g2_message.c

source-file: U8G2/u8g2_polygon.c

source-file: U8G2/u8g2_selection_list.c

source-file: U8G2/u8g2_setup.c

source-file: U8G2/u8x8lib.cpp

source-file: U8G2/u8x8_8x8.c

source-file: U8G2/u8x8_byte.c

source-file: U8G2/u8x8_cad.c

source-file: U8G2/u8x8_capture.c

source-file: U8G2/u8x8_debounce.c

source-file: U8G2/u8x8_display.c

source-file: U8G2/u8x8_d_ssd1306_128x64_noname.c

source-file: U8G2/u8x8_fonts.c

source-file: U8G2/u8x8_gpio.c

source-file: U8G2/u8x8_input_value.c

source-file: U8G2/u8x8_message.c

source-file: U8G2/u8x8_selection_list.c

source-file: U8G2/u8x8_setup.c

source-file: U8G2/u8x8_string.c

source-file: U8G2/u8x8_u16toa.c

source-file: U8G2/u8x8_u8toa.c

source-file: U8G2/myfont1.c

source-file: startup/asrpro_init.c

source-file: startup/asrpro_vtable.S

source-file: startup/asrpro_startup.S

source-file: system/asrpro_it.c

source-file: system/asrpro_system.c

source-file: system/platform_config.c

source-file: system/asrpro_handlers.c

source-file: system/baudrate_calibrate.c

source-file: components/assist/debug_time_consuming.c

source-file: components/freertos/croutine.c

source-file: components/freertos/event_groups.c

source-file: components/freertos/list.c

source-file: components/freertos/queue.c

source-file: components/freertos/stream_buffer.c

source-file: components/freertos/tasks.c

source-file: components/freertos/timers.c

source-file: components/freertos/portable/MemMang/heap_3.c

source-file: components/log/ci_log.c

source-file: components/flash_control/flash_control_src/ci_flash_data_info.c

source-file: components/flash_control/flash_control_src/flash_control_inner_port.c

source-file: components/player/audio_play/audio_play_api.c

source-file: components/player/audio_play/audio_play_decoder.c

source-file: components/player/audio_play/audio_play_process.c

source-file: components/player/audio_play/audio_play_os_port.c

source-file: components/player/audio_play/audio_play_device.c

source-file: components/player/audio_play/get_play_data.c

source-file: components/player/adpcm/adpcmdec.c

source-file: components/player/adpcm/adpcm.c

source-file: components/player/m4a/parse_m4a_atom_containers_port.c

source-file: components/player/m4a/parse_m4a_atom_containers.c

source-file: components/player/flacdec/bitstreamf.c

source-file: components/player/flacdec/flacdecoder.c

source-file: components/player/flacdec/tables.c

source-file: components/player/sonic/sonic.c

source-file: components/status_share/status_share.c

source-file: components/ci_nvdm/ci_nvdata_manage.c

source-file: components/ci_nvdm/ci_nvdata_port.c

source-file: components/cmd_info/command_file_reader.c

source-file: components/cmd_info/command_info.c

source-file: components/cmd_info/prompt_player.c

//source-file: components/audio_in_manage/iis_master_rx.c

//source-file: components/audio_in_manage/iis_slave.c

//source-file: components/audio_in_manage/audio_in_manage.c

source-file: components/audio_in_manage/audio_in_manage_inner.c

source-file: components/asr/asr_malloc_port.c

source-file: components/asr/asr_process_callback_decoder.c

source-file: components/asr/asr_process_callback.c

source-file: components/codec_manager/codec_manager.c

source-file: components/codec_manager/codec_manage_inner_port.c

source-file: components/msg_com/voice_module_uart_protocol_g1.c

source-file: components/msg_com/i2c_protocol_module.c

source-file: components/msg_com/voice_module_uart_protocol.c

source-file: components/led/color_light_control.c

source-file: components/led/led_light_control.c

//source-file: components/example/iic_test.c

source-file: components/audio_pre_rslt_iis_out/asrpro_audio_pre_rslt_out.c

source-file: driver/asrpro_chip_driver/src/asrpro_core_eclic.c

source-file: driver/asrpro_chip_driver/src/asrpro_core_timer.c

source-file: driver/asrpro_chip_driver/src/asrpro_dma.c

source-file: driver/asrpro_chip_driver/src/asrpro_codec.c

source-file: driver/asrpro_chip_driver/src/asrpro_pdm.c

source-file: driver/asrpro_chip_driver/src/asrpro_alc.c

source-file: driver/asrpro_chip_driver/src/asrpro_iisdma.c

source-file: driver/asrpro_chip_driver/src/asrpro_core_misc.c

source-file: driver/asrpro_chip_driver/src/asrpro_iis.c

source-file: driver/asrpro_chip_driver/src/asrpro_adc.c

source-file: driver/asrpro_chip_driver/src/asrpro_gpio.c

source-file: driver/asrpro_chip_driver/src/asrpro_iic.c

source-file: driver/asrpro_chip_driver/src/asrpro_pwm.c

source-file: driver/asrpro_chip_driver/src/asrpro_timer.c

source-file: driver/asrpro_chip_driver/src/asrpro_uart.c

//source-file: driver/asrpro_chip_driver/src/asrpro_inner_codec.c

source-file: driver/asrpro_chip_driver/src/asrpro_lowpower.c

source-file: driver/asrpro_chip_driver/src/asrpro_iwdg.c

source-file: driver/asrpro_chip_driver/src/asrpro_spiflash.c

source-file: driver/asrpro_chip_driver/src/asrpro_dtrflash.c

source-file: driver/boards/board.c

source-file: driver/boards/board_default.c

source-file: utils/dichotomy_find.c

source-file: utils/crc.c

source-file: projects/offline_asr_sample/src/main.c

source-file: projects/offline_asr_sample/src/system_hook.c

source-file: projects/offline_asr_sample/src/system_msg_deal.c

source-file: projects/offline_asr_sample/src/user_msg_deal.c

source-file: projects/offline_asr_sample/src/ci_ssp_config.c

source-file: projects/offline_asr_sample/src/wiring.c

source-file: projects/offline_asr_sample/src/CString/dtostrf.c

source-file: projects/offline_asr_sample/src/CString/itoa.c

source-file: projects/offline_asr_sample/src/CString/HardwareSerial.cpp

source-file: projects/offline_asr_sample/src/CString/Stream.cpp

source-file: projects/offline_asr_sample/src/CString/Print.cpp

source-file: projects/offline_asr_sample/src/CString/WString.cpp

source-file: components/ir_remote_driver/ir_remote_driver.c

source-file: ../asr.cpp

library-file: $(LIBS_PATH)/libasr.a

library-file: $(LIBS_PATH)/libnewlib_port.a

library-file: $(LIBS_PATH)/libfreertos_port.a

library-file: $(LIBS_PATH)/libdsu.a

library-file: $(LIBS_PATH)/libflash_encrypt.a

library-file: $(LIBS_PATH)/libir_data.a

//header file path.

include-path: U8G2

include-path: driver/asrpro_chip_driver/inc

include-path: driver/boards

include-path: driver/third_device_driver/outside_codec

include-path: system

include-path: components/log

include-path: components/assist

include-path: components/freertos/include

include-path: components/freertos/portable/GCC/N307

include-path: components

include-path: components/asr

include-path: components/asr/asr_top

include-path: components/asr/asr_top/asr_top_inc

include-path: components/asr/decoder/decoder_inc

include-path: components/asr/vad_fe

include-path: components/asr/vad_fe/vad_fe_inc

include-path: components/asr/dnn

include-path: components/asr/dnn/dnn_inc

include-path: components/asr/cinn/cinn_inc

include-path: components/asr/npu/npu_inc

include-path: components/asr/nn_and_flash

include-path: components/asr/nn_and_flash/nn_and_flash_inc

include-path: components/fft

include-path: components/msg_com

include-path: components/led

include-path: components/player/audio_play

include-path: components/player/mp3lib/mp3pub

include-path: components/player/aaclib/aacpub

include-path: components/player/flacdec

include-path: components/player/m4a

include-path: components/player/adpcm

include-path: components/status_share

include-path: components/flash_control/flash_control_inc

include-path: components/flash_encrypt

include-path: components/codec_manager

include-path: components/ci_nvdm

include-path: components/cmd_info

include-path: components/sys_monitor

include-path: components/ota

include-path: components/audio_pre_rslt_iis_out

include-path: components/audio_in_manage

include-path: components/assist/SEGGER

include-path: components/assist/SEGGER/config

include-path: components/nuclear_com

include-path: components/audio_pre_rslt_iis_out

include-path: projects/offline_asr_sample/src

include-path: utils

include-path: projects/offline_asr_sample/src

include-path: projects/offline_asr_sample/src/CString

include-path: ../myLib

include-path: components/alg

include-path: components/alg/denoise

include-path: components/alg/beamforming

include-path: components/alg/dereverb

include-path: components/alg/alc_auto_switch

include-path: components/alg/basic_alg

include-path: components/alg/aec

include-path: components/alg/doa

include-path: components/ir_remote_driver

include-path: projects/offline_asr_sample/src/ir_src

U8G2目录位置与内容 

天问Block\asrpro\asr_pro_sdk\U8G2

说明: https://img-blog.csdnimg.cn/b6806dd0da414be8b596185df73c58da.png

​编辑

2 .添加源文件与头文件 
asr_pro_sdk\projects\offline_asr_sample\project_file\source_file.prj

3. asr_pro_sdk\projects\offline_asr_sample\project_file\rebuild.bat在集成终端中打开
运行./rebuild

主程序

#define ST7735_CS_PIN 2

#define ST7735_CS_GPIO_PIN gpio_pin_2

#define ST7735_DC_PIN 3

#define ST7735_DC_GPIO_PIN gpio_pin_3

#define ST7735_RST_PIN 1

#define ST7735_RST_GPIO_PIN gpio_pin_1

#define ST7735_SCK_PIN 6

#define ST7735_SCK_GPIO_PIN gpio_pin_5

#define ST7735_MOSI_PIN 5

#define ST7735_MOSI_GPIO_PIN gpio_pin_6

/* 宏定义 --------------------------------------------------------------------*/

#define MOSI  ST7735_MOSI_PIN

#define SCK ST7735_SCK_PIN

#define DC ST7735_DC_PIN

#define CS ST7735_CS_PIN

//#ifndef _ST7735_H

//#define _ST7735_H

//#include "twen_gfx.h"

#include "asr.h"

#include "setup.h"

#include "myLib/luxiaoban.h"

#include "../U8G2/u8g2.h"

//void delayMicroseconds(uint32_t us);

        volatile uint32_t * _cs_reg = NULL;

        volatile uint32_t * _rst_reg = NULL;

        volatile uint32_t * _dc_reg = NULL;  

        volatile uint32_t * _sck_reg = NULL;

        volatile uint32_t * _t_reg = NULL; 

uint32_t snid;

//SSD1306 回调函数1

u8g2_t u8g2;

extern "C" uint8_t myfont1[]; //��������

void emo_tst(u8g2_t *u8g2)

{

//emo ����

int draw_color = 1;

int k = 0;

  for(int i = 0;i<66;i++)

  {

    k = k+1;

    u8g2_SetDrawColor(u8g2,draw_color);

    u8g2_ClearBuffer(u8g2);

  //u8g2.setFont(u8g2_font_8x13B_tf);

  //u8g2_DrawStr(0,10,num(k));

    u8g2_SetFont(u8g2,myfont1);

    u8g2_DrawGlyph(u8g2,34,60,65+k%71);

    //u8g2.drawGlyphX2(0,0,65+k%45);

    u8g2_SendBuffer(u8g2);

    delay(100);

  }

}

void ssd1306_spi_init()

{

  pinMode(CS,output);

        pinMode(DC,output);

        //pinMode(ST7735_RST_PIN,output);

        pinMode(SCK,output);

        pinMode(MOSI,output);

}

uint8_t u8x8_avr_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)

{

        // Re-use library for delays

        switch(msg)

        {

          //ms

                case U8X8_MSG_DELAY_MILLI:

        delay(1);

      break;

     

      //10 us

      case U8X8_MSG_DELAY_10MICRO:

        delay10us();

      break;

     

      //1 ns

    

           case U8X8_MSG_DELAY_NANO:

        delay1us();

      break;

     

    case U8X8_MSG_DELAY_100NANO:

      delay1us();

      break;

     

               case U8X8_MSG_GPIO_AND_DELAY_INIT:  // called once during init phase of u8g2/u8x8

        ssd1306_spi_init();

                       break;              // can be used to setup pins

               case U8X8_MSG_GPIO_SPI_CLOCK:        // Clock pin: Output level in arg_int

                       if(arg_int)

                               digitalWrite(SCK,1);

                       else

                               digitalWrite(SCK,0);

                       break;

               case U8X8_MSG_GPIO_SPI_DATA:        // MOSI pin: Output level in arg_int

                       if(arg_int)

                               digitalWrite(MOSI,1);

                       else

                               digitalWrite(MOSI,0);

                       break;

               case U8X8_MSG_GPIO_CS:        // CS (chip select) pin: Output level in arg_int

                       if(arg_int)

                               digitalWrite(CS,1);

                       else

                               digitalWrite(CS,0);

                       break;

               case U8X8_MSG_GPIO_DC:        // DC (data/cmd, A0, register select) pin: Output level in arg_int

      if(arg_int)

                               digitalWrite(DC,1);

                       else

                               digitalWrite(DC,0);

                       break;

              

               case U8X8_MSG_GPIO_RESET:     // Reset pin: Output level in arg_int

               default:

                 break;

        }

        return 1;

}

void u8g2Init(u8g2_t *u8g2)

{

  u8g2_Setup_ssd1306_128x64_noname_f(u8g2, U8G2_R0, u8x8_byte_4wire_sw_spi, u8x8_avr_gpio_and_delay);

        u8g2_InitDisplay(u8g2);

        u8g2_SetPowerSave(u8g2, 0);

        u8g2_ClearBuffer(u8g2);

       

}

void draw(u8g2_t *u8g2)

{

        u8g2_ClearBuffer(u8g2);

   u8g2_SetFontMode(u8g2, 1);

   u8g2_SetFontDirection(u8g2, 0);

   u8g2_SetFont(u8g2, u8g2_font_inb24_mf);

   u8g2_DrawStr(u8g2, 0, 20, "U");

   u8g2_SetFontDirection(u8g2, 1);

   u8g2_SetFont(u8g2, u8g2_font_inb30_mn);

   u8g2_DrawStr(u8g2, 21,8,"8");

   u8g2_SetFontDirection(u8g2, 0);

   u8g2_SetFont(u8g2, u8g2_font_inb24_mf);

   u8g2_DrawStr(u8g2, 51,30,"g");

   u8g2_DrawStr(u8g2, 67,30,"\xb2");

   u8g2_DrawHLine(u8g2, 2, 35, 47);

   u8g2_DrawHLine(u8g2, 3, 36, 47);

   u8g2_DrawVLine(u8g2, 45, 32, 12);

   u8g2_DrawVLine(u8g2, 46, 33, 12);

   u8g2_SetFont(u8g2, u8g2_font_4x6_tr);

   u8g2_DrawStr(u8g2, 1,54,"github.com/olikraus/u8g2");

         u8g2_SendBuffer(u8g2);

         delay(1000);

}

//u8g2_t u8g2;

//{ID:250,keyword:"命令词",ASR:"最大音量",ASRTO:"音量调整到最大"}

//{ID:251,keyword:"命令词",ASR:"中等音量",ASRTO:"音量调整到中等"}

//{ID:252,keyword:"命令词",ASR:"最小音量",ASRTO:"音量调整到最小"}

//{speak:小美-娇美女声,vol:20,speed:10}

//{playid:10001,voice:鹿唤醒我}

//{playid:10002,voice:我退}

void ASR_CODE()

{

  emo_tst(&u8g2);

  //{ID:500,keyword:"唤醒词",ASR:"小鹿同学",ASRTO:"我在呢"}

  //{ID:501,keyword:"唤醒词",ASR:"小鹿小鹿",ASRTO:"AI"}

  //{ID:502,keyword:"唤醒词",ASR:"你好小鹿",ASRTO:"请吩咐"}

  //{ID:503,keyword:"命令词",ASR:"开灯",ASRTO:"灯已打开,亮度为最亮"}

  if(snid == 503){

    luxiaoban_digital_write(0,0);

  }

  //{ID:504,keyword:"命令词",ASR:"打开灯光",ASRTO:"灯已打开,亮度为最亮"}

  if(snid == 504){

    luxiaoban_digital_write(0,0);

  }

  //{ID:505,keyword:"命令词",ASR:"请开灯",ASRTO:"灯已打开,亮度为最亮"}

  if(snid == 505){

    luxiaoban_digital_write(0,0);

  }

  //{ID:506,keyword:"命令词",ASR:"关灯",ASRTO:"灯已关闭"}

  if(snid == 506){

    luxiaoban_digital_write(0,1);

  }

  //{ID:507,keyword:"命令词",ASR:"关闭灯光",ASRTO:"灯光已关闭"}

  if(snid == 507){

    luxiaoban_digital_write(0,1);

  }

  //{ID:508,keyword:"命令词",ASR:"请关灯",ASRTO:"灯已关闭"}

  if(snid == 508){

    luxiaoban_digital_write(0,1);

  }

}

void setup()

{

  Serial.begin((9600));

        u8g2Init(&u8g2);

        draw(&u8g2);

       

        emo_tst(&u8g2);

              

       

       

}

void loop()

{

}

make时生成的文件在 asr_pro_sdk\projects\offline_asr_sample\project_file\build\objs下 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1121231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【RNA folding】RNA折叠算法与生物物理约束

文章目录 RNA折叠RNA folding representation1 DP for simple folds1.1 Nussinov Algorithm objective1.2 energy constraints1.3 The key idea of the algorithm 2 DP for stacking and complex foldsStochastic context free grammars 来自Manolis Kellis教授&#xff08;MIT…

JavaSE入门---掌握抽象类和接口

文章目录 抽象类什么是抽象类&#xff1f;抽象类语法抽象类特性 接口什么是接口&#xff1f;接口语法接口使用接口特性实现多个接口接口间的继承 抽象类 VS 接口Java中的 Clonable 接口Java中的 Object 类 抽象类 什么是抽象类&#xff1f; 在面向对象的概念中&#xff0c;所…

Linux编译器-gcc/g++使用函数库

【Linux】系列文章目录 【Linux】基础常见指令&#xff1a;http://t.csdn.cn/hwLPb 【Linux】基本权限&#xff1a;http://t.csdn.cn/faFZg 【Linux】软件包管理器yum与环境开发工具vim&#xff1a;http://t.csdn.cn/LEqkm 目录 【Linux】系列文章目录 前言 一、gcc选项总…

【C语言】malloc()函数详解(动态内存开辟函数)

一.malloc()函数简介 我们先来看一下cplusplus.com - The C Resources Network网站上malloc()函数的基本信息&#xff1a; 1.函数功能 可以看到,malloc()函数的功能是:向内存申请一块连续可用的空间,并返回指向块开头的指针. 2.函数参数 该函数有1个参数,是: void* malloc (…

关于iterm2的美化

iterm2 美化 笔者公司最近给发了一个新 M1 mac pro&#xff0c;所以一些软件需要重新安装。其中比较麻烦就是iterm2的一个美化工程 &#xff0c; 由于每次安装的效果都不尽相同所以这次写一个博客来记录一下 安装的过程 。 全程高能开始&#xff1a; 使用brew 来安装 iterm2 …

26. 通过 cilium pwru了解网络包的来龙去脉

pwru是一种基于eBPF的工具,可跟踪Linux内核中的网络数据包,并具有先进的过滤功能。它允许对内核状态进行细粒度检查,以便通过调试网络连接问题来解决传统工具(如iptables TRACE或tcpdump)难以解决甚至无法解决的问题。在本文中,我将介绍pwru如何在不必事先了解所有内容的…

C++ 模板类编译前需要实例化

在复习list容器的模拟实现&#xff0c;遇到了模板未实例化导致代码报错的问题&#xff0c;list的模拟实现可以看下面这篇文章&#xff0c;这里就不多赘述了&#xff0c;直接切入正题。Clist模拟http://t.csdnimg.cn/N6BGh现在的情况是我们已经模拟实现了list类&#xff0c;想在…

1024 漏洞综合项目演示(第十七课)

1024 漏洞综合项目演示(第十七课) 一 渗透流程 前期交互&#xff08;Reconnaissance&#xff09;&#xff1a;这是一个信息收集的阶段&#xff0c;黑客或攻击者会收集目标系统或网络的信息&#xff0c;例如域名、IP地址、子网结构、网络拓扑等。 信息收集&#xff08;Informa…

开源博客项目Blog .NET Core源码学习(4:生成验证码)

开源博客项目Blog中的后台管理登录界面中支持输入验证码&#xff08;如下图所示&#xff09;&#xff0c;本文学习并记录项目中验证码的生成及调用方式。   博客项目中调用VerifyCode类生成验证码&#xff0c;该类位于App.Framwork项目中&#xff0c;命名空间为App.Framwork…

[Docker]一.Docker 简介与安装

一、Docker简介与为什么要用 Docker 1.1、Docker 介绍 Docker 是一个跨平台的开源的 应用容器引擎 &#xff0c;诞生于 2013 年初&#xff0c;基于 Go语言 并遵从 Apache2.0 协议开源, Docker 可以把它理解成虚拟机&#xff0c;但是 Docker 和传统虚拟化方式 有所不同 …

玩转视频剪辑全攻略:批量添加上自定义封面的技巧

在进行视频编辑的过程中&#xff0c;我们经常需要为视频添加引人入胜的封面&#xff0c;以吸引观众的注意力。以下是一份详细的全攻略&#xff0c;指导你如何批量添加自定义的视频封面。 首先&#xff0c;你需要在浏览器中搜索并下载“固乔智剪软件”&#xff0c;这是一款功能强…

精通Linux系列第三章:文件系统管理与权限设置(含目录结构思维导图)

文章目录 一、前言二、文件系统概述2.1 文件系统的定义2.2 常见的Linux文件系统2.3 查看当前Linux系统所使用的文件系统2.4 怎么使用特定的文件系统2.5 文件系统的层次结构 三、文件和目录管理3.1 文件和目录的基本概念3.2 创建文件和目录3.3 查看文件和目录信息3.4 复制、移动…

codeforces (C++ Simple Design)

题目&#xff1a; 翻译&#xff1a; 思路&#xff1a; 1、难点在于读题&#xff0c;输入两个数x&#xff0c;k&#xff0c;从x开始递增寻找最小可整除k的数。 代码&#xff1a; #include<iostream> using namespace std; int main() {int x, k;int n;cin >> n;…

使用 OpenGL 渲染会旋转 会变色的三角形(LearnOpenGL P3)

文章目录 前言代码 前言 本文参考文献&#xff0c;侵删&#xff01;LearnOpenGL - 你好&#xff0c;三角形 本文将假设您完成了 OpenGL 的配置&#xff0c;并且使用 VAO、VBO 渲染图形 由于时间问题&#xff0c;代码的详细讲解将在几日内给出~ 代码 #include <glad/glad…

UML类图中各箭头表示总结

UML类图中各箭头表示总结 1、泛化2、实现3、依赖4、关联5、聚合6、组合 在UML类图中&#xff0c;箭头关系是用来表示类之间的关系的。箭头关系的种类有以下几种&#xff1a; 1、泛化 泛化&#xff1a;表示类之间的继承关系。箭头从子类指向父类。箭头&#xff1a;实线空心三角…

【计算机网络】UDP/TCP协议

文章目录 :peach:1 UDP协议:peach:1.1 :apple:UDP协议端格式:apple:1.2 :apple:UDP的特点:apple:1.3 :apple:UDP的缓冲区:apple:1.4 :apple:UDP使用注意事项:apple:1.5 :apple:基于UDP的应用层协议:apple: 2 :peach:TCP协议:peach:2.1 :apple:TCP协议端格式:apple:2.2 :apple:确…

《windows核心编程》第3章 内核对象

一、内核对象简介 1.1 内核对象有哪些 令牌对象 token、事件对象 Event、文件对象 File、文件映射对象 Mapping_File、线程对象 Thread、时钟对象 Timer、线程池对象 ThreadPool、I/O完成端口对象 Completion port、工作对象 job、邮槽对象 mailslot、互斥对象 Mutex、管道对…

Hook原理--逆向开发

今天我们将继续讲解逆向开发工程另一个重要内容--Hook原理讲解。Hook&#xff0c;可以中文译为“挂钩”或者“钩子”&#xff0c;逆向开发中改变程序运行的一种技术。按照如下过程进行讲解 Hook概述Hook技术方式fishhook原理及实例符号表查看函数名称总结 一、Hook概述 在逆…

LeetCode刷题---有效的括号

这里用到了栈的思想 栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说&#xff0c;表尾端称为栈顶&#xff08;top&#xff09;&#xff0c;表头端称为栈低&#xff08;bottom&#xff09;。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除&#xff0c…

生成包含10个随机字母或数字的字符串,然后统计每个字符的出现次数

from random import choices from string import ascii_letters, digitsx .join(choices(ascii_lettersdigits, k10)) d dict() # 创建空字典 for ch in x:d[ch] d.get(ch, 0) 1 # x中有ch字符,个数1,并作为字典的值 print(x) print(d)也可以使用collections模块的defaul…