0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【英飛凌PSoC 6 RTT開發(fā)板試用】通過軟件和硬件I2C接口獲取數(shù)字溫濕度傳感器SHT30的數(shù)據(jù)

碼工雜記 ? 2023-07-11 09:21 ? 次閱讀

本文將會分別介紹——使用軟件I2C硬件I2C在PSoC開發(fā)板上獲取SHT30數(shù)字溫濕度傳感器的數(shù)據(jù)。本文實驗使用的是4線的SHT30模組,通信接口為I2C,對外僅提供四根線,使用起來簡單、便捷。本文使用的開發(fā)環(huán)境為RT-Thread Studio,設(shè)備上運行的是RT-Thread實時系統(tǒng)。本文主旨在于,介紹如何在PSoC開發(fā)板上使用軟件I2C和硬件硬件I2C驅(qū)動外設(shè)。

如需離線閱讀,可以下載本文的完整pdf版本:

*附件:【英飛凌PSoC 6 RTT開發(fā)板試用】通過I2C接口讀取SHT30傳感器的溫濕度數(shù)據(jù) 28a12ba6538e461da5c07d6ff64279b1.pdf

一、環(huán)境準(zhǔn)備

開始之前,需要準(zhǔn)備實驗所需的硬件和軟件,接下來分別介紹。

1.1 硬件準(zhǔn)備

本次實驗需要用到的硬件有:

1.2 軟件準(zhǔn)備

本次實驗需要使用的軟件主要為:

  • RT-Thread Studio
  • MobaXterm(其他串口調(diào)試工具也可以)

假設(shè)你已經(jīng)成功在電腦上安裝了以上這些軟件。

二、硬件原理分析

2.1 硬件連接

硬件連接分為兩部分,一部分是PC和開發(fā)板,通過USB Type-C線連接;這個沒啥難度,不做過多介紹;需要注意的是,開發(fā)板一端接DAP口;否則無法正常下載程序。

另外一部分是,開發(fā)板和OLED屏幕之間的連接,具體如下表所示:

SHT30模組 開發(fā)板引腳
SCL A0
SDA A1
GND GND
VCC 3V3

開發(fā)板和OLED屏幕之間的硬件連接,如下圖所示:

Untitled

2.2 開發(fā)板原理圖

首先,檢查開發(fā)板原理圖的Arduino接口A0/A1部分:

Untitled

這里只能看到標(biāo)號,看不到主控芯片的引腳名稱。

所以,還需要繼續(xù)搜索這兩個引腳的標(biāo)號,找到主控芯片對應(yīng)的引腳標(biāo)號:

Untitled

對照前面的傳感器與開發(fā)板的連接圖,以及這兩處原理圖,可以知道——傳感器模組I2C引腳和主控芯片直接的連接關(guān)系為:

  • SCL:P10.0
  • SDA:P10.1

2.3 芯片數(shù)據(jù)手冊

《PSoC 6 MCU: CY8C62x8, CY8C62xA Datasheet》文檔的 Pinouts 章節(jié),Table 8. Multiple Alternate Functions 引腳功能服用表,可以查到P10.0和P10.1的功能有:

Untitled

Untitled

可以看到,有scb[1].i2c_scl和scb[1].i2c_sda功能。

也就是說,P10.0和P10.1可以設(shè)置為硬件I2C功能。

三、軟件I2C獲取SHT30數(shù)據(jù)

接下來,將使用RT-Thread Studio創(chuàng)建項目,并通過添加軟件包和修改配置的方式,實現(xiàn)使用軟件I2C獲取SHT30的溫濕度數(shù)據(jù)。

3.1 創(chuàng)建RT-Thread項目

在RT-Thread Studio中,打開“文件”→“新建”→”RT-Thread項目”菜單,如下圖所示:

Untitled

在彈出的創(chuàng)建項目界面中,Project name中填入psoc6_sht30,選中基于開發(fā)板的項目,如下圖所示:

Untitled

點擊“完成”,稍等幾秒鐘,即可創(chuàng)建名為psoc6_sht30的項目。

3.2 添加ssd1306軟件包

創(chuàng)建項目后,雙擊項目資源管理器視圖中,項目下方的“RT-Thread Settings”,主編輯區(qū)如下圖所示:

Untitled

點擊其中的“添加軟件包”,彈出的軟件包搜索界面,如下圖所示:

Untitled

按照圖中標(biāo)注的操作順序,即可將ssd1306軟件包添加到當(dāng)前項目。

添加完成后,主編輯區(qū)如下圖所示:

Untitled

此時,按Ctrl+S快捷鍵,保存對項目配置的修改。如果網(wǎng)絡(luò)通常,則會在控制臺窗口中看到ssd1306軟件包正常下載的日志:

Untitled

這樣,ssd1306軟件包就成功添加到項目中了,位于packages子目錄下:

Untitled

3.3 配置軟件I2C引腳

接下來,在RT-Thread Studio主編輯器,點擊詳細(xì)配置按鈕,按鈕位置如下圖所示:

Untitled

主編輯器將會顯示詳細(xì)配置:

Untitled

切換到“硬件”標(biāo)簽頁,找到“Enable Software I2C”選項,并打開該選項,如下圖所示:

Untitled

接著,打開“使能I2C1 BUS”,并將scl和sda中分別改為80和81,如下圖所示:

Untitled

最后,按Ctrl+S保存對所有配置項的修改。

3.4 編譯和下載程序

首先,點擊工具欄的錘子圖標(biāo),或者按Ctrl+B快捷鍵,觸發(fā)項目構(gòu)建(全部編譯):

Untitled

項目構(gòu)建完成后,可以在控制臺窗口看到生成了elf文件,以及預(yù)計Flash和RAM占用情況:

Untitled

接著,點擊工具欄上的下載圖標(biāo),或者Ctrl+Alt+D快捷鍵,觸發(fā)下載程序二進制文件到開發(fā)板上,如下圖:

Untitled

下載過程中以及下載完成后,控制臺窗都可以看到日志輸出:

Untitled

PS:開始下載之前,需要確認(rèn)開發(fā)板以及和PC正確連接了(開發(fā)板要連在DAP口上,并能夠正常識別)。

3.5 運行和測試程序

為了方便在串口中進行命令控制,運行之前,需要先打開MobaXterm(或者其他串口調(diào)試工具):

Untitled

如上圖所示,選中對應(yīng)的COM號,串口參數(shù)設(shè)置為:

  • 波特率 115200
  • 數(shù)據(jù)位 8
  • 停止位 1
  • 校驗 None
  • 流控 None

之后,點OK確認(rèn)連接。

連接成功后,按開發(fā)板的復(fù)位鍵,可以看到串口連接中輸出:

Untitled

可以看到i2c1成功注冊的日志。

此時輸入help命令并回車:

Untitled

可以看到,有sht3x命令了。

輸入sht3x命令并回車,將會輸出用法提示:

Untitled

可以看到,使用 sht3x probe 加上i2c設(shè)備名稱,可以探測傳感器;

我們先用list device看看有哪些設(shè)備:

Untitled

可以看到i2c1設(shè)備了。

接下來,使用 sht3x probe i2c1 探測設(shè)備:

Untitled

已經(jīng)成功探測到了。

緊接著,使用sht3x read嘗試讀取傳感器溫濕度值:

Untitled

成功讀取到了溫濕度數(shù)據(jù)!

接下來,我把手指放在傳感器上,多讀幾次(上下鍵翻歷史命令,再回車,可以避免重復(fù)復(fù)輸入),應(yīng)該可以看到溫度和濕度都在不斷升高:

Untitled

說明傳感器是正常工作的。

四、硬件I2C獲取SHT30數(shù)據(jù)

前面通過查詢原理圖,我們知道開發(fā)板Arduino接口的A0/A1引腳可以設(shè)置為I2C1功能,接下來將在前面創(chuàng)建的項目的基礎(chǔ)上,修改代碼,實現(xiàn)通過硬件I2C1獲取SHT30的溫濕度數(shù)據(jù)。

4.1 增加硬件I2C1配置和代碼

RT-Thread Studio默認(rèn)創(chuàng)建的項目不支持硬件I2C1,不能實現(xiàn)硬件I2C1驅(qū)動SHT30。因此,需要先添加I2C4配置和代碼,才能進行后續(xù)操作。

首先,修改 board/Kconfig 文件,在config BSP_USING_HW_I2C3之前添加如下代碼行:

config BSP_USING_HW_I2C1
                bool "Enable I2C1 Bus (User I2C)"
                default n
                if BSP_USING_HW_I2C1
                    comment "Notice: P10_0 -- > 80; P10_1 -- > 81"
                    config BSP_I2C1_SCL_PIN
                        int "i2c4 SCL pin number"
                        range 1 113
                        default 80
                    config BSP_I2C1_SDA_PIN
                        int "i2c4 SDA pin number"
                        range 1 113
                        default 81
                endif

接著,修改 libraries/HAL_Drivers/SConscript 文件,找到 src += ['drv_i2c.c'] ,將其前面的條件修改為:

if GetDepend('BSP_USING_HW_I2C1') or GetDepend('BSP_USING_HW_I2C3') or GetDepend('BSP_USING_HW_I2C6'):
    src += ['drv_i2c.c']

最后,修改 libraries/HAL_Drivers/drv_i2c.c 文件,具體修改內(nèi)容為:

--- a/libraries/HAL_Drivers/drv_i2c.c
+++ b/libraries/HAL_Drivers/drv_i2c.c
@@ -11,9 +11,19 @@
 #include "board.h"

 #if defined(RT_USING_I2C)
-#if defined(BSP_USING_HW_I2C3) || defined(BSP_USING_HW_I2C6)
 #include 

+#include "drv_log.h"
+
+#ifndef I2C1_CONFIG
+#define I2C1_CONFIG \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
+    {                                \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
+        .name = "i2c1",              \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
+        .scl_pin = BSP_I2C1_SCL_PIN, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
+        .sda_pin = BSP_I2C1_SDA_PIN, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
+    }
+#endif
+
 #ifndef I2C3_CONFIG
 #define I2C3_CONFIG                  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
     {                                \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
@@ -22,7 +32,7 @@
         .sda_pin = BSP_I2C3_SDA_PIN, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
     }
 #endif /* I2C3_CONFIG */
-#endif
+
 #ifndef I2C6_CONFIG
 #define I2C6_CONFIG                  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
     {                                \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
@@ -34,6 +44,9 @@

 enum
 {
+#ifdef BSP_USING_HW_I2C1
+    I2C1_INDEX,
+#endif
 #ifdef BSP_USING_HW_I2C3
     I2C3_INDEX,
 #endif
@@ -59,6 +72,10 @@ struct ifx_i2c

 static struct ifx_i2c_config i2c_config[] =
     {
+#ifdef BSP_USING_HW_I2C1
+    I2C1_CONFIG,
+#endif
+
 #ifdef BSP_USING_HW_I2C3
         I2C3_CONFIG,
 #endif
@@ -145,8 +162,7 @@ void HAL_I2C_Init(struct ifx_i2c *obj)

 int rt_hw_i2c_init(void)
 {
-    rt_err_t result;
-    cyhal_i2c_t mI2C;
+    rt_err_t result = RT_EOK;

     for (int i = 0; i < sizeof(i2c_config) / sizeof(i2c_config[0]); i++)
     {
@@ -157,18 +173,18 @@ int rt_hw_i2c_init(void)
         i2c_objs[i].mI2C_cfg.address = 0;
         i2c_objs[i].mI2C_cfg.frequencyhal_hz = (400000UL);

-        i2c_objs[i].mI2C = mI2C;
-
         i2c_objs[i].i2c_bus.ops = &i2c_ops;

         HAL_I2C_Init(&i2c_objs[i]);

         result = rt_i2c_bus_device_register(&i2c_objs[i].i2c_bus, i2c_config[i].name);
         RT_ASSERT(result == RT_EOK);
+
+        LOG_I("Hardware I2C device %s registered!", i2c_config[i].name);
     }

     return 0;
 }
 INIT_DEVICE_EXPORT(rt_hw_i2c_init);

-#endif /* defined(BSP_USING_I2C1) || defined(BSP_USING_I2C2) */
+#endif /* defined(RT_USING_I2C) */

4.1 修改硬件I2C1配置

首先,打開RT-Thread Settings的詳細(xì)配置,切換到硬件標(biāo)簽頁,關(guān)閉“Enable Software I2C Bus”配置項,如下圖所示:

Untitled

接著,打開“Enable Hardware I2C Bus”配置項,再打開其中的“Enable I2C4 Bus (Arduino I2C)”配置項,如下圖所示:

Untitled

完成修改后,按Ctrl+S保存配置。

4.2 編譯、下載、運行

重新Ctrl+B編譯,Ctrl+Alt+D下載,按RESET鍵復(fù)位之后,按RESET鍵重啟系統(tǒng),可以看到,硬件I2C驅(qū)動代碼中添加的日志已經(jīng)正常輸出了。

Untitled

再次運行 list device ,可以看到:

Untitled

類似的,這次也可以讀到溫濕度值:

Untitled

把手放在傳感器上,多讀幾次,也可以看到溫度升高:

Untitled

說明我們修改的硬件I2C代碼也可以正常工作了。

文章就到這里,感謝閱讀,下次再會~

五、參考鏈接

  1. RTT PSoC開發(fā)板原理圖:IFX-PSoC6-RT-Thread-sch.pdf (gitee.com)
  2. CY8C624A 芯片數(shù)據(jù)手冊:Infineon-PSOC_6_MCU_CY8C62X8_CY8C62XA-DataSheet-v18_00-EN.pdf
  3. CY8C624A 架構(gòu)參考手冊: Infineon-PSoC_6_MCU_CY8C6xx8_CY8C6xxA_Architecture_Technical_Reference_Manual_(TRM)-AdditionalTechnicalInformation-v08_00-EN.pdf
  4. CY8C624A 寄存器參考手冊: Infineon-PSoC_6_MCU_CY8C62x8_CY8C62xA_Registers_Technical_Reference_Manual-AdditionalTechnicalInformation-v06_00-EN.pdf
  5. Cypress HAL接口參考: Redirecting to Infineon GitHub (cypresssemiconductorco.github.io)
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 英飛凌
    +關(guān)注

    關(guān)注

    66

    文章

    2094

    瀏覽量

    137774
  • 單片機
    +關(guān)注

    關(guān)注

    6022

    文章

    44375

    瀏覽量

    628280
  • PSoC
    +關(guān)注

    關(guān)注

    12

    文章

    170

    瀏覽量

    91579
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1452

    瀏覽量

    122233
  • 溫濕度傳感器
    +關(guān)注

    關(guān)注

    5

    文章

    562

    瀏覽量

    35555
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4768

    瀏覽量

    96150
  • RTT
    RTT
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    16986
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1239

    瀏覽量

    39425
收藏 人收藏

    評論

    相關(guān)推薦

    新人發(fā)帖問關(guān)于i2c溫濕度傳感器SHT20在藍(lán)牙協(xié)議棧的問題

    接引用了命令,原諒我基礎(chǔ)不夠,把代碼一層一層看下去,后面看的不很明白,往下就是i2c接口的東西,看的似懂非懂的。 我自己的想法是自己通過換一個i2c
    發(fā)表于 11-28 22:51

    SHT30溫濕度傳感器的51程序

    SHT30溫濕度傳感器的51程序
    發(fā)表于 05-16 22:22

    ROC-RK3308-CC開發(fā)實例總結(jié)-SHT30溫濕度模塊調(diào)試

    sht30是盛世瑞恩出產(chǎn)的一款溫濕度傳感器,去年小米發(fā)布的一款溫濕度測量筆用的也是這款傳感器。關(guān)于這款
    發(fā)表于 01-05 16:13

    SHT21數(shù)字溫濕度傳感器

    型號:SHT21名稱:數(shù)字溫濕度傳感器數(shù)據(jù)總線:I2C資料包括詳細(xì)的
    發(fā)表于 02-08 10:59

    如何快速設(shè)計一款溫濕度產(chǎn)品原型(MCU接入)

    三明治開發(fā)板溫濕度傳感套件主要包含:溫濕度傳感器功能,板載
    發(fā)表于 06-27 11:00

    【DFRobot TinkerNode NB-IoT 物聯(lián)網(wǎng)開發(fā)板試用連載】通過I2C接口讀取溫濕度傳感器

    `TinkerNode提供了一組I2C接口,通過I2C接口可以完成設(shè)備參數(shù)獲取。1、
    發(fā)表于 08-24 08:19

    怎樣去使用基于AVR的SHT30溫濕度傳感器

    怎樣去使用基于AVR的SHT30溫濕度傳感器SHT30溫濕度傳感器的軟
    發(fā)表于 09-23 06:58

    【合宙Air820開發(fā)板試用體驗】SHT30溫濕度傳感器

    。SHT30我看了一下源碼,I2C時序都給免了,我都沒改啥,API獲取數(shù)據(jù),往服務(wù)里扔就完事了。--- 模塊功能:
    發(fā)表于 12-30 22:42

    【1024平頭哥開發(fā)套件開發(fā)體驗】CB6201/W800開發(fā)板串口讀取溫濕度傳感器SHT30數(shù)據(jù)

    本帖最后由 HonestQiao 于 2022-1-16 17:13 編輯 我們平時使用的SHT30溫濕度傳感器,一般都是I2C接口
    發(fā)表于 01-16 17:02

    如何使用STM32CubeMX配置STM32L431RCT6硬件I2C外設(shè)

    本篇詳細(xì)的記錄了如何使用STM32CubeMX配置STM32L431RCT6硬件I2C外設(shè),讀取SHT30溫濕度
    發(fā)表于 02-09 07:08

    SHT30溫濕度模塊怎么使用

    的STH30一般是用IIC(I2C)通信使用的,所以我們打開一個IIC通道,IIC默認(rèn)配置就可以了。4、因為我們需要看見她的效果是什么,我開了一個串口,所有數(shù)據(jù)通過串口打印出來。5、然后我們配置我的工程
    發(fā)表于 02-15 06:28

    dfrobot SHT30模擬溫濕度傳感器簡介

    SHT30高精度溫濕度測量,內(nèi)部自動校準(zhǔn),線性模擬電壓輸出
    的頭像 發(fā)表于 01-07 10:45 ?1.7w次閱讀
    dfrobot <b class='flag-5'>SHT30</b>模擬<b class='flag-5'>溫濕度</b><b class='flag-5'>傳感器</b>簡介

    溫濕度傳感器SHT30參考代碼資料

    溫濕度傳感器SHT30參考代碼資料
    發(fā)表于 08-30 16:40 ?36次下載

    【STM32Cube_15】使用硬件I2C讀取溫濕度傳感器數(shù)據(jù)SHT30

    本篇詳細(xì)的記錄了如何使用STM32CubeMX配置STM32L431RCT6硬件I2C外設(shè),讀取SHT30溫濕度
    發(fā)表于 12-05 16:21 ?34次下載
    【STM32Cube_15】使用<b class='flag-5'>硬件</b><b class='flag-5'>I2C</b>讀取<b class='flag-5'>溫濕度</b><b class='flag-5'>傳感器</b><b class='flag-5'>數(shù)據(jù)</b>(<b class='flag-5'>SHT30</b>)

    SHT30溫濕度模塊使用

    的STH30一般是用IIC(I2C)通信使用的,所以我們打開一個IIC通道,IIC默認(rèn)配置就可以了。4、因為我們需要看見她的效果是什么,我開了一個串口,所有數(shù)據(jù)通過串口打印出來。5、然后我們配置我的工程
    發(fā)表于 12-16 16:53 ?71次下載
    <b class='flag-5'>SHT30</b><b class='flag-5'>溫濕度</b>模塊使用