Compare commits
2 Commits
df2a6bf623
...
c1b3f62543
| Author | SHA1 | Date | |
|---|---|---|---|
| c1b3f62543 | |||
| d8c939bb79 |
25
README.md
Normal file
25
README.md
Normal 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
|
||||
|
||||
|
||||
```
|
||||
|
||||
26
main.c
26
main.c
@@ -77,14 +77,14 @@ void Analysis_data(void)
|
||||
unsigned char byte[2];
|
||||
} crcnow;
|
||||
|
||||
if (receive_finished == 1) //接收完成
|
||||
if (receive_finished == 1) // 接收完成
|
||||
{
|
||||
receive_finished = 0;
|
||||
|
||||
if (Rx_Buffer[0] == Read_ID) //确认 ID 正确
|
||||
if (Rx_Buffer[0] == Read_ID) // 确认 ID 正确
|
||||
{
|
||||
crcnow.word16 = chkcrc(Rx_Buffer, reveive_number - 2); //reveive_number 是接收数据总长度
|
||||
if ((crcnow.byte[0] == Rx_Buffer[reveive_number - 1]) && (crcnow.byte[1] == Rx_Buffer[reveive_number - 2])) //确认 CRC 校验正确
|
||||
crcnow.word16 = chkcrc(Rx_Buffer, reveive_number - 2); // reveive_number 是接收数据总长度
|
||||
if ((crcnow.byte[0] == Rx_Buffer[reveive_number - 1]) && (crcnow.byte[1] == Rx_Buffer[reveive_number - 2])) // 确认 CRC 校验正确
|
||||
{
|
||||
Voltage_data = (((unsigned long)(Rx_Buffer[3])) << 24) | (((unsigned long)(Rx_Buffer[4])) << 16) | (((unsigned long)(Rx_Buffer[5])) << 8) | Rx_Buffer[6];
|
||||
Current_data = (((unsigned long)(Rx_Buffer[7])) << 24) | (((unsigned long)(Rx_Buffer[8])) << 16) | (((unsigned long)(Rx_Buffer[9])) << 8) | Rx_Buffer[10];
|
||||
@@ -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];
|
||||
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];
|
||||
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,23 +102,26 @@ void Analysis_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);
|
||||
|
||||
float current_data = (float)Current_data / 10000.0;
|
||||
float current_data = (float)Current_data * 0.0001;
|
||||
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);
|
||||
|
||||
float energy_data = (float)Energy_data / 10000.0;
|
||||
float energy_data = (float)Energy_data * 0.0001;
|
||||
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);
|
||||
|
||||
float cO2_data = (float)CO2_data / 10000.0;
|
||||
float cO2_data = (float)CO2_data * 0.0001;
|
||||
printf("二氧化碳: %.2f KG\n", cO2_data);
|
||||
|
||||
printf("温度: %.2f ℃\n", (float)Temperature_data * 0.01);
|
||||
printf("频率: %.2f HZ\n", (float)Hz_data * 0.01);
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
2
main.h
2
main.h
@@ -27,7 +27,7 @@ int Read_ID = 0x01;
|
||||
unsigned char Tx_Buffer[8];
|
||||
unsigned char Rx_Buffer[40];
|
||||
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 chkcrc(unsigned char *buf, unsigned char len);
|
||||
|
||||
Reference in New Issue
Block a user