Electrónica y programación para Microcontroladores.

Libros técnicos para electrónica programable.

Email
Contactanos en:

consultas@firtec.com.ar

Arduino

Conociendo el nuevo Bluetooth versión 4,2.

Bluetooth es la norma que define un estándar global de comunicación inalámbrica que posibilita la transmisión de voz y datos entre diferentes equipos mediante un enlace por radiofrecuencia en la banda abierta de 2.4 Ghz.

Esta nueva versión se podría decir que es un paso necesario en la Internet de las cosas, la actualización de núcleo Bluetooth a la versión 4,2 supone un paso pequeño si lo comparamos con saltos como el de 3 con capacidad de enviar 24 Mbps. Versión 4.0 con 32 Mbps, y la actual 4,2 que puede superar en mas de 10 veces a la versión anterior.

A partir de ahora, los dispositivos que usen la nueva especificación serán capaces de conectarse a Internet sin intermediarios ni conexiones a redes WiFi, gracias al soporte IPv6/6LoWPAN.
Además, Bluetooth Smart también se actualiza con GATT para mejorar esta posibilidad.

Se ha mejorado la velocidad siendo ahora 2.5 veces más rápido y envía 10 veces más información en comparación a especificaciones anteriores.
La clasificación de los dispositivos bluetooth como "Clase 1" o "Clase 2" es únicamente una referencia de la potencia de transmisión del dispositivo, siendo totalmente compatibles los dispositivos de una clase con los de la otra.

Los dispositivos de Clase 1 se definen como con un alcance de hasta 100 metros, mientras que los de Clase 2 llegan hasta los 20/30 metros. Si un dispositivo de clase 1 desea conectarse con uno de clase 2, deberán colocarse la distancia del alcance del de clase 2, ya que por más que el otro sea clase 1, debe ponerse a la distancia donde llega el de clase 2.

Las distancias que indican las especificaciones son medidas tomando punto a punto dos dispositivos de la misma clase, instalados a campo abierto, sin ninguna interferencia. La realidad es que en instalaciones normales en interiores de edificios, la distancia oscila entre 5 y 25 metros, según las condiciones ambientales.

Para comunicar dispositivos a corto alcance, de forma cómoda y sin cables, la tecnología Bluetooth es la opción más sencilla. Es un estándar inalámbrico disponible en todo el mundo que conecta entre sí teléfonos móviles, ordenadores portátiles, manos libres para el coche, reproductores de MP3 y muchos dispositivos más. Gracias al exclusivo concepto de “perfiles”, no es necesario instalar controladores en los dispositivos provistos de la tecnología Bluetooth. Este estándar sigue en constante desarrollo, reforzando sus puntos fuertes, bajo consumo, mínimo costo, seguridad integrada, fiabilidad, facilidad de uso, etc. Al estar disponible en todo el mundo a través de la banda ISM abierta de 2.4 GHz, la fiabilidad fue prioritaria desde un primer momento. Gracias a la función de salto adaptable de frecuencia (AFH), la señal “salta” y limita las interferencias de otras señales. Es más, la tecnología Bluetooth cuenta con seguridad integrada, como el cifrado de 128 bits y la autenticación mediante código PIN.

Cuando los productos Bluetooth se identifican y conectan entre sí por primera vez, se utiliza el código PIN para garantizar una conexión segura en todo momento.
Bluetooth 4.2 ya no solo puede conectar dispositivos entre si, sino también vincularlos a Internet!!
Información sobre como implementar Bluetooth con electrónica la encontrará en nuestros libros técnicos.

 


 

 

 

 

Socket bloqueantes vs. No-bloqueantes

De las diferentes formas de conectar procesos y máquinas, los sockets son lejos la más popular y para una comunicaciones inter-plataforma los sockets son casi la única elección.
Se inventaron en Berkeley como parte de la variante BSD de UNIX se extendieron muy rápidamente junto con Internet. Y con razón, la combinación de los sockets con Internet hace que la comunicación entre dispositivos electrónicos de cualquier tipo sea increíblemente sencilla lo que nos permite conectarnos a máquinas en cualquier parte del mundo e interactuar con ellas.

Crear un socket

Solo necesitamos tres datos:

  • El protocolo a usar.
  • La dirección IP.
  • El puerto donde recibiremos la información

Las siguientes líneas crean un socket UDP en Python.

1
2
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.bind((Dir_IP, UDP_Puerto))

 

Enviando datos por un socket.

Para enviar datos por un socket nada mas simple que:

 
sock.sendto("Voltios:% .2f" % Va, (Dir_IP, UDP_Puerto))

 

Esto enviará la palabra Voltios: seguido por la variable Va en formato float con dos decimales a la dirección y puerto indicado.

Recibiendo datos de un socket.

Aquí es donde se presenta un dilema. La siguiente línea podrá recibir 1024 bytes desde un socket y los guarda en datos.

datos = sock.recv(1024)

 

Sin embargo el método recv() es un método de bloqueo por lo que mientras no existan datos se quedará esperando que lleguen colapsando el resto del programa. Dependiendo de que estemos haciendo esto puede ser un serio problema, para solucionarlo recurrimos al método setblocking(0) con el argumento 0 o False para evitar el bloqueo.

Ahora bien setblocking() es un método no siempre entendido en cuanto a su funcionamiento, no solo basta con agregar la línea, si no hay datos que recibir setblocking genera un error, una excepción, algo así como “No hay datos intente de nuevo”, pero esta excepción debemos capturarla y actuar en consecuencia.

# -*- coding: utf-8 -*-
#!/usr/bin/env python
import socket
import sys
import select
import errno
import time
from Tkinter import *
from tkMessageBox import showinfo
 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Crea un socket INET del tipo UDP
sock.bind((Dir_IP, UDP_Puerto))                 
sock.setblocking(0)  <<<<<<<<<<< Esta línea impide el bloqueo en el receptor
	.
  	.

 
El método o función del receptor quedaría como sigue:

1
2
3
4
5
6
7
8
9
10
11
def RX_Socket():
    try:          <<<<<<<<<<<<<<<<<<<<<< Captura el error del método recv()
        datos = sock.recv(1024)
    except socket.error, e:
        err = e.args[0]
        if err == errno.EAGAIN or err == errno.EWOULDBLOCK:
            time.sleep(0.01)
            #print 'No hay datos!!'   <<<<<<<<<<< Hace algo si hay error pero no bloquea!!!    
    else:
        label.config(text = datos)    <<<<<< Si todo OK el programa continua 
   

 
Es evidente que en un tiempo donde todo esta conectado, los sockets ofrecen una solución de conectividad rápida, simple y abierta al mundo corriendo sobre la arquitectura que ofrece TCP-IP. Hacer vigilancia remota, mediciones, verificaciones de estado, control de procesos y enviar estos datos a cualquier parte dentro o fuera de la Intranet es una de las ventajas que ofrecen los sockets en el mundo de la electrónica moderna.
Puede aprender mas sobre socket en nuestro libro Python Fácil con Arduino.

 


Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

 

 

Este conversor de 12 bits es ideal para dotar a Raspberry con la funcionalidad de poder hacer mediciones en el mundo físico y pasarlas al sistema digital.
Para su funcionamiento simplemente hemos pasado las rutinas de C a Python logrando el mismo nivel de precisión y estabilidad que en los códigos originales de C.
El conversor es leído 16 veces para luego promediar las mediciones y mostrarlas en una terminal. Si se usara un conversor con mas canales solo hay que cambiar el canal antes de llamar al método Conversor().

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#******************** FUNCIÓN QUE LEE EL CONVERSOR *************************
def Conversor():
    M0 =0
    muestras =0
    while muestras <= 15:
        adc = spi.xfer2([0, 0])
        hi = (adc[0] & 0x1F);
        low = (adc[1] & 0xFe);
        dato = (hi << 8) | low;
        M0 += dato
        muestras += 1
 
    dato = M0 / 16
    Va = (long) (dato) * 3.3 / 8192.0;
    print "Voltios:% .3f" % Va
    
#**************************************************************************

 

Para la configuración inicial del bus SPI y su comunicación con el conversor se han importado los correspondientes módulos para una correcta comunicación a nivel de hardware.

 

1
2
3
import spidev
spi = spidev.SpiDev()
spi.open(0, 0) 

 

Instalar los controladores para el bus SPI en Raspberry lo podemos resumir en una serie de pasos simples que ejecutamos en la consola RaspBian.

 

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

 

También podríamos adecuar el script para ver el voltaje en una pantalla LCD.

 

 

Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

Que es un socket?

Seguramente encontrará variadas definiciones de lo que es un Socket en redes informáticas, sin embargo desde el punto de vista de la electrónica con microcontroladores, podríamos simplemente decir que es el RS-232 de TCP-IP.

Una de las formas mas simples de conectar un microcontrolador, PLC o electrónica en general a una computadora es a través de una UART con el conocido protocolo RS-232. Un socket hace eso mismo, establece una conexión entre dos puntos, sin importar donde se encuentren estos puntos y esto si es una gran diferencia con el viejo RS-232.

Podemos hacer una medición de voltaje, temperatura, humedad o lo que fuera necesario verificar y transmitir estos datos a cualquier parte del mundo por TCP-IP para esto solo necesitamos tres cosas:

  1. Una dirección IP donde enviar los datos.
  2. Un puerto virtual donde los datos será recogidos.
  3. El conocimiento para darle forma a la idea wink