Diferència entre revisions de la pàgina «API de Python per a l'IoT-Vertebrae»

De binefa.com
Salta a la navegació Salta a la cerca
Línia 184: Línia 184:
 
  aout('0000','B',1,v2aout(4))
 
  aout('0000','B',1,v2aout(4))
 
= v2aout(''voltage0_10'') =
 
= v2aout(''voltage0_10'') =
Funció '''convertidora de tensió del ventall de 0V a 10V al ventall de 0 a 4095''' per al convertidor digital a analògic (DAC) de 12 bits. En cas que el valor a retornar sigui superior a 4095 retorna 4095. En cas que el valor a retornar sigui inferior a 0 retorna 0. Aquesta protecció es fa servir perquè trametre un valor superior a 4095 al DAC farà que la tensió quedi registrada al valor tramès menys 4095.
+
Funció '''convertidora de tensió del ventall de 0V a 10V al ventall de 0 a 4095''' per al convertidor digital a analògic (DAC) de 12 bits. En cas que el valor a retornar sigui superior a 4095 retorna 4095. En cas que el valor a retornar sigui inferior a 0 retorna 0. Aquesta protecció es fa servir perquè trametre un valor superior a 4095 al DAC farà que la tensió quedi registrada a llur EEPROM al valor tramès menys 4095.
 
  >>> iotv.v2aout(10)
 
  >>> iotv.v2aout(10)
 
  4095
 
  4095

Revisió del 10:41, 21 ago 2024

Hi ha dues biblioteques per a interactuar en Python des de la Raspberry Pi amb l'IoT-Vertebrae: i2c_iotv.py (abans iotv.py) i can_iotv.py.

can_iotv.py: funciona a partir de la versó 2.0 del cap. Es comunica mitjançant el bus CAN, això permet controlar vèrtebres connectades remotament a una cua.

i2c_iotv.py: funciona amb qualsevol versió de cap. Es comunica mitjançant el bus I2C.

Ús de les biblioteques des del terminal

Ús de can_iotv.py des del terminal

Cal obrir el bus CAN cal al principi del codi i podem tancar-ho al final. L'obertura i tancament del bus CAN es fa mitjançant ordres de terminal (molt més lentes d'executar que les instruccions Python).

pi@raspberrypi:~ $ python
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import can_iotv as iotv
>>> iotv.canOn()
>>> iotv.dversion("0000")
'1.2'
>>> iotv.aversion("0000")
'1.3'
>>> iotv.canOff()
>>> 
pi@raspberrypi:~ $

Ús de i2c_iotv.py des del terminal

No cal obrir el bus I2C al principi i tancar-ho al final perquè cada funció l'obre i el tanca mitjançant instruccions de Python.

pi@raspberrypi:~ $ python
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import i2c_iotv as iotv
>>> iotv.dversion("0000")
Digital rib version: 1.2
'0000000100000010'
>>> iotv.aversion("0000")
Analog rib version: 1.3
'0000000100000011'
>>> 
pi@raspberrypi:~ $

canOn()

Obertura del bus CAN (tan sols té sentit amb el paquet can_iotv. No pas amb el paquet i2c_iotv):

>>> iotv.canOn()

Es posa a l'inici de qualsevol programa que vulgui fer servir el paquet can_iotv. Aquesta funció tramet al sistema aquesta ordre de terminal:

sudo ip link set up can0 type can bitrate 100000

canOff()

Tancament del bus CAN (tan sols té sentit amb el paquet can_iotv. No pas amb el paquet i2c_iotv):

>>> iotv.canOff()

Es pot posar al final de qualsevol programa que vulgui fer servir el paquet can_iotv. Aquesta funció tramet al sistema aquesta ordre de terminal:

sudo ifconfig can0 down

dversion(addr)

L'argument addr és l'adreça de la vèrtebra digital expressada com un text de quatre zeros i uns. Aquí hi ha un enllaç a l'explicació de les adreces de la vèrtebra digital.

Retorna la versió de microprogramari (firmware) de la vèrtebra amb l'adreça passada com a argument.

  • can_iotv:
>>> iotv.dversion("0000")
'1.2'
  • i2c_iotv:
>>> iotv.dversion("0000")
Digital rib version: 1.2
'0000000100000010'

aversion(addr)

L'argument addr és l'adreça de la vèrtebra analògica expressada com un text de quatre zeros i uns. Aquí hi ha un enllaç a l'explicació de les adreces de la vèrtebra analògica.

Retorna la versió de microprogramari (firmware) de la vèrtebra amb l'adreça passada com a argument.

  • can_iotv:
>>> iotv.aversion("0000")
'1.3'
  • i2c_iotv:
>>> iotv.aversion("0000")
Analog rib version: 1.3
'0000000100000011'

getdsetup(addr)

L'argument addr és l'adreça de la vèrtebra digital expressada com un text de quatre zeros i uns. Aquí hi ha un enllaç a l'explicació de les adreces de la vèrtebra digital.

Retorna la configuració de la vèrtebra digital amb l'adreça passada com a argument. Les vèrtebres digitals s'han de configurar amb la funció dsetup(addr, modeA, modeB) per a indicar que es connecta a cada costat.

  • can_iotv:
>>> iotv.getdsetup("0000")
'A:dout, B:din'
  • i2c_iotv:
>>> iotv.getdsetup("0000")
A digital output, B digital input
'00010010'

Configuracions possibles als dos costats (A i B):

ain: Entrades digitals al costat A

aout: Sortides digitals al costat A

aoutpwm: Sortides digitals per modulació de pols (PWM) al costat A. Si hi ha aoutpwm no pot haver boutpwm (limitació pròpia de l'ESP32-S3).

bin: Entrades digitals al costat B

bout: Sortides digitals al costat B

boutpwm: Sortides digitals per modulació de pols (PWM) al costat B. Si hi ha boutpwm no pot haver aoutpwm (limitació pròpia de l'ESP32-S3).

bintouch: Entrades tàctils al costat B. No existeix aintouch perquè el maquinari no ho permet.

getasetup(addr)

L'argument addr és l'adreça de la vèrtebra analògica expressada com un text de quatre zeros i uns. Aquí hi ha un enllaç a l'explicació de les adreces de la vèrtebra analògica.

Retorna la configuració de la vèrtebra analògica amb l'adreça passada com a argument. Les vèrtebres analògiques no cal configurar-les, després del reset fan la lectura del que hi ha connectat a cada costat (ADC i/o DAC).

  • can_iotv:
>>> iotv.getasetup("0000")
'A:ain, B:aout'
  • i2c_iotv:
>>> iotv.getasetup("0000")
respA: 0x1, respB: 0x2
A rib is ADC, B rib is DAC.
'00010010'

dsetup(addr,modeA,modeB)

L'argument addr és l'adreça de la vèrtebra digital expressada com un text de quatre zeros i uns. Aquí hi ha un enllaç a l'explicació de les adreces de la vèrtebra digital.

L'argument modeA pot ser: ain, aout o aoutpwm

L'argument modeB pot ser: bin, bout, boutpwm o bintouch

  • can_iotv: <-- CAL VERIFICAR SI FUNCIONA COM S'ESPERA
>>> iotv.dsetup('0000','aout','bin')
a: aout, b: bin
'A:dout, B:din'
  • i2c_iotv:
>>> iotv.dsetup('0000','ain','bout')
ain, bout
True

Configuracions possibles als dos costats (A i B):

ain: Entrades digitals al costat A

aout: Sortides digitals al costat A

aoutpwm: Sortides digitals per modulació de pols (PWM) al costat A. Si hi ha aoutpwm no pot haver boutpwm (limitació pròpia de l'ESP32-S3).

bin: Entrades digitals al costat B

bout: Sortides digitals al costat B

boutpwm: Sortides digitals per modulació de pols (PWM) al costat B. Si hi ha boutpwm no pot haver aoutpwm (limitació pròpia de l'ESP32-S3).

bintouch: Entrades tàctils al costat B. No existeix aintouch perquè el maquinari no ho permet.

doutbit(addr, side, posbyte, value)

Funció a les dues biblioteques i2c_iotv i can_iotv. La configuració de la vèrtebra ha de ser coherent (el costat i el tipus han de coincidir: aout pel costat A o bout pel costat B).

L'argument addr és l'adreça de la vèrtebra digital expressada com un text de quatre zeros i uns. Aquí hi ha un enllaç a l'explicació de les adreces de la vèrtebra digital.

L'argument side és 'A' o 'B'.

L'argument posbyte és un valor entre 0 i 7.

L'argument value és 0 o 1.

Un exemple d'ús:

       for i in range(10):
           for bit in range(8):
               doutbit('0000','A',bit,1)
               sleep(.05)
               doutbit('0000','A',bit,0)

doutbitpwm(addr, side, posbyte, value)

Funció de la biblioteca i2c_iotv. La configuració de la vèrtebra ha de ser coherent (el costat i el tipus han de coincidir: aoutpwm pel costat A o boutpwm pel costat B).

L'argument addr és l'adreça de la vèrtebra digital expressada com un text de quatre zeros i uns. Aquí hi ha un enllaç a l'explicació de les adreces de la vèrtebra digital.

L'argument side és 'A' o 'B'.

L'argument posbyte és un valor entre 0 i 7.

L'argument value és un valor entre 0 i 255.

aout(addr, side, ndac, value)

L'argument addr és l'adreça de la vèrtebra analògica expressada com un text de quatre zeros i uns. Aquí hi ha un enllaç a l'explicació de les adreces de la vèrtebra analògica.

L'argument side és 'A' o 'B'.

L'argument ndac és 1, 2, 3 o 4

L'argument value és un valor entre 0 i 4095 (o 0x0000 i 0x0FFF). 0 és 0 volts. 4095 és 10 volts.

Per a escriure 4 volts a la sortida 1 de la costella analògica de sortides connectada al costat B:

aout('0000','B',1,v2aout(4))

v2aout(voltage0_10)

Funció convertidora de tensió del ventall de 0V a 10V al ventall de 0 a 4095 per al convertidor digital a analògic (DAC) de 12 bits. En cas que el valor a retornar sigui superior a 4095 retorna 4095. En cas que el valor a retornar sigui inferior a 0 retorna 0. Aquesta protecció es fa servir perquè trametre un valor superior a 4095 al DAC farà que la tensió quedi registrada a llur EEPROM al valor tramès menys 4095.

>>> iotv.v2aout(10)
4095
>>> iotv.v2aout(10.5)
4095
>>> iotv.v2aout(5)
2048
>>> iotv.v2aout(0)
0
>>> iotv.v2aout(-0.2)
0

ain2v(ainValue)

ain(addr, side, ndac)

ain2v(ain('0000','A',4))

ainv(addr, side, ndac)