Új hozzászólás Aktív témák
-
cousin333
addikt
A namedtuple egy "gyártó függvény" (factory function), aminek az eredménye ebben az esetben egy osztály lesz (mintha mondjuk nem kellene megírnod a Kör osztályt előre, hanem futás közben dinamikusan hoznád létre). Az i2c_io_pinout tehát lényegében egy osztály (amit talán elegánsabb lenne ennek megfelelően camel-case-el jelölni: pl. I2cIoPinout), az i2c_io_state meg valóban egy példány.
Az adott számú "kulcsnevet" vagy az eredeti elnevezés tömbbel éred el, vagy a _fields paraméterrel. Pl.:
i2c_io_state._fields[1]Őszintén szólva nem tudom, mire kell, de nekem az a véleményem, hogy ha ezt akarod elérni, akkor nem jól használod a típust, hiszen ez pont arra lenne jó, hogy ne kelljen ismerni a sorrendet a létrehozást követően.
Alapvetően én az egész külső IC-nek egy osztályt hoznék létre, hasonlóan a már létező I2C, SPI... stb. osztályokhoz, ami aztán minden létező funkciót egy névtérbe "csomagol". Valami ilyesmi struktúrával:
class IoModule(object):MASK_SWITCH1 = 0x30def __init__(self, interface):self.port = interfaceself.portA_status = Noneself.portB_status = Nonedef connect(self):.... # connect heredef close(self):self.port.close()def update_ports(self):self.portA_status = self.port.read(<reg_portA>)self.portB_status = self.port.read(<reg_portB>)def compare_portA(self):port_old = self.portA_statusself.update_ports()port = self.portA_statusreturn port & port_old@propertydef id(self):return self.port.read(<id_reg>)@propertydef Switch1(self):return True if self.port_status & self.MASK_SWITCH else FalseEbben az esetben az osztályunk példányosításkor megkapja az interfészt (ami ebben az esetben egy I2C objektum), és azt használja a továbbiakban. A fenti kód elég kezdetleges, csak a struktúrát akartam megmutatni.
ui: ha listaelemeken akarsz végigmenni, akkor ne használd a range(len(x)) formulát. Ha az elem kell, akkor
for elem in lista:print(elem)Ha kell a sorszám is, akkor enumerate:
for i, elem in enumerate(lista):print('Az', i, 'elem a(z)', elem)Ha pedig több egyforma listád van, akkor zip:
for elemA, elemB in zip(listaA, listaB):print('Az A eleme:', elemA, 'a B eleme pedig:', elemB) -
cog777
őstag
En hasznalom a Micropythont otthoni projektjeimben.
Ha jol tudom akkor a Python 3.5-re epul. Van par limitacio az esp8266/32-on. Az elobbi nem tamogajta a szalakat, utobbi nem tud vegtelen mennyisegben szalat kesziteni es eldobni. (Igy timer-t sem erdemes hasznalni) Egy ido utan (kb 1 nap alatt ha percenkent csinalsz szalat es dobsz el pl TCP kapcsolat lekezelesere akkor) nem kepes tobb szalat kesziteni. Valamit nem szabadit fel es betellik a (stack-je) pohara

Erdemes inkabb perzisztens szal(ak)at kesziteni es hozzarendelni egy-egy feladatot.En elegedett vagyok a Micropythonnal ezeket a limitaciokat leszamitva. Pycharm-hoz allitolag van plugin is...
Csinaltam egy homerseklet mero rendszert. Kertben, padlason, nappaliban helyeztem el szenzorokat es egy kijelzon jelenitem meg. Tervben van a webes grafikon megjelenito weblap + sms riasztas ha tul magas homersekletet mer a nappaliban. (Macsek miatt)Itt a RPi4/esp32/8266 "fejlesztoi laboromat" latod


" Az Arduino-s topic elég jól pörög, nagyon sok hasznos dolog van, de ott MicroPython-ban valahogy nem nagyon láttam senkit se programozni (amúgy nem is értem miért, a C/C++ -hoz képest azért én elég sok előnyét látom így már kezdetnek is)."
A kicsi Adruino Uno/Nano-n biztosan nem fut a Micropython, kell neki kb legalabb 80KB memoria.. mas verziokon mar gondolom elindul."Vagy akár ajánlásokkal együtt (mi az amit ugyan használhatnánk Micropython/ESP alatt, de nem annyira ajánlott a viszonylag nagyobb memória vagy cpu igénye miatt)."
Ez inkabb gyakorlatban jon elo. 8266-on max 20KB szabad memoria van, ami nem tul sok de egyszerubb feladatokra eleg, esp32-on viszont tobb 100 KB vagy meg tobb attol fuggoen hogy PSRAM-ramos verziod van-e. Igy memoria limitacio kevesbe problema.A GC-t neha erdemes letiltani ha pontosabb idozitest szeretnel egy-egy feladat kozben, es utana vegrehajtani.
Ha valami kerdesed van, tedd fel nyugodtan, fel szememet a topicon tartom

-
cousin333
addikt
A mondás szerint akinek kalapácsa van, mindent szögnek néz...

Ebben az esetben én nem használnám a dictionary-t, mert nem erre való. Az a baj vele ugyanis, hogy nem fix az elemek sorrendje - a pin kiosztásod viszont igen (bár létezik OrderedDict).
Én a helyedben megismerkednék a NamedTuple típussal, illetve nem tudom, hogy hányas Python verziót használsz, de a 3.7-es verzió óta támogatott a DataClass is, ami hasonló céllal (is) készült. Ez utóbbi talán valamivel elegánsabb. Mindkettő a standard könyvtár része.
from collections import namedtuple...Ports = namedtuple('Ports', ['Switch1', 'Switch2', 'Switch3', 'Switch4','Button1', 'Button2', 'NC7', 'NC8'])...# i2c_io_readed_array: [True, True, True, True, False, True, False, False]port_state = Ports(*i2c_io_readed_array) # figyelj a csillagra!Ilyenkor sorrendben rendeli hozzá az értékeket a címkékhez. Ezek után már egyszerűen tudsz hivatkozni a tömbre, vagy egyes elemeire, valahogy így:
>>> port_state
Ports(Switch1=True, Switch2=True, Switch3=True, Switch4=True, Button1=False, Button2=True, NC7=False, NC8=False)>>> port_state.Switch2
TrueUgyanez dataclass-al:
from dataclasses import dataclass@dataclassclass InputPorts:Switch1: boolSwitch2: boolSwitch3: boolSwitch4: boolButton1: boolButton2: boolNC7: boolNC8: bool...port_state = InputPorts(*i2c_io_readed_array)A használata kb. ugyanaz, mint a namedtuple-nek.
-
cousin333
addikt
A beírt formula helyes, egyszerűen kihagyta az értékadás részt (channel dictionary =), gondolván, hogy nem kell máshol ez az info.
Gondolom már rájöttél, hogy kell az idézőjel. Én még talán kiegészíteném egy vizsgálattal és az egész olvasós részt betenném alá, valahogy így:
def adc_measure(channel_name):channel_dictionary = {'A0': 0x40,'A1': 0x41,'A2': 0x42,'A3': 0x43,}if channel_name in channel_dictionary:...bus.write_byte(I2C_address, channel_dictionary.get(channel_name)) -
cog777
őstag
-
cog777
őstag
logging modulba meret alapu es ido alapu rotalo talalhato. Jol mukodnek. Ha kell tomorites, akkor hasznalhatod a gzip modult.
logHandler = logging.handlers.RotatingFileHandler(filename, maxBytes=maxBytes, backupCount=backupCount)
logHandler.rotator = self._rotating
def _rotating(self, source, dest):
f_in = open(source, 'rb')
f_out = gzip.open(dest, 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
os.remove(source) -
justmemory
senior tag
Nem tudom, hogy a rendszer különbözősége-e... én chroot-olt kali image-en futtattam...

Bevallom, hogy nekem csak hobbi a (python) programozás; logolni nem szoktam... A threading kapcsán is a netet túrtam rengeteget anno...
Lehet, hogy érdemes már az elején a 3-asra ráállni, hiszen a 2 támogatottsága megszűnt és lassan kivezetik.
-
justmemory
senior tag
"Nem feltétlenül kell a process ID-t elmenteni, meghívhatod a pidof-ot "
Ami tulajdonképpen azt csinálja, nem ?
De, igen...
Én arra gondoltam elsőre, hogy nem kell az elején elmenteni, mert utólag is le tudod kérdezni.Ami hátrány, hogy most kétszer íródik ki a PID a terminal-ban.
Kíváncsiságból lefuttattam nálam is (2.7.3-as Python), csak annyit és csakis annyit ír ki a terminál, hogy A futo mplayer folyamatazonositoja: 17774. Tehát amit kell... -
justmemory
senior tag
A
thread()szolgál arra, hogy egyszerre több szál fusson a progin belül - ha erre gondolsz, mint subprocess, akkor igen, úgy kellene indítani szerintem. Arról tudsz akár visszajelzést is kapni, ha leáll/lefut. Nem feltétlenül kell a process ID-t elmenteni, meghívhatod apidof-ot (mint bash parancs); ezzel annyi gond van, hogy ha mondjuk több mplayer is fut egyszerre, akkor nehezen fogod tudni, hogy melyik melyik (csak mondjuk ha az indítás után rögtön futtatod a pidof-ot és kizárásos alapon eltárolod az azonosítót). De ennek ismeretében is, meg a thread kezelésénél is kvázi bármikor leállíthatod. Az, hogy éppen hol tart a lejátszásnál... Hát igen, nehezebben fogod tudni; annyira nem ástam bele magam, hogy van-e mplayer-hez esetleg python modul vagy simán bash-al ki lehet-e szedni belőle, hogy éppen hol tart. Ha utóbbit lehet, akkor elvileg arra is tudszos.systemhívást csinálni. -
cousin333
addikt
"A fordítással a compile-ra gondoltam, exe-t gyártani a forrásból"
Értem én, de mondom, hogy erre nincsen szükség, ha egyszer fenn van a Python futtatókörnyezet.
"És milyen fejlesztőkörnyezetet tudnál ajánlani, aminek valamilyen jól használható, a Microsoft Visual C-hez hasonló kialakítású kezelőfelülete van ?"
Igazság szerint nem ismerem különösebben a Visual C-t. Alapfokúbb dolgokhoz szerintem jó a "gyári" környezet, esetleg megtámogatva egy Notepad++-szerű alkalmazással. Komolyabbakhoz valóban rendelkezésre áll az említett Eclipse + PyDev. Működni működik, mert próbáltam, de nekem nincs rá szükségem.
"De elöször akkor a python.org-ról a "Python 2.6.2 Windows installer (Windows binary -- does not include source) ", meg a Java Runtime enviroment kell, nem ?"
Igen. A Java az alap Pythonhoz nem szükséges és szerintem az Eclipse is tartalmazza, ami neki kell.
"Én csak ebből gondolom, hogy menne Windows XP-n is, egyébként nem értek a Pythonhoz."
Letöltöd a win-es telepítőt és felteszed, onnantól kezdve mennie kellene, mert abban minden benne van, ami kell. A 3-assal azért nem volt jó, mert az visszafelé nem kompatibilis.
Új hozzászólás Aktív témák
- Apple watch ultra 3 hibátlan 2026.11.10. Apple jótállás
- Samsung Galaxy S22 Ultra 8/128GB, Megkímélt, Kártyafüggetlen, Töltővel, 1 Év Garanciával!
- Xiaomi Redmi 15 5G 4/128GB, Megkímélt, Kártyafüggetlen, Töltővel, Dobozzal, 1 Év Garanciával!
- Honor 90 8/256GB, Megkímélt, Kártyafüggetlen, Töltővel, 1 Év Garanciával!
- Samsung Galaxy A55 5G 8/128GB, Megkímélt, Kártyafüggetlen, Töltővel, 1 Év Garanciával!
- Bomba ár! Lenovo ThinkPad X280 - i5-G8 I 8GB I 256SSD I 12,5" FHD Touch I HDMI I Cam I W11 I Gari!
- Dell Precision 3571 4G LTE i7-12700H 16GB 512GB FHD RTX A1000 4GB 1 év teljeskörű garancia
- Apple iPhone 13 Mini 128 GB Fekete 1 év Garancia Beszámítás Házhozszállítás
- Eladó EVGA GT 640 2GB videokártya
- Akciós Windows 10 pro + Office 2019 professional plus csomag AZONNALI SZÁLLÍTÁS
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopszaki Kft.
Város: Budapest


Én arra gondoltam elsőre, hogy nem kell az elején elmenteni, mert utólag is le tudod kérdezni.

