Compare commits

...

2 Commits

Author SHA1 Message Date
c1b3f62543 Add MD file 2024-03-12 09:46:52 +08:00
d8c939bb79 Added temperature and frequency data 2024-03-12 09:41:56 +08:00
3 changed files with 42 additions and 11 deletions

25
README.md Normal file
View File

@@ -0,0 +1,25 @@
# 基于 Raspberry Pico / Pico W 的电能计量模块IM1253B
* 可以计算电压、电流、功率、电能、功率因数、二氧化碳、温度、频率
## Build
```
# 使用WSL Debian GNU/Linux 12 (bookworm) 构建
# 确保Pico-SDK环境变量
export PICO_SDK_PATH=/mnt/c/Users/niuyuling/Desktop/raspberry-pico/SDK/pico-sdk
export PICO_EXTRAS_PATH=/mnt/c/Users/niuyuling/Desktop/raspberry-pico/SDK/pico-extras
apt install cmake gcc-arm-none-eabi gcc g++
apt install gdb-multiarch automake autoconf build-essential texinfo libtool libftdi-dev libusb-1.0-0-dev
git clone https://git.aixiao.me/aixiao/IM1253B.git
cd IM1253B
mkdir -p build
cd build
cmake ..
#cmake -DPICO_BOARD=pico_w ..
make
```

18
main.c
View File

@@ -92,6 +92,9 @@ void Analysis_data(void)
Energy_data = (((unsigned long)(Rx_Buffer[15])) << 24) | (((unsigned long)(Rx_Buffer[16])) << 16) | (((unsigned long)(Rx_Buffer[17])) << 8) | Rx_Buffer[18]; Energy_data = (((unsigned long)(Rx_Buffer[15])) << 24) | (((unsigned long)(Rx_Buffer[16])) << 16) | (((unsigned long)(Rx_Buffer[17])) << 8) | Rx_Buffer[18];
Pf_data = (((unsigned long)(Rx_Buffer[19])) << 24) | (((unsigned long)(Rx_Buffer[20])) << 16) | (((unsigned long)(Rx_Buffer[21])) << 8) | Rx_Buffer[22]; Pf_data = (((unsigned long)(Rx_Buffer[19])) << 24) | (((unsigned long)(Rx_Buffer[20])) << 16) | (((unsigned long)(Rx_Buffer[21])) << 8) | Rx_Buffer[22];
CO2_data = (((unsigned long)(Rx_Buffer[23])) << 24) | (((unsigned long)(Rx_Buffer[24])) << 16) | (((unsigned long)(Rx_Buffer[25])) << 8) | Rx_Buffer[26]; CO2_data = (((unsigned long)(Rx_Buffer[23])) << 24) | (((unsigned long)(Rx_Buffer[24])) << 16) | (((unsigned long)(Rx_Buffer[25])) << 8) | Rx_Buffer[26];
Temperature_data = (((unsigned long)(Rx_Buffer[27])) << 24) | (((unsigned long)(Rx_Buffer[28])) << 16) | (((unsigned long)(Rx_Buffer[29])) << 8) | Rx_Buffer[30];
Hz_data = (((unsigned long)(Rx_Buffer[31])) << 24) | (((unsigned long)(Rx_Buffer[32])) << 16) | (((unsigned long)(Rx_Buffer[33])) << 8) | Rx_Buffer[34];
} }
} }
} }
@@ -99,24 +102,27 @@ void Analysis_data(void)
void Print_data(void) void Print_data(void)
{ {
float voltage_value = (float)Voltage_data / 10000.0; float voltage_value = (float)Voltage_data * 0.0001;
printf("电压: %.2f V\n", voltage_value); printf("电压: %.2f V\n", voltage_value);
float current_data = (float)Current_data / 10000.0; float current_data = (float)Current_data * 0.0001;
printf("电流: %.2f A\n", current_data); printf("电流: %.2f A\n", current_data);
float power_data = (float)Power_data / 10000.0; float power_data = (float)Power_data * 0.0001;
printf("功率: %.2f W\n", power_data); printf("功率: %.2f W\n", power_data);
float energy_data = (float)Energy_data / 10000.0; float energy_data = (float)Energy_data * 0.0001;
printf("电能: %.2f KWH\n", energy_data); printf("电能: %.2f KWH\n", energy_data);
float pf_data = (float)Pf_data / 10000.0; float pf_data = (float)Pf_data *0.001;
printf("功率因数: %.2f \n", pf_data); printf("功率因数: %.2f \n", pf_data);
float cO2_data = (float)CO2_data / 10000.0; float cO2_data = (float)CO2_data * 0.0001;
printf("二氧化碳: %.2f KG\n", cO2_data); printf("二氧化碳: %.2f KG\n", cO2_data);
printf("温度: %.2f ℃\n", (float)Temperature_data * 0.01);
printf("频率: %.2f HZ\n", (float)Hz_data * 0.01);
return ; return ;
} }

2
main.h
View File

@@ -27,7 +27,7 @@ int Read_ID = 0x01;
unsigned char Tx_Buffer[8]; unsigned char Tx_Buffer[8];
unsigned char Rx_Buffer[40]; unsigned char Rx_Buffer[40];
unsigned char read_enable, receive_finished, reveive_number; unsigned char read_enable, receive_finished, reveive_number;
unsigned long Voltage_data, Current_data, Power_data, Energy_data, Pf_data, CO2_data; unsigned long Voltage_data, Current_data, Power_data, Energy_data, Pf_data, CO2_data, Temperature_data, Hz_data;
unsigned int calccrc(unsigned char crcbuf, unsigned int crc); unsigned int calccrc(unsigned char crcbuf, unsigned int crc);
unsigned int chkcrc(unsigned char *buf, unsigned char len); unsigned int chkcrc(unsigned char *buf, unsigned char len);