CH573F-AHT10

目录

一、裸机实现温度检测

 二、RCT---定时唤醒


一、裸机实现温度检测

参考:

【沁恒RISC-V内核 CH582】AHT10 - 国产芯片交流 - 电子工程世界-论坛

头文件改成57系列即可:

 CH573F调试笔记 一 之初尝 | (gitee.io)

CH573 CH582 CH579外设UART例程讲解(更改打印串口) - WCH蓝牙应用分享 - 博客园 (cnblogs.com)

 二、RCT---定时唤醒

        采用3个纽扣电池供电,开启内部DC-DC,开始睡眠模式,8秒RTC唤醒LLED闪烁一次指示在工作AHT10检测20次,不超过报警温度再次睡眠,超设定温度值LED闪烁,待温度恢复。

#include "CH57x_common.h"
#include "AHT10.h"

#define  TEST_DEBUG (0)
#define  CHECK_NUM (20)
#define  ALARM_TEMP (40)

/*********************************************************************
 * @fn      DebugInit
 *
 * @brief   调试初始化
 *
 * @return  none
 */
void DebugInit(void)
{
    GPIOPinRemap(ENABLE, RB_PIN_UART0);
    GPIOA_SetBits(GPIO_Pin_14);
    GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA);
    UART0_DefInit();
}
/*********************************************************************
 * @fn      RTCInit
 *
 * @brief   RTC设置
 *
 * @return  none
 */
void RTCInit(void)
{

    RTC_InitTime(0, 0, 0, 0, 0, 0);
    RTC_TMRFunCfg(Period_8_S);
    PFIC_EnableIRQ(RTC_IRQn);
    PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_RTC_WAKE, Edge_LongDelay);

    LowPower_Sleep(RB_PWR_RAM16K | RB_PWR_RAM2K); //只保留14+2K SRAM 供电
    HSECFG_Current(HSE_RCur_100);                 // 降为额定电流(低功耗函数中提升了HSE偏置电流)

}

/*********************************************************************
 * @fn      GPIOInit
 *
 * @brief   GPIO设置
 *
 * @return  none
 */
void GPIOInit(void)
{
    GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
    GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA);    //LED
    GPIOB_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA);    //POWER
    GPIOB_SetBits(GPIO_Pin_12);


    GPIOA_ResetBits(GPIO_Pin_12);
    DelayMs(100);
    GPIOA_SetBits(GPIO_Pin_12);
}
/*********************************************************************
 * @fn      main
 *
 * @brief   主函数
 *
 * @return  none
 */
__attribute__((section(".highcode")))
int main()
{

    float temperate;
    uint8_t humidity;
    uint8_t var;
    SetSysClock(CLK_SOURCE_PLL_48MHz);
    PWR_DCDCCfg(ENABLE);
    /* 配置串口调试 */
    LClk32K_Select(Clk32K_LSI);//启用内部32K
    R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
    R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
    R8_CK32K_CONFIG |= RB_CLK_INT32K_PON;
    R8_SAFE_ACCESS_SIG = 0;

    //LED
    GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA);
    GPIOA_ResetBits(GPIO_Pin_12);
    DelayMs(100);
    GPIOA_SetBits(GPIO_Pin_12);
    DelayMs(100);
    GPIOA_ResetBits(GPIO_Pin_12);
    DelayMs(100);
    GPIOA_SetBits(GPIO_Pin_12);

    while(1){
        GPIOInit();
        AHT10Init();
#if ( TEST_DEBUG == 1 )
        DebugInit();
        PRINT("wake\n");
#endif
        for (var = 0; var < CHECK_NUM; ++var)
        {
            AHT10ReadData(&temperate,&humidity);
            while(temperate > ALARM_TEMP){
            AHT10ReadData(&temperate,&humidity);
            DelayMs(100);
            GPIOA_InverseBits(GPIO_Pin_12);
#if ( TEST_DEBUG == 1 )
            PRINT("temperate:%.1f\n",temperate);
#endif
            }
#if ( TEST_DEBUG == 1 )
            PRINT("temperate:%.1f\n",temperate);
#endif
        }
        GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
        GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
        RTCInit();
    }
}

/*********************************************************************
 * @fn      RTC_IRQHandler
 *
 * @brief   RTC中断函数
 *
 * @return  none
 */
__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void RTC_IRQHandler(void)
{

    if(RTC_GetITFlag(RTC_TMR_EVENT)){
        RTC_ClearITFlag(RTC_TMR_EVENT);
#if ( TEST_DEBUG == 1 )
        UINT16 py; UINT16 pmon; UINT16 pd; UINT16 ph; UINT16 pm; UINT16 ps;
        RTC_GetTime(&py,&pmon,&pd,&ph,&pm,&ps);
        printf("%dS\r\n",ps);
#endif
    }
}

8秒唤醒检测

超温闪烁

参考文章:

CH579 CH573 CH582 RTC唤醒唤醒操作 - debugdabiaoge - 博客园 (cnblogs.com)

沁恒CH582F sleep模式RTC唤醒_做了不一定能实现但不做一定不会实现的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AHT10是一种温湿度传感器,可以通过MQTT协议进行数据传输。 AHT10温湿度传感器是一种数字式的环境传感器,可以测量周围环境的温度和湿度。它通过I2C总线与微控制器进行通信,提供高精度的温湿度数据。有了AHT10,我们可以实时监测室内外的温湿度变化,用于自动化控制、气象观测、智能家居等领域。 MQTT是一种轻量级的发布订阅消息传输协议,它适用于物联网设备之间的通信。MQTT协议使用发布者(Publisher)和订阅者(Subscriber)之间的发布/订阅模式,实现设备间的即时通信,具有低带宽和低功耗的特点。通过使用MQTT协议,我们可以将AHT10传感器采集到的温湿度数据发送到云平台或其他设备上,实现大规模分布式的温湿度数据监测和分析。 在使用AHT10时,我们可以将其与MQTT协议结合使用,将传感器获得的温湿度数据通过MQTT消息传输到目标设备。首先,我们需要将AHT10与微控制器连接,并编写相应的代码,用于读取传感器数据并通过MQTT协议进行发布。然后,我们需要配置MQTT服务器的连接参数,包括服务器地址、端口号、用户名密码等信息。最后,我们可以通过发布订阅模式,将AHT10传感器的数据发布到指定的主题(topic)上,订阅者可以通过订阅相应的主题来接收传感器数据。 总之,AHT10与MQTT协议的结合可以实现温湿度数据的采集、传输和监测,为我们提供及时准确的环境信息,为智能化应用和决策提供了重要的基础数据。 ### 回答2: AHT10是一种温湿度传感器,而MQTT是一种消息传输协议。 AHT10是一种数字温湿度传感器,具有高精度和快速响应的特点。它可以测量环境中的温度和湿度,并将数据以数字信号的形式输出。与传统的模拟传感器相比,AHT10具有更好的稳定性和准确性。 MQTT是一种轻量级的消息传输协议,被广泛应用于物联网(IoT)领域。它基于发布-订阅模式,支持低带宽、高延迟和不稳定网络环境下的消息传输。MQTT使用消息代理(broker)作为中介,实现设备之间的通信和数据的传输。 将AHT10和MQTT结合起来,可以实现温湿度数据的实时监测和传输。AHT10传感器可以测量环境中的温度和湿度,并将数据发送给连接到同一MQTT代理的设备。该设备可以订阅AHT10传感器的数据,并对数据进行处理、存储或进一步传输。通过使用MQTT协议,温湿度数据可以实时传输到云平台,以便进行远程监控和数据分析。 总结来说,AHT10和MQTT共同构成了温湿度监测与数据传输的解决方案。AHT10传感器负责实时采集环境温湿度数据,而MQTT协议则用于数据的传输和通信。这种组合在物联网和工业自动化等领域具有重要的应用价值。 ### 回答3: AHT10是一款数字式湿度和温度传感器,具有高精度和低功耗的特点。它采用了微电子机械系统(MEMS)技术,内置了ADC和温度补偿电路,能够提供准确的湿度和温度测量结果。 MQTT是一种轻量级的消息传递协议,它被广泛应用于物联网领域。通过MQTT协议,设备可以相互通信和传递消息,实现实时监控、数据交换以及远程控制等功能。MQTT协议的特点是简单、灵活、可靠,并且具有较低的带宽和存储开销。 AHT10与MQTT可以结合使用,通过AHT10传感器获取温度和湿度数据,并将数据通过MQTT协议传输到后台服务器或其他设备。这样,我们可以实现对温度和湿度的远程监控和数据分析,以便进行环境控制和决策制定。 需要注意的是,使用AHT10和MQTT时,我们需要进行相关的硬件和软件开发。首先,需要将AHT10传感器与微控制器或物联网设备连接,通过编程读取传感器数据。然后,通过MQTT客户端库将数据打包成MQTT消息,发送到指定的MQTT代理或服务器。接收方可以订阅相关主题,实时获取传感器数据并进行处理。 总之,AHT10和MQTT的结合可以实现对湿度和温度的远程监控和数据传输,为物联网应用提供了强大的支持。这种技术的应用范围广泛,可以适用于农业、工业、家居等各个领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值