你好,我这边跑tuyaos_demo_application_driver里面电量统计的demo,
已经define成TY_EXAMPLE_ELE_ENERGY
#define TY_EXAMPLE_DRIVER TY_EXAMPLE_ELE_ENERGY
用的计量芯片是bl0942,代码里面也都配置成0942配置了,但是还是读不到数据。读到的输入电压还是0 .
附件是日志。麻烦帮确定一下什么原因~ 谢谢
【已解决】TuYAOS跑电量统计demo,读不到输入电压
【已解决】TuYAOS跑电量统计demo,读不到输入电压
- Attachments
-
- 电量统计.txt
- (9.25 KiB) Downloaded 129 times
Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压
log 中 [01-01 00:00:05 ty E][tdd_energy_monitor_bl0942.c:337] all data check sum error, 175 ,0
这个是串口收到数据但是校验和失败了。请确保和计量芯片连接正确,波特率设置正确。
Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压
版本烧录免开发固件是可以读到输入电压的,硬件连接应该没有问题
请问规格书这里的串口1 是否对应的就是
#define EXAMPLE_UART_ID TUYA_UART_NUM_1
这个配置是0 没有问题吧?
#define BL0942_DRV_UART 0
- Attachments
-
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 吗?
Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压
你好,用的是CB2S
串口那里两个 0 和 1 也都试过。
波特率#define UART_DEFAULT_BAUDRATE (9600U) 和4800都测过。
是不是正常就改这几个配置就可以了,没有其它要改的是吧?
Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压
Daan 2024年 Jan 30日 16:04你好,用的是CB2S
串口那里两个 0 和 1 也都试过。
波特率#define UART_DEFAULT_BAUDRATE (9600U) 和4800都测过。
是不是正常就改这几个配置就可以了,没有其它要改的是吧?
你稍微等下,我试下看看,晚点给你回复
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,导致的错误
Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压
好的,谢谢。我用这个PID:xsnxxjkjrkjcdymh 是能读到电压的。大概率不是硬件的问题
- Attachments
-
- xsnxxjkjrkjcdymh.txt
- (77.93 KiB) Downloaded 170 times
Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压
好的 我测试看看 谢谢
Re: 【求助】TuYAOS跑电量统计demo,读不到输入电压
OK 了,可以了,十分感谢~