У меня есть библиотека PiPico2 для часов реального времени:
https://github.com/mchobby/esp8266-upy/ ... er/pcf8523
Код библиотеки, как показано ниже (pcf8523.py).
Я использовал простой пример кода и просто не могу импортировать его в свой RTC_test.py.
#RTC_test.py
from machine import I2C
from pcf8523 import PCF8523
import time
# PYBStick - S3=sda, S5=scl
# Raspberry-Pi Pico - GP6=sda, GP7=scl
i2c = I2C(1)
rtc = PCF8523( i2c )
Я получаю сообщение об ошибке ниже и не понимаю, почему. Я могу импортировать библиотеку самостоятельно, но если я вызову класс, он выдаст ошибку:
Traceback (most recent call last):
File "", line 2, in
ImportError: no module named 'pcf8523.PCF8523'
Код библиотеки из github (pi pico /lib/pcf8523/pcf8523.py)
# The MIT License (MIT)
#
# Copyright (c) 2016 Philip R. Moyer and Radomir Dopieralski for Adafruit Industries.
#
""" PCF8523 Real Time Clock (RTC) module for MicroPython
Jun. 2020 Meurisse D. for MCHobby (shop.mchobby.be) - backport to MicroPython
Nov. 2016 Philip R. Moyer and Radomir Dopieralski for Adafruit Industries - original version for CircuitPython
- Milliseconds are not supported by this RTC.
- Datasheet: http://cache.nxp.com/documents/data_sheet/PCF8523.pdf
- based on https://github.com/adafruit/Adafruit_Ci ... CF8523.git
"""
__version__ = "0.0.1"
__repo__ = "https://github.com/mchobby/esp8266-upy/ ... er/pcf8523"
import time
STANDARD_BATTERY_SWITCHOVER_AND_DETECTION = 0b000
BATTERY_SWITCHOVER_OFF = 0b111
RTC_REG = 0x03
ALARM_REG = 0x0A
CONTROL_1_REG = 0x00
def _bcd2bin(value):
"""Convert binary coded decimal to Binary """
return value - 6 * (value >> 4)
def _bin2bcd(value):
"""Convert a binary value to binary coded decimal."""
return value + 6 * (value // 10)
class PCF8523:
"""Interface to the PCF8523 RTC."""
def __init__(self, i2c ):
self.i2c = i2c
self.address = 0x68
self.buf1 = bytearray(1)
self.buf7 = bytearray(7)
# Try and verify this is the RTC we expect by checking the timer B
# frequency control bits which are 1 on reset and shouldn't ever be
# changed.
self.retries = 2
while self.retries > 0:
self.buf1[0] = 0x12
self.i2c.writeto( self.address, self.buf1 )
self.i2c.readfrom_into( self.address, self.buf1 )
if (self.buf1[0] & 0b00000111) != 0b00000111 and self.retries == 2:
self.soft_reset()
elif (self.buf1[0] & 0b00000111) != 0b00000111 and self.retries == 1:
raise ValueError("Unable to find PCF8523 at i2c address 0x68.")
self.retries -= 1
def soft_reset(self):
self.buf1 = bytearray(1)
self.buf1[0] = 0x58
self.i2c.writeto_mem(self.address, CONTROL_1_REG, self.buf1) # writes 0x58 to address 0x00 to reset the chip
def _read_datetime( self, time_reg ):
"""Gets the date and time from a given register location (0x03 for RTC, 0x0A for alarm )."""
weekday_offset = 1
weekday_start = 0
self.buf1[0] = time_reg
self.i2c.writeto( self.address, self.buf1 )
self.i2c.readfrom_into( self.address, self.buf7 )
#CircuitPython struct_time (tm_year=1999, tm_mon=12, tm_mday=31, tm_hour=17, tm_min=4, tm_sec=58, tm_wday=4, tm_yday=365, tm_isdst=0)
#MicroPython mktime (year, month, mday, hour, minute, second, weekday, yearday)
return time.mktime((
_bcd2bin(self.buf7[6]) + 2000,
_bcd2bin(self.buf7[5]),
_bcd2bin(self.buf7[4 - weekday_offset]),
_bcd2bin(self.buf7[2]),
_bcd2bin(self.buf7[1]),
_bcd2bin(self.buf7[0] & 0x7F),
_bcd2bin(self.buf7[3 + weekday_offset] - weekday_start),
-1,
-1, ))
def _write_datetime( self, time_reg, value ):
""" set the time from the tuple (year, month, mday, hour, minute, second, weekday, yearday) on the given register (0x03 for RTC, 0x0A for alarm)"""
weekday_offset = 1
weekday_start = 0
self.buf7[0] = _bin2bcd(value[5]) & 0x7F # tm_sec format conversions
self.buf7[1] = _bin2bcd(value[4]) # tm_min
self.buf7[2] = _bin2bcd(value[3]) # tm_hour
self.buf7[3 + weekday_offset] = _bin2bcd(
value[6] + weekday_start # tm_wday
)
self.buf7[4 - weekday_offset] = _bin2bcd(value[2]) # tm_mday
self.buf7[5] = _bin2bcd(value[1]) # tm_mon
self.buf7[6] = _bin2bcd(value[0] - 2000) # tm_year
self.i2c.writeto_mem( self.address, time_reg, self.buf7 )
@property
def datetime(self):
"""Gets or Set the current date and time then starts the clock."""
return self._read_datetime( RTC_REG )
@datetime.setter
def datetime(self, value ):
""" set the current time from the tuple (year, month, mday, hour, minute, second, weekday, yearday) """
# Automatically sets lost_power to false.
self.power_management = STANDARD_BATTERY_SWITCHOVER_AND_DETECTION
self._write_datetime( RTC_REG, value )
@property
def power_management(self):
""" Power management state that dictates battery switchover, power sources
and low battery detection. Defaults to BATTERY_SWITCHOVER_OFF (0b000). """
# i2c_bits.RWBits(3, 0x02, 5)
self.i2c.readfrom_mem_into( self.address, 0x02, self.buf1 )
return self.buf1[0] >> 5
@power_management.setter
def power_management(self, value ):
# reg 0x02 bits 5,6,7 (3 lasts bits)
self.i2c.readfrom_mem_into( self.address, 0x02, self.buf1 )
self.buf1[0] = self.buf1[0] & 0b00011111
self.buf1[0] = self.buf1[0] | (value
Подробнее здесь: https://stackoverflow.com/questions/798 ... icropython
Класс не отображается как модуль (без модуля) при вызове из библиотеки PiCo Micropython ⇐ Python
Программы на Python
1771710039
Anonymous
У меня есть библиотека PiPico2 для часов реального времени:
https://github.com/mchobby/esp8266-upy/tree/master/pcf8523
Код библиотеки, как показано ниже (pcf8523.py).
Я использовал простой пример кода и просто не могу импортировать его в свой RTC_test.py.
#RTC_test.py
from machine import I2C
from pcf8523 import PCF8523
import time
# PYBStick - S3=sda, S5=scl
# Raspberry-Pi Pico - GP6=sda, GP7=scl
i2c = I2C(1)
rtc = PCF8523( i2c )
Я получаю сообщение об ошибке ниже и не понимаю, почему. Я могу импортировать библиотеку самостоятельно, но если я вызову класс, он выдаст ошибку:
Traceback (most recent call last):
File "", line 2, in
ImportError: no module named 'pcf8523.PCF8523'
Код библиотеки из github (pi pico /lib/pcf8523/pcf8523.py)
# The MIT License (MIT)
#
# Copyright (c) 2016 Philip R. Moyer and Radomir Dopieralski for Adafruit Industries.
#
""" PCF8523 Real Time Clock (RTC) module for MicroPython
Jun. 2020 Meurisse D. for MCHobby (shop.mchobby.be) - backport to MicroPython
Nov. 2016 Philip R. Moyer and Radomir Dopieralski for Adafruit Industries - original version for CircuitPython
- Milliseconds are not supported by this RTC.
- Datasheet: http://cache.nxp.com/documents/data_sheet/PCF8523.pdf
- based on https://github.com/adafruit/Adafruit_CircuitPython_PCF8523.git
"""
__version__ = "0.0.1"
__repo__ = "https://github.com/mchobby/esp8266-upy/tree/master/pcf8523"
import time
STANDARD_BATTERY_SWITCHOVER_AND_DETECTION = 0b000
BATTERY_SWITCHOVER_OFF = 0b111
RTC_REG = 0x03
ALARM_REG = 0x0A
CONTROL_1_REG = 0x00
def _bcd2bin(value):
"""Convert binary coded decimal to Binary """
return value - 6 * (value >> 4)
def _bin2bcd(value):
"""Convert a binary value to binary coded decimal."""
return value + 6 * (value // 10)
class PCF8523:
"""Interface to the PCF8523 RTC."""
def __init__(self, i2c ):
self.i2c = i2c
self.address = 0x68
self.buf1 = bytearray(1)
self.buf7 = bytearray(7)
# Try and verify this is the RTC we expect by checking the timer B
# frequency control bits which are 1 on reset and shouldn't ever be
# changed.
self.retries = 2
while self.retries > 0:
self.buf1[0] = 0x12
self.i2c.writeto( self.address, self.buf1 )
self.i2c.readfrom_into( self.address, self.buf1 )
if (self.buf1[0] & 0b00000111) != 0b00000111 and self.retries == 2:
self.soft_reset()
elif (self.buf1[0] & 0b00000111) != 0b00000111 and self.retries == 1:
raise ValueError("Unable to find PCF8523 at i2c address 0x68.")
self.retries -= 1
def soft_reset(self):
self.buf1 = bytearray(1)
self.buf1[0] = 0x58
self.i2c.writeto_mem(self.address, CONTROL_1_REG, self.buf1) # writes 0x58 to address 0x00 to reset the chip
def _read_datetime( self, time_reg ):
"""Gets the date and time from a given register location (0x03 for RTC, 0x0A for alarm )."""
weekday_offset = 1
weekday_start = 0
self.buf1[0] = time_reg
self.i2c.writeto( self.address, self.buf1 )
self.i2c.readfrom_into( self.address, self.buf7 )
#CircuitPython struct_time (tm_year=1999, tm_mon=12, tm_mday=31, tm_hour=17, tm_min=4, tm_sec=58, tm_wday=4, tm_yday=365, tm_isdst=0)
#MicroPython mktime (year, month, mday, hour, minute, second, weekday, yearday)
return time.mktime((
_bcd2bin(self.buf7[6]) + 2000,
_bcd2bin(self.buf7[5]),
_bcd2bin(self.buf7[4 - weekday_offset]),
_bcd2bin(self.buf7[2]),
_bcd2bin(self.buf7[1]),
_bcd2bin(self.buf7[0] & 0x7F),
_bcd2bin(self.buf7[3 + weekday_offset] - weekday_start),
-1,
-1, ))
def _write_datetime( self, time_reg, value ):
""" set the time from the tuple (year, month, mday, hour, minute, second, weekday, yearday) on the given register (0x03 for RTC, 0x0A for alarm)"""
weekday_offset = 1
weekday_start = 0
self.buf7[0] = _bin2bcd(value[5]) & 0x7F # tm_sec format conversions
self.buf7[1] = _bin2bcd(value[4]) # tm_min
self.buf7[2] = _bin2bcd(value[3]) # tm_hour
self.buf7[3 + weekday_offset] = _bin2bcd(
value[6] + weekday_start # tm_wday
)
self.buf7[4 - weekday_offset] = _bin2bcd(value[2]) # tm_mday
self.buf7[5] = _bin2bcd(value[1]) # tm_mon
self.buf7[6] = _bin2bcd(value[0] - 2000) # tm_year
self.i2c.writeto_mem( self.address, time_reg, self.buf7 )
@property
def datetime(self):
"""Gets or Set the current date and time then starts the clock."""
return self._read_datetime( RTC_REG )
@datetime.setter
def datetime(self, value ):
""" set the current time from the tuple (year, month, mday, hour, minute, second, weekday, yearday) """
# Automatically sets lost_power to false.
self.power_management = STANDARD_BATTERY_SWITCHOVER_AND_DETECTION
self._write_datetime( RTC_REG, value )
@property
def power_management(self):
""" Power management state that dictates battery switchover, power sources
and low battery detection. Defaults to BATTERY_SWITCHOVER_OFF (0b000). """
# i2c_bits.RWBits(3, 0x02, 5)
self.i2c.readfrom_mem_into( self.address, 0x02, self.buf1 )
return self.buf1[0] >> 5
@power_management.setter
def power_management(self, value ):
# reg 0x02 bits 5,6,7 (3 lasts bits)
self.i2c.readfrom_mem_into( self.address, 0x02, self.buf1 )
self.buf1[0] = self.buf1[0] & 0b00011111
self.buf1[0] = self.buf1[0] | (value
Подробнее здесь: [url]https://stackoverflow.com/questions/79893636/class-not-seen-as-module-no-module-when-calling-from-library-pico-micropython[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия