ESP01S直接获取HLW8032的电量数据

HLW8032是一款高精度的电能计量芯片,适用于电能计量、功率监测等应用场景。要获取HLW8032的电量数据,通常需要通过与微控制器(如STM32)的通信来实现。网上的都是与微控制器通信再与ESP8266连接获取数据,我这里就省去微控制器,直接用ESP01S获取数据,由于HLW8032是5V供电,ESP01S是3.3V供电,注意要将5V信号的转换3.3V信号,设计的电路图如下:54ba97d327fe414a807c6f130cac5255.png

f69a45f5c13b4b4b9184b1980b126218.png

硬件设计好了,下一步的关键就是测试了,网上买的PL2303TTL有问题,总是得到错误的数据,我还以为是设计的电路有问题或焊接有问题,焊几个板子测试了个吧星期,都是错误的结果,在网上查资料想解决这一问题(中间怀疑换HLW8032芯片有问题,换了该芯片),还是不能解决,几乎要放弃了,后来想到换个CH340的TTL转USB试试,买回来一试果然数据不一样,也就知道之前买了个假的PL2303了。经测试有的板子数据是正常的,有的板子数据不正确,不正确的换HLW8032芯片后就正确了,说明网上卖的HLW8032芯片有好有坏,如果你碰到数据不正确的可以试试换个芯片。终于得到正确的数据了,下面是没插电源时的正确数据9b1af3e4a3d54fbf83bd07f8482a9655.png

得到正确的数据后说明硬件方面没问题,但将ESP01S的RX连接HLW8032的TX后,总是得不到正确的数据,代码是用Arduino IDE里下的HLW8032库,于是边修改边测试又搞了2个星期,可惜ESP01S的RX始终得不到正确的数据,难道是ESP01S与HLW8032的接口不兼容,非要用STM32等转换?都要准备按网上的方法加个STM32接ESP-01S,突然发现数据里有时有5A,F2的关键的数字,但数据是乱的。于是在网上找原因,看别人有没有遇到过这种情况,结果是一无所获。用文心一言等AI分析原因,也找不到答案,但给了我一启示,可能是ESP01S接收数据的速度跟不上HLW8032发送数据的速度,导致缓冲区溢出部分数据丢失,修改代码后测试果然是这原因,终于出现了正确的数据:409edf673cf6479fa28b49c3d9134462.png

网上成功的案例中都没有说到这个问题,HLW8032每隔50ms发送一次24byte数据,Serial按一般方法来进行数据处理,这批没处理完,下批又来了,导致缓冲区的数据混乱,从而得不到正确数据,正确的做法说一下,如果你也遇到这类问题,可以参考下:在loop()函数里

if (Serial.available() > 0) {//循环读取8032数据

Serial.readBytes(buffer, BUF_SIZE);

 hlw8032buffer();

  }

定义的接收数据的缓冲区byte buffer[BUF_SIZE];,BUF_SIZE定义为96, hlw8032buffer()函数是处理HLW8032发送过来的数据。

void hlw8032buffer()

{

  for(int i=0;i<BUF_SIZE;i++)

        {

          energyMeter.rxProcess(buffer[i]);

     // Serial.printf("%02x ",buffer[i]);

             }

     }

好了,前后测试了个吧月才成功,不容易啊

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值