加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

【智能家居挑戰(zhàn)賽】+ 智障小助手之使用RT1010驅動SHT30讀取溫濕度的程序

05/17 08:23
3187
服務支持:
技術交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術大咖們分享疑惑和經(jīng)驗、收獲成長和認同、領取優(yōu)惠和紅包等。

虛擬商品不可退

當前內(nèi)容為數(shù)字版權作品,購買后不支持退換且無法轉移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
放大
電路板圖(3)
相關方案
  • 方案介紹
  • 推薦器件
  • 相關推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

今天先來一篇使用RT1010驅動SHT30讀取溫濕度的程序。

其中通信方式使用的是IIC,框圖如下:

其中命令是16位長度。

比較核心的命令是數(shù)值查詢。發(fā)送指令0x2C06,返回為6字節(jié)的數(shù)組:

1[溫度高八位]

2[溫度第八位]

3[溫度crc校驗]

4[濕度高八位]

5[濕度第八位]

6[濕度crc校驗]

手冊也給出了溫濕度單位轉換方式。

 

IO初始化部分

  IOMUXC_SetPinMux(IOMUXC_GPIO_01_LPI2C1_SDA,1U);
                                       /* GPIO_01 is configured as LPI2C1_SDA */
                                       /* Software Input On Field: Force input path of pad GPIO_01 */
  IOMUXC_SetPinMux(IOMUXC_GPIO_02_LPI2C1_SCL,1U); 
                                       /* GPIO_02 is configured as LPI2C1_SCL */
                                       /* Software Input On Field: Force input path of pad GPIO_02 */
  IOMUXC_SetPinConfig(IOMUXC_GPIO_01_LPI2C1_SDA,0xD8B0U);
                                       /* GPIO_01 PAD functional properties : */
                                       /* Slew Rate Field: Slow Slew Rate
                                          Drive Strength Field: R0/6
                                          Speed Field: fast(150MHz)
                                          Open Drain Enable Field: Open Drain Enabled
                                          Pull / Keep Enable Field: Pull/Keeper Enabled
                                          Pull / Keep Select Field: Keeper
                                          Pull Up / Down Config. Field: 22K Ohm Pull Up
                                          Hyst. Enable Field: Hysteresis Disabled */
  IOMUXC_SetPinConfig(IOMUXC_GPIO_02_LPI2C1_SCL,0xD8B0U);
                                       /* GPIO_02 PAD functional properties : */
                                       /* Slew Rate Field: Slow Slew Rate
                                          Drive Strength Field: R0/6
                                          Speed Field: fast(150MHz)
                                          Open Drain Enable Field: Open Drain Enabled
                                          Pull / Keep Enable Field: Pull/Keeper Enabled
                                          Pull / Keep Select Field: Keeper
                                          Pull Up / Down Config. Field: 22K Ohm Pull Up
                                          Hyst. Enable Field: Hysteresis Disabled */

IIC初始化部分

const lpi2c_master_config_t ACCEL_I2C_masterConfig = {
    .enableMaster            = true,
    .enableDoze              = true,
    .debugEnable             = false,
    .ignoreAck               = false,
    .pinConfig               = kLPI2C_2PinOpenDrain,
    .baudRate_Hz             = 100000,
    .busIdleTimeout_ns       = 0,
    .pinLowTimeout_ns        = 0,
    .sdaGlitchFilterWidth_ns = 0,
    .sclGlitchFilterWidth_ns = 0,
    .hostRequest             = {
    .enable = false, .source = kLPI2C_HostRequestExternalPin, .polarity = kLPI2C_HostRequestPinActiveHigh}};
lpi2c_master_handle_t ACCEL_I2C_masterHandle;

        LPI2C_MasterInit(LPI2C1, &ACCEL_I2C_masterConfig, 60000000UL);
    LPI2C_MasterTransferCreateHandle(LPI2C1, &ACCEL_I2C_masterHandle, NULL, NULL);

IIC讀寫函數(shù)

status_t BOARD_LPI2C_Send(LPI2C_Type *base,
                          uint8_t deviceAddress,
                          uint32_t subAddress,
                          uint8_t subAddressSize,
                          uint8_t *txBuff,
                          uint8_t txBuffSize)
{
    lpi2c_master_transfer_t xfer;

    xfer.flags          = kLPI2C_TransferDefaultFlag;
    xfer.slaveAddress   = deviceAddress;
    xfer.direction      = kLPI2C_Write;
    xfer.subaddress     = subAddress;
    xfer.subaddressSize = subAddressSize;
    xfer.data           = txBuff;
    xfer.dataSize       = txBuffSize;

    return LPI2C_MasterTransferBlocking(base, &xfer);
}

status_t BOARD_LPI2C_Receive(LPI2C_Type *base,
                             uint8_t deviceAddress,
                             uint32_t subAddress,
                             uint8_t subAddressSize,
                             uint8_t *rxBuff,
                             uint8_t rxBuffSize)
{
    lpi2c_master_transfer_t xfer;

    xfer.flags          = kLPI2C_TransferDefaultFlag;
    xfer.slaveAddress   = deviceAddress;
    xfer.direction      = kLPI2C_Read;
    xfer.subaddress     = subAddress;
    xfer.subaddressSize = subAddressSize;
    xfer.data           = rxBuff;
    xfer.dataSize       = rxBuffSize;

    return LPI2C_MasterTransferBlocking(base, &xfer);
}

主函數(shù)

SDK_DelayAtLeastUs(1000*1000, 600*1000*1000);
BOARD_LPI2C_Receive(LPI2C1, 0x44, 0x2C06, 2, sht30_buff, 6);

uint16_t tem = ((sht30_buff[0]<<8) | sht30_buff[1]);//溫度拼接                        
float Temperature= (175.0*(float)tem/65535.0-45.0) ;// T = -45 + 175 * tem / (2^16-1)/*轉換實際溫度*/

uint16_t hum = ((sht30_buff[3]<<8) | sht30_buff[4]);//濕度拼接
float Humidity= (100.0*(float)hum/65535.0);

uint8_t shi = Temperature/10;
uint8_t ge = Temperature - shi*10;
uint8_t sound[] = {'0'+shi, '0'+ge, 'C', ' '};

shi = Humidity/10;
ge = Humidity - shi*10;
uint8_t sound1[] = {'0'+shi, '0'+ge, '%', 'r', 'n'};

LPUART_WriteBlocking(LPUART1, sound, sizeof(sound) / sizeof(sound[0]));
LPUART_WriteBlocking(LPUART1, sound1, sizeof(sound1) / sizeof(sound1[0]));

效果

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
AT86RF215-ZUR 1 Microchip Technology Inc IC RF TXRX 802.15.4/ISM 48-VFQFN
$6.36 查看
ECS-3951M-1000-BN-TR 1 ECS International Inc Oscillator, 1.8MHz Min, 125MHz Max, 100MHz Nom,

ECAD模型

下載ECAD模型
$32.94 查看
HFBR-24E2Z 1 Foxconn Receiver, 792nm Min, 865nm Max, SC Connector, Through Hole Mount, ROHS COMPLIANT, PACKAGE-8
$30.25 查看

相關推薦

電子產(chǎn)業(yè)圖譜