606|1

46

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【NUCLEO-WB09KE测评】三、IIC获取温度 [复制链接]

本帖最后由 dvacos 于 2024-9-26 16:29 编辑
一、引脚确认
 
二、Cube Mx配置
选定IIC IO
使能后直接使用默认配置即可(传感器的IIC速率是100-400K均可)
 
三、 初步验证
生成代码后IIC已经初始化完毕,所以添加代码测试即可。
添加以下代码
不接传感器,严重IIC波形可以正常发送
接上传感器后,整个发送数据,并且每次都有ACK
添加读代码
如图,地址会自动加一,传感器已经有ACK了
以上读写驱动验证完毕
 
四、 传感器简介
AHT30是一款高性能的温湿度传感器,由广州奥松电子股份有限公司生产。它具有以下特点:
低功耗:设计用于低功耗运行,有助于延长设备的电池寿命。
高精度:能够提供准确的温度和湿度数据。
数字输出:通过I²C接口进行数字信号输出,标准I²C格式。
宽电压支持:工作电压范围为2.2-5.5VDC。
优异的长期稳定性:即使在恶劣的环境下也能保持稳定性能。
响应迅速:能够快速响应环境中温湿度的变化。
抗干扰能力强:采用SMD封装适于回流焊,具有良好的抗干扰性能。
AHT30传感器广泛应用于智能家居、消费电子、医疗、汽车、工业、气象等领域,例如暖通空调、除湿器和冰箱等家电产品,测试和检测设备及其他相关温湿度检测控制产品。
 
五 、驱动传感器
计算出来的温度出错
C语言实验后,温度正确,修改代码
修改代码后,读到正确温度!!
 
代码
#define aht30_addr 0x38<<1


void write_aht30(uint8_t *data_buf,uint8_t len){    
  HAL_I2C_Master_Transmit(&hi2c1,aht30_addr,data_buf,len,100);     
    
}


void read_aht30(uint8_t *data_buf,uint8_t len){
  HAL_I2C_Master_Receive(&hi2c1,aht30_addr,data_buf,len,100);     
}


void aht30_get_data(void){
    uint8_t read_back_data[8]={0x0};
    
    read_aht30(read_back_data,sizeof(read_back_data));   
    LOG("\r");
    
    for(int i=0;i<8;i++){

        LOG(",0x%02x",read_back_data[i]);
    }
    LOG("\r");
    
    double temp=0;
    unsigned long data32;
    data32 =  ((int32_t)(read_back_data[3]&0x0F) << 16) | ((int32_t)read_back_data[4] << 8) | ((int32_t)read_back_data[5]);

 
    temp=(data32*200)/1048576-50;
    LOG("temp %X  %.3f",data32,temp);
}


void aht30_init(void){
    uint8_t init_data[]={0xAC,0x33,0x00};
    
    write_aht30(&init_data[0],3);          
}


int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* Configure the peripherals common clocks */
  PeriphCommonClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_I2C1_Init();
  /* USER CODE BEGIN 2 */
  uint8_t str[] = "Hello eeworld! Hello NUCLEO-WB09KE!\r\n";
  HAL_UART_Transmit( &huart1, ( uint8_t * )str, sizeof( str ) - 1, 100 );
  
//  uint8_t init_data[]={0xAC,0x33,0x00};
//  HAL_I2C_Master_Transmit(&hi2c1,aht30_addr,init_data,3,100);    


//  HAL_Delay(150);
//  
//  uint8_t read_back_data[8]={0x0};
//  HAL_I2C_Master_Receive(&hi2c1,aht30_addr,read_back_data,8,100);     


  aht30_init();
  HAL_Delay(150);
  aht30_get_data();

}

 

 
开发板+传感器

此帖出自RF/无线论坛

最新回复

计算出来的温度出错后面修改就完全读出正确的,看来是已经掌握掌握了   详情 回复 发表于 2024-9-29 07:33
点赞 关注
 

回复
举报

6628

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

计算出来的温度出错后面修改就完全读出正确的,看来是已经掌握掌握了

此帖出自RF/无线论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表