• [DE0NANO] HC05藍芽模組實現與測試(一)


    本文使用友晶開發的RFS模組[1],此模組的特性如下:

    RFS
    • Wi-Fi, using ESP-WROOM-02 module
    • Bluetooth SPP, using HC-05 module
    • 9-axis sensor: accelerometer,gyroscope,magnetometer
    • Ambient light sensor
    • Humidity and temperature sensor
    • UART to USB
    • 2x6 TMD GPIO Header 

    本篇文章會注重在藍芽模組的控制。

    此RFS_模組是使用HC-05晶片來做藍芽控制。

    其中de0-nano對應RFS模組的腳位配置如下所示:

     1 //              LSENSOR_INT;    // GPIO_0_IN[0]  //              WIFI_RST_n;     // GPIO_0[0]
     2 //              MPU_INT;        // GPIO_0_IN[1]  //              RH_TEMP_I2C_SCL;// GPIO_0[1]
     3 //              RH_TEMP_DRDY_n; // GPIO_0[2]     //              RH_TEMP_I2C_SDA;// GPIO_0[3]
     4 //              MPU_FSYNC;      // GPIO_0[4]     //              LSENSOR_SCL;    // GPIO_0[5]
     5 //              BT_KEY;         // GPIO_0[6]     //              LSENSOR_SDA;    // GPIO_0[7]
     6 //              WIFI_EN;        // GPIO_0[8]     //              MPU_SCL_SCLK;   // GPIO_0[9]
     7 //              WIFI_UART1_RX;  // GPIO_0[10]    //              MPU_SDA_SDI;    // GPIO_0[11]
     8 //              WIFI_UART0_RX;  // GPIO_0[12]    //              WIFI_UART0_TX;  // GPIO_0[13]
     9 //              UART2USB_TX;    // GPIO_0[14]    //              UART2USB_RX;    // GPIO_0[15]
    10 //              BT_UART_RX;     // GPIO_0[16]    //              BT_UART_TX;     // GPIO_0[17]
    11 //              WIFI_UART0_CTS; // GPIO_0[18]    //              WIFI_UART0_RTS; // GPIO_0[19]
    12 //              UART2USB_RTS;   // GPIO_0[20]    //              UART2USB_CTS;   // GPIO_0[21]
    13 //              BT_UART_CTS;    // GPIO_0[22]    //              BT_UART_RTS;    // GPIO_0[23]
    14 //              MPU_CS_n;       // GPIO_0[24]    //              MPU_AD0_SDO;    // GPIO_0[25]
    15 //              TMD_D[2]        // GPIO_0[26]    //              TMD_D[3];       // GPIO_0[27]
    16 //              TMD_D[1]        // GPIO_0[28]    //              TMD_D[0];       // GPIO_0[29]
    17 //              TMD_D[7]        // GPIO_0[30]    //              TMD_D[6];       // GPIO_0[31]
    18 //              TMD_D[5]        // GPIO_0[32]    //              TMD_D[4];       // GPIO_0[33]

     以下是參考友晶範例,修改成DE0-NANO版本。

      1 /*
      2     Tamkang University I.C.LAB.
      3 */
      4 
      5 // ============================================================================
      6 // Revision History:
      7 // ============================================================================
      8 //   Ver.: |Author:   |Mod. Date:    |Changes Made:
      9 //   V1.0  |Shih-An Li|09/01/2017    | HC-05 test
     10 // ============================================================================
     11 
     12 //=======================================================
     13 //  This code is generated by Terasic System Builder
     14 //=======================================================
     15 `default_nettype none
     16 module DE0_Nano(
     17 
     18     //////////// CLOCK //////////
     19     CLOCK_50,
     20 
     21     //////////// LED //////////
     22     LED,
     23 
     24     //////////// KEY //////////
     25     KEY,
     26 
     27     //////////// SW //////////
     28     SW,
     29 
     30     //////////// SDRAM //////////
     31     DRAM_ADDR,
     32     DRAM_BA,
     33     DRAM_CAS_N,
     34     DRAM_CKE,
     35     DRAM_CLK,
     36     DRAM_CS_N,
     37     DRAM_DQ,
     38     DRAM_DQM,
     39     DRAM_RAS_N,
     40     DRAM_WE_N,
     41 
     42     //////////// EPCS //////////
     43     EPCS_ASDO,
     44     EPCS_DATA0,
     45     EPCS_DCLK,
     46     EPCS_NCSO,
     47 
     48     //////////// Accelerometer and EEPROM //////////
     49     G_SENSOR_CS_N,
     50     G_SENSOR_INT,
     51     I2C_SCLK,
     52     I2C_SDAT,
     53 
     54     //////////// ADC //////////
     55     ADC_CS_N,
     56     ADC_SADDR,
     57     ADC_SCLK,
     58     ADC_SDAT,
     59 
     60     //////////// 2x13 GPIO Header //////////
     61     GPIO_2,
     62     GPIO_2_IN,
     63 
     64     //////////// GPIO_0, GPIO_0 connect to GPIO Default //////////
     65     GPIO_0,
     66     GPIO_0_IN,
     67 
     68     //////////// GPIO_1, GPIO_1 connect to GPIO Default //////////
     69     GPIO_1,
     70     GPIO_1_IN 
     71 );
     72 
     73 //=======================================================
     74 //  PARAMETER declarations
     75 //=======================================================
     76 
     77 
     78 //=======================================================
     79 //  PORT declarations
     80 //=======================================================
     81 
     82 //////////// CLOCK //////////
     83 input                       CLOCK_50;
     84 
     85 //////////// LED //////////
     86 output           [7:0]      LED;
     87 
     88 //////////// KEY //////////
     89 input            [1:0]      KEY;
     90 
     91 //////////// SW //////////
     92 input            [3:0]      SW;
     93 
     94 //////////// SDRAM //////////
     95 output          [12:0]      DRAM_ADDR;
     96 output           [1:0]      DRAM_BA;
     97 output                      DRAM_CAS_N;
     98 output                      DRAM_CKE;
     99 output                      DRAM_CLK;
    100 output                      DRAM_CS_N;
    101 inout           [15:0]      DRAM_DQ;
    102 output           [1:0]      DRAM_DQM;
    103 output                      DRAM_RAS_N;
    104 output                      DRAM_WE_N;
    105 
    106 //////////// EPCS //////////
    107 output                      EPCS_ASDO;
    108 input                       EPCS_DATA0;
    109 output                      EPCS_DCLK;
    110 output                      EPCS_NCSO;
    111 
    112 //////////// Accelerometer and EEPROM //////////
    113 output                      G_SENSOR_CS_N;
    114 input                       G_SENSOR_INT;
    115 output                      I2C_SCLK;
    116 inout                       I2C_SDAT;
    117 
    118 //////////// ADC //////////
    119 output                      ADC_CS_N;
    120 output                      ADC_SADDR;
    121 output                      ADC_SCLK;
    122 input                       ADC_SDAT;
    123 
    124 //////////// 2x13 GPIO Header //////////
    125 inout           [12:0]      GPIO_2;
    126 input            [2:0]      GPIO_2_IN;
    127 
    128 //////////// GPIO_0, GPIO_0 connect to GPIO Default //////////
    129 inout           [33:0]      GPIO_0;
    130 input            [1:0]      GPIO_0_IN;
    131 
    132 //////////// GPIO_1, GPIO_1 connect to GPIO Default //////////
    133 inout           [33:0]      GPIO_1;
    134 input            [1:0]      GPIO_1_IN;
    135 
    136 
    137 //=======================================================
    138 //  REG/WIRE declarations
    139 //=======================================================
    140 //////////// GPIO, GPIO connect to RFS - RF and Sensor //////////
    141 
    142 
    143 //              LSENSOR_INT;    // GPIO_0_IN[0]  //              WIFI_RST_n;     // GPIO_0[0]
    144 //              MPU_INT;        // GPIO_0_IN[1]  //              RH_TEMP_I2C_SCL;// GPIO_0[1]
    145 //              RH_TEMP_DRDY_n; // GPIO_0[2]     //              RH_TEMP_I2C_SDA;// GPIO_0[3]
    146 //              MPU_FSYNC;      // GPIO_0[4]     //              LSENSOR_SCL;    // GPIO_0[5]
    147 //              BT_KEY;         // GPIO_0[6]     //              LSENSOR_SDA;    // GPIO_0[7]
    148 //              WIFI_EN;        // GPIO_0[8]     //              MPU_SCL_SCLK;   // GPIO_0[9]
    149 //              WIFI_UART1_RX;  // GPIO_0[10]    //              MPU_SDA_SDI;    // GPIO_0[11]
    150 //              WIFI_UART0_RX;  // GPIO_0[12]    //              WIFI_UART0_TX;  // GPIO_0[13]
    151 //              UART2USB_TX;    // GPIO_0[14]    //              UART2USB_RX;    // GPIO_0[15]
    152 //              BT_UART_RX;     // GPIO_0[16]    //              BT_UART_TX;     // GPIO_0[17]
    153 //              WIFI_UART0_CTS; // GPIO_0[18]    //              WIFI_UART0_RTS; // GPIO_0[19]
    154 //              UART2USB_RTS;   // GPIO_0[20]    //              UART2USB_CTS;   // GPIO_0[21]
    155 //              BT_UART_CTS;    // GPIO_0[22]    //              BT_UART_RTS;    // GPIO_0[23]
    156 //              MPU_CS_n;       // GPIO_0[24]    //              MPU_AD0_SDO;    // GPIO_0[25]
    157 //              TMD_D[2]        // GPIO_0[26]    //              TMD_D[3];       // GPIO_0[27]
    158 //              TMD_D[1]        // GPIO_0[28]    //              TMD_D[0];       // GPIO_0[29]
    159 //              TMD_D[7]        // GPIO_0[30]    //              TMD_D[6];       // GPIO_0[31]
    160 //              TMD_D[5]        // GPIO_0[32]    //              TMD_D[4];       // GPIO_0[33]
    161 
    162 
    163     wire       RESET_N ; 
    164     wire [7:0] BCD_T , BCD_H;  
    165     wire [7:0] POWERUP ; 
    166  
    167 
    168 reg [31:0]      rCnt1s;
    169 reg             rLedg;
    170 //=======================================================
    171 //  Structural coding
    172 //=======================================================
    173 assign  LED[7] = rLedg;
    174 always@(posedge CLOCK_50 or negedge RESET_N) begin
    175     if(!RESET_N) begin
    176         rCnt1s <= 0;
    177         rLedg <= 0;
    178     end
    179     else begin
    180         if(rCnt1s > 50000000) begin
    181             rCnt1s <= 0;
    182             rLedg <= ~rLedg;
    183         end
    184         else begin
    185             rCnt1s <= rCnt1s+1;
    186             rLedg <= rLedg;
    187         end
    188     end
    189 end
    190  
    191     rfsqsys u0 (
    192         .clk_clk                   (CLOCK_50),                   //                clk.clk
    193         .reset_reset_n             (RESET_N),             //              reset.reset_n
    194         .sdram_addr                (DRAM_ADDR),                //              sdram.addr
    195         .sdram_ba                  (DRAM_BA),                  //                   .ba
    196         .sdram_cas_n               (DRAM_CAS_N),               //                   .cas_n
    197         .sdram_cke                 (DRAM_CKE),                 //                   .cke
    198         .sdram_cs_n                (DRAM_CS_N),                //                   .cs_n
    199         .sdram_dq                  (DRAM_DQ),                  //                   .dq
    200         .sdram_dqm                 (DRAM_DQM),                 //                   .dqm
    201         .sdram_ras_n               (DRAM_RAS_N),               //                   .ras_n
    202         .sdram_we_n                (DRAM_WE_N),                //                   .we_n
    203  
    204         .ledg_export               (LED[6:0]),               //               ledg.export
    205         .sw_export                 (SW),                 //                 sw.export
    206         .dramclk_clk               (DRAM_CLK),               //            dramclk.clk
    207         .altpll_0_areset_export    (0),    //    altpll_0_areset.export
    208         
    209         // PIO KEY
    210         .pio_key_external_connection_export(KEY[1]),
    211         .bt_key_external_connection_export(GPIO_0[6]),
    212         //BT_UART
    213         .hc_05_uart_rxd            (GPIO_0[16]),            //         hc_05_uart.rxd
    214         .hc_05_uart_txd            (GPIO_0[17])             //                   .txd
    215         
    216 //        .altpll_0_locked_export    (1),    //    altpll_0_locked.export
    217 //        .altpll_0_phasedone_export (1)  // altpll_0_phasedone.export
    218     );
    219  
    220 //---- RESET ---
    221 assign RESET_N = KEY[0];
    222 
    223 endmodule

     完整檔案請參考下面範例  DE0_Nano_RFSbrd_BT.zip

     操作環境是:

        Quartus 13.0sp1,

        Nios II eclipse 13.0sp1

    系統架構如下:

    我使用NiosII裡面的UART跟RFS版裡的HC-05溝通。

     

    操作步驟如下:

    1. 先把DE0-NANO電源線拔掉。

    2. 按住RFS板上面的BT_KEY鈕不放,之後插上DE0-NANO的下載線,提供DE0-板子跟RFS板電源。

        (注意: 此時的BT板上的藍色LED燈會慢閃,此時會亮2秒暗2秒,表示HC-05進入了AT COMMAND模式,此時就可以放掉BT_KEY了)

    3. 下載 \output\DE0_Nano.sof檔

    4. 打開Nios II Eclipse,載入跟執行 \qsys\software\RFS_BT目錄下的檔案*.c跟\BT資料夾

    5. 下載友晶提供的APP。

    打開APP,點選右上角選項,打開手機藍芽裝置後等待DE0-NANO板連接。

    5.執行NIOS並下載到DE0-NANO板結果如下:

    按0會秀出0, 1,2 三個選項,我們選2。

    Input 0 to show the menu:
    
    0
     0: Show menu.
     1: BT Config.
     2: Enter BT SPP RFCOMM Master mode.
    Input 0 to show the menu:

    接續上圖

      1 Input 0 to show the menu:
      2 
      3 0
      4  0: Show menu.
      5  1: BT Config.
      6  2: Enter BT SPP RFCOMM Master mode.
      7 Input 0 to show the menu:
      8 
      9 2
     10  6: Enter BT SPP RFCOMM Master mode.
     11 HC-05 Master Demo
     12 TX-->AT+ORGL
     13 TX--> AT+ORGL
     14 
     15 RX<--OK
     16  
     17 TX-->AT+INIT
     18 TX--> AT+INIT
     19 
     20 RX<--OK
     21  
     22 TX-->AT+NAME=HC-05
     23 TX--> AT+NAME=HC-05
     24 
     25 RX<--OK
     26  
     27 TX-->AT+UART=115200,0,0
     28 TX--> AT+UART=115200,0,0
     29 
     30 RX<--OK
     31  
     32 TX-->AT+PSWD?
     33 TX--> AT+PSWD?
     34 
     35 RX<--+PSWD:1234
     36  
     37 RX<--OK
     38  
     39 TX-->AT+CLASS=0
     40 TX--> AT+CLASS=0
     41 
     42 RX<--OK
     43  
     44 TX-->AT+CLASS?
     45 TX--> AT+CLASS?
     46 
     47 RX<--+CLASS:0
     48  
     49 RX<--OK
     50  
     51 TX-->AT+ROLE=1
     52 TX--> AT+ROLE=1
     53 
     54 RX<--OK
     55  
     56 TX-->AT+POLAR=1,0
     57 TX--> AT+POLAR=1,0
     58 
     59 RX<--OK
     60  
     61 TX-->AT+INQM=1,9,48
     62 TX--> AT+INQM=1,9,48
     63 
     64 RX<--OK
     65  
     66 TX-->AT+INQ
     67 TX--> AT+INQ
     68 
     69 RX<--+INQ:1002:B5:AB9E55,2010C,FFE4
     70 
     71 RX<--+INQ:90E7:C4:4F1DA2,5A020C,FFBF
     72 
     73 RX<--+INQ:1002:B5:AB9E55,2010C,FFE4
     74 
     75 RX<--+INQ:1002:B5:AB9E55,2010C,FFE4
     76 
     77 RX<--+INQ:1002:B5:AB9E55,2010C,FFE4
     78 
     79 RX<--+INQ:90E7:C4:4F1DA2,5A020C,FFBF
     80 
     81 RX<--+INQ:1002:B5:AB9E55,2010C,FFE4
     82 
     83 RX<--+INQ:90E7:C4:4F1DA2,5A020C,FFBE
     84 
     85 RX<--+INQ:1002:B5:AB9E55,2010C,FFE4
     86 
     87 RX<--OK
     88 
     89 Device[0]:1002,B5,AB9E55
     90 TX-->AT+RNAME?1002,B5,AB9E55
     91 TX--> AT+RNAME?1002,B5,AB9E55
     92 
     93 +RNAME:DESKTOP-GC2UFIB
     94 
     95 Device[1]:90E7,C4,4F1DA2
     96 TX-->AT+RNAME?90E7,C4,4F1DA2
     97 TX--> AT+RNAME?90E7,C4,4F1DA2
     98 
     99 +RNAME:DESKTOP-GC2UFIB
    100 
    101 Please input a number to select the desired device.
    102 For example, input 0 to select first device.
    103 
    104 1
    105 1
    106 TX-->AT+PAIR=90E7,C4,4F1DA2,30
    107 TX--> AT+PAIR=90E7,C4,4F1DA2,30
    108 
    109 RX<--+RNAME:lishyhan01
    110  
    111 RX<--OK
    112  
    113 TX-->AT+BIND=90E7,C4,4F1DA2
    114 TX--> AT+BIND=90E7,C4,4F1DA2
    115 
    116 RX<--OK
    117  
    118 TX--> Hello World!
    119 
    120 RX<--0
    121 RX<--1
    122 RX<--2
    123 RX<--3
    在第89行和95行有找到2個藍芽元件,一個是我電腦的藍芽,一個是手機的藍芽。
    我輸入1 讓DE0-NANO連接手機
    當連接成功後 手機APP畫面會出現輸入BT配對碼視窗,預設密碼是1234
    當手機輸入完後,APP左上角就會出現connect to HC-05成功訊息。
    在APP畫面按LED0,LED1後會再NIOS console視窗出現第120~123行的訊息,表示成功。


     

     --------------------------HC-05燈號說明------------------------------------------------

    1. 在尚未與裝置連線之前,HC-05板子上的LED將快速閃爍

    2. 在與裝置連線成功後,HC-05板子上的LED將每三秒連閃兩次

    3. 進入AT模式,LED將慢速閃爍(兩秒閃爍一次)

     ------------------------------------------------------------------------------------------------

     完整範例檔案下載

    DE0_Nano_RFSbrd_BT.zip

    [1]  RFS module,

  • 相关阅读:
    ruia笔记
    一个有趣的小例子,带你入门协程模块-asyncio
    python标准库之secrets
    转载:(Mac)在bash和zsh配置环境变量path的几种方法
    mac安装mysql8.0的错误
    Mac下的安装 mongodb
    mac 安装zsh教程资料
    mac 报错Root chmod operation not permitted on file
    喝奶粉的宝宝一天喝多少水 奶粉喂养的宝宝每天要喝多少水
    洗碗机耗材:finish 亮碟 产品的选购
  • 原文地址:https://www.cnblogs.com/lishyhan/p/7465092.html
Copyright © 2020-2023  润新知