PDF de programación - Manejo de un Socket UDP con Python

Imágen de pdf Manejo de un Socket UDP con Python

Manejo de un Socket UDP con Pythongráfica de visualizaciones

Publicado el 8 de Septiembre del 2020
1.359 visualizaciones desde el 8 de Septiembre del 2020
165,5 KB
3 paginas
Creado hace 8a (11/03/2016)
Manejo de un Socket UDP con Python

Para esta lección suponemos que cuenta
son los siguientes elementos:

• Una placa Raspberry PI.
• Un conversor MCP3008.
• Cuatro sensores MCP9700.
• Un protoboard.
• Componentes varios.
• Cables de conexión.

Para esta lección usted deberá tener los
siguientes conocimientos:

• Electrónica Digital Básica.
• Programación en Python.

En esta lección usted aprenderá:

• Manejo del protocolo SPI.
• Manejo del conversor MCP3008.
• Manejo del sensor MCP9700.
• Crear un socket servidor y un cliente.

Sensor MCP9700.

En nuestro ejemplo vamos a usar cuatro sensores fabricados por
Microchip, los MCP9700, estos sensores son analógicos similares al
clásico LM35. Básicamente el sensor envía un voltaje que es
proporcional a la temperatura a la que esta sometida su cubierta
plástica.
El sensor envía 10mV por cada grado de temperatura, debemos saber
que enviará 500 mV cuando el sensor esté a cero grados, es decir que a
cero grados el sensor ya envía ½ voltio que debemos eliminar por

software. (Este trabajo solo lee grados positivos, no se utilizan voltajes de referencia exteriores ni
masas virtuales)

Cuando se lea el conversor analógico debemos ajustar la lectura para una escala en grados
centígrados, en las líneas siguiente podemos ver el trozo de código que lee la información desde el
conversor y la escala a grados centígrados.

def Lee_Canal(channel):
# Función para leer el conversor MCP3008
adc = spi.xfer2([1,(8+channel)<<4,0]) # Leemos el conversor en el canal indicado.
dato = ((adc [1] & 3) << 8) + adc[2]
temp = dato – 0.5

# Ajustamos el binario a 10 bits.
# Quitamos el efecto “cero grados”, 500 mV

1

temp = temp / float(10)
return temp

# Escalamos, son 10 mV por grado
# Retorna el valor ajustado y listo para enviar.

Conversor MCP3008.
Este es un conversor de 10 bits, se controla con el protocolo de comunicaciones SPI, protocolo de
uso común en el mundo de la electrónica y microcontroladores.

Para poder usarlo en Raspberry con Python necesitamos instalar su correspondiente módulo y para
esto seguimos unos simples pasos.

1. sudo apt-get install python-dev
2. wget https://github.com/Gadgetoid/py-spidev/archive/master.zip
3. unzip master.zip
4. cd py-spidev-master
5. sudo python setup.py install

Con esto tendremos control del puerto SPI de Raspberry. La placa tiene dos puertos sin embargo
ambos comparten los pines de control (CK, MOSI, MISO) siendo la habilitación de chip (CS)
independiente. Esto dice que si bien podemos tener dos dispositivos SPI en distinto puerto y
controlarlos mediante el Chip-Set, solo podemos usar uno a la vez ya que comparten los pines de
control.

El protocolo en si mismo no es muy complejo, sin embargo la capa de software provista por Python
y su librería nos ahorra todo el problema de lidiar con ventanas de tiempo y control de bits. La
función encargada de la comunicación con el MCP3008 es:

adc = spi.xfer2([1,(8+channel)<<4,0])

spi.xfer2() envía tres bytes y retornan también tres bytes. El
primer byte enviado es siempre 1, es el bit de inicio, el
segundo byte es la configuración del chip de acuerdo a su
hoja de datos podemos ver en la tabla 5-2. (ver imagen)

Donde Single/Diff son los dos modos en que este conversor
puede trabajar, simple o diferencial. Nos interesa el modo
simple, luego vemos D0, D1, D2, con tres bits podemos hacer
8 combinaciones de 000 a 111 que corresponde a los 8
canales del conversor. Con esos tres bits elegimos el canal.

(8+channel)

Ocho es la selección del modo “simple” mas el canal que
leemos, corremos todo cuatro lugares para ordenar los datos
como el chip espera recibirlos <<4 , el tercer byte no
importa y es siempre cero.

Los datos leídos llegan a nuestra placa por el pin MISO bit a

2

bit a bit al ritmo de los pulsos de reloj que salen por CLK.
Los datos recibidos se guardan en adc que es una cadena de tres bytes. Son enviados por el
conversor en formato Little-Endian lo que hace la decodificación un tanto engorrosa.

La función encargada de la interpretación del dato es:

dato = ((adc [1] & 3) << 8) + adc[2]

Recordemos que el conversor tiene 10 bits por lo que pude generar datos comprendidos entre 0 y
1023. El dato mas alto será 0x3FF o lo que es igual al binario xxxxxx11 1111 1111

Mirando la hoja de datos vemos la forma en que nos llegan los tres bytes enviados por el conversor

El byte cero no tiene información de utilidad, el byte uno contiene los dos bits mas significativos
del dato y el byte dos los ocho bits de la parte baja del dato. Recuerde el conversor es de 10 bits.
Aquí ((adc [1] & 3) << 8) se toma el elemento 1 del la cadena de tres bytes contenida en adc[]
y se aplica una máscara and con el número 3 para cortar los dos primeros bits, desplaza 8 lugares a
la izquierda para dejar lugar a los ocho bits de la parte baja de la medición + adc[2] que están en
el vector dos de la cadena de tres bytes.

El conversor tiene 8 canales direccionables de 0 a 7, solo se puede medir en un canal a la vez, y la
selección del canal ocurre en las siguientes líneas del programa.

def Canal_Selec():

canal = 0
global V1
V1 = Lee_Canal(canal)
canal += 1
global V2
V2 = Lee_Canal(canal)

3
  • Links de descarga
http://lwp-l.com/pdf18185

Comentarios de: Manejo de un Socket UDP con Python (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad