電路圖
程式列表
Python - ePy-Lite_HY4145.py
"""
ePy-Lite_HY4145.py
ePy_Lite HY4145
------------
3V3 VCC
P19 SCL
P20 SDA
GND GND
"""
from micropython import const
from machine import I2C, Pin
from machine import Switch #獲取按鍵KEY庫
import utime
i2c_0 = None
addrHY4145 = const(0x55) # HY4145 Device ID address for slave target
temp = []
Volt = None
# Standard Commands
Control = const(0x00)
Temperature = const(0x06)
Voltage = const(0x08)
Flags = const(0x0A)
NominalAvailableCapacity = const(0x0C)
FullAvailableCapacity = const(0x0E)
RemainingCapacity = const(0x10)
FullChargeCapacity = const(0x12)
AverageCurrent = const(0x14)
InternalTemperature = const(0x28)
CycleCount = const(0x2A)
RelativeStateOfCharge = const(0x2C)
StateOfHealth = const(0x2E)
Current = const(0x30)
SafetyStatus = const(0x32)
PassedCharge = const(0x34)
def StdReadData(cmd): # HY4145 Read
buff=bytearray(2)
# temp.clear()
# temp.append(cmd)
i2c_0.send(cmd,addrHY4145) #i2c_error: i2c write fail!input buffer length is not correct !
i2c_0.recv(buff,addrHY4145) #讀取2個位元組
retval = (int(buff[1]) << 8) | buff[0]
return retval
# Start Function
if __name__=="__main__":
# Declaration I2C
i2c_0 = I2C(0,I2C.MASTER,baudrate=100000) #創建頻率為100kHz的I2C外設,選擇要使用的外設I2C 0
KeyA = Switch('keya') #創建按鍵A
utime.sleep_ms(2000)
try:
while True:
Volt=StdReadData(Voltage)
Amp=StdReadData(Current)
Temp=StdReadData(Temperature)
FCC=StdReadData(FullChargeCapacity)
RM=StdReadData(RemainingCapacity)
RSOC=StdReadData(RelativeStateOfCharge)
print("Voltage is %dmV." % (Volt))
print("Current is %dmA." % (Amp))
print("Temperature is %.1f'C." % (Temp/10-273.0))
print("FullChargeCapacity is %dmAh." % (FCC))
print("RemainingCapacity is %dmAh." % (RM))
print("RelativeStateOfCharge is %d%%." % (RSOC))
if (KeyA.value()) == True: #如果按鍵A被按下
break
utime.sleep(1)
finally:
pass
i2c_0.deinit()
KeyA.deinit()
執行結果