【已解决】TuYAOS跑电量统计demo,读不到输入电压

Wi-Fi 设备、Wi-Fi 低功耗设备、Wi-Fi BLE 双模设备、Ethernet设备、Ethernet+Wi-Fi设备等
Post Reply
Daan
Posts: 99

你好,我这边跑tuyaos_demo_application_driver里面电量统计的demo,
已经define成TY_EXAMPLE_ELE_ENERGY
#define TY_EXAMPLE_DRIVER TY_EXAMPLE_ELE_ENERGY
用的计量芯片是bl0942,代码里面也都配置成0942配置了,但是还是读不到数据。读到的输入电压还是0 .
附件是日志。麻烦帮确定一下什么原因~ 谢谢

Attachments
电量统计.txt
(9.25 KiB) Downloaded 129 times
yangjie
Posts: 213

Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压

log 中 [01-01 00:00:05 ty E][tdd_energy_monitor_bl0942.c:337] all data check sum error, 175 ,0

这个是串口收到数据但是校验和失败了。请确保和计量芯片连接正确,波特率设置正确。

Daan
Posts: 99

Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压

版本烧录免开发固件是可以读到输入电压的,硬件连接应该没有问题
请问规格书这里的串口1 是否对应的就是
#define EXAMPLE_UART_ID TUYA_UART_NUM_1
这个配置是0 没有问题吧?
#define BL0942_DRV_UART 0

Attachments
22.png
yangjie
Posts: 213

Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压

Daan 2024年 Jan 30日 15:55

版本烧录免开发固件是可以读到输入电压的,硬件连接应该没有问题
请问规格书这里的串口1 是否对应的就是
#define EXAMPLE_UART_ID TUYA_UART_NUM_1
这个配置是0 没有问题吧?
#define BL0942_DRV_UART 0

你用的是 CBU 模组吗?CBU上一般用的串口是烧录的那个口 UART0,UART1 被用来作为 log 输出口使用。波特率设置的多少 4800 吗?

Daan
Posts: 99

Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压

你好,用的是CB2S
串口那里两个 0 和 1 也都试过。
波特率#define UART_DEFAULT_BAUDRATE (9600U) 和4800都测过。
是不是正常就改这几个配置就可以了,没有其它要改的是吧?

yangjie
Posts: 213

Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压

Daan 2024年 Jan 30日 16:04

你好,用的是CB2S
串口那里两个 0 和 1 也都试过。
波特率#define UART_DEFAULT_BAUDRATE (9600U) 和4800都测过。
是不是正常就改这几个配置就可以了,没有其它要改的是吧?

你稍微等下,我试下看看,晚点给你回复

yangjie
Posts: 213

Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压

demo有点问题:

example_drv_ele_energy.c 需要进行以下修改:

Code: Select all

/**
 * @file example_drv_ele_energy.c
 * @author www.tuya.com
 * @brief example_drv_ele_energy module is used to 
 * @version 0.1
 * @date 2022-11-10
 *
 * @copyright Copyright (c) tuya.inc 2022
 *
 */
#include "tal_log.h"
#include "tal_system.h"
#include "tal_thread.h"
#include "tkl_timer.h"

#include "tdd_energy_monitor_bl0937_hlw8012.h"
#include "tdd_energy_monitor_bl0942.h"
#include "tdd_energy_monitor_hlw8032.h"
#include "tdl_energy_monitor_manage.h"
#include "example_drv_ele_energy.h"
/***********************************************************
************************macro define************************
***********************************************************/
#define ENABLE_ELE_ENERGY_CALIBRATION      1

/*  hardware config */
#define EXAMPLE_ELE_PIN         TUYA_GPIO_NUM_7  // CF  sample power 
#define EXAMPLE_IV_PIN          TUYA_GPIO_NUM_11 // CF1 sample voltage or current
#define EXAMPLE_SEL_PIN         TUYA_GPIO_NUM_2  // SEL select voltage or current
#define EXAMPLE_HW_TIMER_ID     TUYA_TIMER_NUM_0
#define EXAMPLE_UART_ID         TUYA_UART_NUM_0

/***********************************************************
***********************typedef define***********************
***********************************************************/


/***********************************************************
********************function declaration********************
***********************************************************/


/***********************************************************
***********************variable define**********************
***********************************************************/
// STATIC BL0937_DRIVER_CONFIG_T sg_bl0937_cfg = {
//     .timer_id  = EXAMPLE_HW_TIMER_ID,
//     .sel_pin   = EXAMPLE_SEL_PIN,
//     .sel_level = TUYA_GPIO_LEVEL_HIGH,
//     .cf1_pin   = EXAMPLE_IV_PIN,
//     .cf_pin    = EXAMPLE_ELE_PIN,
// };

STATIC BL0942_DRIVER_CONFIG_T sg_bl0942_cfg = {
    .mode = BL0942_DRV_UART,
    .driver.uart = {
        .id   = EXAMPLE_UART_ID,
        .addr = 0,
    }
};

// HLW8012_DRIVER_CONFIG_T sg_hlw8012_cfg = {
//     .timer_id  = EXAMPLE_HW_TIMER_ID,
//     .sel_pin   = EXAMPLE_SEL_PIN,
//     .sel_level = TUYA_GPIO_LEVEL_HIGH,
//     .cf1_pin   = EXAMPLE_IV_PIN,
//     .cf_pin    = EXAMPLE_ELE_PIN,   
// }; // HLW8032_DRIVER_CONFIG_T sg_hlw8032_cfg = { // .uart_id = EXAMPLE_UART_ID, // }; STATIC THREAD_HANDLE sg_ele_energy_thrd = NULL; STATIC ENERGY_MONITOR_HANDLE_T sg_ele_energy_hdl = NULL; /*********************************************************** ***********************function define********************** ***********************************************************/ STATIC VOID __ele_energy_task(PVOID_T args) { ENERGY_MONITOR_VCP_T vcp = {0,0,0}; UINT_T energy = 0; UINT_T _cnt = 0; for (;;) { tdl_energy_monitor_read_vcp(sg_ele_energy_hdl, &vcp); /* pwr: 0.1W, volt: 0.1V, curr: 0.01A */ TAL_PR_DEBUG("curr pvie data, P: %d, V: %d, I: %d", vcp.power, vcp.voltage, vcp.current); _cnt++; if (_cnt++ > 20*3) { // 3 minutes _cnt = 0; /* get electric quantity*/ tdl_energy_monitor_read_energy(sg_ele_energy_hdl, &energy); TAL_PR_DEBUG("E:%d", energy); } tal_system_sleep(3000); } return; } /** * @brief register hardware * * @param[in] : the name of the driver * * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h */ OPERATE_RET reg_ele_energy_hardware(CHAR_T *device_name) { OPERATE_RET rt = OPRT_OK; // TUYA_CALL_ERR_RETURN(tdd_energy_driver_bl0937_register(device_name, sg_bl0937_cfg)); TUYA_CALL_ERR_RETURN(tdd_energy_driver_bl0942_register(device_name, sg_bl0942_cfg)); TAL_PR_DEBUG("bl0942_register"); // TUYA_CALL_ERR_RETURN(tdd_energy_driver_hlw8012_register(device_name, sg_hlw8012_cfg)); // TUYA_CALL_ERR_RETURN(tdd_energy_driver_hlw8032_register(device_name, sg_hlw8032_cfg)); return OPRT_OK; } /** * @brief open driver * * @param[in] : the name of the driver * * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h */ OPERATE_RET open_ele_energy_driver(CHAR_T *device_name) { OPERATE_RET rt = OPRT_OK; ENERGY_MONITOR_CAL_DATA_T ele_env; ENERGY_MONITOR_CAL_PARAMS_T cal_factor; TUYA_CALL_ERR_RETURN(tdl_energy_monitor_find(device_name, &sg_ele_energy_hdl)); TAL_PR_DEBUG("energy_monitor_find"); // //set environmental parameters // ele_env.voltage = 2200; // 220.0v // ele_env.current = 392; // 0.392A // ele_env.power = 864; // 86.4w // ele_env.resval = 1; // tdl_energy_monitor_config(sg_ele_energy_hdl, TDL_EM_CMD_CAL_DATA_SET, &ele_env); // //init default coefficient // cal_factor.voltage_period = 586; // cal_factor.current_period = 28928; // cal_factor.power_period = 16929; // cal_factor.pf_num = 2820; // #if ENABLE_ELE_ENERGY_CALIBRATION // //get coefficient after calibration // tdl_energy_monitor_calibration(sg_ele_energy_hdl, ele_env, &cal_factor); // #endif // //set calculation coefficient // tdl_energy_monitor_config(sg_ele_energy_hdl, TDL_EM_CMD_CAL_PARAMS_SET, &cal_factor); /*open*/ TUYA_CALL_ERR_RETURN(tdl_energy_monitor_open(sg_ele_energy_hdl)); return OPRT_OK; } /** * @brief the example of driver function * * @param[in] : the name of the driver * * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h */ OPERATE_RET example_ele_energy_running(CHAR_T *device_name) { OPERATE_RET rt = OPRT_OK; THREAD_CFG_T task_cfg = { .thrdname = "ele_demo", .priority = THREAD_PRIO_1, .stackDepth = 1024*2, }; TUYA_CALL_ERR_RETURN(tal_thread_create_and_start(&sg_ele_energy_thrd, NULL, NULL, __ele_energy_task, NULL, &task_cfg)); return OPRT_OK; }

问题在 example_drv_ele_energy.c 中的 tdl_energy_monitor_open() 传入的是 name,不是 handle,导致的错误

Daan
Posts: 99

Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压

好的,谢谢。我用这个PID:xsnxxjkjrkjcdymh 是能读到电压的。大概率不是硬件的问题

Attachments
xsnxxjkjrkjcdymh.txt
(77.93 KiB) Downloaded 170 times
Daan
Posts: 99

Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压

好的 我测试看看 谢谢

Daan
Posts: 99

Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压

OK 了,可以了,十分感谢~

Post Reply