Diferència entre revisions de la pàgina «Vertebra digital (dvert2 v2.1) - IoT-Vertebrae»
m |
m |
||
(Hi ha 25 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 1: | Línia 1: | ||
= Descripció general = | = Descripció general = | ||
− | [[Image:Dvert_v2. | + | [[Image:Dvert_v2.1_01.png|center|thumb|dvert2 v2.1]] |
+ | |||
+ | * Nivells lògics de 3,3 volts | ||
+ | |||
+ | * 16 adreces (0x20 a 0x2F) | ||
+ | |||
+ | * Comunicació I2C | ||
+ | |||
+ | * Comunicació CAN. Pont de terminació del bus CAN | ||
+ | |||
+ | * Connecta costelles digitals d'entrada i sortida als costats A i B | ||
+ | |||
+ | * Configuració d'entrades per nivell o tàctils | ||
+ | |||
+ | * Configuració de sortides per nivell o per modulació d'amplada de pols (PWM) | ||
+ | |||
+ | * Led indicador d'alimentació procedent del cap (D2) | ||
+ | |||
+ | * Botó (WEB) i led blanc (D1) per a usos personalitzables. Amb el microprogramari per defecte el led blanc indica la comunicació entre la vèrtebra i el cap | ||
+ | |||
+ | * Connector a antena de 2.4GHz | ||
= Esquema electrònic = | = Esquema electrònic = | ||
− | [[Image:dvertv21_sch.png|center|thumb|Esquema electrònic | + | [[Image:dvertv21_sch.png|center|thumb|Esquema electrònic dvert2 v2.1]] |
[https://www.binefa.cat/IoT/IoT-Vertebrae/pdf/sch/dvert21.pdf Esquema electrònic en format pdf] | [https://www.binefa.cat/IoT/IoT-Vertebrae/pdf/sch/dvert21.pdf Esquema electrònic en format pdf] | ||
+ | = Microprogramari = | ||
+ | El microcontrolador de la vèrtebra digital és un ESP32-S3. | ||
+ | |||
+ | [https://www.binefa.cat/IoT/IoT-Vertebrae/firmware/dvert_v2_20240724_01.zip Microprogramari de la vèrtebra digital] | ||
+ | |||
= Configuracions = | = Configuracions = | ||
+ | Adreces (0x20 a 0x2F): | ||
+ | |||
+ | [[Image:DvertAddr00.png|center|thumb|Adreces dvert2 v2.1]] | ||
+ | |||
+ | {| class="wikitable" style="margin:auto" | ||
+ | |+ Adreces | ||
+ | |- | ||
+ | ! A3 !! A2 !! A1 !! A0 !! text !! Hex | ||
+ | |- | ||
+ | | - || - || - || - || 0000 || 0x20 | ||
+ | |- | ||
+ | | - || - || - || x || 0001 || 0x21 | ||
+ | |- | ||
+ | | - || - || x || - || 0010 || 0x22 | ||
+ | |- | ||
+ | | - || - || x || x || 0011 || 0x23 | ||
+ | |- | ||
+ | | - || x || - || - || 0100 || 0x24 | ||
+ | |- | ||
+ | | - || x || - || x || 0101 || 0x25 | ||
+ | |- | ||
+ | | - || x || x || - || 0110 || 0x26 | ||
+ | |- | ||
+ | | - || x || x || x || 0111 || 0x27 | ||
+ | |- | ||
+ | | x || - || - || - || 1000 || 0x28 | ||
+ | |- | ||
+ | | x || - || - || x || 1001 || 0x29 | ||
+ | |- | ||
+ | | x || - || x || - || 1010 || 0x2A | ||
+ | |- | ||
+ | | x || - || x || x || 1011 || 0x2B | ||
+ | |- | ||
+ | | x || x || - || - || 1100 || 0x2C | ||
+ | |- | ||
+ | | x || x || - || x || 1101 || 0x2D | ||
+ | |- | ||
+ | | x || x || x || - || 1110 || 0x2E | ||
+ | |- | ||
+ | | x || x || x || x || 1111 || 0x2F | ||
+ | |} | ||
+ | - : sense pont (''jumper'') | ||
+ | |||
+ | x : amb pont (''jumper'') | ||
+ | |||
+ | Sense cap pont és l'adreça 0x20. Amb els quatre ponts connectats és l'adreça 0x2F. | ||
+ | == Sortides i entrades per nivell == | ||
+ | Es poden fer servir els dos costats (A i/o B) per a connectar costelles digitals d'entrada i/o sortida. | ||
+ | == Modulació per amplada de pols == | ||
+ | Tan sols pot haver una costella amb les 8 sortides PWM. Al costat A o al B. | ||
+ | == Sensors tàctils == | ||
+ | Es pot fer servir una costella protorib. '''Tan sols pot ser connectada al costat B'''. | ||
+ | |||
+ | Un cop està configurat per maquinari de la protorib per a que es connectin els sensors tàctils, heu de configurar la vèrtebra per a poder llegir els sensors tàctils. | ||
+ | |||
+ | >>> iotv.'''dsetup'''("0000","aout","'''bintouch'''") | ||
+ | aout, bintouch | ||
+ | True | ||
+ | >>> iotv.'''dsetup'''("0000","ain","'''bintouch'''") | ||
+ | ain, bintouch | ||
+ | True | ||
+ | >>> iotv.'''dsetup'''("0000","aoutpwm","'''bintouch'''") | ||
+ | aoutpwm, bintouch | ||
+ | True | ||
+ | |||
+ | Un cop s'ha fet la configuració d'entrades tàctils, la lectura dels seus valors es fa exactament igual que la lectura del registre d'entrades. | ||
+ | |||
+ | = Ús de Python = | ||
+ | Des de la Raspberry Pi connectada al cap. I el cap a una vèrtebra digital. | ||
+ | |||
+ | pi@raspberrypi:~/iot-vertebrae $ '''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 iotv''' | ||
+ | >>> iotv.'''dversion'''("0000") | ||
+ | Digital rib version: 1.2 | ||
+ | '0000000100000010' | ||
+ | >>> iotv.'''getdsetup'''("0000") | ||
+ | A digital output, B digital input | ||
+ | '00010010' | ||
+ | >>> iotv.'''dsetup'''("0000","aout","bin") | ||
+ | ain, aout | ||
+ | Setup has not been changed | ||
+ | False | ||
+ | >>> iotv.'''getdsetup'''("0000") | ||
+ | A digital output, B digital input | ||
+ | '00010010' | ||
+ | >>> iotv.dsetup("0000","ain","bout") | ||
+ | ain, bout | ||
+ | True | ||
+ | >>> iotv.getdsetup("0000") | ||
+ | A digital input, B digital output | ||
+ | '00100001' | ||
+ | >>> iotv.dsetup("0000","aout","bin") | ||
+ | aout, bin | ||
+ | True | ||
+ | >>> iotv.getdsetup("0000") | ||
+ | A digital output, B digital input | ||
+ | '00010010' | ||
+ | >>> iotv.'''din'''("0000",'b') | ||
+ | '00000000' | ||
+ | >>> iotv.din("0000",'b') | ||
+ | '00100100' | ||
+ | >>> iotv.din("0000",'b') | ||
+ | '00000000' | ||
+ | >>> iotv.'''dout'''("0000",'a',0x5A) | ||
+ | >>> iotv.'''dsetup'''("0000","aoutpwm","bin") | ||
+ | aoutpwm, bin | ||
+ | True | ||
+ | >>> iotv.getdsetup("0000") | ||
+ | A PWM output, B digital input | ||
+ | '00010100' | ||
+ | >>> iotv.'''doutpwm'''('0000','a',255) | ||
+ | >>> iotv.doutpwm('0000','a',55) | ||
+ | >>> iotv.doutpwm('0000','a',0) | ||
+ | >>> iotv.dsetup("0000","aout","bin") | ||
+ | aout, bin | ||
+ | True | ||
+ | >>> iotv.getdsetup("0000") | ||
+ | A digital output, B digital input | ||
+ | '00010010' | ||
+ | >>> iotv.'''doutbit'''('0000','a',0,1) | ||
+ | >>> iotv.doutbit('0000','a',0,0) | ||
+ | >>> iotv.dsetup("0000","aoutpwm","bin") | ||
+ | aoutpwm, bin | ||
+ | True | ||
+ | >>> iotv.getdsetup("0000") | ||
+ | A PWM output, B digital input | ||
+ | '00010100' | ||
+ | >>> iotv.'''doutbitpwm'''('0000','a',0,55) | ||
+ | >>> iotv.doutbitpwm('0000','a',0,255) | ||
+ | >>> iotv.doutbitpwm('0000','a',0,0) | ||
+ | >>> iotv.dsetup("0000","aout","bin") | ||
+ | aout, bin | ||
+ | True | ||
+ | >>> iotv.getdsetup("0000") | ||
+ | A digital output, B digital input | ||
+ | '00010010' | ||
+ | >>> | ||
+ | pi@raspberrypi:~/iot-vertebrae $ |
Revisió de 18:42, 17 ago 2024
Contingut
Descripció general
- Nivells lògics de 3,3 volts
- 16 adreces (0x20 a 0x2F)
- Comunicació I2C
- Comunicació CAN. Pont de terminació del bus CAN
- Connecta costelles digitals d'entrada i sortida als costats A i B
- Configuració d'entrades per nivell o tàctils
- Configuració de sortides per nivell o per modulació d'amplada de pols (PWM)
- Led indicador d'alimentació procedent del cap (D2)
- Botó (WEB) i led blanc (D1) per a usos personalitzables. Amb el microprogramari per defecte el led blanc indica la comunicació entre la vèrtebra i el cap
- Connector a antena de 2.4GHz
Esquema electrònic
Esquema electrònic en format pdf
Microprogramari
El microcontrolador de la vèrtebra digital és un ESP32-S3.
Microprogramari de la vèrtebra digital
Configuracions
Adreces (0x20 a 0x2F):
A3 | A2 | A1 | A0 | text | Hex |
---|---|---|---|---|---|
- | - | - | - | 0000 | 0x20 |
- | - | - | x | 0001 | 0x21 |
- | - | x | - | 0010 | 0x22 |
- | - | x | x | 0011 | 0x23 |
- | x | - | - | 0100 | 0x24 |
- | x | - | x | 0101 | 0x25 |
- | x | x | - | 0110 | 0x26 |
- | x | x | x | 0111 | 0x27 |
x | - | - | - | 1000 | 0x28 |
x | - | - | x | 1001 | 0x29 |
x | - | x | - | 1010 | 0x2A |
x | - | x | x | 1011 | 0x2B |
x | x | - | - | 1100 | 0x2C |
x | x | - | x | 1101 | 0x2D |
x | x | x | - | 1110 | 0x2E |
x | x | x | x | 1111 | 0x2F |
- : sense pont (jumper)
x : amb pont (jumper)
Sense cap pont és l'adreça 0x20. Amb els quatre ponts connectats és l'adreça 0x2F.
Sortides i entrades per nivell
Es poden fer servir els dos costats (A i/o B) per a connectar costelles digitals d'entrada i/o sortida.
Modulació per amplada de pols
Tan sols pot haver una costella amb les 8 sortides PWM. Al costat A o al B.
Sensors tàctils
Es pot fer servir una costella protorib. Tan sols pot ser connectada al costat B.
Un cop està configurat per maquinari de la protorib per a que es connectin els sensors tàctils, heu de configurar la vèrtebra per a poder llegir els sensors tàctils.
>>> iotv.dsetup("0000","aout","bintouch") aout, bintouch True >>> iotv.dsetup("0000","ain","bintouch") ain, bintouch True >>> iotv.dsetup("0000","aoutpwm","bintouch") aoutpwm, bintouch True
Un cop s'ha fet la configuració d'entrades tàctils, la lectura dels seus valors es fa exactament igual que la lectura del registre d'entrades.
Ús de Python
Des de la Raspberry Pi connectada al cap. I el cap a una vèrtebra digital.
pi@raspberrypi:~/iot-vertebrae $ 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 iotv >>> iotv.dversion("0000") Digital rib version: 1.2 '0000000100000010' >>> iotv.getdsetup("0000") A digital output, B digital input '00010010' >>> iotv.dsetup("0000","aout","bin") ain, aout Setup has not been changed False >>> iotv.getdsetup("0000") A digital output, B digital input '00010010' >>> iotv.dsetup("0000","ain","bout") ain, bout True >>> iotv.getdsetup("0000") A digital input, B digital output '00100001' >>> iotv.dsetup("0000","aout","bin") aout, bin True >>> iotv.getdsetup("0000") A digital output, B digital input '00010010' >>> iotv.din("0000",'b') '00000000' >>> iotv.din("0000",'b') '00100100' >>> iotv.din("0000",'b') '00000000' >>> iotv.dout("0000",'a',0x5A) >>> iotv.dsetup("0000","aoutpwm","bin") aoutpwm, bin True >>> iotv.getdsetup("0000") A PWM output, B digital input '00010100' >>> iotv.doutpwm('0000','a',255) >>> iotv.doutpwm('0000','a',55) >>> iotv.doutpwm('0000','a',0) >>> iotv.dsetup("0000","aout","bin") aout, bin True >>> iotv.getdsetup("0000") A digital output, B digital input '00010010' >>> iotv.doutbit('0000','a',0,1) >>> iotv.doutbit('0000','a',0,0) >>> iotv.dsetup("0000","aoutpwm","bin") aoutpwm, bin True >>> iotv.getdsetup("0000") A PWM output, B digital input '00010100' >>> iotv.doutbitpwm('0000','a',0,55) >>> iotv.doutbitpwm('0000','a',0,255) >>> iotv.doutbitpwm('0000','a',0,0) >>> iotv.dsetup("0000","aout","bin") aout, bin True >>> iotv.getdsetup("0000") A digital output, B digital input '00010010' >>> pi@raspberrypi:~/iot-vertebrae $