你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【年中粉丝节】 STM32G491 Nucleo-64开发板+AHT10温湿度传感器,实现温湿度检测并在OLED上显示

[复制链接]
xudongqiang 发布时间:2021-6-26 18:09
【年中粉丝节】+STM32G491 Nucleo-64开发板+AHT10温湿度传感器,实现温湿度检测并在OLED上显示。
年中我也来分享一波自己做过的,凑个热闹,搞点积分!!!
开发板用的是STM32G491 Nucleo-64开发板:
QQ截图20210626173508.png
具体参数如下图:
QQ截图20210626173526.png
传感器是奥松的AHT10,IIC接口:
QQ截图20210626173342.png
显示用的是12864的OLED,也是IIC接口。
下面进入程序配置,打开CUBEMX。选择IIC1跟IIC2还有串口跟LED。
QQ截图20210626173825.png
生成程序后用keil打开,修改逻辑部分:
先是OLED,在之前的标准库的例程上修改一下写函数,其他的基本不变:
QQ截图20210626174124.png
串口修改(没有用到):
QQ截图20210626174306.png
接着是AHT10的,由于硬件IIC没有测试成功,采用的模拟IIC:
/**
brief 检查AHT10读温湿度数据
param *temperature:需要读出的温度数据,float指针类型,精度范围+-0.3C
param *humidity:需要读出的湿度数据,u8指针类型,精度范围+-2RH
return 0 读数据正常 1读数据失败
*/
uint8_t AHT10ReadData(float *temperature,uint8_t *humidity)
{
        uint8_t ack;
        uint32_t SRH=0,ST=0;
        uint8_t databuff[6];
        IIC_Start();
        IIC_Send_Byte(AHT10_WRITE);
        IIC_Wait_Ack();
        IIC_Send_Byte(0xac);
        IIC_Wait_Ack();
        IIC_Send_Byte(0x33);
        IIC_Wait_Ack();
        IIC_Send_Byte(0x00);
        IIC_Wait_Ack();
        IIC_Stop();          
        HAL_Delay(80);//延时一会等待数据读出
        IIC_Start();
        IIC_Send_Byte(AHT10_READ);
        IIC_Wait_Ack();
        ack=IIC_Read_Byte(1);
        if((ack&0x40)==0)
        {
                databuff[0]=IIC_Read_Byte(1);
                databuff[1]=IIC_Read_Byte(1);
                databuff[2]=IIC_Read_Byte(1);
                databuff[3]=IIC_Read_Byte(1);
                databuff[4]=IIC_Read_Byte(0);
                IIC_Stop();
                SRH=(databuff[0]<<12)+(databuff[1]<<4)+(databuff[2]>>4);
                ST=((databuff[2]&0X0f)<<16)+(databuff[3]<<8)+(databuff[4]);
                *humidity=(int)(SRH*100.0/1024/1024+0.5);
                *temperature=((int)(ST*2000.0/1024/1024+0.5))/10.0-50;
                return 0;
        }
        IIC_Stop();       
        return 1;
}
( _$ h# S) p% D4 u( o) c; N6 N
最后在主程序调用和显示即可:
int main(void)
{
  /* USER CODE BEGIN 1 */
        float TEM[1]={0};
        uint8_t HUM[1]={0};
  /* USER CODE END 1 */
4 ]& m" }* v' q. m2 r
  /* MCU Configuration--------------------------------------------------------*/
: o" X3 L7 A9 Z  \  [3 t
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
3 w0 H* B$ h: b) F& I
  /* USER CODE BEGIN Init */

* E9 c% F. n  B$ C
  /* USER CODE END Init */
% A' {8 K, r/ l% n+ h, a1 N" U+ r
  /* Configure the system clock */
  SystemClock_Config();
3 @7 |  J( Z$ l/ r* V3 p; z* ~; ~- S, b
  /* USER CODE BEGIN SysInit */

5 `# E. s/ k( f3 Z2 Z% G
  /* USER CODE END SysInit */

- c; _* _( F+ o, l+ b8 m: Y  m
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_LPUART1_UART_Init();
//  MX_I2C1_Init();
  MX_I2C2_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  OLED_Init();
: J  l% ~- J: R% l6 C
        AHT10Init();                        //IIC初始化
//          AHT10Reset();
  /* USER CODE END 2 */
3 D3 b- j/ x* Q2 @% X( C
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
+ d* L, G* W& ~  L, |. I
    /* USER CODE BEGIN 3 */
7 a8 c1 e( @. U8 p$ Y# X4 b5 Q
        //温度:
        OLED_ShowChinese(0,0,4,16,1);
        OLED_ShowChinese(16,0,5,16,1);
        OLED_ShowChinese(32,0,2,16,1);
        OLED_ShowChinese(48,0,3,16,1);
        OLED_ShowString(64,0,":",16,1);
        OLED_Write_Float(72,0,TEM[0],16,1);
        OLED_ShowChinese(112,0,10,16,1);
        //湿度:
        OLED_ShowChinese(0,20,4,16,1);
        OLED_ShowChinese(16,20,5,16,1);
        OLED_ShowChinese(32,20,11,16,1);
        OLED_ShowChinese(48,20,3,16,1);
        OLED_ShowString(64,20,":",16,1);
        OLED_Write_Int(72,20,HUM[0],16,1);
        OLED_ShowString(112,20,"%",16,1);
        OLED_Refresh();
# s+ Q: N, V" `8 Y" s% ^
        HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
        AHT10ReadData(TEM,HUM);
        printf("TEM=%0.1f,HUM=%d\n",TEM[0],HUM[0]);
        HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}

; m) \( q3 H$ S' G
下面是实测图:
QQ截图20210626180502.png 1 A. ~. a5 {' R, H
如果对程序有兴趣的可以留言,HAL库的程序确实有点大,传不上来。
分享结束!年中给日天添把火!!!
; f/ H3 _9 l7 V: L. D* K$ N- ?
( C3 s! Z+ f4 N, |/ B( F. E7 A& ^
赞 收藏 评论1 发布时间:2021-6-26 18:09

举报

1个回答
xudongqiang 回答时间:2021-6-26 18:13:45
为什么截图有些显示不出来! T+ Z/ g3 U/ Y9 U6 t7 [2 O1 {% y

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版