mirror of
https://github.com/m5stack/M5Stack_MicroPython.git
synced 2026-05-20 10:14:44 -07:00
Merge pull request #6 from FlorianPoot/StickC
Add methods to axp192.py + Add rtc.py
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import machine
|
||||
import ustruct
|
||||
import i2c_bus
|
||||
|
||||
|
||||
class Axp192:
|
||||
def __init__(self):
|
||||
self.addr = 0x34
|
||||
@@ -19,6 +19,104 @@ class Axp192:
|
||||
regchar(0x36, 0x5c)
|
||||
regchar(0x90, 0x02)
|
||||
|
||||
def screenBreath(self, brightness):
|
||||
self._regChar(0x28, ((brightness & 0x0f) << 4))
|
||||
|
||||
def enableCoulombCounter(self):
|
||||
self._regChar(0xb8, 0x80)
|
||||
|
||||
def disableCoulombCounter(self):
|
||||
self._regChar(0xb8, 0x00)
|
||||
|
||||
def stopCoulombCounter(self):
|
||||
self._regChar(0xb8, 0xc0)
|
||||
|
||||
def clearCoulombCounter(self):
|
||||
self._regChar(0xb8, 0xa0)
|
||||
|
||||
def getCoulombChargeData(self):
|
||||
buf = self._regChar(0xb0)
|
||||
buf1 = self._regChar(0xb1)
|
||||
buf2 = self._regChar(0xb2)
|
||||
buf3 = self._regChar(0xb3)
|
||||
|
||||
return (buf << 24) + (buf1 << 16) + (buf2 << 8) + buf3
|
||||
|
||||
def getCoulombDischargeData(self):
|
||||
buf = self._regChar(0xb4)
|
||||
buf1 = self._regChar(0xb5)
|
||||
buf2 = self._regChar(0xb6)
|
||||
buf3 = self._regChar(0xb7)
|
||||
|
||||
return (buf << 24) + (buf1 << 16) + (buf2 << 8) + buf3
|
||||
|
||||
def getCoulombData(self):
|
||||
coin = self.getCoulombChargeData()
|
||||
coout = self.getCoulombDischargeData()
|
||||
|
||||
return 65536 * 0.5 * (coin - coout) / 3600.0 / 25.0
|
||||
|
||||
def getVbatData(self):
|
||||
buf = self._regChar(0x78)
|
||||
buf1 = self._regChar(0x79)
|
||||
|
||||
return (buf << 4) + buf1
|
||||
|
||||
def getVinData(self):
|
||||
buf = self._regChar(0x56)
|
||||
buf1 = self._regChar(0x57)
|
||||
|
||||
return (buf << 4) + buf1
|
||||
|
||||
def getIinData(self):
|
||||
buf = self._regChar(0x58)
|
||||
buf1 = self._regChar(0x59)
|
||||
|
||||
return (buf << 4) + buf1
|
||||
|
||||
def getIChargeData(self):
|
||||
buf = self._regChar(0x7a)
|
||||
buf1 = self._regChar(0x7b)
|
||||
|
||||
return (buf << 5) + buf1
|
||||
|
||||
def getIDischargeData(self):
|
||||
buf = self._regChar(0x7c)
|
||||
buf1 = self._regChar(0x7d)
|
||||
|
||||
return (buf << 5) + buf1
|
||||
|
||||
def getTempData(self):
|
||||
buf = self._regChar(0x5e)
|
||||
buf1 = self._regChar(0x5f)
|
||||
|
||||
return (buf << 4) + buf1
|
||||
|
||||
def getPowerBatData(self):
|
||||
buf = self._regChar(0x70)
|
||||
buf1 = self._regChar(0x71)
|
||||
buf2 = self._regChar(0x72)
|
||||
|
||||
return (buf << 16) + (buf1 << 8) + buf2
|
||||
|
||||
def getVapsData(self):
|
||||
buf = self._regChar(0x7e)
|
||||
buf1 = self._regChar(0x7f)
|
||||
|
||||
return (buf << 4) + buf1
|
||||
|
||||
def setSleep(self):
|
||||
buf = self._regChar(0x31)
|
||||
buf = (1 << 3) | buf
|
||||
|
||||
self._regChar(0x31, buf)
|
||||
self._regChar(0x12, 0x41)
|
||||
|
||||
def getWarningLevel(self):
|
||||
buf = self._regChar(0x47)
|
||||
|
||||
return buf & 0x01
|
||||
|
||||
def _regChar(self, reg, value=None, buf=bytearray(1)):
|
||||
if value is None:
|
||||
self.i2c.readfrom_mem_into(self.addr, reg, buf)
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import uos as os
|
||||
import utime as time
|
||||
import display as lcd
|
||||
import machine, ubinascii
|
||||
import machine
|
||||
import ubinascii
|
||||
import axp192
|
||||
import rtc
|
||||
from ubutton import Button
|
||||
from micropython import const
|
||||
|
||||
@@ -25,15 +27,17 @@ print('\nDevice ID:' + node_id)
|
||||
print('LCD initializing...')
|
||||
|
||||
# pin Analog and digital
|
||||
import axp192
|
||||
axp = axp192.Axp192()
|
||||
axp.powerAll()
|
||||
|
||||
# RTC
|
||||
rtc = rtc.RTC()
|
||||
|
||||
# LCD
|
||||
lcd = lcd.TFT()
|
||||
lcd.init(lcd.M5STICK, speed=30000000, bgr=True, mosi=15, miso=36, clk=13, cs=5, dc=23, rst_pin=18, width=80, height=160)
|
||||
|
||||
#BUTTON
|
||||
# BUTTON
|
||||
m5button = Button()
|
||||
buttonA = m5button.register(_BUTTON_A_PIN)
|
||||
buttonB = m5button.register(_BUTTON_B_PIN)
|
||||
@@ -0,0 +1,79 @@
|
||||
import ustruct
|
||||
import i2c_bus
|
||||
|
||||
|
||||
class RTC:
|
||||
def __init__(self):
|
||||
self.addr = 0x51
|
||||
self.i2c = i2c_bus.get(i2c_bus.M_BUS)
|
||||
|
||||
def getTime(self):
|
||||
buf = self._regChar(0x02, buf=bytearray(3))
|
||||
|
||||
seconds = self.bcd2ToByte(buf[0] & 0x7f)
|
||||
minutes = self.bcd2ToByte(buf[1] & 0x7f)
|
||||
hours = self.bcd2ToByte(buf[2] & 0x3f)
|
||||
|
||||
return hours, minutes, seconds
|
||||
|
||||
def setTime(self, hours, minutes, seconds):
|
||||
seconds = self.byteToBcd2(seconds)
|
||||
minutes = self.byteToBcd2(minutes)
|
||||
hours = self.byteToBcd2(hours)
|
||||
|
||||
self._regChar(0x02, (seconds, minutes, hours), buf=bytearray(3))
|
||||
|
||||
def getDate(self):
|
||||
buf = self._regChar(0x05, buf=bytearray(4))
|
||||
|
||||
date = self.bcd2ToByte(buf[0] & 0x3f)
|
||||
week_day = self.bcd2ToByte(buf[1] & 0x07)
|
||||
month = self.bcd2ToByte(buf[2] & 0x1f)
|
||||
|
||||
if buf[2] & 0x80:
|
||||
year = 1900 + self.bcd2ToByte(buf[3] & 0xff)
|
||||
else:
|
||||
year = 2000 + self.bcd2ToByte(buf[3] & 0xff)
|
||||
|
||||
return year, month, date, week_day
|
||||
|
||||
def setDate(self, year, month, date, week_day):
|
||||
date = self.byteToBcd2(date)
|
||||
week_day = self.byteToBcd2(week_day)
|
||||
|
||||
if year < 2000:
|
||||
month = self.byteToBcd2(month | 0x80)
|
||||
else:
|
||||
month = self.byteToBcd2(month | 0x00)
|
||||
|
||||
year = self.byteToBcd2(year % 100)
|
||||
|
||||
self._regChar(0x05, (date, week_day, month, year), buf=bytearray(4))
|
||||
|
||||
def _regChar(self, reg, value=None, buf=bytearray(1)):
|
||||
if value is None:
|
||||
self.i2c.readfrom_mem_into(self.addr, reg, buf)
|
||||
if len(buf) == 1:
|
||||
return buf[0]
|
||||
else:
|
||||
return buf
|
||||
|
||||
if type(value) is int:
|
||||
ustruct.pack_into('<b', buf, 0, value)
|
||||
else:
|
||||
ustruct.pack_into('<%db' % len(value), buf, 0, *value)
|
||||
|
||||
return self.i2c.writeto_mem(self.addr, reg, buf)
|
||||
|
||||
def bcd2ToByte(self, value):
|
||||
tmp = ((value & 0xF0) >> 0x4) * 10
|
||||
return tmp + (value & 0x0F)
|
||||
|
||||
def byteToBcd2(self, value):
|
||||
bcdhigh = 0
|
||||
|
||||
while value >= 10:
|
||||
bcdhigh += 1
|
||||
value -= 10
|
||||
|
||||
return (bcdhigh << 4) | value
|
||||
Reference in New Issue
Block a user