【智慧楼宇项目】nodemcu(lua)控制HLW8032电计量模块


一、项目描述

使用Esplorer软甲编写lua代码控制nodemcu实现获取模块HLW8032的数据


二、使用工具

(下方有链接)

  • HLW8032电计量模块
  • 上位机软件
  • 杜邦线
  • 插座、电线
  • nodemcu模块
  • TTL转USB模块

三、项目过程

①设备连接电脑,测试是否可用

HLW8032连接电脑

将HLW8032通过TTL转USB模块连接到电脑,电脑打开上位机软件,测试是否可用。

  • 注意HLW8032模块的T要连接下方模块的RXD。原因为T为电计量模块的数据发送端,对应下方模块的数据接收端RXD。
  • 注意在电计量模块通电后,不能触摸 。

②将电计量模块连接到nodemcu,并编写代码获取数据

nodemcu的串口方法。

  • 注意nodemcu只有两组引脚支持串口方法数据传输,因此电计量模块的RX、TX两个引脚只能从这两组里面选择连接。
//每当串口数据达到24字节就进行后面的方法。这是因为HLW8032会发送的是24位的16进制数据,每次获得24位,这24位数据的顺序是乱的,需要处理。如下
2 248 40 0 6 67 0 63 237 4 3 7 80 125 120 64 53 115 97 0 1 52 242 90
//这里我采用的方法:数据中有些数据是与设备有关的参数,这些参数是不变的,确定这个参数的位置,进行排序。
//比如,确定90的位置,90在正确的数据中位于第二位,根据这个位置重新排序。
uart.on("data",24,function(data)
		//获取data里24位的每个数据
        d01=string.byte(data,1)
        d02=string.byte(data,2)
        d03=string.byte(data,3)
        d04=string.byte(data,4)
        d05=string.byte(data,5)
        d06=string.byte(data,6)
        d07=string.byte(data,7)
        d08=string.byte(data,8)
        d09=string.byte(data,9)
        d10=string.byte(data,10)
        d11=string.byte(data,11)
        d12=string.byte(data,12)
        d13=string.byte(data,13)
        d14=string.byte(data,14)
        d15=string.byte(data,15)
        d16=string.byte(data,16)
        d17=string.byte(data,17)
        d18=string.byte(data,18)
        d19=string.byte(data,19)
        d20=string.byte(data,20)
        d21=string.byte(data,21)
        d22=string.byte(data,22)
        d23=string.byte(data,23)
        d24=string.byte(data,24)
    end,0)       

//放入数组array01
    array01={d01,d02,d03,d04,d05,d06,d07,d08,d09,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24}
    array02={}
    array03={}
    array={}
    info={}

//根据文档确定一部分参数
    dianya=0
    dianyaji=0
    dianyacanji=194600
    dianliucanji=16365
    dianliu=0
    dianliuji=0
    gonglvcanji=5275000
    gonglvji=0
    gonglv=0
    dianliang=0

//确定24位数据均不为空,并确定90这个数据所在位置,赋值给temp
    for i=1,24 do
        if(array01[i] ~= nil) then
            if (array01[i] ==90) then
                temp = i
                timer2:stop()
                updata()
                break
            end
        else
            print("wait....")
        end    
    end        
end)


function updata()
//如果90的索引大于二。
//如52 242 90 2 248 40 0 6 67 0 63 237 4 3 7 80 125 120 64 53 115 97 0 1
//此时90为第三位,242为第二位,那么只要把52移到最后,就变成了一个正确的数据
     if (temp>2) then
        for i=1,26-temp do
            array[i]=array01[temp+i-2]
        end
        for i=1,temp-2 do
            array[26-temp+i]=array01[i]
        end
//如果90刚好在第二位,那么这条数据就是正确的,不需要处理
    elseif(temp==2) then
        for i=1,24 do
            array[i]=array01[i]
        end
//如果90在第一位,那么要把最后一位移到最前面,就行了
    elseif(temp==1) then
        array[1]=array01[24]
        for i=2,24 do
            array[i]=array01[i-1]
        end
    else
        print("temp is nil")
    end

//将排序好的数据根据文档计算,就可以得到正确的电压、电流、功率
	dianyaji=array[6]*65536+array[7]*256+array[8]
    dianya=(dianyacanji/dianyaji)*1.88
    dianliuji=array[12]*65536+array[13]*256+array[14]
    dianliu=dianliucanji/dianliuji
    gonglvji=array[18]*65536+array[19]*256+array[20]
    gonglv=gonglvcanji/gonglvji*1.88

四、参考链接

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值