用鸿蒙开发板读取lm75BD温湿

开发板用的BearPi-HM_Nano,i2c的代码参考的案例B5_basic_i2c_nfc,只修改了I2CTask中的部分代码,代码如下:

static void I2CTask(void)
{
    GpioInit();

    //GPIO_0复用为I2C1_SDA
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA);

    //GPIO_1复用为I2C1_SCL
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL);

    //baudrate: 100kbps
    I2cInit(WIFI_IOT_I2C_IDX_1, 100000);

    I2cSetBaudrate(WIFI_IOT_I2C_IDX_1, 100000);

    printf("I2C wsd Start\n");
    while (1)
    {
        printf("=======================================\r\n");
        printf("***********I2C_WSD_example**********\r\n");
        printf("=======================================\r\n");
        usleep(2000000);

        for (int i = 0; i < 8; ++i)
        {
            // 发送
            WifiIotI2cData bh1750_i2c_data1 = {0};
            uint8_t send_data[1] = {0};
            bh1750_i2c_data1.sendBuf = send_data;
            bh1750_i2c_data1.sendLen = 1;
            I2cWrite(WIFI_IOT_I2C_IDX_1, (0x48 << 1) | i, &bh1750_i2c_data1);

            // 接收
            WifiIotI2cData bh1750_i2c_data = { 0 };
            uint8_t recv_data[2] = { 0 };
            bh1750_i2c_data.receiveBuf = recv_data;
            bh1750_i2c_data.receiveLen = 2;
            int ret = I2cRead(WIFI_IOT_I2C_IDX_1,(0x48<<1)|i,&bh1750_i2c_data); 

            #转换温度
            uint16_t temp = recv_data[0] << 3 | recv_data[1] >> 5;
            float f_temp = temp * 0.125;
            printf("%d: ret = %d, data = %X  %.2f\n", i, ret, f_temp, f_temp);

            usleep(1000000);
        }

        usleep(2000000);

    }
}

地址:lm75bd,为7位地址,高4位为1001b,低3位通过A0,A1,A2三个引脚控制,高电平为1,低电平为0。

温度值:低5位未使用,用高11位表示分辨率为0.125℃的温度(二进制补码),其中最高位为0,表示温度大于零;最高位为1,表示温度小于零。

运行结果如下:

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值