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

【年中粉丝节】 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;
}
) `& O' O8 c5 J% E
最后在主程序调用和显示即可:
int main(void)
{
  /* USER CODE BEGIN 1 */
        float TEM[1]={0};
        uint8_t HUM[1]={0};
  /* USER CODE END 1 */

  c2 V5 N# q! s  B8 ?
  /* MCU Configuration--------------------------------------------------------*/

; P: v, k- I* t7 Z9 Y
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
) M! r: f* V; ]: _
  /* USER CODE BEGIN Init */

' b, I9 L9 L( H9 Y; j5 [
  /* USER CODE END Init */
: P1 |3 d# s, p( R  X( r7 i" ?
  /* Configure the system clock */
  SystemClock_Config();
) s. R- \8 s7 r5 }0 q) s$ J7 s
  /* USER CODE BEGIN SysInit */
$ J- s6 K5 b; U" G
  /* USER CODE END SysInit */

6 ~) O8 {% y0 T
  /* 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();

/ Z; e( @! c' U) T
        AHT10Init();                        //IIC初始化
//          AHT10Reset();
  /* USER CODE END 2 */
1 P- [7 r, S! v" {( F+ G0 y) t$ t
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
# {. p+ T, t! j' Z, \
    /* USER CODE BEGIN 3 */

9 v! p& g  f( t. [
        //温度:
        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();
' X: j9 }% V0 a7 o8 Y$ |
        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 */
}
+ E' m! l  L; V  W; [4 l" r
下面是实测图:
QQ截图20210626180502.png 6 I4 T, E8 w8 F! U( }, X, p" D
如果对程序有兴趣的可以留言,HAL库的程序确实有点大,传不上来。
分享结束!年中给日天添把火!!!

9 w! q( A2 k! t. E" f) m8 t2 ]! Z! I( e1 D5 G
收藏 评论1 发布时间:2021-6-26 18:09

举报

1个回答
xudongqiang 回答时间:2021-6-26 18:13:45
为什么截图有些显示不出来% W7 ~9 i/ w+ f  J: [

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版