Raspberry PiIoT Projects
Raspberry PiIoT Projects
Raspberry PiIoT Projects
Frambuesa
Pi Proyectos de la IO
Los experimentos de prototipos para Makers
-
John C. Shovic
Frambuesa Pi IO
proyectos
John C. Shovic
Liberty Lake, Washington, EE.UU. ISBN-13
Esta obra está sujeta a derechos de autor. Todos los derechos están reservados por el editor, si la totalidad o parte del material se refiere, en concreto los
derechos de traducción, reimpresión, la reutilización de las ilustraciones, la recitación, la radiodifusión, la reproducción en microfilm o en cualquier otra forma
física, y transmisión o almacenamiento de información y la recuperación, la adaptación electrónico, software informático, o por metodología similar o no conocido
actualmente o desarrollado en el futuro. Exentos de esta reserva legal son breves extractos en relación con los exámenes o análisis académico o materiales
suministrados específicamente con el fin de ser introducido y ejecutado en un sistema informático, para su uso exclusivo por parte del comprador de la obra. La
duplicación de esta publicación o partes de los mismos se permite solamente bajo las disposiciones de la Ley de Propiedad Intelectual sobre la ubicación del
Editor, en su versión actual, y el permiso para su uso siempre debe ser obtenido de Springer. Permisos de uso se pueden obtener a través de Rightslink en el
Centro de Copyright Clearance. Violaciónes deben ser procesados bajo la respectiva Ley de Propiedad Intelectual. nombres de marcas registradas, logotipos y
las imágenes pueden aparecer en este libro. En lugar de utilizar un símbolo de marca con cada ocurrencia de un nombre, logotipo o imagen de marca registrada
que utilizamos los nombres, logotipos e imágenes solamente de forma editorial y para el beneficio del propietario de la marca, sin intención de infracción de la
marca. y las imágenes pueden aparecer en este libro. En lugar de utilizar un símbolo de marca con cada ocurrencia de un nombre, logotipo o imagen de marca
registrada que utilizamos los nombres, logotipos e imágenes solamente de forma editorial y para el beneficio del propietario de la marca, sin intención de
infracción de la marca. y las imágenes pueden aparecer en este libro. En lugar de utilizar un símbolo de marca con cada ocurrencia de un nombre, logotipo o
imagen de marca registrada que utilizamos los nombres, logotipos e imágenes solamente de forma editorial y para el beneficio del propietario de la marca, sin
La utilización de esta publicación de nombres comerciales, marcas registradas, marcas de servicio y términos similares, aunque no se identifican
como tal, no debe ser tomado como una expresión de opinión en cuanto a si son o no están sujetos a derechos de propiedad.
Mientras que el asesoramiento y la información en este libro se cree que son verdadera y exacta a la fecha de publicación, ni los autores ni
los editores ni el editor puede aceptar ninguna responsabilidad legal por cualquier error u omisión que se pueden hacer. El editor no ofrece
ninguna garantía, expresa o implícita, con respecto al material contenido en el presente documento.
Distribuido a la industria del libro en todo el mundo por Springer Science + Business Media Nueva York, 233 Spring Street, 6th Floor, New
York, NY 10013. Teléfono 1-800-Springer, fax (201) 348 a 4.505, e-mail [email protected] , o visitar www.springer.com . Apress
Media, LLC es una LLC de California y el único miembro (propietario) es Springer Science + Business Media Finance Inc (SSBM Finance Inc).
SSBM Finance Inc es una Delaware sociedad. Para obtener información sobre traducciones, envíe un correo electrónico [email protected] , o
visitar www.apress.com .
Apress y amigos de los libros ED se pueden comprar en grandes cantidades para uso académico, corporativo o de promoción. versiones de libros
electrónicos y licencias también están disponibles para la mayoría de los títulos. Para obtener más información, hacer referencia a nuestra página web de
Cualquier código fuente u otros materiales complementarios que se hace referencia por el autor en este texto están disponibles para los lectores en www.apress.com
. Para obtener información detallada acerca de cómo localizar el código fuente de su libro, vaya a www.apress.com/source-code/ .
v
Contenido
vii
■ CONTENIDO
¿Cómo funciona este dispositivo se conectan a la IOT? ........................................ ... sesenta y cinco
viii
■ CONTENIDO
ix
■ CONTENIDO
X
■ CONTENIDO
La revisión de los resultados del Monitor de serie Arduino IDE ........................................... .... 170
Viendo datos en tiempo real en la plataforma IBM IOT bluemix ............................... 179
xi
■ CONTENIDO
Lo que hay que hacer con los datos de RFID en el servidor ..................................... 210
IOT: Top Cinco cosas que debe saber sobre IOT Computer Security ................ 214
Número 1: Se trata de importante. Puede probar su aplicación es inseguro, pero no se puede probar su
xii
■ CONTENIDO
Número 5: Seguridad informática se basa en tres aspectos principales: Con fi dencialidad, integridad y disponibilidad
................................ .................................................. ..... 215
La construcción de tres componentes de seguridad básica para IOT Computadoras .... 217
Disponibilidad - Manejo de DOS / Pérdida de servidor / Los perros guardianes .................................... 225
xiii
Sobre el Autor
servido como un profesor de informática de la Universidad del Este de Washington, la Universidad Estatal de Washington y la
Universidad de Idaho. El Dr. Shovic ha dado más de ochenta conferencias invitadas y ha publicado más de setenta trabajos
sobre una variedad de temas Arduino / Frambuesa Pi de, HIPAA, GLB, la seguridad informática, informática forense, y
sistemas embebidos.
xv
Sobre el revisor
técnico
Gheorghe Chesler es un ingeniero de software senior con experiencia en Aseguramiento de la Calidad, Sistema de
automatización, ingeniería de rendimiento, y la publicación electrónica. Trabaja en ServiceNow como Ingeniero de las
Realizaciones, y es un asesor técnico principal de Plural Publishing, una editorial-campo de la medicina. Su lenguaje de
programación preferido es Perl (tanto es así que se identifica con la mascota de Perl, por lo tanto, la imagen del camello), pero
también ha trabajado en muchos proyectos de Java y Objective-C.
xvii
Expresiones de gratitud
El autor desea reconocer el duro trabajo del equipo editorial APulse en poner este libro juntos.
También quisiera reconocer el duro trabajo de la Fundación Raspberry Pi y el grupo de Arduino para la
elaboración de productos y comunidades que ayudan a hacer que el Internet de las cosas más
accesible para el público en general. Viva la democratización de la tecnología!
xix
Introducción
El Internet de las Cosas (IOT) es un concepto complejo, con muchas computadoras y muchas rutas de comunicación. Algunos
dispositivos IO estén conectados a Internet y algunos no lo son. Algunos dispositivos IOT forman enjambres que se comunican
entre sí. Algunos están diseñados para un solo propósito, mientras que algunos son ordenadores de propósito más general.
Este libro está diseñado para mostrar la IOT, de adentro hacia afuera. Con la construcción de dispositivos de IOT, el lector
podrá entender los conceptos básicos y será capaz de innovar utilizando los conceptos básicos para crear sus propias
aplicaciones IOT.
Estos proyectos incluidos mostrarán al lector cómo construir sus propios proyectos IOT y ampliar en los
ejemplos mostrados. La importancia de la seguridad informática en dispositivos IOT también se discute y diversas
técnicas para mantener la IOT salvo de usuarios no autorizados o hackers. La conclusión más importante de este libro
es en la construcción de los proyectos de usted mismo.
xxi
Capítulos de un vistazo
En este libro, hemos construido ejemplos de todas las partes principales de dispositivos simples y complejos IOT.
poder y errores de programación mediante el uso de un buen diseño y organismos de control del sistema.
Capítulo 4 Resulta una Raspberry Pi en un dispositivo alimentado por batería que detecta iBeacons y controla la
iluminación en una casa al informar de su ubicación a un servidor.
en el capítulo 5 , Que va a hacer IOT la forma en que los chicos grandes conectando hasta la IBM
Bluemix IOT servidor y enviar nuestras tasas de pulso biométricos para el almacenamiento y visualización.
en el capítulo 6 , Vamos a construir un pequeño sistema RFID de inventario y el uso de protocolos estándar
MQTT como para enviar información a un Raspberry Pi, un producto completo IOT.
Capítulo 7 muestra el lado oscuro de la IOT, Seguridad Informática. La manera de proteger el dispositivo de IOT de
piratas informáticos y problemas de la red es la parte más difícil del dispositivo IOT y el diseño del sistema.
xxiii
CAPÍTULO 1
Introducción a la IOT
Capítulo Objetivo: entender lo que el IOT es y cómo hacer un prototipo dispositivos IOT
• Lo que es IOT
El IOT es un nombre para la vasta colección de “cosas” que se están conectados en red en el hogar y en el lugar de trabajo
(hasta 20 mil millones para el año 2020 de acuerdo con Gardner, una empresa de consultoría de tecnología). Esa es una muy
vasta colección. Y pueden ser subestimarla.
Todos tenemos un gran número de computadoras en una casa moderna. Acabo de hacer un tutorial de mi casa, haciendo caso omiso
de mi oficina (que se llena con otros ordenadores ~ 100). He encontrado 65 dispositivos diferentes que tienen ordenadores integrados. Estoy
seguro de que echaba de menos a algunos de ellos. Ahora de esos dispositivos basados en computadoras, conté 20 de ellos que tienen
direcciones IP, aunque sé que me falta unos pocos (como por ejemplo el termostato). Así que en un sentido real, esta casa cuenta con 20
dispositivos IOT. Y es sólo 2,016 partir de la redacción de este libro. Con más de 100 millones de hogares en los Estados Unidos solamente,
material complementario electrónico La versión en línea de este capítulo (doi: 10.1007 / 978-1-4842-1377-3_ 1 ) Contiene
material suplementario, que está disponible para los usuarios autorizados.
• Actuadores - IOT dispositivos que hacen algo. Cierre las puertas, pitido, encienden las luces, o encender
el televisor.
Por supuesto, no todos los dispositivos IOT tiene los tres, pero estas son las características de lo que nos encontraremos
por ahí.
Es valiosa la IOT? ¿Hará la diferencia? Nadie está seguro de lo que será la aplicación estrella, pero la
gente está apostando grandes sumas de dinero que habrá una aplicación asesina. La lectura de este libro y
hacer los proyectos le enseñará mucho sobre la tecnología y le permiten crear sus propias aplicaciones IOT.
Al igual que Windows, Linux es un sistema operativo multitarea, pero a diferencia de Windows, que es un sistema de
código abierto. Usted puede obtener todo el código fuente y compilarlo si lo desea, pero yo no recomendaría que para un
principiante.
Una de las mejores partes de la Frambuesa Pi es que hay un gran número de controladores de dispositivos y sensores
disponibles, lo que hace que sea una buena opción para la construcción de proyectos de IOT,
2
CAPÍTULO 1 ■ INTRODUCCIÓN A IOT
especialmente usarlo como un servidor para su proyecto IOT. El Frambuesa Pi no es un dispositivo de baja potencia, lo que limita su
uso como un dispositivo de IOT. Sin embargo, todavía es un gran dispositivo de prototipos y un gran servidor.
Hay una variedad desconcertante en lugar de placas de Frambuesa Pi disponibles. Sugiero para este libro que se obtiene un
IP o frambuesa 2 Frambuesa Pi 3. Mientras que el $ 5.00 Frambuesa Pi cero es tentador, se necesita un poco de otro hardware
para conseguir que el punto en que se puede utilizar. Mientras que la Frambuesa Pi 3 es más caro ($ 35), que viene con una
interfaz de conexión Wi-Fi incorporado y puertos USB adicionales.
Tenga en cuenta que estamos usando la Frambuesa Pi A + para la construcción de la estación meteorológica IOTWeatherPi más
adelante en este libro. La razón de ello es el consumo de energía: la mitad o un tercio de la energía utilizada por los modelos más
potentes Frambuesa Pi.
Hay muchos tutoriales en la web para configurar el Pi de frambuesa y conseguir el software del
sistema operativo en ejecución.
• comunicaciones
• procesador Power
• Almacenamiento local
• El consumo de energía
• funcionalidad
• Costo
Cuando pienso en estas características, me gusta calificar cada uno en una escala del 1-10, siendo 1 el menos
adecuado para IOT y 10 es la más adecuada para aplicaciones de IO. Anotando cada uno me obliga a pensar
cuidadosamente acerca de cómo un proyecto dado cae en el espectro de idoneidad.
3
CAPÍTULO 1 ■ INTRODUCCIÓN A IOT
comunicaciones
Las comunicaciones son importantes para proyectos IOT. De hecho, las comunicaciones son fundamentales para todo el género.
Hay una compensación para los dispositivos IOT. Cuanto más complejo y los protocolos más altas las tasas de datos, el
procesador más potente que necesita y la potencia eléctrica más el dispositivo IOT consumirán.
comunicaciones de base TCP / IP (piensan servidores web; la conmutación basada en HTTP (como servidores de descanso);
flujos de datos; UDP - véase el capítulo 2 ) Proporcionar la mayor flexibilidad y funcionalidad a un costo de procesador y de energía
eléctrica.
BlueTooth de baja potencia y tipos de conexiones permiten Zigbee potencia mucho menor para las conexiones con la
correspondiente disminución en el ancho de banda y la funcionalidad.
IOT proyectos pueden ser por todo el mapa de los requisitos para las necesidades de comunicación de flexibilidad y de ancho de
banda de datos.
IOT dispositivos que tienen el apoyo total de TCP / IP son la mejor en esta categoría, pero probablemente serán
marcados en otras categorías (como el consumo de energía).
procesador Power
Hay un número de diferentes formas de medir la potencia del procesador. La velocidad del procesador, tamaño de instrucciones del
procesador y sistema operativo, juegan en este cálculo. Para la mayoría de aplicaciones de sensores y dispositivos IOT, no estará
limitado por la velocidad del procesador, ya que son todos bastante rápido. Sin embargo, hay una excepción a esto. Si está
utilizando técnicas de cifrado y descifrado (véase el capítulo 7 ), Entonces esas operaciones son computacionalmente caro y
requieren más potencia de procesador para funcionar. La compensación puede ser que usted tiene para transmitir o recibir datos de
forma mucho más lenta debido a los requisitos computacionales de cifrar / descifrar los datos. Sin embargo, para muchos proyectos
IOT, esto está muy bien.
potencia del procesador más alto se da a las calificaciones más altas en esta categoría.
Almacenamiento local
El almacenamiento local se refiere a los tres principales tipos de almacenamiento: memoria RAM, EEPROM y memoria flash.
RAM (Random Access Memory) es de alta velocidad de datos, memoria de lectura / escritura, generalmente utilizado para datos
y almacenamiento de pila durante la ejecución del programa de IOT. EEPROM (eléctricamente programable y borrable memoria de
sólo lectura) se utiliza para escribir pequeñas cantidades de información de configuración para el dispositivo IOT para su lectura en el
encendido. Memoria flash se utiliza generalmente para el código del programa en sí. Flash es legible al azar (como el código se
ejecuta, por ejemplo), pero sólo se puede escribir en bloques grandes y muy lentamente. Flash es lo que usted está poniendo su
código en el IDE de Arduino (véase el capítulo 2 ). La cantidad de almacenamiento local (especialmente RAM) se sumará al costo de
su dispositivo IOT. Para la creación de prototipos, cuantos más mejor. Para la implementación, menos es mejor, ya que reducirá su
costo.
4
CAPÍTULO 1 ■ INTRODUCCIÓN A IOT
El consumo de energía
El consumo de energía es la pesadilla de todos los dispositivos IOT. Si no está conectando su dispositivo IOT en la pared, a
continuación, se ejecuta fuera de las baterías o células solares y cada recuento milivatios en su diseño. Reducir el consumo de
energía es un tema complejo que es mucho más allá de los proyectos de introducción a este libro. Sin embargo, los conceptos
son bien comprendidas por la siguiente:
Cuanto mayor sea el número en esta categoría, menos potencia de la unidad IOT utiliza.
funcionalidad
Esta es una especie de cajón de sastre que es bastante subjetiva. Por ejemplo, tener GPIO adicionales (uso general de entrada
salidas) disponibles es muy bueno para la flexibilidad. Estoy funcionando continuamente en limitaciones GPIO con el Adafruit Hurra
ESP8266 ya que hay pocos pines disponibles. Que tienen interfaces seriales adicionales son muy útiles para la depuración. apoyo
especial de hardware para el cifrado y el descifrado puede hacer que la seguridad informática dispositivo mucho más simple. Una de
las cosas que echo de menos en la mayor parte del sistema de prototipado IOT es hardware y software de soporte de depuración.
También incluyo la disponibilidad de librerías de software para una plataforma en esta categoría. A diez significa muy alta
funcionalidad; números bajos significan una funcionalidad limitada.
Costo
¿Qué es un costo aceptable para su dispositivo IOT? Eso depende del valor del dispositivo y el mercado para su dispositivo.
Un precio de $ 2.50 puede ser grande para prototipos, pero será la muerte del producto de la producción. Es necesario
dimensionar el precio del producto y el mercado. Los números altos son unidades de bajo costo y bajo número son
dispositivos de mayor costo.
5
CAPÍTULO 1 ■ INTRODUCCIÓN A IOT
• Solder, colofonia-core, 0,031” de diámetro, 1/4 lb (100 g) de carrete - para soldar con
• Mecha de soldadura / trenza de 5 pies carrete - Se utiliza junto con el succionador de soldadura a
• alambre de núcleo sólido, 22 AWG, 25 pies carretes - negro, rojo y amarillo para el pan-embarque
y cableado
Adafruit tiene un equipo de excelentes principiantes por $ 100 [ https://www.adafruit.com/ productos / 136] . Figura 1-2 muestra
las herramientas que están en él.
6
CAPÍTULO 1 ■ INTRODUCCIÓN A IOT
¿Por qué estamos usando C ++ para la mayoría de los dispositivos IOT? Hay cuatro razones para esto:
• Los programas en C se compilan en código nativo para estos pequeños dispositivos, que le da
mucho mejor control sobre el tamaño y el tiempo. Python requiere un intérprete, que es una gran
cantidad de código que no caben en pequeños dispositivos IOT, como el Arduino. En un
Frambuesa Pi, es posible que tenga un Gigabyte (GB) de RAM y 8 GB de almacenamiento tarjeta
SD. En un dispositivo IOT, es posible que sólo 2.000 bytes (2K) y 32 KB de almacenamiento de
códigos. Esa es una razón de 500.000 a 1. Esa es la razón por lo que necesita un código eficiente
en dispositivos IOT. Sí, hay MicroPython, pero es muy limitado y todavía utiliza más memoria que
la mayoría de las placas Arduino.
• Cuando se programa en C / C ++, que están más cerca del hardware y tener un mejor control de
la programación de las operaciones. Esto puede ser muy importante en algunas situaciones.
Uno de los temas de Python es la del recolector de basura de memoria. A veces, el programa se
ejecutará sin memoria y Python invocará el recolector de basura para limpiar la memoria y
configurarlo para su reutilización. Esto puede causar que su programa no se ejecutará en el
momento que esperaba. Una nota interesante es que el ESP8266 utilizado en varios capítulos
de este libro también tiene un recolector de basura de memoria, lo que puede causar algunos
problemas en secuencias de tiempo críticos. Ninguno de se sabe que existe en el código
utilizado en este libro. Mantener los dedos cruzados, sin embargo.
• Bibliotecas, librerías, bibliotecas. Puede encontrar bibliotecas Arduino C / C ++ para casi cualquier
dispositivo y la aplicación se puede imaginar para aplicaciones IOT. La biblioteca de Arduino en sí
está lleno de grandes cantidades de funcionalidad, por lo que es mucho más fácil conseguir su
aplicación IOT en funcionamiento.
7
CAPÍTULO 1 ■ INTRODUCCIÓN A IOT
• Por último, el IDE Arduino (entorno de desarrollo integrado) es un ambiente bueno (pero
no genial) para escribir código para dispositivos pequeños. Tiene sus peculiaridades y
algunas desventajas. El número uno desventaja del IDE Arduino es que no tiene un
depurador incorporado. Incluso con esta desventaja significativa, que se ejecuta en
Linux, Windows y Mac, y lo vamos a utilizar en este libro. El IDE de Arduino está
ampliamente disponible, y hay muchos recursos para el aprendizaje y bibliotecas
diseñadas para ello. Otras alternativas incluyen Visuales Micro (se ejecuta en Windows,
basado en Microsoft Visual Studio) y Eclipse (se ejecuta en Linux, Windows y Mac).
Eclipse puede ser una pesadilla para establecer y actualizar, pero se han realizado
mejoras en los últimos años.
En este libro
¿Qué vamos a hacer en los próximos capítulos? Vamos a construir proyectos IOT reales que en realidad tienen una gran cantidad
de funcionalidad. Sí, es divertido a parpadear un LED, pero es sólo el primer paso para hacer las cosas realmente interesantes y
útiles con toda esta nueva tecnología. Construir una estación meteorológica IOT. Construir un enjambre luz IOT. Construir su propio
dispositivo IOT con sus propios sensores. Todo es accesible y de bajo costo y dentro de su capacidad si usted es un ingeniero o no.
8
CAPITULO 2
Al percibir su entorno
IOT
• La construcción de un dispositivo sensor de IOT de bajo costo basado en el IDE de Arduino y ESP8266
En este capítulo, construimos nuestro primer dispositivo IOT. Este diseño simple, un enjambre sensor de luz, es fácil de
construir e ilustra una serie de principios IOT entre ellos los siguientes:
• control distribuido
• La auto-organización
• Comportamiento Swarm
La arquitectura LightSwarm es un esquema simple y flexible para la comprensión de la idea de un proyecto IOT usando
muchos pequeños ordenadores y sensores simples con responsabilidad compartida para el control y la presentación de informes.
Tenga en cuenta que en este enjambre, la comunicación con Internet es manejado por un Frambuesa Pi. Los dispositivos enjambre
hablan entre sí, pero no con Internet. La Raspberry Pi se encuentra en el mismo punto de acceso Wi-Fi como el enjambre, pero
podría estar situado muy lejos con un poco de reenvío inteligente de paquetes a través de su router Wi-Fi. En este caso, ya que no
tenemos la seguridad informática en absoluto en este diseño (véase el capítulo 7 para obtener información acerca de hacer su
enjambre IOT y el dispositivo más seguro) y así que son fieles a la red local. La excepción a esto es el panel de control RasPiConnect
LightSwarm que puede ser ubicado en cualquier lugar en Internet y está asegurado por el control de contraseña y fácilmente podría
ser enviado a través de https, el cifrado de los paquetes XML individuales.
diferentes aspectos de IOT. LightSwarm es un proyecto bastante simple y puede ser dividido en los seis componentes que figuran en la
tabla 2-1 .
procesador Power 7 80MHz Xtensa Harvard arquitectura de CPU, memoria RAM de datos ~ 80KB
/ ~ 35 KB de RAM Instrucción / 200K ROM
Las calificaciones son del 1-10, siendo 1 el menos adecuado para IOT y 10 es la más adecuada para
aplicaciones de IO.
Esto nos da una calificación de 7,2 CPLPFC. Esta se calcula promediando los seis valores junto con igual
ponderación. De esta forma es ideal para el aprendizaje y la experimentación, y podría ser desplegado para algunas
aplicaciones.
El ESP8266 es un dispositivo impresionante que tiene un sistema incorporado en la conexión WiFi, una potente CPU, y un poco de
memoria RAM y el acceso a las bibliotecas de Arduino. Es barato y un precio más bajo con el paso del tiempo. Se trata de un potente
dispositivo para la creación de prototipos de aplicaciones que requieren IOT niveles medios de la funcionalidad.
10
CAPITULO 2 ■ SENSING su entorno IOT
¿Qué es un ESP8266?
El ESP8266 es hecha por una empresa en China llama Espressif [espressif.com]. Son una compañía de
semiconductores que acaba de salir de la nada con la primera generación de este chip y sacudió a toda la industria.
Ahora todos los principales actores están trabajando en versiones baratas de un chip de IOT con conectividad
Wi-Fi.
El chip ESP8266 fue diseñado originalmente para las bombillas conectadas pero pronto se acostumbró en una variedad de
aplicaciones y módulos ESP8266 son actualmente ahora las soluciones más populares para añadir WiFi a proyectos IOT. Mientras que el
ESP8266 tiene gran funcionalidad y un buen precio, la cantidad de corriente consumida por el chip hace que las soluciones que funcionan
con baterías problemática.
El ESP8266 está permitiendo un nuevo conjunto de aplicaciones y comunidades con su diseño innovador y
de bajo costo (Figura 2-1 ).
11
CAPITULO 2 ■ SENSING su entorno IOT
Vamos a utilizar una versión de la ESP8266 en un tablero del desbloqueo diseñada por Adafruit (figura 2-2 ). La placa
tiene algunas conexiones, una antena incorporada, y una cierta regulación de potencia, todo por menos de $ 10.
El diseño LightSwarm
Hay dos aspectos importantes del diseño del proyecto LightSwarm. Primero de todo, cada elemento del enjambre se basa en un
ESP8266 con un sensor de luz adjunto. El software es lo que hace que este pequeño dispositivo IOT en un enjambre. En el
siguiente diagrama de bloques se puede ver los dos dispositivos principales. Estoy utilizando el tablero del desbloqueo Adafruit
Hurra para la ESP8266
[ www.adafruit.com/product/2471 ] . ¿Por qué utilizar un tablero del desbloqueo? Con un tablero del desbloqueo de dispositivos
que pueda rápidamente prototipos y luego pasar a un diseño menos costoso en el futuro. El otro componente electrónico (figura
2-3 ) Es un tablero del desbloqueo de luz-sensor TCS34725 RGB, también de Adafruit [ www.adafruit.com/products/1334 ] .
12
CAPITULO 2 ■ SENSING su entorno IOT
La adición de un sensor a un ordenador es lo que hace este proyecto un dispositivo IOT. Estoy sintiendo el medio
ambiente y luego hacer algo con la información (la determinación de qué del enjambre tiene la luz más brillante). Figura 2-4
muestra el diagrama de bloques de un único elemento Swarm.
13
CAPITULO 2 ■ SENSING su entorno IOT
Cada uno de los dispositivos LightSwarm en el enjambre es idéntico. No hay diferencias de software y
no hay diferencias de hardware. Como se verá cuando discutimos el software, que votar entre sí y comparar
notas y luego elegir el dispositivo que tiene la luz más brillante como el “Maestro” y luego el “Maestro” se
convierte el LED rojo en el dispositivo para mostrarnos que ha sido elegido “Maestro”. el enjambre está
diseñado para dispositivos pueden caer fuera del enjambre, se añade a la enjambre de forma dinámica, y el
enjambre se ajusta a la nueva configuración. El comportamiento de enjambre (que es el maestro, el tiempo
que tarda la información sobre el cambio de luces para propagarse a través del enjambre, etc.) es bastante
complejo. Más complejo de lo esperado de la simple código de dispositivo enjambre. Hay una lección aquí:
El comportamiento de la LightSwarm me sorprendió varias veces y era a veces muy difícil de averiguar lo
que estaba ocurriendo, incluso con el registrador de Frambuesa Pi. Figura 2-5 muestra la LightSwarm completa
incluyendo la Frambuesa Pi.
14
CAPITULO 2 ■ SENSING su entorno IOT
El Frambuesa Pi en este diagrama no está controlando el enjambre. La Raspberry Pi recoge los datos de la nube
(la corriente del dispositivo “Maestro” envía información a la Frambuesa Pi), y luego el Raspberry Pi puede almacenar los
datos y comunicarse a través de Internet, en este caso a una aplicación basada en iPad llamada RasPiConnect [ www.milocreek.com
],
que muestra el estado actual e histórico de la LightSwarm.
El proyecto LightSwarm tiene una increíble cantidad de funcionalidad y comportamiento auto-organizados peculiar
para un diseño tan simple.
15
CAPITULO 2 ■ SENSING su entorno IOT
segundo. Descargar las bibliotecas ESP para que pueda usar el IDE Arduino
con el tablero del desbloqueo ESP. Adafruit tiene un excelente tutorial para instalar
el soporte ESP8266 para el IDE Arduino
[ learn.adafruit.com/adafruit-huzzah-esp8266-breakout/ usando-arduino-ide ] .
Abrir un nuevo boceto usando el IDE Arduino y coloque el código siguiente en la ventana de código, en sustitución
de los stubs proporcionado al abrir un nuevo croquis. El código dado aquí hará que el LED rojo parpadea.
dieciséis
CAPITULO 2 ■ SENSING su entorno IOT
void setup () {
pinMode (0, OUTPUT); }
void loop () {
digitalWrite (0, HIGH); retardo
(500);
digitalWrite (0, LOW); retardo
(500); }
Si el LED está parpadeando felizmente lejos ahora, de haber seguido correctamente todos los tutoriales y tienen la
ESP8266 y el IDE de Arduino que se ejecuta en el ordenador.
A continuación voy a describir los principales sistemas de hardware y luego sumergirse en el software.
el hardware
Los principales elementos de hardware en el dispositivo enjambre son los siguientes:
• Batería de 9 V - Power
El ESP8266 comunica con otros dispositivos enjambre mediante la interfaz de WiFi. El ESP8266 utiliza la
interfaz I2C para comunicarse con el sensor de luz. El Wi-Fi es un estándar que es muy común (aunque utilizamos
protocolos de comunicación que no son comunes). Véase la descripción de (User Datagram Protocol) UDP más
adelante en este capítulo. La interfaz de bus I2C es mucho menos familiar y necesita alguna explicación.
Un I2C proporciona un buen soporte para los dispositivos periféricos lentos y estrechos que sólo necesitan ser abordados de vez en
cuando. Por ejemplo, un dispositivo de medición de temperatura por lo general sólo cambian muy lentamente y por lo tanto es un buen
candidato para el uso de I2C, donde una cámara generará una gran cantidad de datos de forma rápida y potencialmente cambia a menudo.
17
CAPITULO 2 ■ SENSING su entorno IOT
Un bus I2C utiliza sólo dos líneas de drenaje abierto bidireccionales (-drenaje abierto significa que el dispositivo puede
tirar de un nivel hacia abajo a tierra, pero no puede tirar de la línea hasta Vdd. De ahí el nombre open-drenaje). Por lo tanto un
requisito de un bus I2C es que ambas líneas se levantan a Vdd. Esta es un área importante y no tirar correctamente las líneas
es la primera y más común error que hace cuando se utiliza por primera vez un bus I2C. Más de pull-up más adelante en la
sección siguiente. Las dos líneas son SDA (Serial Line Datos) y el SCL (Serial Line Reloj). Hay dos tipos de dispositivos que se
pueden conectar a un bus I2C. Se trata de dispositivos maestros y esclavos. Por lo general, usted tiene un dispositivo maestro
(la Frambuesa Pi en nuestro caso) y múltiples dispositivos esclavos, cada uno con su dirección de 7 bits individuales (como
0x68 en el caso de la DS1307). Hay maneras de tener direcciones de 10 bits y múltiples dispositivos maestros, pero que está
más allá del alcance de esta columna. Figura 2-6 muestra un bus I2C con dispositivos y el maestro conectado.
■ Nota SwitchDoc Vcc y Vdd significan lo mismo. GND y Vss, también es posible tanto significan suelo. Hay diferencias
históricas, pero hoy Vcc por lo general es una fuente de alimentación, y si hay una segunda, que se llaman Vdd.
Cuando se usa en la Raspberry Pi, el Raspberry Pi actúa como maestro y todos los demás dispositivos están conectados
como esclavos.
La Figura 2-6. Un bus I2C con un maestro (la ESP8266 en este caso) y tres dispositivos esclavos. RPS son los pull-up
cuidado acerca de los niveles de tensión debido a que la Frambuesa Pi es un dispositivo de 3.3V y la Arduino es un
dispositivo de 5.0V. El ESP8266 es un dispositivo de 3.3V por lo que también hay que tener cuidado de conectar un
Arduino a una ESP8266. Antes de hacer esto, lea este excelente tutorial [ blog.retep. org / 2014/02/15 /
conexión-an-arduino-a-a-frambuesa-pi-usando-I2C / ].
18
CAPITULO 2 ■ SENSING su entorno IOT
• mensajes combinados , donde unos problemas maestros al menos dos lecturas y / o escribe en uno o
más esclavos.
Por suerte para nosotros, la mayor parte de la complejidad de tratar con el bus I2C está oculto por los conductores y las bibliotecas.
19
CAPITULO 2 ■ SENSING su entorno IOT
Este es un excelente sensor de bajo costo ($ 8 por menor de Adafruit en un tablero del desbloqueo) y constituye la base de
nuestra matriz de sensores IOT. Por supuesto, habría que agregar muchos más sensores, pero tener un sensor que es fácil de
manipular es perfecto para nuestro primer proyecto IOT. en el capítulo 3 , Añadimos muchos más sensores al ordenador
Raspberry Pi para un diseño completo IOT WeatherStation.
Impreso caso 3D
Uno de los grandes cambios en la forma de construir prototipos es la disponibilidad de las impresoras 3D de bajo costo. Lo
que solía ser difícil de construir prototipos de los casos y se encuentra a varios proyectos electrónicos. Ahora bien, es fácil
diseñar un caso en uno de los muchos tipos de software 3D y luego imprimirlo utilizando la impresora 3D. Para el enjambre,
que quería un caso parcial para mantener la batería de 9V, la ESP8266, y el sensor de luz. Solía OpenSCAD
[Www.openscad.org] para hacer el diseño. OpenSCAD es un sistema CAD 3D gratis que hace un llamamiento a
los programadores. En lugar de hacer todo el diseño en un entorno gráfico, se escribe código (que consta de
varios objetos, unido o se resta uno del otro) que, a continuación compila en el ambiente para formar un diseño
en el espacio 3D. OpenSCAD viene con un IDE (Integrated Development Environment) y coloque el código
20
CAPITULO 2 ■ SENSING su entorno IOT
muestra en el Listado 2-1 en el editor, compilar el código y, a continuación ver los resultados en la IDE conectado como se
muestra en la figura 2-8 .
Como se muestra en el Listado 2-1 , El código de programación OpenSCAD para construir este soporte es
//
// IOT Luz Swarm Base de montaje //
// // SwitchDoc laboratorios de
agosto de 2015 //
Unión() {
21
CAPITULO 2 ■ SENSING su entorno IOT
// labios de la batería se
traducen ([79,2,0]) del cubo
([1,28,4]);
traducir ([70-1.0,35,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100); traducir
([70-1.0,56,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100); traducir
([70-34,35,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100); traducir
([70-34,56,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100);
traducir ([10,35,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100); traducir
([10,49.5,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100);
traducir ([22,37,0])
cilindro (h = 6, r1 = 2,2, r2 = 2,2, $ fn = 100); traducir
([22,47,0])
cilindro (h = 6, r1 = 2,2, r2 = 2,2, $ fn = 100); }
completado.
Mesa 2-3 proporciona la lista cableado completo de un dispositivo LightSwarm. A medida de que conecte, marque cada cable para mayor
exactitud.
22
CAPITULO 2 ■ SENSING su entorno IOT
Desde A Descripción
ESP8266 / GND 9VBat / terminal “-” (menos de terminal) Planta para ESP8266 batería / VBat 9VBat /
El cable de FTDI está conectado en el extremo de la Adafruit Hurra ESP8266. Asegúrese de alinear el cable negro con
el pin GND en el tablero del desbloqueo ESP8266 como en la figura 2-9 . Figura 2-11 muestra el dispositivo LightSwarm
totalmente completa.
23
CAPITULO 2 ■ SENSING su entorno IOT
24
CAPITULO 2 ■ SENSING su entorno IOT
El software
Hay dos módulos principales escritos para la LightSwarm. El primero es el código de ESP8266 para el dispositivo en sí
LightSwarm (escrito en el IDE de Arduino - escrito en C simplificado y el lenguaje C ++), y el segundo es el software de
recogida de datos Frambuesa Pi (escrito en Python en la Frambuesa Pi).
Las principales especificaciones de diseño de software de los dispositivos LightSwarm son los siguientes:
• Dispositivo se convierte en maestro cuando se tiene la luz más brillante; todos los otros se convierten
en esclavos.
• Enjambre debe sobrevivir y recuperarse de los dispositivos que entran y salen de la red.
El código completo para los dispositivos LightSwarm se proporciona en los listados 2-2 aunque 2-11
(Con la excepción de que el conductor TCS74725 sensor de luz, disponible aquí [ github.com/ adafruit /
Adafruit_TCS34725 ]). El código también está disponible en el sitio web APulse [ www.apress.com ] y el sitio
laboratorios SwitchDoc github [ lightswarm github.com/switchdoclabs/ ].
/*
Cooperativa IOT Self Organizing Ejemplo SwitchDoc
laboratorios, Agosto el año 2015
*/
# incluir <ESP8266WiFi.h>
# incluir <WiFiUdp.h>
# incluir <Wire.h>
# incluir "Adafruit_TCS34725.h"
# DEBUG undef
# definir VersionNumber 28
25
CAPITULO 2 ■ SENSING su entorno IOT
# definir SWARMSIZE 5
// 30 segundos es demasiado viejo - debe estar muerto
# definir SWARMTOOOLD 30000
int mySwarmID = 0;
A continuación en el Listado 2-3 , Definimos las constantes necesarias. Las siguientes son las definiciones
software;
TCS34725. Después de las constantes en venta 2-3 He creado las variables del sistema para los dispositivos.
yo
estoy usando UDP a través de la interfaz de conexión Wi-Fi. Lo que es UDP? UDP significa Protocolo de datagramas de usuario.
UDP utiliza un modelo sin conexión sencilla. Sin conexión significa que no hay diálogo entre el dispositivo transmisor y el
dispositivo receptor para permitir que el emisor sabe que el receptor está realmente allí. A diferencia de TCP (Transmission
Control Protocol), usted no tiene idea o garantía de los paquetes de datos que se entregan a cualquier dispositivo en particular. Se
puede pensar en él como una especie de transmisión de TV a su red local. Todo el mundo lo consigue, pero no tiene que leer los
paquetes. También hay otros efectos sutiles - como usted no tiene ninguna garantía de que los paquetes lleguen en el orden en
que se envían. Entonces ¿por qué estamos usando UDP en lugar de TCP? Estoy utilizando el modo de difusión de UDP por lo que
cuando un dispositivos LightSwarm envían un mensaje a la subred de Wi-Fi, todo el mundo lo consigue y si están escuchando en
el puerto 2910 (definida anteriormente), entonces puede reaccionar al mensaje. Se trata de cómo los dispositivos LightSwarm
obtienen descubierto. Todo el mundo comienza a enviar paquetes (con retrasos introducidos al azar) y todos los dispositivos
LightSwarm averiguar quién está presente y que tiene la luz más brillante. Nada en el sistema LightSwarm asigna números IP o
nombres. Todos ellos lo averigüen ellos mismos.
26
CAPITULO 2 ■ SENSING su entorno IOT
// tipos de paquetes
# definir LIGHT_UPDATE_PACKET 0
# definir RESET_SWARM_PACKET 1
# definir CHANGE_TEST_PACKET 2
# definir RESET_ME_PACKET 3
# definir DEFINE_SERVER_LOGGER_PACKET 4
# definir LOG_TO_SERVER_PACKET 5
# definir MASTER_CHANGE_PACKET 6
# definir BLINK_BRIGHT_LED 7
unsigned int localPort = 2,910; // puerto local para escuchar a los paquetes UDP
// variables de maestros
boolean masterState = true; // True si amo, False si no int swarmClear [SWARMSIZE];
int swarmVersion [SWARMSIZE]; int swarmState [SWARMSIZE];
byte packetBuffer [BUFFERSIZE]; // reguladoras para mantener los paquetes entrantes y salientes
// Un ejemplo UDP para no retrasar el envío y recepción de paquetes a través de UDP WiFiUDP UDP;
Dirección IP LocalIP;
27
CAPITULO 2 ■ SENSING su entorno IOT
La configuración () rutina mostrada en el Listado 2-4 sólo ejecuta una vez después del reinicio de la ESP8266 y se
utiliza para configurar toda la información y dispositivos de impresión de registro para el puerto serie de la ESP8266, donde, si
tiene el cable FTDI conectado, se puede ver la información de registro de la información y la depuración su PC o Mac.
void setup () {
Serial.begin (115,200);
Serial.println (); Serial.println ();
Serial.println ( "");
Serial.println ( "--------------------------"); Serial.println (
"LightSwarm"); Serial.print ( "Version"); Serial.println
(VersionNumber);
Serial.println ( "--------------------------");
Aquí se utiliza el valor flotante de la entrada analógica en la ESP8266 para establecer la semilla de números
pseudoaleatorios generación. Esto puede variar un poco de dispositivo a dispositivo, y así que no es una mala manera de
inicializar el generador de números pseudo-aleatorios. Si se pone un número fijo como el argumento, siempre va a generar el
mismo conjunto de números pseudo-aleatorios. Esto puede ser muy útil en las pruebas. Listado 2-5 muestra la configuración de la
semilla aleatoria y la detección de la TCS34725.
¿Qué es un generador de números pseudo-aleatorios? Es un algoritmo para generar una secuencia de números cuyas
propiedades aproximarse a una secuencia de número verdaderamente aleatorio. No es realmente una secuencia aleatoria de
números, pero está cerca. suficiente para nuestro uso bueno.
28
CAPITULO 2 ■ SENSING su entorno IOT
si (tcs.begin ()) {
Serial.println ( "sensor Encontrado"); } Else {
// apagar la luz
tcs.setInterrupt (true); // true significa apagado, significa falsa en
Serial.println ( "");
29
CAPITULO 2 ■ SENSING su entorno IOT
swarmAddresses [i] = 0;
swarmClear [i] = 0;
swarmTimeStamp [i] = -1; }
swarmClear [mySwarmID] = 0;
swarmTimeStamp [mySwarmID] = 1; // Estoy siempre en el tiempo a mí mismo clearColor =
swarmClear [mySwarmID]; swarmVersion [mySwarmID] = VersionNumber; swarmState
[mySwarmID] = masterState; Serial.print ( "clearColor ="); Serial.println (clearColor);
Ahora hemos inicializado todas las estructuras de datos para la descripción de nuestro dispositivo LightSwarm y los
estados del sensor de luz. Listado 2-6 establece el SwarmID basándose en la dirección IP actual del dispositivo. Cuando se
enciende el dispositivo LightSwarm y se conecta a un punto de acceso Wi-Fi, el punto de acceso asigna una dirección IP única
para el dispositivo LightSwarm. Esto se hace a través de un proceso llamado DHCP (Dynamic Host Configuration Protocol) [ en.wikipedia.org/wiki/Dyna
]. Mientras que el número será diferente para cada dispositivo LightSwarm, no es al azar. Normalmente, si usted acciona un
dispositivo específico hacia abajo y ponerlo en marcha de nuevo, el punto de acceso asignará la misma dirección IP. Sin
embargo, no se puede contar con este. El punto de acceso sabe su dispositivo específico, porque todos y cada interfaz de
conexión Wi-Fi tiene un número específico y único MAC (Media Access Control), que es por lo general nunca ha cambiado.
■ Nota SwitchDoc Falsificando las direcciones MAC le permite suplantar a otros dispositivos con su dispositivo, en algunos
casos, y se puede utilizar para rastrear las direcciones MAC máquinas específicas mirando a la red. Esta es la razón por Apple,
Inc. ha comenzado a usar direcciones MAC aleatorias en sus dispositivos mientras está buscando redes. Si no se usan
direcciones MAC aleatorias, a continuación, los investigadores han confirmado que es posible vincular una verdadera identidad
específica a una dirección MAC inalámbrica particular [Cunche, Mathieu. "Sé que su dirección MAC: Targeted seguimiento del
30
CAPITULO 2 ■ SENSING su entorno IOT
mySwarmID = 0;
La segunda sección principal del código del dispositivo LightSwarm es el bucle (). La función de bucle () hace
exactamente lo que su nombre sugiere y bucles infinitamente, lo que permite su programa para cambiar y responder.
Esta es la sección del código que realiza el trabajo principal del código LightSwarm.
void loop () {
lastSecondsCount = 0;
# definir LOGHOWOFTEN
En este inmueble 2-7 , Leemos todos los datos del sensor TCS34725 para averiguar cómo
brillante la luz ambiental actualmente es. Esto constituye la esencia de los datos para determinar quién es el maestro en el
enjambre es.
Después de la línea de retardo (300) en el Listado 2-7 , Puedo comprobar para paquetes UDP que se está emitiendo
al puerto 2910. Recuerde que la forma en que el enjambre está utilizando UDP está en modo de emisión y todos los paquetes son
recibidos por todo el mundo todo el tiempo. Tenga en cuenta, esto establece un límite de la cantidad de dispositivos que puede tener
enjambre (limitado al tamaño de subred) y también por la congestión de tener demasiados mensajes pasan por al mismo tiempo. Esto
fue bastante fácil para simular mediante el aumento de la velocidad de envío de paquetes. El enjambre sigue funcionando pero el
comportamiento se vuelve más errático y a veces con grandes retrasos.
31
CAPITULO 2 ■ SENSING su entorno IOT
Serial.print ( "Temperatura de color:"); Serial.print (ColorTemp, DEC); De serie. print ( "K -");
Serial.print ( "Lux:"); Serial.print (lux, DEC); Serial.print ( "-"); Serial.print ( "R:"); Serial.print (r,
DEC); Serial.print (" "); Serial.print ( "G:"); Serial.print (g, DEC); Serial.print (" "); Serial.print (
"B:"); Serial.print (b, DEC); Serial.print (" "); Serial.print ( "C:"); Serial.print (c, DEC); Serial.print ("
"); Serial.println (" ");
clearColor = c;
redcolor = r; bluecolor
= b; Greencolor = g;
si (CB) {
// Serial.println ( "no paquete todavía"); Serial.print (
""); }
else {
en el Listado 2-8 , Interpretamos todos los paquetes en función del tipo de paquete.
32
CAPITULO 2 ■ SENSING su entorno IOT
{
Serial.print ( "LIGHT_UPDATE_PACKET recibió de LightSwarm #"); Serial.println
(packetBuffer [2]); setAndReturnMySwarmIndex (packetBuffer [2]);
Serial.print ( "MASTER");
Serial.print ( "CC:");
Serial.print (packetBuffer [5] * 256 + packetBuffer [6]); Serial.print ( "RC:");
Los conjuntos de comandos RESET_SWARM_PACKET todos los dispositivos LightSwarm a dominar (encender el LED
rojo en cada uno) y luego permite el voto de software LightSwarm y determinar quién tiene la luz más brillante. A medida que
cada dispositivo recibe un paquete LIGHT_UPDATE_, compara la luz de ese dispositivo enjambre a su propio sensor y se
convierte en un esclavo si su luz es más brillante. Con el tiempo, el enjambre se da cuenta de que tiene la luz más brillante. He
estado enviando periódicamente este de la Frambuesa Pi y viendo los dispositivos funcionan a cabo. Se hace un interesante
vídeo. Listado 2-9 muestra cómo LightSwarm interpreta los paquetes entrantes. La última sección del inmueble 2-9 muestra
cómo el enjambre actualizaciones de todos los demás elementos en el enjambre de lo que está pasando con este dispositivo y
luego enviar un paquete de datos a la Frambuesa Pi si somos el maestro enjambre.
33
CAPITULO 2 ■ SENSING su entorno IOT
si (i == 2) {
} Else {
34
CAPITULO 2 ■ SENSING su entorno IOT
masterState = true;
Serial.println ( "Reset Me: Me acaba de convertirse en Maestro");
digitalWrite (0, LOW);
} Else {
}
si (packetBuffer [1] == BLINK_BRIGHT_LED) {
tcs.setInterrupt (false); // true significa off, medios falsas en retardo (packetBuffer [4]
* 100);
tcs.setInterrupt (true); // true significa fuera, mediante falsas on} else {
35
CAPITULO 2 ■ SENSING su entorno IOT
Serial.print ( "MasterStatus:"); si
(masterState == true) {
else {
Serial.println (serverAddress);
Serial.println ( "--------");
int i;
for (i = 0; i <SWARMSIZE; i ++) {
Serial.println ( "--------");
broadcastARandomUpdatePacket ();
sendLogToServer ();
} // fin de bucle ()
Listado 2-10 se utiliza para enviar paquetes de luz a una dirección enjambre. A pesar de una dirección específica está
permitido por esta función, nos fijamos el último octeto de la dirección IP (201 en la dirección IP 192.168.1.201) en la función de
llamada al 255, que es la dirección de difusión UDP.
36
CAPITULO 2 ■ SENSING su entorno IOT
// valores han sido dados todos los campos del paquete de luz, ahora // puede
enviar un paquete que pide la coordinación
udp.beginPacketMulticast (dirección, localPort, WiFi.localIP ()); // udp.write (packetBuffer,
PACKET_SIZE); udp.endPacket (); }
broadcastARandomUpdatePacket vacío () {
retardo (randomDelay);
sendLightUpdatePacket (sendSwarmAddress);
37
CAPITULO 2 ■ SENSING su entorno IOT
En la función del Listado 2-11 , Puedo comprobar si sólo se convirtió en amo y también actualizar el
estado de todos los dispositivos LightSwarm. Aquí es donde se lleva a cabo la función de tiempo de espera que eliminará los
dispositivos obsoletos o muertas del enjambre.
checkAndSetIfMaster vacío () {
int i;
for (i = 0; i <SWARMSIZE; i ++) {
# DEBUG ifdef
Serial.print ( "#");
Serial.print (i); Serial.print (
"/");
Serial.print (swarmState [i]); Serial.print (
"/");
Serial.print (swarmVersion [i]); Serial.print (
":"); // datos de edad
si (swarmTimeStamp [i] == 0) {
Serial.print ( "A"); }
Serial.print ( "NP"); }
Serial.print ( "ME"); }
38
CAPITULO 2 ■ SENSING su entorno IOT
Serial.print ( "A");
swarmTimeStamp [i] = 0;
swarmClear [i] = 0;
} Else {
Serial.print ( "PR");
}}
} Else {
}
si (setMaster == true) {
si (masterState == false) {
masterState = true; }
39
CAPITULO 2 ■ SENSING su entorno IOT
else {
si (masterState == true) {
masterState = false; }
int i;
for (i = 0; i <SWARMSIZE; i ++) {
i volver; } else
40
CAPITULO 2 ■ SENSING su entorno IOT
sendLogToServer vacío () {
// crear la cadena
si (masterState == true) {
// ahora enviar el paquete como una cadena con el siguiente formato: // swarmID, amo-,
Versión de software, clearColor, Estado | .... siguiente Swarm ID
int i;
Char swarmString [20];
swarmString [0] = '\ 0';
41
CAPITULO 2 ■ SENSING su entorno IOT
sprintf (swarmString, "% i,% i,% i,% i,% s,% i", i, swarmState [i], swarmVersion [i],
swarmClear [i], stateString, swarmAddresses [i]);
}}
42
CAPITULO 2 ■ SENSING su entorno IOT
Eso es todo el código del dispositivo LightSwarm. Al compilar el código en el IDE de Arduino dirigidas a la
Adafruit ESP8266, obtenemos lo siguiente:
Bosquejo utiliza 308,736 bytes (29%) de espacio de almacenamiento de programa. Máxima es 1,044,464 bytes.
Las variables globales usan 50,572 bytes (61%) de la memoria dinámica, dejando 31,348 bytes para variables locales.
Máxima es de 81,920 bytes.
Todavía un montón de espacio de la izquierda para obtener más código. La mayor parte del espacio de códigos se utilizan
compilado por encima de las bibliotecas del sistema de conexión Wi-Fi y ejecutar el ESP8266.
Comportamiento de auto-organización
¿Por qué decimos que el código LightSwarm es auto-organización? Se debe a que no existe un control central de quién
es el amo y quién es el esclavo. Esto hace que el sistema sea más fiable y capaz de funcionar incluso en un mal
ambiente. La auto-organización se define como un proceso en algún tipo de orden surge de las interacciones locales
entre los artículos más pequeños en un sistema inicialmente desordenada.
Por lo general este tipo de sistemas son robustos y capaces de sobrevivir en un entorno caótico. Los sistemas de
auto-organización se producen en una variedad de sistemas físicos, biológicos y sociales.
Una de las razones para construir este tipo de sistemas es que los dispositivos individuales pueden ser pequeñas y no muy
inteligente, y sin embargo, la tarea global o la imagen de que los datos sean recogidos y tratados pueden ser increíblemente interesante
e informativo.
43
CAPITULO 2 ■ SENSING su entorno IOT
• Proporcionar métodos para las pruebas de comportamiento enjambre (como el restablecimiento del
enjambre).
Recuerde que el Raspberry Pi es un sistema completo, complejo y potente equipo que va mucho más allá de lo que
puede hacer con un ESP8266. En primer lugar vamos a ver el software de registro de LightSwarm y luego el software que
soporta el panel RasPiConnect LightSwarm. Nótese que no estamos almacenando la información procedente de los
dispositivos de enjambre en este software, pero fácilmente podríamos añadir software de registro que llenar una base de
datos MySQL que nos permita almacenar y analizar la información desde la nube.
En primer lugar, este programa está escrito en Python. Python es un lenguaje de programación ampliamente utilizado,
especialmente con codificadores Frambuesa Pi. Hay una serie de bibliotecas de dispositivos disponibles para la construcción de sus
propios dispositivos IOT y hay incluso una pequeña versión que se ejecuta en el ESP8266. filosofía de diseño de Python hace hincapié
en la legibilidad del código. Sangría es importante en Python, así que tenlo en cuenta cuando nos fijamos en el código de abajo.
■ Nota SwitchDoc Python es “tipos débiles”, es decir se define una variable y el tipo de la primera vez que lo utilice. Algunos
programadores de este tipo, pero no lo hago. Escribir incorrectamente el nombre de una variable hace que una variable
totalmente nueva y puede causar una gran confusión. Mi perjuicio es hacia lenguajes “inflexible”, ya que tiende a reducir el
número de errores de codificación, a costa de tener que pensar y declarar variables explícitamente.
44
CAPITULO 2 ■ SENSING su entorno IOT
La primera sección de este programa define todas las librerías necesarias (declaraciones de importación) y define
necesarias “constantes”. Python no tiene una forma de definir constantes, por lo que declarar las variables para los valores
constantes, que por mi convención están todos en mayúsculas. Hay otras formas de definir las constantes mediante el uso de
clases y funciones, pero son más complejo que la simple definición de otra variable. Listado 2-13 muestra cómo se inicializan
las variables y constantes.
'''
LightSwarm Frambuesa Pi Logger SwitchDoc
laboratorios de septiembre de 2015 '''
de la toma de importación *
VersionNumber = 6
# definiciones de tipo de paquete
LIGHT_UPDATE_PACKET = 0
RESET_SWARM_PACKET = 1
CHANGE_TEST_PACKET = 2 # No implementado
RESET_ME_PACKET = 3
DEFINE_SERVER_LOGGER_PACKET = 4
LOG_TO_SERVER_PACKET = 5
MASTER_CHANGE_PACKET = 6
BLINK_BRIGHT_LED = 7
MYPORT = 2910
SWARMSIZE = 5
Listado 2-14 define la interfaz entre el software LightSwarm Logging y el software de panel de control
RasPiConnect [ www.milocreek.com ]. El autor ha escrito un tutorial sobre esto estructura de mando de
paso en MAGPI reimpreso en la revista Labs sitio web SwitchDoc [ www.switchdoc.com/2014/07/build-control-panels-tut
] . Estas son las tres funciones importantes:
45
CAPITULO 2 ■ SENSING su entorno IOT
logString = ""
# comando de ejecución de código RasPiConnect
CompleteCommand ()
completeCommandWithValue (logString)
devolver True
46
CAPITULO 2 ■ SENSING su entorno IOT
SendRESET_SWARM_PACKET (s)
CompleteCommand ()
devolver True
si (myCommandList.count> 1):
# tenemos una lista de comandos
CompleteCommand ()
devolver True
CompleteCommand ()
falso retorno
en el Listado 2-15 , Tengo las implementaciones de mandatos LightSwarm reales para enviar
paquetes. Listado 2-15 simplemente muestra la primera de tipo de paquete para ilustrar los conceptos.
47
CAPITULO 2 ■ SENSING su entorno IOT
# obtener la dirección IP
para ifaceName en las interfaces ():
direcciones = [i [ 'addr'] para i en ifaddresses (ifaceName). setdefault
(AF_INET, [{ 'dir': 'No dir IP'}])] print '% s:% s' % (ifaceName, '' .join
(direcciones))
La siguiente sección del código para ser discutido es el mapa en línea, que es utilizado por el control de la tela
RasPiConnect para mostrar código HTML. El código del Listado 2-16 produce figura 2-12 .
Figura 2-12. Control web HTML en RasPiConnect Producido por Web del código del mapa en el software de registro
LightSwarm
48
CAPITULO 2 ■ SENSING su entorno IOT
WebResponse = ""
WebResponse + = "& nbsp; & nbsp; & nbsp; & nbsp; & nbs p; & nbsp;%
s" % swarmElement [5]
49
CAPITULO 2 ■ SENSING su entorno IOT
más:
WebResponse + = " 'style ='
/static/OffNotPresent.png posición: absolute;
top:"
WebResponse + = "<figcaption"
WebResponse + = "style = 'position: absolute; top:" WebResponse + =
str (100 + 100) WebResponse + = "px; izquierda:"
WebResponse + = "& nbsp; & nbsp; & nbsp; & n bsp; &
nbsp; Slave"
más:
si (swarmElement [4] == "A"):
WebResponse + = "Tiempo de espera"
más:
WebResponse + = "No Presente"
# WebResponse de impresión
f.write (WebResponse)
f.close ()
Listado 2-17 mira a los ID enjambre entrantes y construye una tabla actual de hacer coincidir los ID, la eliminación de los viejos
cuando se añaden otros nuevos. El número máximo de dispositivos enjambre que puede tener es de cinco, pero se puede aumentar
fácilmente.
50
CAPITULO 2 ■ SENSING su entorno IOT
volver oldSwarmID
Por último, el Listado 2-18 es el código principal para el programa Python. Es muy similar en función al código de
configuración () para el ESP8266 en el IDE de Arduino. Lo utilizamos para definir variables, enviar comandos de una sola
vez, y configurar la interfaz UDP.
51
CAPITULO 2 ■ SENSING su entorno IOT
SendDEFINE_SERVER_LOGGER_PACKET (s)
time.sleep (3)
SendDEFINE_SERVER_LOGGER_PACKET (s)
# swarmStatus
swarmStatus = [[0 para x en el rango de (6)] para x en el rango (SWARMSIZE)]
Listado 2-19 proporciona el bucle principal del programa. Tenga en cuenta que esto es muy similar a la función loop () en el
ESP8266. En este código, comprobamos los paquetes UDP entrantes, proceso RasPiConnect comandos, información de estado de
actualización, y ejecutar comandos periódicos. Es en este bucle que estaríamos almacenando el estado del enjambre, los paquetes,
y la información si queríamos reproducir el comportamiento enjambre archivally.
52
CAPITULO 2 ■ SENSING su entorno IOT
más:
impresión "longitud de mensaje de error =", Len (mensaje)
53
CAPITULO 2 ■ SENSING su entorno IOT
processCommand (s)
# imprimir swarmStatus
54
CAPITULO 2 ■ SENSING su entorno IOT
Figura 2-13. Panel de control del proyecto Curacao RasPiConnect - página principal
Figura 2-14 muestra la LightSwarm RasPiConnect panel de control en funcionamiento. El panel de control muestra que hay
actualmente 3 dispositivos LightSwarm activos con 125 siendo el principal (con las luces brillantes), mientras que los otros son
esclavos. Puede enviar una variedad de comandos al enjambre, como el restablecimiento de un dispositivo específico enjambre, luces
parpadeantes en un dispositivo enjambre, o el reinicio de todo el enjambre.
55
CAPITULO 2 ■ SENSING su entorno IOT
Todos los archivos de software y de configuración del servidor de aplicaciones de Apple RasPiConnect y están en el
sitio de descarga APulse [El sitio de Apress] y en el sitio de GitHub SwitchDoc laboratorios
[github.com/switchdoclabs/lightswarm_RasPiConnect]
El software de servidor RasPiConnect es bastante sencillo. Hay un excelente tutorial para
personalizar el software de servidor en el sitio web MiloCreek [ www.milocreek.com/wiki ] .
A modo de ejemplo, el listado 2-20 es el código (que se encuentra en Local.py) para el botón de reinicio Swarm (como se
ve en la figura 2-14 ) Y también el código para establecer el segundo desde la pantalla del medidor justo en el panel de control
LightSwarm.
El listado 2-20. Local.py Archivo de Código RasPiConnect para Reset Button Swarm
# Restablecer Swarm
si (objectServerID == "B-4"):
56
CAPITULO 2 ■ SENSING su entorno IOT
sendCommandToLightSwarmAndWait ( "RESETSWARM")
ResponseData = "OK"
si (objectServerID == "M-1"):
volver outgoingXMLData
tratar:
f = open ( "/ home / pi / LightSwarm / estado / LSStatus.txt", "r") logString =
f.read ()
f.close ()
excepto:
logString = ""
57
CAPITULO 2 ■ SENSING su entorno IOT
resultados
He construido un LightSwarm que consta de cinco dispositivos enjambre individuales. El enjambre se puede ver en la figura 2-15 .
Por último, algunos resultados de los dispositivos se muestran en el Listado 2-21 . En primer lugar es el
salida de depuración de serie de un dispositivo de LightSwarm. En primer lugar se inicializa el dispositivo, recibe una dirección IP
del punto de acceso WiFi (llamado Gracie en este caso), y luego comienza la escucha y el envío de paquetes. El dispositivo es
enjambre dispositivo # 125 y recibe paquetes de
# 123 y # 122, pero se mantuvo el maestro como el CC (color claro) de # 125 es 2,610, mientras que los paquetes entrantes
desde # 123 y # 122 tenían valores de CC de 310 y 499, respectivamente, y dos eran esclavos.
58
CAPITULO 2 ■ SENSING su entorno IOT
--------------------------
LightSwarm
Versión 27
--------------------------
09/03/2015
Compilado en: 21: 30: 47 16 de septiembre 2015
analogRead (A0) = 98 44
sensor encontrado
LightSwarm Instancia: 0
Conexión a Gracie
..........................
Wi-Fi conectada
dirección IP:
A partir 192.168.1.125
UDP Puerto local: 2910
clearColor = 0 = 0
MySwarmID
Temperatura de color: 2390 K - Lux: 630 - R: 1188 G: 848 B: 440 C: 2,610 packetbuffer [1]
=0
LIGHT_UPDATE_PACKET recibió de LightSwarm # 123 # 123
incomingID asignado 1
LS paquetes Recibido desde el # 123 SwarmState: ESCLAVO CC: 310 RC: 119 GC: 116 aC: 69 Versión = 27
59
CAPITULO 2 ■ SENSING su entorno IOT
Listado 2-22 es la salida del software de registro de Frambuesa Pi LightSwarm. Lo primero que el software de registro
hace es enviar un “DEFINE_SERVER_LOGGING_ PAQUETE” para decir a los dispositivos enjambre la dirección IP
(1.168.1.40) del servidor por lo que el maestro enjambre puede enviar paquetes de registro directamente a la Frambuesa Pi,
en lugar de utilizar los ya concurridos puertos de difusión UDP. Por último, vemos un paquete que viene de SwarmID # 111.
Número 111 recogió la dirección del servidor, y ya que era el maestro del enjambre, que comenzó a enviar en paquetes de
registro a la Frambuesa Pi. Nota de los resultados del registro, parece que
--------------
LightSwarm Logger
Version 6
--------------
DEFINE_SERVER_LOGGER_PACKET Sent
lo: eth0 127.0.0.1: No wlan0 dir IP: 192.168
. 1.40
[ '192.168.1.40']
[ '192', '168', '1', '40']
DEFINE_SERVER_LOGGER_PACKET
Enviados lo: eth0 127.0.0.1: No addr IP wlan0:
192.168.1.40 [ '192.168.1.40']
logString: 0,1,28,1672, PR, 111 | 1,0,0,0, NP, 0 | 2,0,0,0, NP, 0 | 3,0,0,0, NP, 0 | 4,0,0,0, NP, 0
swarmElement = [' 0' , '1', '28', '1672', 'PR' ' 111 '] swarmElement = [' 1', '0',
'0', '0', 'NP', '0 '] swarmElement = [' 2', '0', '0', '0', 'NP', '0']
60
CAPITULO 2 ■ SENSING su entorno IOT
swarmElement = [' 3' , '0', '0', '0', 'NP', '0 '] swarmElement = [' 4', '0',
'0', '0', 'NP', '0 '] swarmElement = [' 3', '0', '0', '0', 'NP', '0 ']
swarmElement = [' 4', '0', '0', '0', 'NP', '0']
Conclusión
Una buena parte de la IOT será la reunión de pequeñas cantidades simples, de los datos; algunos análisis sobre los datos; y la
comunicación de que los datos a los servidores de acción y su posterior análisis en Internet. Los proyectos en los capítulos 3
y 4 son de dispositivos IOT más complejas reuniendo las porciones de datos, procesamiento de ella, que actúan sobre los
datos, y la comunicación de los resúmenes a Internet. El LightSwarm hace de manera diferente porque los elementos
enjambre son simples y cooperan sin un controlador central para determinar quién tiene la luz más brillante y luego actuar en
esa información (girando el LED rojo).
Enjambres de dispositivos IOT se pueden hacer a bajo costo, puede exhibir un comportamiento complejo inesperado, y ser
diabólicamente difíciles de depurar.
61
CAPÍTULO 3
Capítulo Objetivo: recopilación de datos y transmisión de datos a través de Internet los temas tratados en
este capítulo:
• ¿Cómo construir un sistema de tiempo con energía solar IOT (figura 3-1 )
Todo el mundo habla del tiempo. En este capítulo, vamos a hablar del tiempo con mucho más
detalle que sólo la temperatura.
En el capítulo anterior, nos fijamos en la construcción de aparatos sencillos IOT que medir la temperatura y
compartir esa información con un servidor y otros dispositivos IOT. Era una sencilla aplicación, pero todavía ilustra una
serie de conceptos importantes. En este capítulo, estamos construyendo un proyecto mucho más complejo y flexible
basado en el uso de la Frambuesa Pi como parte del dispositivo IOT.
El IOTWeatherPi no sólo reúne a trece tipos diferentes de datos meteorológicos, que también supervisa e informa de
su propio estado, el estado y la salud.
64
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
diferentes aspectos de IOT. IOTWeatherPi es un producto complejo, pero la tabla 3-1 se descompone en nuestros seis componentes.
Las calificaciones son del 1-10, siendo 1 el menos adecuado para IOT y 10 es la más adecuada para aplicaciones de IO. Esto
nos da una calificación de 6. Gran CPLPFC para el aprendizaje, no tan bueno para el despliegue para la mayoría de aplicaciones.
Sin lugar a dudas, la Frambuesa Pi es una plataforma muy flexible y potente IOT. Sin embargo, el consumo de energía,
el costo y el tamaño físico del dispositivo hacen que sea más adecuado para la creación de prototipos o para el autónomo,
unidades IOT altamente funcionales.
La recolección de datos
El IOTWeatherPi utiliza trece sensores diferentes para detectar conexiones climáticas. Porque yo estoy usando un Frambuesa Pi y tengo
buenos mecanismos de almacenamiento y espacio en disco, utilizo una base de datos MySQL para almacenar todos los datos del tiempo
para el análisis futuro y descarga. También usamos matplotlib para construir gráficos y utilizar una aplicación para iOS llamada
RasPiConnect para mostrar la información a través de Internet.
sesenta y cinco
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
El proyecto - IOTWeatherPi
WeatherPi es una energía solar Frambuesa Pi Wi-Fi conectado estación meteorológica diseñada para su uso en la IOT por la
compañía del autor. Este es un gran sistema para construir y jugar con. Todo es modificable y se incluye todo el código fuente.
Las siguientes son las funciones más importantes:
• Tiene una base de datos completa que contiene la historia del medio ambiente (MySQL)
• Puede ser modificado para hacer SMS (texto) de mensajería, Twitters, páginas web, y más
• Se puede conectar a la IOT a través de Twitter, mensajes de texto, correo electrónico y conexión Wi-Fi Este
capítulo le mostrará cómo construir una conexión Wi-Fi con energía solar Frambuesa Pi de la estación meteorológica. Este
proyecto surgió a partir de una serie de otros proyectos, como la masiva Proyecto Curacao [ www.switchdoc.com/project-curacao-introduction-part-1/
] , un sistema de energía solar de vigilancia ambiental desplegado en la isla tropical del Caribe de Curazao. Proyecto Curacao fue
escrito en una extensa serie de artículos en MAGPI revista (comenzando en el número 18 y continuando a través de emisión 22).
• Añadir sus propios sensores de UV, el polvo y la cantidad de polen, y el color de la luz. Figura 3-2 muestra
66
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
67
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
El Diagrama de bloques IOTWeatherPi parece mucho más complicado de lo que realmente es.
La primera cosa a notar es que las líneas discontinuas son tablas individuales (WeatherPiArduino y
SunAirPlus), que contienen una gran parte del diagrama de bloques; y la segunda es que todos los sensores a
la izquierda de la clavija de diagrama en la placa WeatherPiArduino, lo que simplifica el cableado. No se deje
intimidar!
los subsistemas
El subsistema de alimentación de IOTWeatherPi utiliza un SunAirPlus [ www.switchdoc.com/
sunairplus-solar-power-controllerdata de colector / ] Regulador de la energía solar que se encarga de los paneles
solares, la carga de la batería, y luego suministra la 5V a la Frambuesa Pi y el resto del sistema. También contiene
sensores que le dirá la corriente y la tensión producida por los paneles solares y consumido por las baterías y el
Raspberry Pi. Recopilar esos datos! Figura 3-4 muestra la placa del cargador solar y el paquete de baterías montado en
la parte superior del recinto. Figura 3-5 muestra las células solares en la parte superior del exterior del recinto.
68
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
También contiene el temporizador de vigilancia de hardware y la PowerControl USB que en realidad se apaga la
alimentación de la Frambuesa Pi durante un evento de caída de tensión (después del Pi cierra con gracia hacia abajo bajo control
de software).
El Subsistema Sensor de IOTWeatherPi utiliza un WeatherPiArduino [ www.switchdoc. com / weatherpiarduino-desnuda de
a bordo / ] como la unidad de base y luego se enchufa en un montón de sensores opcionales, tales como Velocidad del viento /
dirección / lluvia , Detección de rayos (cómo es fresco es que!), Dentro y fuera de la temperatura y la humedad. Figura 3-6 Los
cuadros de los sensores de viento y lluvia.
69
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
los subsistema de software de IOTWeatherPi corre en Python en la Raspberry Pi. Recoge los datos, las tiendas
en una base de datos MySQL, construye gráficos, y hace la limpieza y el poder de supervisión.
• Lluvia
70
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
• Temperatura exterior
• Humedad fuera
• Detección de Rayos
Puede añadir más al bus I2C y Convertidor Analógico a Digital tal como UV, los recuentos de polvo, de color claro (detección
de algunos tipos de contaminación), y mucho más! Es una gran plataforma para la expansión.
La suite sensor está construido sobre la WeatherPiArduino (mostrado en la figura 3-7 ) Bordo, pero
hay varios tableros similares que hay en el mercado.
El bus I2C
WeatherPi hace un amplio uso del bus I2C en la Raspberry Pi.
En SwitchDoc Labs, nos encanta datos. Y nos encanta dispositivos I2C. Nos gusta para recoger los datos utilizando una
gran cantidad de dispositivos I2C en nuestros ordenadores y proyectos. Proyecto Curacao tiene un total de doce, IOTWeatherPi
tiene once dispositivos, y Sunrover (a potencia IOT solar conectado robot en desarrollo en SwitchDoc) tendrá más de veinte y
requerirá un bus I2C
71
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
sólo para controlar los motores. Siempre nos estamos quedando en conflictos con direccionamiento en el dispositivo I2C. Dado
que no existen normas, a veces múltiples dispositivos tienen la misma dirección, como por ejemplo 0x70; y que está justo fuera de
suerte en el funcionamiento de los dos en el mismo bus I2C sin un montón de Jimmy aparejo. Figura 3-8 Mux I2C muestra el
cableado en el proyecto.
72
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Para solucionar este problema de direccionamiento (y nuestro conflicto con un INA3221 y el sensor dentro de humedad)
añadimos un bus I2C multiplexor al diseño, lo que nos permite disponer de muchos más dispositivos I2C en el autobús,
independientemente de los conflictos de direccionamiento. Mesa 3-2
proporciona una lista de dispositivos I2C en IOTWeatherPi.
Lo que sigue es lo que el bus I2C se ve como en la Raspberry Pi. Hay cuatro buses independientes que se muestran para
el bus I2C, pero tenga en cuenta que sólo utiliza IOTWeatherPi Bus 0 y 1. Figura autobús 3-9 muestra un tablero
WeatherPiArduino completamente poblado.
- - - - - - - - - - - BUS 0 -------------------
registro de control tca9545 B3-B0 = 0x1 ignorar interrupciones si
INT3' - Control tca9545 INT0' no está conectado registrar
interrupciones = 0xc
0 1 2 3 4 5 6 7 8 9 abcdef 00:
03 - - - - - - - - - - - -
10: - - - - - - - - - - - - - - - -20: - - - - - - - - - - - - - - - - -30: - - - - - - - - - - - - -
- - -40 : 40 - - - - - - - - 49 - - - - - -50: 50 - - - - - 56 - - - - - - - - -60: - - - - - -
- - 68 - - - - - - -70: - - - - 73 - - - 77
-----------------------------------
73
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
- - - - - - - - - - - BUS 1 -------------------
registro de control tca9545 B3-B0 = 0x2
Las interrupciones ignorar si INT3' - INT0' no está conectado tca9545
registro de control interrumpe = 0xe
0 1 2 3 4 5 6 7 8 9 abcdef 00:
-- -- -- -- -- -- -- -- -- -- -- -- --
10: - - - - - - - - - - - - - - - -20: - - - - - - - - - - - - - - - - -30: - - - - - - - - - - - - -
- - -40 : 40 - - - - - - - 48 - - - - - - -50: - - - - - - - - - - - - - - - -60: - - - - - - - - -
- - - - - - -70: - - - 73 - - - -
-----------------------------------
- - - - - - - - - - - BUS 2 -------------------
registro de control tca9545 B3-B0 = 0x4
Las interrupciones ignorar si INT3' - Control tca9545 INT0' no está
conectado registrarse interrupciones = 0xc
0 1 2 3 4 5 6 7 8 9 abcdef 00:
-- -- -- -- -- -- -- -- -- -- -- -- --
10: - - - - - - - - - - - - - - - -20: - - - - - - - - - - - - - - - - -30: - - - - - - - - - - - - -
- - -40 : - - - - - - - - - - - - - - - -50: - - - - - - - - - - - - - - - -60: - - - - - - - - - - -
- - - - -70: - - - 73 - - - -
-----------------------------------
- - - - - - - - - - - BUS 3 -------------------
registro de control tca9545 B3-B0 = 0x8
Las interrupciones ignorar si INT3' - Control tca9545 INT0' no está
conectado registrarse interrupciones = 0xc
0 1 2 3 4 5 6 7 8 9 abcdef 00:
-- -- -- -- -- -- -- -- -- -- -- -- --
10: - - - - - - - - - - - - - - - -20: - - - - - - - - - - - - - - - - -30: - - - - - - - - - - - - -
- - -40 : - - - - - - - - - - - - - - - -50: - - - - - - - - - - - - - - - -60: - - - - - - - - - - -
- - - - -70: - - - 73 - - - -
-----------------------------------
74
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
75
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Lo primero que hay que hacer al diseñar un sistema de energía solar es determinar los requisitos de energía para su diseño
con energía solar. Nuestros criterios son que queremos que el IOTWeatherPi Frambuesa Pi Modelo A para ejecutar todo el día y por
lo menos tres horas antes de la salida del sol y tres horas después de la puesta del sol. Nuestros objetivos y presupuesto influyen en
nuestras opciones de hardware, por lo que no son totalmente independientes. Figura 3-10 muestra los paneles solares con el
AM2315 fuera sensor de temperatura en el lado de la carcasa.
Mesa 3-3 contiene el consumo de energía estimado para los modelos de la Frambuesa Pi, incluyendo un adaptador
USB inalámbrico. Estamos asumiendo en cada uno de estos que se gira el puerto HDMI fuera, lo que ahorra ~ 20 mA.
76
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Corriente (mA) 260 (200) 195 (135) 480 (420) 290 (230) 304 (240)
Potencia (W) 1,3 (1,0) 0,975 (0,675) 2,4 (2,1) 1,45 (1,15) 1,52 (1,2)
Todas las medidas anteriores incluyen aproximadamente 60 mA para el WiFi Dongle USB. Los números
entre paréntesis son sin 60mA.
Con base en lo anterior, primero voy a presentar a mis supuestos para nuestra Frambuesa Pi Modelo Un diseño
basado +. Las baterías LiPo elegidas almacenar 6600mAh. ¿Por qué elegir el modelo A +? Es la corriente de menor consumo
Frambuesa Pi.
Lo que es mAh (mili Amperios)? Un 6600mAh significa que puede tomar 100 mA durante 66 horas, en teoría. En
realidad, usted no será capaz de obtener más de un 80% en promedio, dependiendo de su batería. ¿Qué tan rápido que
los de descarga también hace una gran diferencia. Cuanto más lenta sea la velocidad de descarga, más mAh que puede
salir de la batería. A modo de comparación, una pila AA llevará a cabo sobre 1000mAh [batería en.wikipedia.org/wiki/AA_]
y una batería D llevará a cabo sobre 10000mAh [en.wikipedia.org/wiki/AA_battery].
En un sistema como este, es mejor para cargar sus baterías LiPo completamente y luego conectar el
ordenador y ver cuánto tiempo se tarda en descargar la batería y morir. Hicimos esta prueba en el sistema
IOTWeatherPi. Los resultados están aquí en switchdoc.com
[ www.switchdoc.com/?p=1926 ] .
supuestos:
• 8 Horas de sol ejecutan las células por lo menos al 70% del valor máximo de entrega de
corriente a Pi de frambuesa con una eficiencia del 85% (que pierden poder en la circuitería
de carga y aumentar)
Teniendo en cuenta estos podemos calcular total de Frambuesa Pi Modelo Un tiempo de ejecución durante un día típico:
Nuestro objetivo fue durante 24 horas, lo que parece que nuestro sistema va a funcionar. Así 16 Horas de funcionamiento de la
Frambuesa Pi Modelo A + en las baterías solo se llevará a (195mA / 85%) * 16 Horas = 3670mAh, que es cómodamente menos de
nuestras baterías 6600mAh pueden almacenar. El dongle WiFi añadieron aproximadamente 60 mA en promedio. Fue activado todo el
tiempo la Frambuesa Pi estaba en marcha. No se hizo ningún esfuerzo por minimizar la potencia consumida por el dongle WiFi. Sus
resultados dependerán de qué otras cargas que se circula, como otros dispositivos USB, cargas GPIO, dispositivos I2C, etc.
77
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Tenga en cuenta que durante el día, en promedio, estamos poniendo en la batería 6000mAh aproximadamente. Esto también
significa una batería de 6600mAh grande que no hará mucha diferencia a este sistema.
Así, en un día soleado brillante, debemos ser capaces de funcionar 24 horas al día. En cuanto a los resultados de
IOTWeatherPi estar fuera en el sol durante una semana, esto parece ser correcta. Sin embargo, está nublado y lluvioso, y el
sistema se quede sin energía. La siguiente parte más importante del diseño es cómo manejar las caídas de tensión! Consulte
la siguiente sección sobre cómo entregar este pequeño problema desagradable.
• Mira sus datos y lo que le está diciendo sobre el sistema real. Enjuague y repita.
Encendido y Apagado
El sistema de energía en tiempo Pi consta de cuatro partes:
de Datos
Estamos utilizando 2 3.4W paneles solares voltaicos de Sistemas. Estos son paneles de alta calidad que hemos utilizado en
proyectos anteriores y durar mucho tiempo, incluso bajo el sol tropical. La imagen de arriba es de los mismos paneles en Proyecto
Curacao después de seis meses en el sol. Esas son las nubes reflejadas en los paneles, no suciedad. Los paneles son perfectos.
Se seleccionó una batería de 6600mAh de Adafruit para este diseño. Ver el "Dimensionamiento su Sistema Solar" paso a
continuación.
Estamos utilizando un controlador de energía solar SunAirPlus en este diseño. En figura 3-11 se puede ver cómo se
coloca el control de la energía solar en el recinto, por encima de la Frambuesa Pi.
78
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
A continuación se presentan algunos resultados de la junta SunAirPlus utilizando el INA3221 a bordo. Se puede ver que la batería
está casi completamente cargada, y la tensión de la célula solar (en realidad una fuente de alimentación variable sobre el banco de
Ejemplo utiliza 0x40 y SunAirPlus INA3221 Junta trabajará con el SwitchDoc del tablero
del desbloqueo laboratorios INA3221
------------------------------
LIPO_Battery Tensión Bus: 4.15 V LIPO_Battery
Shunt Voltaje: -9,12 mV LIPO_Battery Tensión de
carga: 4.14 V LIPO_Battery actual 1: 91,20 mA
79
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Se puede utilizar esta tarjeta para alimentar sus proyectos y añadir un servomotor o paso a paso para que pueda
seguir al sol usando fotorresitores para generar aún más potencia.
La Junta PowerController USB es básicamente un relé de estado sólido controlado para conectar la alimentación dentro y fuera
de la Frambuesa Pi. Esta placa se encuentra entre el Controlador de Energía Solar (SunAirPlus) y una Frambuesa Pi Modelo A +. La
entrada a la junta fue diseñada para venir directamente de una batería Li-Po por lo que el equipo no se activará hasta que la batería
Li-Po fue acusado por encima de ~ 3.8V. Un circuito de histéresis se proporciona para que el tablero no se enciende y luego se
apague inmediatamente debido a que la fuente de alimentación se tiró hacia abajo cuando el equipo se enciende (poniendo
inmediatamente una carga en la batería). Esto realmente sucede !!!! Matas a Frambuesa Pi tarjetas SD de esta manera.
En este importante paso, vamos a discutir el problema de apagar y hasta su Frambuesa Pi. En los sistemas de solar,
esto se llama el "problema de baja de voltaje." Vamos a mostrar cómo utilizar un dispositivo simple, el control de
encendido USB [ www.switchdoc.com/ USB-powercontrol bordo / ] , SwitchDoc de laboratorios para resolver este
problema.
Una de las cuestiones más importantes en el diseño de un sistema de energía solar Frambuesa Pi es el encendido y
apagado. El “problema de baja de voltaje” es un problema real. ¿Por que preocuparse? Si usted tiene una cadena larga de los días
nublados, puede ejecutar su batería hacia abajo. Puede compensar esto en su diseño añadiendo más paneles y más baterías, pero
que puede llegar muy caro y su sistema todavía puede quedarse sin energía, sólo mucho menos frecuencia.
Apagado del Pi
Como cerrar la Frambuesa Pi fuera es bastante fácil. Cuando el voltaje de la batería cae por debajo de un cierto valor, que
acaba de hacer un “apagado sudo -h now” y su Frambuesa Pi se cerrará limpiamente. Después de hacer la prueba habló de
aquí [ www.switchdoc.com/?p=1926 ] , elegimos 3.5V como el voltaje para apagar el Raspberry Pi. Figura 3-12 muestra la gráfica
de los datos después de la aplicación de estos valores.
80
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Tenga en cuenta que en la mayoría de los sistemas de energía solar, es necesario controlar el voltaje de la batería y no la fuente de
alimentación de 5V ya que con la mayoría de los sistemas de refuerzo de tensión modernos, los circuitos trabajará muy duro para mantener el
5V ir y luego simplemente renunciar a estrellarse a un mucho menor tensión cuando se queda sin energía.
Esto significa que su equipo tendría poca o ninguna advertencia cuando la tensión está a punto de caer. Mediante el control
de la tensión de la batería, se puede decir cuando la batería está recibiendo suficiente bajo y luego apagar el ordenador de forma
segura. Para las baterías de LiPo, esto será cuando el voltaje se baja a alrededor de 3,5 V o menos. Todo esto se puede controlar
con el controlador de carga solar SunAirPlus que estamos utilizando en IOTWeatherPi.
A partir del Pi
Basta de hablar de apagar el equipo. ¿Qué hay de su puesta en marcha?
La cuestión
No se puede dejar que el poder controlador de la computadora. El problema es que la tensión de alimentación se moverá hacia
arriba y abajo hasta que haya suficiente carga en la batería para abastecer totalmente el equipo. Cuando el equipo se enciende (la
conexión de una carga completa), se le tire de la batería hacia abajo con fuerza suficiente como para dorar el equipo causando la
Frambuesa Pi se bloquee. Este ciclo de reinicio constante puede corromper y arruinar su tarjeta SD y hacer que el equipo no
arranque en absoluto, incluso cuando se restablezca la alimentación. Habíamos esta cosa MUY pasar a nosotros 3500 millas de
distancia con el Proyecto Curacao [ www.switchdoc.com/2015/02/solarpower-project-curacao-update/ ] . Arduino son más tolerantes
con esto, pero de Frambuesa Pi no le gusta una fuente de alimentación portado mal. Simplemente no se puede estar seguro de lo
que el estado del equipo se encenderá en sin una buena fuente de alimentación.
81
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Este problema puede ser manejado en un número de maneras. La primera es utilizar otro ordenador (como un
Arduino hecho para ser muy fiable mediante el uso de un perro guardián - ver la serie del ordenador fiable sobre switchdoc.com
[ www.switchdoc.com/2014/11/reliable-projectswatchdog-timers-raspberry-pi-arduinos/ )] para desconectar la alimentación
de la Frambuesa Pi a través de un relé de enclavamiento o MOSFET cuando no hay suficiente energía. Proyecto Curacao
( www.switchdoc.com/project-curacao-introduction-part-1/ ) se utiliza este enfoque.
No queríamos añadir un equipo adicional a IOTWeatherPi, así que elegimos una segunda solución.
82
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Hay un circuito de histéresis por lo que la junta no se encenderá y luego se apague inmediatamente debido a que la fuente de
alimentación se tiró hacia abajo cuando el equipo se enciende (poniendo una carga en la batería).
Hay poca software para este dispositivo. Se conecta directamente a la batería Li-Po para el control automático! El
único software utilizado detecta el voltaje de la batería y decide cuándo apagar el equipo. El control de potencia USB se
encarga de apagar la alimentación de la Frambuesa Pi cuando el voltaje de la batería se pone lo suficientemente bajo.
Tenga en cuenta que un cierre Frambuesa Pi seguirá gastando (de acuerdo con una medición rápida, alrededor de 100
mA). Figura 3-14 muestra cómo se integra la PowerControl USB en un sistema.
83
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
aproximadamente 3.4V.
Sin embargo, lo que si el sol sale en este momento y se inicia la carga de la batería de nuevo? A continuación, el
PowerController USB nunca alcanzará aproximadamente 3.4V y nunca se apagará. Y el Pi no se reiniciará. No es un buen
escenario!
Hemos fijado esto añadiendo un temporizador de vigilancia de hardware. Para ver un tutorial sobre temporizadores de
vigilancia de hardware, lea la serie SwitchDoc comenzando aquí [ www.switchdoc.com/2014/11/
fiables-proyectos-vigilancia-timers-frambuesa-pi-Arduino / ] . Una imagen del temporizador de vigilancia se da en la figura 3-15 .
84
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
■ Tip SwitchDoc La construcción de cables de la instalación es siempre un dolor. Desea que todos los cables estén juntos y
usted quiere que sean compactos y de aspecto agradable. Una gran manera de hacer esto es para cortar los cables de gancho
hasta la misma longitud y luego los trenzar juntos mediante el uso de un taladro eléctrico. Insertar los cables y luego girar el
taladro lentamente durante la ejecución de los dedos lentamente por los cables. Apuesto cables cada vez! Figura 3-16 muestra el
85
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
86
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
• Grove 4 canales I2C Mux del tablero del desbloqueo w / LED de estado [ www.switchdoc.com/grove-i2c-4-channel-m
]
de control automático / ]
87
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Poner el IOTWeatherPi en la caja de Bud Industries era bastante sencillo. Hemos elegido para poner la parte de la energía
solar del circuito en la parte superior y la Frambuesa Pi y la matriz de sensores IOTWeatherPiArduino en el fondo de la caja. Las
partes fueron todos colocados y, a continuación todos los orificios de los tornillos y tornillos externos se sellaron con calafateo de
silicio.
Se utilizó la glándula Conectores para pasar los cables de entrada y salida de la caja. Luego selló el Conectores Glándula. El
Conectores Glándula no son necesariamente resistente al agua, pero hacen cosas más apretado y proporcionar un buen anclaje de
cable. A continuación, utiliza un enchufe desconectable a prueba de agua para atar en los instrumentos del tiempo WeatherRack. Se
puede ver estas conexiones en la figura 3-19 .
88
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
En la construcción de la Estación Meteorológica IOTWeatherPi con energía solar, vimos un par de partes que decidimos que sería
bueno para la impresión 3D. En los doce meses desde que compramos nuestra SwitchDoc laboratorios MakerBot replicador [ makerbot.com/
], Hemos cambiado totalmente la forma en que construimos piezas especiales para la creación de prototipos. Y con las últimas
actualizaciones de firmware de la extrusora y, las rocas MakerBot! He hecho diez copias largas sin ningún problema. Lo que solía ser
cuchillos Xacto y espuma, madera y pegamento, pero ahora que acabamos de construir nuevas partes cuando los necesitamos. Figura 3-20
muestra las piezas impresas en 3D completos. Las tres partes que hemos utilizado para la impresión en 3D son los siguientes:
• Soporte con bisagras para conectar paneles de paneles solares a la intemperie caja estación
(ajustable para la latitud);
• opuesto a las bisagras para colgar paneles de energía solar (las lengüetas en el lado del
rectángulo son sólo para asegurarse de que el soporte es plana!);
89
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Frambuesa Pi A +: PiA +
WeatherPiArduino: WPA
SunAirPlus: SAVIA
90
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Frambuesa Pi A + (PIA +)
GPIO Encabezamiento
Desde A Descripción
PiA + GPIO / Pin 1: 3.3V IGI2CM JP1 / Pin 3: VCC Mux I2C energía para la tarjeta de
interfaz de ordenador
PiA + GPIO / Pin 2: 5.0V WDT JP1 / Pin 1: VDD Poder para Dual Junta temporizador de
vigilancia
PiA + GPIO / Pin 3: SDA GI2CM JP1 / Pin 2: SDA SDA para I2C Junta Mux
- Interfaz de ordenador
PiA + GPIO / Pin 5: SCL GI2CM JP1 / Pin 1: SCL SCL para I2C Mux tarjeta de
interface de ordenador
PiA + GPIO / Pin 6: GND GI2CM JP1 / Pin4: GND GND para I2C Mux tarjeta de
interface de ordenador
PiA + GPIO / pin 11 GPIO 17 WDT JP2 / Pin 1: TRIGGER De entrada de disparador para WatchDog 1
PiA + GPIO / Pin 12: 18 GPIO WPA JP13 / Pin 1: LD-IRQ Solicitud de interrupción de la
AS3935 de Rayo Junta
Detector
PiA + GPIO / pin 16: 23 GPIO WPA JP2 / Pin3: Salida anemómetro del
Anemómetro WeatherRack - Interrumpir
PiA + GPIO / Pin 17: 3.3V Conector Tornillo VCC Para proporcionar más
conexiones de 3.3V
PiA + GPIO / Pin 18: 24 GPIO WPA JP2 / Pin 2: Lluvia Lluvia Cubo de salida de
Cubo WeatherRack - Interrumpir
PiA + GPIO / Pin 22: 25 GPIO SAP JP13 / Pin8: EXTGP0 GP0 a bordo SunAir -
display LED amarillo
Desde A Descripción
JP1 - Informática
GI2CM JP1 / Pin 2: SDA PiA + GPIO / Pin 3: SDA SDA a I2C Mux tarjeta de
interface de ordenador
GI2CM JP1 / Pin 1: SCL PiA + GPIO / Pin 5: SDA SCL a I2C Mux tarjeta de
interface de ordenador
GI2CM JP1 / Pin 4: GND PiA + GPIO / Pin 6: GND GND para I2C Mux tarjeta de
interface de ordenador
( continuado)
91
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Frambuesa Pi A + (PIA +)
GI2CM JP1 / Pin 3: VCC PiA + GPIO / Pin 1: 3.3V Energía para I2C Junta Mux
- Computer Interface
GI2CM JP2 / Pin 3: VDU0 WPA JP1 / Pin 2: VDD 3.3V de la Junta de WPA
GI2CM JP2 / Pin 2: GND WPA JP1 / Pin 1: GND Junta GND para WPA
GI2CM JP2 / Pin 5: SC0 WPA JP4 / Pin 1: SCL SCL para la Junta de WPA
GI2CM JP2 / Pin 4: SD0 WPA JP4 / Pin 2: SDA SDA para la Junta de WPA
GI2CM JP3 / Pin 3: VDU1 SPA JP23 / Pin 3: VDD 5.0V para Bus 1 para I2C Mux
GI2CM JP3 / Pin 2: GND SAP JP13 / Pin 4: GND Junta GND para SAP
GI2CM JP3 / Pin 5: SC1 SAP JP13 / Pin 1: EXTSCL SCL para la Junta de SAP
GI2CM JP3 / Pin 4: SD1 SAP JP13 / Pin 2: EXTSDA SDA para la Junta de SAP
JP4 - bus I2C 3 GND auxiliar para la Junta WDT GND para Junta WDT
GI2CM JP4 / Pin 2: GND WDT JP1 / Pin 1: GND GND para Junta WDT
Desde A Descripción
JP1
WDT JP1 / Pin 2: GND GI2CM JP4 / Pin 2: GND GND para Junta WDT
JP2
WDT JP2 / Pin 1: DOG1_ PiA + GPIO / Pin 11: 17 GPIO WDT disparador de
TRIGGER Frambuesa Pi
JP3
WDT JP3 / Pin 1: DOG1_ USBPC: TP3 - COUT Soldadura Cable a TP3
ARDUINORESET - COUT en
PowerControl USB
( continuado)
92
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Frambuesa Pi A + (PIA +)
WeatherPiArduino (WPA)
Desde A Descripción
JP1
WPA JP1 / Pin 1: GND GI2CMux JP2 / Pin 2: GND GND para Junta WPA
de I2CMux
WPA JP1 / Pin 2: 3V3 GI2CMux JP2 / Pin 3: 3.3V para I2C Bus 0 de WPA
VDU0
JP2
WPA JP2 / Pin 2: Lluvia Cubo PiA + GPIO / Pin 18: 24 Lluvia Cubo de salida de
GPIO WeatherRack - Interrumpir
WPA JP2 / Pin 3: Anemómetro PiA + GPIO / pin 16: 23 De salida del anemómetro
GPIO de WeatherRack Interrupt
JP4
WPA JP4 / Pin 1: SCL GI2CMux JP4 / Pin 5: SCL SCL de I2C Junta Mux
WPA JP4 / Pin 2: SDA GI2CMux JP4 / Pin 4: SDA SDA de I2C Junta Mux
JP13
WPA JP13 / Pin 1: LD-IRQ PiA + GPIO / Pin 12: 18 GPIO Solicitud de interrupción de la
AS3935 de Rayo Junta
Detector
Desde A Descripción
JP1
USBOUT JP1 / Pin 1: LIPOBATIN SAP JP4 / Pin 1: Li-Po SAP Plus de LiPo baterías que están
TP3 - COUT: WDT JP3 / Pin 1: DOG1_ Cierra control de corriente USB
ARDUINORESET hacia abajo si Frambuesa Pi se ha
cerrado y LIPOBATIN <~ 3.9V
( continuado)
93
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Frambuesa Pi A + (PIA +)
SunAirPlus (SAP)
Desde A Descripción
JP4
SAP JP4 / Pin 1: USBPC: JP1 / Pin1 SAP Plus de LiPo baterías que están
JP10
JP13
SAP JP13 / Pin 3: VDD SPA JP23 / Pin 2: VDD5 5V I2C interfaz de SAP
SAVIA JP13 / Pin 4: GND GI2CMux JP3 / Pin 2: GND GND forman Junta I2CMux
SAP JP13 / Pin 8: EXTGP0 PiA + GPIO / Pin 22: 25 Línea de Frambuesa Pi a flash
GPIO LED amarillo en SAP GP0
JP23
SAP JP23 / Pin 2: VDD5 SAP JP13 / Pin 3: VDD 5.0V para SAP bus I2C a
I2CMux
SAP JP23 / Pin 3: VDD5 GI2CMux JP3 / Pin 3: VDU1 5.0V para I2CMux I2C Bus1
94
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
El software
Una gran parte del Proyecto IOTWeatherPi es el software. Todo el software Python para este proyecto es de hasta en github en
la sección de switchdoclabs [ https://github.com/ switchdoclabs / WeatherPi ] . También he incluido todas las diversas bibliotecas
para los dispositivos I2C que estamos utilizando.
Puede utilizar este archivo para construir la base de datos MySQL para el Proyecto
IOTWeatherPi.
• Matplotlib. Este es el subsistema de gráficos con una gran interfaz de Python. Es un poco
más complejos de instalar, así que escribí un tutorial sobre cómo instalarlo en SwitchDoc.com
[ www.switchdoc. com / 2014/01 / matplotlib-frambuesa-pi-MySQL-y-projectcuracao / ] . Tenga
en cuenta que la instalación lleva mucho tiempo, alrededor de ocho horas en un Frambuesa
Pi (en su mayoría sin supervisión).
secondCount = 1 while
True:
si (as3935Interrupt == true):
process_as3935_interrupt ()
processCommand ()
95
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
si (batteryVoltage <3,5):
print "--- >>>> hora de apagado <<<< ---" shutdownPi (
"cierre de bajo voltaje")
secondCount = secondCount + 1
# restablecer secondCount para evitar desbordamiento para siempre
si (secondCount == 1000001):
secondCount = 1
time.sleep (1,0)
Tenga en cuenta que reiniciar el Pi cada dos días. ¿Por qué hacemos eso? Nos hemos dado cuenta de que después de un uso
intensivo de matplotlib y / o MySQL, que a veces después de un largo tiempo, que se quede sin recursos, dando todo tipo de comportamiento
extraño. Dado que el Raspberry Pi A + tiene una pequeña cantidad de RAM, la reanudación está la forma más fácil de fijación.
96
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
botones, barras de desplazamiento, etc., hasta en nuestras pantallas para iPad / iPhone sin tener que escribir aplicaciones. RasPiConnect
trabaja en Frambuesa Pi de y en Arduino. Hemos utilizado este software en cinco proyectos diferentes, con IOTWeatherPi ser la última.
¿Cómo construir un panel de control para IOTWeatherPi está más allá del alcance de este capítulo, pero
aquí está el tutorial [ www.switchdoc.com/?p=523 ] que escribió para hacer lo que estamos haciendo por
IOTWeatherPi. Estamos utilizando el mismo mecanismo de mando de paso en IOTWeatherPi que usamos en
MouseAir. RasPiConnect viene con un excelente manual, completa aquí [ www.milocreek.com/wiki/index.php/Main_Page
].
Todo el código RasPiConnect que usamos en IOTWeatherPi es bajo en github GitHub. com /
switchdoclabs [ https://github.com/switchdoclabs/WeatherPi-RasPiConnect ] .
Tenga en cuenta que se carga sólo el directorio local, que es el único lugar cambios en el código se hacen como se
explica en el manual RasPiConnect.
El IOTWeatherPi ha estado fuera durante aproximadamente 16 semanas. Funcionando perfectamente. Se puede ver el cuadro
está cargando y luego ir a la energía de la batería cuando el sol se mueve detrás de la casa. Hemos tenido días calientes y noches
frías como estamos empezando a salir de la primavera al verano. No es bastante generar suficiente electricidad para hacer funcionar
las 24 horas en el momento (ya que está en la sombra hasta las 9 am y después de las 3 pm - No bastantes de 8 horas de sol). Este
problema se solucionará cuando lo muevo hasta la parte superior de la casa donde tendrá sol alrededor de 12 horas al día en
promedio (cuando el sol no está detrás de las nubes!). Figura 3-21 muestra el gráfico del rendimiento de la energía solar después de
una semana de sol.
97
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
mejoras
No estamos construyendo gráficos de la velocidad del viento, dirección, y la lluvia todavía. Estamos sólo un informe de los
valores actuales del panel de control RasPiConnect. Todos los datos se guarda en MySQL, sin embargo.
Las indicaciones de temperatura y de rayos necesitan ser fijo y mejorado. Lo bueno es que todo
esto se puede hacer de forma remota!
Empezando
El primero que hay que hacer es instalar el software Twython [ https://twython.readthedocs.org/ es / última / ] . Esta es una
biblioteca de Python que le permitirá a su aplicación a crear nuevos Tweets e interactuar con Twitter fuera del sitio web
de Twitter.
Copiar y pegar estos comandos uno a la vez en su Frambuesa Pi. La mayoría de estos requieren una respuesta para
continuar. Los dos primeros (actualización / actualización) son comandos generales que actualizan su Frambuesa Pi a la mejor
y más nuevo software. Una buena cosa que hacer en general.
Ahora tenemos Twython instalado en su IOTWeatherPi. Figura 3-22 muestra una captura de pantalla iPhone de los
Tweets resultantes.
98
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
La API de Twitter (Application Programming Interface) es una interfaz REST. Una interfaz (Representational State
Transfer) resto es una estilo de arquitectura de software para construir
escalable servicios web .
REST sistemas normalmente, pero no siempre (y, específicamente, no en cuanto a la interfaz de Twitter), se comunican a
través de Internet con el mismo verbos HTTP (GET, POST, PUT, DELETE, etc.), que los navegadores web utilizan para
recuperar páginas web y para enviar datos a servidores remotos.
La primera cosa que hay que hacer es crear una nueva cuenta de Twitter para su proyecto. En general,
usted no quiere a Tweet su temperatura y las cosas a través de su cuenta personal y a todos sus seguidores.
Hacer eso es una gran manera de des-seguido muy rápidamente. Ir a Twitter y hacerlo ahora. Cuando haya
hecho esto, pasar a la siguiente párrafo.
99
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Para utilizar la API de Twitter, usted tendrá que registrar una nueva aplicación (su IOTWeatherPi en este
caso). Hacerlo desde este enlace [ https://apps.twitter.com/app/new ]
- no hay necesidad de especificar un URL de respuesta, y sólo hacer un sitio web si lo desea. Figura 3-23
muestra la pantalla de la aplicación inicial.
A continuación, vaya a la Tokens llaves y la conexión y crear un token de acceso. Mantener esta página abierta. Usted
tendrá que poner las fichas en su aplicación.
Mira en el subdirectorio de Twitter en el directorio de software IOTWeatherPi y editar el archivo twitter.py añadir
su ACCESS_KEY (que es el testigo de acceso en la página de Twitter).
# twitter.py
# laboratorios SwitchDoc
# 07.23.15
import sys
100
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
tratar:
SendString = DateString + tweetString
twitter.update_status (estado = SendString) de retorno 0
excepto:
volver 1
# Twitter instalación
de twython Twython importación
Twitter importación
Usted pone los códigos de inicialización (CONSUMER_KEY, etc.) en conf.py desde la página de Twitter de desarrollo.
Aquí está el código en IOTWeatherPi que hace que la temperatura y la humedad tweets cada 30 minutos:
# enviar un tuit
tweetString = "OutsideTemp:% 0.1FC OutsideHum:% 0.1f %% del viento:
0.1fKPH%" % (outsideTemperature, outsideHumidity, currentWindSpeed * 1.6)
101
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
enviando mensajes de texto a la puerta de entrada e incorporar en su dirección de correo electrónico (tabla 3-5 ).
Más vehículos y puertas de enlace se enumeran aquí [cita https://en.wikipedia.org/ wiki / SMS_GATEWAY ]
El código para enviar mensajes de texto es, pues, el mismo que el código para enviar correos electrónicos.
102
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
COMMASPACE = ''
# msg.attach (mensaje)
# Suponemos que sabemos que los archivos de imagen están todos en formato PNG
# Abrir los archivos en modo binario. Dejar que la clase MIMEImage automáticamente
tratar:
# abrir una línea con el servidor de s = smtplib.SMTP (
"smtp.gmail.com", 587)
s.ehlo ()
s.starttls ()
s.ehlo ()
s.quit ()
excepto:
103
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Tenga en cuenta que las direcciones de hacia y desde se definen en conf.py junto con la información de Twitter.
Y aquí es la única línea de código para enviar un mensaje de texto de advertencia del rayo:
Figura 3-24 muestra que un conjunto de mensajes de texto fue entregado a mí en Curaçao
3.500 millas de distancia de nuestra IOTWeatherPi en SwitchDoc laboratorios.
104
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
CWOP
El Programa de Observadores Ciudadanos Tiempo (CWOP) es una red de propiedad privada electrónica estaciones meteorológicas concentrada
en los Estados Unidos, sino que también se encuentra en más de 150 países. participación en la red permite a los voluntarios con
estaciones meteorológicas informatizadas para enviar observaciones meteorológicas de superficie automatizadas para el Servicio
Meteorológico Nacional. Estos datos son utilizados entonces por el Actualizar rápida pronóstico del modelo para producir predicciones a
corto plazo (de 3 a 12 horas en el futuro) de condiciones en todo el 48 estados de los Estados Unidos . Observaciones CWOP también
se redistribuyen al público.
El CWOP fue originalmente creado por los radioaficionados que experimentan con
de radio por paquetes , Pero ahora contiene la mayoría de las estaciones de sólo conectados a Internet. A partir de julio
2015, más de 10.000 emisoras de todo el mundo informan regularmente a la red CWOP.
APRS fue originalmente un sistema basado en la radioafición para las comunicaciones en tiempo real de información
de valor inmediato en el área local. Ahora se utiliza en un número de aplicaciones en las que los paquetes de datos necesitan
ser difundido a varias ubicaciones.
El software que estoy usando en este proyecto se basa en el excelente trabajo de Tom Hayward y su proyecto
pywxtd [ https://github.com/kd7lxl/pywxtd ] . Hemos eliminado el código de análisis estación meteorológica y el código
del demonio y sólo estamos usando las bibliotecas APRS para enviar los datos a CWOP.
CWOP Software
El software CWOP lee los datos de la estación IOTWeather y envía un paquete APRS a los servidores CWOP con
nuestros datos de tiempo actuales.
En primer lugar es el código post_CWOP utilizado para enviar el paquete a los servidores CWOP. Instalamos el código CWOP en
el bucle principal IOTWeatherPi para disparar cada 15 minutos:
105
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
A continuación, tenemos el código que usamos para construir los paquetes CWOP APRS:
# laboratorios SwitchDoc
# 24 de julio 2015
# Version 1.0
"""
inicialmente de Tom Hayward
construye y presenta una
APRS paquete de tiempo a la APRS-IS / CWOP. Licencia BSD
y otras cosas
Copyright 2010 Tom Hayward <[email protected]> """
de la toma de importación *
sys.path.append ( '..')
106
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
def make_aprs_wx (WIND_DIR = Ninguno, WIND_SPEED = Ninguno, wind_gust = Ninguno, temperatura = Ninguno,
rain_since_midnight = Ninguno, humedad = Ninguno, presión = None):
"""
Ensambla la carga útil del paquete meteorológica APRS. """
si el número es Ninguno:
* Longitud volver otra cosa
'':
format_type = {
'Int': 'd', 'float': '.0f',} [tipo
(número) .__ name__]
def post_CWOP (WIND_DIR = Ninguno, WIND_SPEED = Ninguno, wind_gust = Ninguno, temperatura = Ninguno,
rain_since_midnight = Ninguno, humedad = Ninguno, presión = None):
# publicar en APRS
wx = make_aprs_wx (WIND_DIR = WIND_DIR, WIND_SPEED = WIND_SPEED, wind_ ráfaga =
wind_gust, temperatura = temperatura, rain_since_midnight = rain_since_ medianoche, la humedad = humedad,
presión = presión)
regreso
107
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
resultados
Aquí está el paquete y los datos que se recibieron por la ROM del servidor CWOP IOTWeatherPi (nuestro número de registro
CWOP es EW7667). Ahora estamos conectados a la IOT para estaciones meteorológicas!
Cuando se han recogido una gran cantidad de datos, findu.com mostrará algunos gráficos fresco como se muestra en
findu.com . Ver figura 3-25 [ www.findu.com/cgi-bin/wxpage.cgi?call=EW766 7 y última = 48 y radar = ***] .
108
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
109
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
Conclusión
En figura 3-26 , Mostramos la IOTWeatherPi con el programa opcional Rayo Pilón en la naturaleza [ www.instructables.com/id/Lightni
].
Es increíble lo que puede hacer con el hardware como el Raspberry Pi y fuera de theshelf sensores para detectar el
medio ambiente. Con una calificación de 6 CPLPFC, IOTWeatherPi probablemente no es un sistema de despliegue
comercialmente en el IOT, pero es una gran unidad de base para experimentar y familiarizarse con el hardware y el
software para la IOT.
Aquí están algunas ideas adicionales para proyectos basados en IOTWeatherPi:
• Sustitución de la conexión Wi-Fi con una conexión de datos GSM - Esta sería utilizar la red de
datos móviles para comunicaciones.
• Hacer una costumbre Facebook mensaje con su tiempo - Esto sería utilizar la API de Facebook
para hacer envíos automatizados, al igual que Twitter.
110
CAPÍTULO 3 ■ CONSTRUCCIÓN DE UNA POTENCIA ESTACIÓN METEOROLÓGICA IOT SOLAR
• La adición de un receptor GPS y el almacenamiento de esos datos. Ahora tiene una estación
meteorológica móvil! Cuando se pone de nuevo a Wi-Fi, todos los datos almacenados estarán
disponibles. Se podía twittear su ubicación y las condiciones locales sobre la marcha con una conexión
GSM.
• Adición de sensores de calidad del aire adicional, sensores UV, sensores de polvo. Usted tiene una
gran cantidad de pines de entrada / salida y I2C espacio de direccionamiento que se puede llenar con
¿Siguiente? Pasamos a utilizar el Raspberry Pi para detectar iBeacons y averiguar dónde se encuentra cuando
transporte la Raspberry Pi con usted. Con IOTBeaconAir, modificaremos las luces con luces Philips Hue para iluminar
su camino.
111
CAPÍTULO 4
Capítulo Objetivo: Reunir Ubicación datos en el dispositivo IOT: localizar dónde se encuentra y ubicación de entrega
depende de los datos y llevar a cabo acciones de dónde se encuentre
Los temas tratados en este capítulo:
en el capítulo 3 , Que viste un sistema de energía solares flexibles para entregar datos a la IOT
(En este caso, incluyendo la Administración Oceánica y Atmosférica Nacional (NOAA) a través de la interfaz de tiempo,
CWOP. IOTWeatherPi entregó una gran cantidad de información sobre una base regular.
En este capítulo, nos tomamos nuestro nuevo dispositivo IOT, IOTBeaconAir, a otro nivel. Ahora estamos
recogiendo menos información (e incluso el envío de menos a la IOT), pero estamos tomando datos sobre el medio
ambiente (donde está) y utilizarlo para cambiar el entorno (la cantidad de iluminación donde se encuentre). Esto nos lleva
a otro nivel de interacción con el IOT.
el IOTBeaconAir
IOTBeaconAir es un proyecto basado Frambuesa Pi portátil que lee los paquetes de “publicidad” emitidas por
iBeacons, más o menos calcula su posición, y luego se enciende las luces que están cerca de usted. El Pi
calcula entonces el brillo en función de lo cerca que está. La idea es que se puede caminar alrededor de su
casa con su pi y las luces te seguirá.
En otras palabras, estoy usando iBeacons para averiguar dónde se encuentra físicamente mi Pi portátil (en una bolsa en
mi cadera mientras camino alrededor de la casa) y luego controlar varios dispositivos con el Pi.
El aspecto único de IOTBeaconAir frente a los muchos otros proyectos basados IBeacon Pi existentes es que no estoy
programando la Frambuesa Pi a ser un IBeacon; Estoy haciendo todo lo contrario. Estoy utilizando el Pi a leer otros iBeacons.
Estoy usando iBeacons especializadas en este proyecto, pero también se podría construir sus propias iBeacons de Frambuesa
Pi y después de leerlos a través de Bluetooth con este proyecto.
Este proyecto se basa en un Frambuesa Pi ModelB portátil conectado con un adaptador USB Bluetooth
4.0 y una conexión Wi-Pi dongle USB inalámbrico. El proyecto Pi portátil IOTBeaconAir completo se muestra en
la figura 4-1 .
seis diferentes aspectos de IOT. IOTBeaconAir es un proyecto mucho más simple que IOTWeatherPi. Mesa 4-1 muestra los seis
componentes.
114
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
Clasificación comentarios
Las calificaciones son del 1-10, siendo 1 el menos adecuado para IOT y 10 es la más adecuada para
aplicaciones de IO.
Esto nos da una calificación de 5,8 CPLPFC, un poco menos de IOTWeatherPi (6). Grande para el aprendizaje, no tan bueno
Sin lugar a dudas, la Frambuesa Pi es una plataforma muy flexible y potente IOT. Sin embargo, el consumo de energía,
el costo y el tamaño físico del dispositivo hacen que sea más adecuado para la creación de prototipos o para las unidades
funcionales altamente IOT autónomo.
Con IOTBeaconAir, al igual que el capítulo anterior, tenemos una gran cantidad de opciones. Podemos conectar a Internet utilizando
el conector WiFi. Podemos utilizar el Bluetooth para conectar a dispositivos locales, y también podemos utilizar la conexión Wi-Fi en
modo ad hoc para hacer conexiones locales. En este capítulo, vamos a utilizar la interfaz WiFi para hablar con el mundo más amplio
de dispositivos IOT.
Lista de hardware
A continuación se presenta una lista de los equipos que necesita para la construcción de este proyecto:
• Frambuesa Pi Modelo B +
115
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
iBeacons
IBeacon es la marca comercial de Apple para un dispositivo de baja potencia Bluetooth. Un IBeacon es un transmisor de baja potencia
y de bajo costo que puede notificar a los dispositivos cercanos de su presencia y una aproximación de rango. Hay un número de
fabricantes que están produciendo estos dispositivos y la mayoría de smartphones (y de Frambuesa Pi!) Se puede hacer para actuar
como un IBeacon. Utiliza Bluetooth Low Energy (BLE), también conocida como Bluetooth inteligente iBeacons también se puede
recibir el Bluetooth 4.0 dispositivos que soportan el modo dual (como el dongle IOGear especificado anteriormente). Tenga en cuenta
que la recepción de iBeacons en un dongle Bluetooth genérico puede ser bastante problemático. Seguir con el modelo IOGear
GBU521 si es posible.
Aplicaciones de iBeacons incluyen reconocimiento de ubicación de la publicidad, confirmaciones de medios sociales, o las
notificaciones enviadas a su teléfono inteligente o pi. Un IBeacon transmite un paquete de publicidad que contiene un UDID
(identificador de dispositivo único) que identifica el fabricante y a continuación, un número mayor y menor que se puede utilizar
para identificar el dispositivo específico. También envía una RSSI (Indicador de Intensidad de la señal relativa) que se puede
utilizar para aproximar la distancia al dispositivo IBeacon.
Es importante tener en cuenta que casi toda la lógica detrás de un despliegue IBeacon es a través de la aplicación
en el dispositivo de soporte (un Pi de frambuesa en nuestro caso). La única función de la IBeacon es anunciar al
dispositivo de su propia existencia en una ubicación física. En algunos casos, puede conectarse a un dispositivo individual
a través del GATT IBeacon (Perfil general de atributos) aunque algunos iBeacons tienen una interfaz propietaria (como el
Estimote iBeacons) que prohíben esto.
Este requisito de tener el dispositivo de aplicación (como un teléfono inteligente o Frambuesa Pi) leer y realizar acciones
en la posición de los iBeacons sigue siendo un obstáculo para la adopción generalizada de iBeacons en el mercado. Hacerlo de
otra manera (dicen los iBeacons para detectar su teléfono) es un gran problema de privacidad y así las cosas son propensos a
permanecer de esta manera en el futuro previsible. Véase el capítulo 7 , “La seguridad informática y la IOT,” por una serie de
razones por las que esto es una buena cosa.
116
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
He utilizado dos tipos de iBeacons: Estimote y KS Technologies partículas. Tanto trabajado de manera adecuada
con respecto a la recepción de paquetes de publicidad, pero las balizas Estimote tener una interfaz propietaria que hace
que no sea Linux y Frambuesa Pi amable, por lo que recomiendo los iBeacons de partículas, ya que puede leer y
escribir en los dispositivos de la Frambuesa Pi. El Estimote sólo admite un SDK patentada en Android y iPhone. Por
supuesto, siempre se puede rodar su propia IBeacon utilizando un Frambuesa Pi [ www.wadewegner.com/2014/05/
crear-an-IBeacon-transmisor-con-la-frambuesa-pi / ] . The Particle IBeacon se muestra en la figura 4-3 .
117
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
Hay cuatro piezas principales de software en IOTBeaconAir: la IBeacon escáner Bluetooth, la interfaz
de Philips Hue, el software principal IOTBeaconAir, y el software de servidor RasPiConnect.
Tenga en cuenta que estamos recogiendo en una baliza Estimote y dos balizas de partículas. Curiosamente, también
estamos recogiendo un Apple TV situada a unos 40 pies de distancia. Yo no era consciente de que el Apple TV se emite un
paquete IBeacon, pero en la comprobación de que se utiliza para una forma no documentada de la creación de la Apple TV
desde tu iPhone. Los números no hacen mucho sentido en el paquete de publicidad IBeacon, pero eso es un problema para otro
día.
118
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
El mayor problema con este proyecto iba a ser capaz de leer los datos de forma fiable IBeacon de un dongle
Bluetooth (estoy usando un USB 4.0 Adaptador Bluetooth IOGear Micro - Modelo GBU521). Varios de los métodos por ahí
en la web eran menos que satisfactorio (haciendo exploraciones hcidump) y, a menudo terminó colgando el Bluetooth en el
pi, lo que requiere un reinicio. Una vez fui a usar mi biblioteca de software, tengo cero obsesiones y el software se ejecuta
durante varios días.
iBeacons utilizan Bluetooth Low Energy (BLE) protocolos de comunicación, que es un tipo relativamente nuevo de
Bluetooth y tiene soporte irregular. Por último, me topé con un programa usando Bluez (Biblioteca Bluetooth Linux) llamadas
nativas, que con una gran cantidad de modificaciones, correcciones de errores y de corte de código que no necesitaba, que
tenía un escáner IBeacon que funcionaba cada vez. He publicado mi versión de trabajo en el github laboratorios SwitchDoc ( github.com/switchdo
) para que pueda descargarlo y probar su configuración.
El programa blescan.py es fácil de probar y usar, pero requiere un poco de configuración en el Raspberry Pi. Consulte
la siguiente sección sobre la instalación de todo el software necesario en el Raspberry Pi.
Aquí está la salida de la programación que se ejecuta en SwitchDoc Labs. Tenemos una gran cantidad de iBeacons sentados
alrededor.
----------
cf: 68: cc: c7: 33: 10, b9407f30f5f8466eaff925556b57fe6d, 13072,52423, -74, -78 cf: 68: cc: c7: 33:
10,74696d6f74650e160a181033c7cc68cf, 46608,13255, -52, -77 da: f4: 2e: a0: 70: b1,
b9407f30f5f8466eaff925556b57fe6d, 28849,11936, -74, -79 da: f4: 2e: a0: 70:
b1,74696d6f74650e160a18b170a02ef4da, 46769,28832,46, -78 dd: 5d: d3: 35: 09 : dd,
8aefb0316c32486f825be26fa193487d, 1,1, -64, -78 c3: 11: 48: 9b: cf: fa,
8aefb0316c32486f825be26fa193487d, 0,0, -64, -73 fd: 5b: 12: 7f: 02: e4,
b9407f30f5f8466eaff925556b57fe6d , 740,4735, -74, -79 fd: 5b: 12: 7f: 02:
e4,74696d6f74650e160a18e4027f125bfd, 46820,639,18, -80 dd: 5d: d3: 35: 09: dd,
8aefb0316c32486f825be26fa193487d, 1,1, -64, -77
Estamos encontrando ocho iBeacons diferentes, que coincide con el recuento real. Antes de poder hacer esto, es
necesario instalar la última versión de bluez, la pila de Bluetooth para la Frambuesa Pi (instrucciones abajo). Nota: Se
puede usar apt-get, pero la versión de apt-get es antiguo y tiene el apoyo irregular para iBeacons.
119
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
¿Qué es Zigbee?
ZigBee es una especificación común para un conjunto de protocolos de comunicación de alto nivel que se utilizan para crear
redes de área personal construidos a partir de radios digitales pequeños, de baja potencia. En este sentido, es muy similar a la
conexión Bluetooth Low. La distancia de transmisión está limitada a unos 10-100 metros, dependiendo de la potencia de salida
y el entorno de transmisión. Los dispositivos Phillips Hue ZigBee funcionan bien dentro de una casa, pero a veces se verán las
luces saltar dentro y fuera de la red en lo que parece ser eventos relacionados con la humedad. Teniendo en cuenta las
frecuencias y las características de baja potencia de ZigBee, esto sin duda podría ser el caso.
La tecnología ZigBee está destinado a ser más simple y menos costoso que el Bluetooth y Wi-Fi, no sólo en el costo en
dólares, sino también sobrecarga del procesador para hacer frente al canal de comunicaciones. Imagínese lo que el
procesador tiene que hacer para interpretar un paquete entrante TCP / IP y llegar a los datos del usuario. ZigBee puede ser
utilizado sin el muy “pesado” pila de protocolos para comunicarse con dispositivos locales a través de una red de malla para
llegar Zigbees más distantes (véase el capítulo 6 ) Y luego pasar a un procesador “más robusto”, tales como Raspberry Pi
ZigBee se usa típicamente en aplicaciones IOT con bajas tasas de datos que requieren una larga vida de la batería (una
característica muy importante!) Y redes seguras. redes ZigBee están protegidos por claves de cifrado simétrico de 128 bits.
Véase el capítulo 7 para una discusión de las claves de cifrado. ZigBee tiene una tasa definida de 250 kbit / s, lo cual no es
muy rápido para el acceso web, pero se puede enviar una gran cantidad de datos con esa velocidad.
El nombre de ZigBee se refiere a la Danza de la abeja de la miel de las abejas después de su regreso a la colmena.
Nuestras salas de ensayo para IOTBeaconAir tiene 10 Phillips Hue A19 bombillas estándar, 3 Phillips Hue luces BR-30
hacia abajo, lavado y 2 Phillips Amigos de luces Hue Bloom. Era caro, pero vale la pena (A19 bombillas son $ 60 cada uno,
BR30 bulbos $ 60 cada uno, y las flores son $ 80 cada uno). Estos precios deberían disminuir en el futuro.
120
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
121
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
El software principal se ejecuta en un bucle, con un sueño de 0,25 segundos al final. Comprueba si hay dos fuentes de
trabajo. En primer lugar se comprueba una cola que está conectado con el software que se ejecuta IBeacon Escaneado en un
subproceso de fondo. Si la cola está vacía, no tenemos nuevos informes IBeacon así que bajan y comprobar para ver si hay
comandos de espera desde el panel de control RasPiConnect.
si (queueBLE.empty () == false):
resultado = queueBLE.get (Falso)
Si la cola ha IBeacon resultados a la entrega, a continuación, pasar por el bucle principal y procesar la información
IBeacon, establecer varios parámetros informativos, la construcción de la nueva página web para ofrecer a RasPiConnect,
y controlar las luces.
He quitado la información de depuración para hacer las cosas más claras. Todos los cálculos se hacen en metros
y la conversión en píxeles de pantalla.
Lo primero que hacemos es procesar la lista IBeacon entrante para llenar nuestras matrices de baliza. A continuación, limpiamos
122
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
A continuación se calcula la posición física actual IOTBeaconAir pero sólo si tenemos más de tres
balizas.
# posición de la actualización
if (utils.haveThreeGoodBeacons (rollingiBeaconRSSI)> = 3):
oldbeacons = balizas
balizas = utils.get3ClosestBeacons (rollingiBeaconRSSI) si (CMP
(oldbeacons, balizas) = 0):
bubblelog.writeToBubbleLog ( "closebeacons:% i,% i,% i" % (balizas [0], balizas [1], balizas
[2]))
MyPosition = utils.XgetXYFrom3Beacons
(balizas [0], balizas [1], balizas [2], rollingiBeaconRSSI)
Ahora tengo la última posición calculada. Siguiente calculo la fluctuación en la posición. Un valor grande de
fluctuación dice ya sea que se muda o hay cantidades significativas de ruido en los informes IBeacon o ambos.
Ahora escribo a cabo la fluctuación de RasPiconnect a leer y enviar a la gráfica fluctuación en el panel de control.
La próxima calcular la distancia desde mi posición para todas las luces y luego encender la luz, el cambio de
brillo, o apagarlo dependiendo de la distancia.
123
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
Por último, se actualiza el recuento de baliza actual y construir el gráfico para su visualización en RasPiConnect.
# posición perdida
MyPosition = [-myPosition [0], -myPosition [1]]
Eso es todo el programa principal para IOTBeaconAir. A continuación se presenta la lista completa
del programa principal de IOTBeaconAir:
importación utilidades de
importación
importación bleThread
124
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
# Variables de estado
currentiBeaconRSSI = []
rollingiBeaconRSSI = []
currentiBeaconTimeStamp = []
currentLightState = []
LIGHT_BRIGHTNESS_SENSITIVITY = 2,0
LIGHT_DISTANCE_SENSITIVITY = 2,0 BEACON_ON
= True
DISPLAY_BEACON_ON = True
DISPLAY_LIGHTS_ON = True
lights.initializeHue ( '192.168.1.6')
lights.setInitialLightState (currentLightState)
125
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
126
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
tratar:
f = open ( "/ home / pi / BeaconAir / estado /
distanceSensitivity.txt", "r") commandresponse =
f.read ()
LIGHT_DISTANCE_SENSITIVITY = flotador (commandresponse)
f.close ()
excepto:
LIGHT_DISTANCE_SENSITIVITY = 2,0 try:
CompleteCommand ()
devuelven TRUE
127
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
queueBLE = Queue ()
BLEThread = Thread (target = bleThread.bleDetect, args = (__ __ nombre, 10, queueBLE,)) BLEThread.daemon =
True BLEThread.start ()
si (BEACON_ON == true):
# comprobar si hay actualizaciones de impresión IBeacon
"Longitud de la cola =", queueBLE.qsize () si (queueBLE.empty () ==
false):
resultado = queueBLE.get (Falso) print
"------"
# posición de la actualización
if (utils.haveThreeGoodBeacons (rollingiBeaconRSSI)
> = 3):
oldbeacons = balizas
balizas = utils.get3ClosestBeacons (rollingi BeaconRSSI)
bubblelog.writeToBubbleLog ( "cierre
balizas:% i,% i,% i" % (balizas [0], balizas [1],
balizas [2]))
128
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
# bubblelog.writeToBubbleLog ( "posición
actualizada:% 3.2f,% 3.2f" % (MyPosition [0],
MyPosition [1]))
lastPosition = MyPosition de
impresión "jitter =", jitter
129
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
# imprimir currentiBeaconRSSI
# currentiBeaconTimeStamp de impresión
si (queueBLE.empty () == false):
resultado = queueBLE.get (Falso) print
"------" imprimir "Beacon discapacitados"
processCommand ()
time.sleep (0.25)
Una parte muy interesante de IOTBeaconAir está construyendo el mapa basado en HTML que muestra la posición, balizas
y luces.
A medida que empecé este proyecto, sentí que la construcción de este mapa en directo iba a ser el mayor
problema. Miré a la construcción de un mapa en vivo con Matplotlib en el Pi, pero era computacionalmente caro y
complicado. Entonces miré a soluciones de dibujo HTML y encontré que era casi trivial para hacerlo. Utilicé un Webview
remoto en RasPiConnect para el panel de control. Figura 4-7 muestra el mapa HTML completado.
130
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
131
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
2. En el archivo de configuración, averiguar las posiciones x, y para cada una de las luces
y el faro y poner en el archivo de configuración.
<Html> <head> <title> </ title> <style> cuerpo, html, iframe {margin: 0; padding: 0;} </ style> </ head>
<body> <div posición = estilo ': relative ; izquierda: 0; top: 0; '> <img src =' http:
//example.example.com: 9600 / / mainplanfull.png posición '= estilo' estática: relative; top: 0; izquierda:
0; "/>
<Img src = 'http: //example.example.com: 9600 / / iBeacon.png estática' posición = estilo ':
absolute; top: 490px; izquierda: 299px; '/> <img src =' http: //example.example.com: 9600 / /
posición iBeacon.png '= estilo' estática: absolute; top: 19px; izquierda: 122px; '/> <img src ='
http: //example.example.com: 9600 / / posición iBeacon.png '= estilo' estática: absolute; top:
127px; izquierda: 122px; '/> <img src =' http: //example.example.com: 9600 / / posición
iBeacon.png '= estilo' estática: absolute; top: 40px; izquierda: 173px; '/> <img src =' http:
//example.example.com: 9600 / / posición iBeacon.png '= estilo' estática: absolute; top: 118px;
izquierda: 183px; '/> <img src =' http: //example.example.com: 9600 / / posición iBeacon.png '=
estilo' estática: absolute; top: 128px; izquierda: 257px; '/> <img src =' http: 'Style ='
//example.example.com:9600/static/iBeacon.png position: absolute; top: 418px; izquierda:
300px; '/> <img src =' http: //example.example.com: 9600 / / posición iBeacon.png '= estilo'
estática: absolute; top: 453px; izquierda: 275px; '/> <img src =' http: //example.example.com:
9600 / / posición OffLightBulb.png '= estilo' estática: absolute; top: 418px; izquierda: 315px; '/>
<img src =' http: //example.example.com: 9600 / / posición OffLightBulb.png '= estilo' estática:
absolute; top: 473px; izquierda: 315px; '/> <img src =' http: //example.example.com: 9600 / /
posición OffLightBulb.png '= estilo' estática: absolute; top: 19px; izquierda: 132px; '/> <img src
=' http: //example.example.com: 9600 / / posición OffLightBulb.png '= estilo' estática: absolute;
top: 30px; izquierda: 173px; '/> <img src =' http: 'Style ='
//example.example.com:9600/static/OffLightBulb.png position: absolute; top: 118px; izquierda:
173px; '/> <img src =' http: //example.example.com: 9600 / / posición OffLightBulb.png '= estilo'
estática: absolute; top: 109px; izquierda: 122px; '/> <img src =' http: //example.example.com:
9600 / / posición OffLightBulb.png '= estilo' estática: absolute; top: 8px; izquierda: 222px; '/>
<img src =' http: //example.example.com: 9600 / / posición OffLightBulb.png '= estilo' estática:
absolute; top: 42px; izquierda: 16px; '/> <img src =' http: //example.example.com: 9600 / /
posición OffLightBulb.png '= estilo' estática: absolute; top: 98px; izquierda: 16px; '/> img src =
<' http: //example.example.com: 9600 / / 'style =' estática rojo-pin.png position: absolute; top:
378px; izquierda: 217px; "/> </ div> </ body> <
132
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
Esto funciona como un campeón. Hice mis iconos con fondo transparente (de nuevo utilizando GIMP).
configuración en el directorio principal. Las tres partes principales del archivo de configuración son los siguientes:
Las siguientes declaraciones muestran dos de los factores de escala utilizados en el proyecto:
# formato de sonda:
# Poder BeaconNumber, LocalName, x, y, UDID, mayor, menor, medido (a partir de especificaciones), x, en
píxeles, y en píxeles
# BeaconNumber es progresiva desde 0 hasta. No se salte un número BeaconList = []
= 0 BeaconCount
LightList = []
LightCount = 0
Light = [LightCount "Lab izquierda", pixelConv (330), pixelConv (435), 330, 435,0, 2] LightList.append (luz)
LightCount + = 1
133
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
Usted puede obtener el número ligera tonalidad de la App Phillips bajo visión general de luz, o puede escribir un
programa corto (mirar los ejemplos Phue) para obtener el diccionario de la tonalidad Hub Phillips.
IBeacon Software
Los iBeacons son problemáticos. Ellos no son muy precisos y un montón de diferentes factores ambientales afectan el RSSI
(potencia recibida). Si usted tiene sus sensibilidades IOTBeaconAir de inserción alta, puede sentarse en un lugar y ver las luces
crecen más brillante y oscura como las señales recibidas varían. Es una especie de un mapa visual del espectro electromagnético.
El establecimiento de sus sensibilidades menor brillo aumentará la sensibilidad, mientras que el rango de luz más altas aclara esto.
Hay dos funciones utilizadas por IOTBeaconAir para determinar la posición. En primer lugar es el cálculo de la
distancia de RSSI. Utilizamos una función de suavizado en los valores de RSSI recibidos para reducir la fluctuación. Por
ejemplo:
trilateralización
La segunda pieza clave es el cálculo de la posición mediante el uso de trilateración. Trilateración es el método de
determinación de la posición de un punto, dada la distancia a tres puntos de control. [citación: en.wikipedia.org/wiki/Trilateration
].
■ Nota SwitchDoc Cuando escuchas a alguien hablar acerca de cómo detectar cuando algo es mediante la medición de
distancia de puntos, por lo general dicen “triangulación” cuando quieren decir “Trilateración.” ¿Cuál es la diferencia? Se utiliza la
triangulación cuando se conoce el ángulo de un objeto a partir de dos fuentes diferentes. A continuación, puede localizar el
objeto en un avión. En el caso de iBeacons, todo lo que sabemos es la distancia. No sabemos nada acerca de la dirección.
Podemos utilizar tres distancias (o iBeacons en este caso) y fijar la posición de la Frambuesa Pi en un avión. Se me ocurre que
podríamos poner una antena direccional de Bluetooth en un motor paso a paso y, posiblemente, el uso que para utilizar la
triangulación, lo que significa que solo necesitaría dos iBeacons para encontrar nuestra posición, en lugar de tres como en la
trilateración.
134
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
S = (pow (xc, 2.) - pow (xb, 2.) + pow (yc, 2.) - pow (YB, 2.) + pow (rb, 2.) - pow (rc, 2.)
) / 2,0
T = (pow (xa, 2.) - pow (xb, 2.) + pow (ya, 2.) - pow (YB, 2.) + pow (rb, 2.) - pow (ra, 2.)
) / 2,0
tratar:
y = ((T * (xb - xc)) - (S * (xb - xa))) / (((ya - yb) * (xb - xc)) - ((yc - yb) * (xb - xa
))) x = ((y * (ya - yb)) - T) / (xb - xa)
[-1, -1]
135
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
El lado derecho del panel de control tiene que ver con el mapa y el control de las luces HTML. El control remoto
vista Web HTML ya se ha discutido. El cuadro de la tala verde es un control de burbuja de la charla y se puede configurar
para leer periódicamente desde el servidor y escribir información de registro en el panel de control. El código está
contenido en bubblelog.py en el directorio IOTBeaconAir. En el ejemplo anterior se puede ver las balizas cercanas a la
deriva ligeramente, cambiando el ranking de los cuales baliza es más cercano. Por último, vemos que dos luces se
encienden (se puede ver los resultados en el mapa de la casa). Debajo de eso es un gráfico que muestra cómo se leen
muchas balizas. El gráfico anterior podría ocurrir si caminamos fuera del alcance de los faros y luego volvió a entrar en el
rango.
Los controles en el lado izquierdo se utilizan para ajustar la distancia en metros para que al encender las luces para
y el segundo control ajusta el brillo de la luz. Por ejemplo, se puede ajustar la sensibilidad de brillo a 1 metro y se comienza
a recibir brillante a 1 metro y crecer más brillante a medida que se acerque. Sería fácil modificar el software para cambiar
los colores de las bombillas Phillips Hue según la distancia o la hora del día. El gráfico de la parte inferior del lado derecho
es un control dinámico minigráfico establecido para avanzar cada vez (event driven) hay un cambio en el valor de la
fluctuación. También puede configurarlo para un evento programado, lo que significa que avanza todo el tiempo y sólo
añade nuevos valores a medida que llegan desde IOTBeaconAir.
136
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
El código para todos los botones es bastante similar. Presionando un botón en el IPAD envía un paquete XML
HTML en el software de Frambuesa Pi, que luego se escribe en un archivo de comandos, que IOTBeaconAir luego toma
y ejecuta las funciones solicitadas.
En RasPiConnectServer (archivo Local.py) el bloque de código para el “All Lights On” (un botón Comentarios
- FB-2) es la siguiente:
ResponseData = "XXX"
si (objectName es Ninguno):
objectName = "XXX"
lowername = objectName.lower ()
# predeterminado en otro
sitio:
estado = sendCommandToBeaconAirAndWait ( "ALLLIGHTSON") lowername
= "todas las luces off" ResponseData = lowername.title ()
137
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
Cuando el valor del botón viene ( “todas las luces”), el código lo compara, envía una orden al IOTBeaconAir, y luego
cambia el valor ( “todas las luces encendidas”) y lo envía de vuelta a la App RasPiConnect configurar el botón Siguiente
(que será el próximo convertir todas las luces encendidas). El resto del código es repetitivo construcción de la solicitud XML
RasPiConnect y gastos de una condición de error que a veces sucede (el botón se pone en blanco).
Todos los controles siguen el mismo patrón de diseño, aunque los controles son de representación gráfica un poco más
complicado. Para seguir cualquier comando a través del sistema, averiguar cuál es el ID de control que busca es (FB-2 en
nuestro ejemplo anterior), y realizar un seguimiento a través de Local.py y luego ver lo que hace el comando en
IOTBeaconAir.py. En algunos casos, como en los gráficos, IOTBeaconAir es la construcción de los datos del gráfico, escribirlo
en un archivo, y luego RasPiConnectServer lo lee en Local.py. La vista Web remoto (el mapa casa, W-10 es el identificador de
objeto) es uno de estos controles que lee en un archivo generado por IOTBeaconAir. py (ver el software en webmap.py). El
archivo de configuración XML para RasPiConnect IOTBeaconAir está en github.com/switchdoclabs.
La última cosa a tener en cuenta es cómo construir el fondo fresco IOTBeaconAir en la pantalla del panel de
control. El truco es construir un archivo JPEG o PNG en cualquier aplicación gráfica (como grafio en el iPad [ tentouchapps.com/grafio/]
o GIMP), añadirlo a la biblioteca de fotos del iPad, y luego seleccionar la imagen del fondo del panel de control
para la página IOTBeaconAir en RaspiConnect. Esto le da un fondo de aspecto profesional instantánea.
138
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
BlueZ
Para instalar en un Bluez Frambuesa Pi 3 o una versión anterior del Pi ejecutar la nueva distribución Jessie o posterior
distribución, ejecute los siguientes comandos en una ventana de terminal:
Para instalar una nueva versión de Bluez en el pi en las versiones anteriores de la Frambuesa Pi (RPi2 y antes
de la distribución Raspian Jessie), haga lo siguiente:
139
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
Ahora usted tiene bluez instaladas y funcionando en su Frambuesa Pi. A continuación, instale el USB Dongle
Bluetooth 4.0 y empezar a pagar. Por ejemplo:
Bus 001 Device 002: ID 0424: 9512 Standard Microsystems Corp. Bus 001 Device 001:
ID 1d6b: 0002 Fundación Linux hub 2.0 raíz Bus 001 Device 003: ID 0424: EC00
Standard Microsystems Corp. Bus 001 Device 004: 0a5c ID: 21e8 Broadcom Corp.
Tenga en cuenta, su dongle Bluetooth USB debe aparecer algo como esto dependiendo de lo que haya
conectado a su bus USB. Se puede ver mucha más información sobre el dispositivo USB escribiendo esto:
RX bytes: 9071808 acl: 0 sco: 0 eventos: 230151 Errores: 0 bytes TX: 1166
acl: 0 sco: 0 comandos: 100 Errores: 0 Por último, a su vez, en el dispositivo:
140
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
Tenga en cuenta que hay algunos dispositivos impares por encima de que no son mis Estimote
(b9407f30f5f8466eaff925556b57fe6d) o partículas (8aefb0316c32486f825be26fa193487d) iBeacons. El txpower para los
dispositivos Estimote y de partículas se comportan correctamente. Los dispositivos tienen un mayor número impar o en realidad los
números que varían. Información interesante .
Phue
La instalación de Phue en su Pi es simple. Un método consiste en ejecutar la llamada fácil de instalar. Por
ejemplo:
Tenga en cuenta que después de la primera vez que se ejecuta en su IOTBeaconAir Frambuesa Pi, la biblioteca se cerrará
Phue que le dice que tiene que empujar el botón Phillips Hue concentrador y vuelva a ejecutar el software. IOTBeaconAir a
continuación, se combina con el tono Hub Phillips.
RasPiConnectServer de inicio
Ahora que todo el código se ha instalado para iBeaconIOT, es necesario poner en marcha el código. Los pasos del procedimiento de
arranque siguen.
Procedimiento de inicio
141
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
o
o este:
Si utiliza nohup, puede cerrar la ventana de terminal y el programa sigue funcionando en segundo plano hasta que se
reinicie o matar al programa. Todos los datos de depuración entra en un nohup.out archivo en el directorio de inicio. Si usted
quiere ver lo que está pasando usando nohup, vaya al directorio del programa y el tipo nohup.out tail-f en la línea de
comandos.
Puede hacer que se inicia cuando se inicia el IOTBeaconAir Pi editando /etc/rc.local. El archivo / etc / rc.local es un script en el Pi de
frambuesa que se ejecuta cuando se inicia por primera vez Linux. Para editarlo, necesitará privilegios de root. Invocando el editor a
través de sudo es el camino a seguir aquí:
A continuación, añadir las siguientes líneas al archivo rc.local. Colocar las líneas recién añadidos antes de
la sentencia exit 0.
142
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
143
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
Lo primero que me gustaría añadir a esta unidad es la capacidad para la Frambuesa Pi para detectar los niveles de luz en
el ambiente. ¿Por qué encender las luces si ya es brillante en la habitación?
Dado que no hay un servidor global para IOTBeaconAir, no existe un mecanismo definido actualmente para manejar el
arbitraje de acciones basadas en la detección. En general, es más fácil de resolver este tipo de problemas mediante el uso de
un servidor global. Sin embargo, esto hace que el sistema sea más susceptible a fallos del servidor. Grupo de
auto-organización y arbitraje grupo es un mejor camino a seguir, pero es mucho más complicado de diseñar, implementar y
probar.
Estas son algunas de las preguntas para arbitrar una vez que tenga múltiples unidades de IOT IOTBeaconAir:
• ¿Cómo clasificar las unidades IOTBeaconAir el uno al otro? Es el gato en la parte inferior o
superior de la lista de prioridades?
• ¿Cómo se detecta una persona que se sienta a leer frente a caminar por la
casa?
Y la lista continúa. Cualquier vez que se ponga más de un dispositivo IOT en control de nada físico en
absoluto, las cosas pueden ser muy complicado.
144
CAPÍTULO 4 ■ CAMBIO de su entorno con IOT Y IBEACONS
Conclusión
en el capítulo 3 , Hemos construido un dispositivo IOT tiempo que genera y suministra la información al resto de
Internet. En este capítulo hemos visto cómo se invierte IOTBeaconAir eso. Se recopila información de los dispositivos
(IOT) iBeacons alrededor de sí mismo, y luego modifica el ambiente sin salir a Internet (o la más amplia IOT) en
absoluto. Esta es una aplicación IOT mucho más localizada.
en el capítulo 6 , Vamos a extender esta idea aún más mediante la construcción de un RFID (Radio Frequency
IDentification) unidad que va a recabar información de las unidades pasivas (que sólo se activan cuando están
siendo interrogados para obtener información) y luego hacer las dos funciones principales. Enviar datos a
Internet y modificar el entorno local.
Para todo el software, consulte el siguiente:
IBeacon-Escáneres
145
CAPÍTULO 5
• El diseño IOTPulse
En este capítulo se va a mostrar al lector cómo conectar un dispositivo IOT a un servidor de la nube, IBM bluemix. La
complejidad de este capítulo no es construir el dispositivo, sino más bien la navegación por el proceso de configuración para
añadir el dispositivo a la nube.
Una parte importante del diseño de dispositivos que se conectarán con la IOT es determinar qué hacer con los datos después de
que haya reunido la misma. Una enorme cantidad de datos y no hay manera de almacenar o analizar no es muy útil. Un dispositivo de
proyecto IOT generalmente es muy limitado CPU y también sólo tiene una cantidad limitada de almacenamiento disponible. En general,
usted tiene que enviar los datos recogidos por un dispositivo sensor de IOT-llenado a un ordenador y el almacenamiento de nube más
grande para realizar un análisis complejo de los recursos que en esos datos.
En este capítulo, estamos construyendo un dispositivo para recoger el pulso de una persona, y luego periódicamente
(cada 10 segundos) lo envían a un sistema de almacenamiento y análisis basado en la nube llamada la Fundación IBM bluemix
IOT.
Antes hemos elegido la IBM bluemix para este capítulo, también hemos buscado en otros tres proveedores. Se determinó
que la solución Amazon IOT era demasiado “pesada” para estos pequeños dispositivos, debido al protocolo y cifrado requerido.
Los otros dos proveedores más pequeños fueron rechazadas debido a la longitud de tiempo en la existencia y la funcionalidad de
análisis limitado. Cabe señalar que los proveedores más pequeños tenían capacidades de visualización netamente superiores de
la caja de cualquiera de las dos mayores.
El sistema IBM bluemix trajo una buena mezcla de protocolos flexibles, un método de “luz” para el envío de datos, y una
impresionante colección de herramientas analíticas. Ramificaciones de la metodología de IBM bluemix cifrado en comparación
con la solución de Amazon IOT se discutirán en el capítulo 7 , “La seguridad informática y la IOT.”
procesador Power 7 80MHz Xtensa Harvard arquitectura de CPU, memoria RAM de datos ~ 80KB
/ ~ 35 KB de RAM Instrucción / 200K ROM
Las calificaciones son del 1-10, siendo 1 el menos adecuado para IOT y 10 es la más adecuada para
aplicaciones de IO.
Esto nos da una calificación de 8,0 CPLPFC. Grande para el aprendizaje y la experimentación, y que podría ser desplegado
El ESP8266 proporciona una conexión Wi-Fi transmisor / receptor, una pila TCP / IP, y el firmware para soportar
conexiones de dirección a un punto de acceso WiFi local, que puede conectarse a Internet. Los datos generados por el
diseño IOTPulse serán enviados al sitio de la nube bluemix IOT de IBM.
A veces no es necesario para almacenar los datos. A veces, los dispositivos locales pueden hacer las acciones
necesarias (como en el proyecto LightSwarm en el capítulo 2 ), Pero hay muchas aplicaciones que requieren más recursos
informáticos que podría estar disponible entre los dispositivos locales IOT.
148
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Esta es la situación que ha dado lugar al desarrollo de (a menudo en una nube de computación) de soporte de software
basada en servidor para la próxima explosión IOT. en el capítulo 2 , Se utilizó una Raspberry Pi para reunir los datos de la
LightSwarm y registrar el comportamiento más bien compleja del enjambre propia cooperativa para su posterior análisis. Si usted
tiene unos dispositivos mil, lo más probable es que no va a ser capaz de alojar su servidor en una Raspberry Pi, lo que ha limitado el
poder de la CPU y el almacenamiento. Otro problema importante con basando su sistema en servidores físicos que usted controla
(como Raspberry Pi, sino también para montaje en rack de servidores con capacidad de CPU y memoria mucho más grandes) es la
de escalabilidad. Si de repente usted tiene
10.000 dispositivos de conexión a los servidores en lugar de 1.000 dispositivos, hay que ser capaz de escalar con rapidez y
eficacia.
Es esta comprensión de que los sistemas de IOT necesitan para escalar de forma rápida y eficiente que se ha movido las
aplicaciones de back-end IOT en el ámbito de la computación en nube. Para una aplicación IOT, hay tres áreas principales que
necesitan ser abordados. Son los siguientes: Cloud Computing, Constructores de aplicación y generación de informes y de
software.
Computación en la nube
La computación en nube está evolucionando rápidamente para transformarse en más servicios, extremos traseros ubicuos,
conectividad de red de alta velocidad, y múltiples lenguajes y soluciones. El Instituto Nacional de Ciencia y Tecnología (NIST)
proporciona un documento que define la computación en nube para los propósitos de la administración [ http://csrc.nist.gov/publications/
nistpubs / 800-145 / SP800-145.pdf ] . Mientras que las piezas de lo que ya son anticuadas, que da una buena definición de
base de la nube.
NIST define cloud computing como esto: “La computación en nube es un modelo que permite, acceso ubicuo
conveniente, a pedido de red a un conjunto compartido de recursos informáticos configurables (por ejemplo, redes,
servidores, almacenamiento, aplicaciones y servicios) que pueden ser rápidamente aprovisionado y puesto en libertad con
mínimo esfuerzo de gestión o interacción proveedor de servicios “.
149
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
cuenta para el uso de recursos, sea capaz de controlar esos recursos, e informar el
uso de una manera transparente tanto para el proveedor y el usuario del sistema.
No hay manera de que un proveedor de nube puede anticipar cada aplicación o uso de los datos que va a necesitar un proveedor de IOT. Un
buen proveedor de la nube apoyará principales tipos de bases de datos y una variedad de interfaces de programación de aplicaciones de
software estándar (API). Además, proporcionará herramientas analíticas para los datos y una variedad de diferentes servicios para la
manipulación de los datos. Una aplicación de la nube (o aplicación nube) es un programa que se ejecuta en un entorno de nube. Tiene algunos
aspectos de una aplicación local de pura (para un iPad o un ordenador de sobremesa) y algunos aspectos de una aplicación basada en la web
pura. Una aplicación local de residirá en su totalidad en el equipo local, mientras que una aplicación web en general se almacena por completo
en un equipo remoto y se entrega a través de una interfaz de navegador. Hay aplicaciones web que son un híbrido (como WebEx) que tienen
un cliente muy ligero en el lado del navegador (todavía una aplicación, pero una pequeña) que se conecta a través de una API para un
programa mucho más complejo en el lado del servidor. Los creadores de aplicaciones de IBM bluemix tienen un cliente pesado (ejecutando los
gráficos y edición de parte de la aplicación) y luego entregar el diseño de usuario a los servidores a través de una API.
En el mundo IOT, una aplicación a menudo tiene ambos aspectos, donde el ordenador local contiene parte de la
aplicación (por ejemplo la recogida de datos del sensor) y la nube contiene el procesamiento de metales pesados back-end
para la aplicación completa. El proyecto IOTPulse es uno de estos tipos mixtos de aplicaciones.
Nos pareció que era cierto en lo que se fue, pero con la IOT, la capacidad de un dispositivo y software de interfaz para
mostrar lo que está pasando con los datos sean recogidos es de suma importancia. Un método y la interfaz tiene que ser
proporcionada por el usuario para perforar realmente abajo y ver lo que está sucediendo dentro de su red y dispositivo en varios
niveles diferentes. No como parte de la interfaz de “Modo de la abuela”, pero otro conjunto de interfaces que son accesibles a
cualquier usuario si el usuario deseara.
150
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Haciendo esta interfaz jerárquica es una parte clave de establecer la confianza necesaria entre el usuario y
el dispositivo IOT.
Una aplicación basada en la nube bien diseñado e informar sistema de generación tiene que proporcionar al desarrollador de
aplicaciones diferentes maneras de analizar los datos, que actúa sobre los datos, y la visualización de los datos. El desarrollador de la
nube nunca será capaz de suministrar todas las posibles interfaces de construcción que necesitará el desarrollador de la aplicación para
cada aplicación.
Hay un creciente ecosistema de los marcos de tiempo de ejecución y servicios, incluidas las soluciones y aplicaciones de
terceros no son de IBM. Bluemix proporciona un panel de control para que pueda crear, ver y administrar sus aplicaciones,
dispositivos, IOT y servicios deseados Los cuadros de mando bluemix también proporcionan la capacidad de gestionar las
organizaciones, los espacios, y (muy importante!) El acceso de usuarios.
Se encontró que el paradigma de “tablero” en el sistema bluemix algo de un nombre inapropiado y un poco confuso.
En lugar de tener un panel de control, que tiene cuadros de mando para todos los servicios que se adjunta. Es fácil
perderse en la secuencia. Pero con un poco de perseverancia llegamos a través de la curva de aprendizaje.
Bluemix proporciona acceso a una amplia variedad de servicios que pueden ser incorporados en una aplicación de
múltiples proveedores.
151
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Para aplicaciones más complejas que el dispositivo IOTPulse, tiene un conjunto de bibliotecas de aplicaciones
que se pueden construir sus aplicaciones que se conectan a una variedad de funciones y estructuras de bases de
datos. Éstos son algunos de los más comunes:
• Node.js
• PHP
• Pitón
• Rubí
Con todo, bluemix es una buena implementación de una plataforma basada en la nube IOT a construir. Tenga en cuenta que
bluemix es una plataforma en evolución, y no habrá cambios de cara al futuro en su proceso de maduración del producto.
Hay muchas características que son gratuitos para prototipos (como IOTPulse), y todas las características
mencionadas en este capítulo son libres para su uso en bluemix. Mirando a través de los servicios de pago y tarifas,
parece que son razonables para los pequeños y grandes aplicaciones.
El diseño IOTPulse
El diseño IOTPulse consta de tres bloques. El primer bloque es el ESP8266 y la batería de 9V, que contiene el
equipo; la interfaz de WiFi; y un único convertidor de analógico a digital (ADC) pines, llamado A en el tablero
ESP8266 y A0 dentro del software de Arduino IDE. El ESP8266 es responsable de hacer el procesamiento de la
señal y la traducción de la señal analógica entrante latidos del corazón a un latidos digitales por minuto (BPM) y
luego enviará periódicamente la última BPM hasta la nube bluemix IOT.
El segundo bloque es el Sensor de Pulso Amped, que es un diseño de hardware de código abierto por www.pulsesensor.com . Figura
5-2 muestra el esquema para el sensor de pulso. La clave para llevar desde el sensor de pulso es que está diseñado para obtener una
medida aproximada de la frecuencia cardíaca a través de la piel de una manera no invasiva. Funciona por el resplandor de un verde
brillante del LED en la piel y luego la detección de los cambios relativos en la intensidad de la luz al sensor. Con una pequeña cantidad
de conformación de señal, se puede detectar la frecuencia del pulso a través de una señal de salida analógica.
152
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Tenemos que tomar 1.5V a alrededor de 0,6 V para el ESP8266 y el software para trabajar. El sensor de pulso proporciona una señal
de que en promedio es de aproximadamente 1,5 V, que es demasiado alto para el ESP8266 ADC para que funcione correctamente. Con la
elección de una resistencia de 26K Ohm para R1 en la figura 5-3 y una resistencia de 18K Ohm para R2 en la figura 5-3 , Se obtiene la
El 0.6V está cómodamente en el 0,0 - 1,0 V gama del ESP8266 ADC y funciona bien. Prácticamente no hay
fuga de corriente a través de este divisor de tensión debido a la alta resistencia del divisor de tensión (44K Ohms).
¿Por qué funciona esto? Es porque el software en el ESP8266 es el cálculo de los latidos del corazón observando
los cambios relativos en la intensidad de la luz y no la tensión absoluta. Mientras el valor de entrada está cambiando, la
ESP8266 va a recoger el pulso.
153
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Si no hemos puesto el divisor de tensión en la salida del sensor de pulso, a continuación, el ADC en el
ESP8266 siempre estaría vinculado al nivel más alto (1,0 V) y el software del sensor no sería capaz de recoger un
pulso.
Debido a que el ADC ESP8266 es tan limitado, hay mejores soluciones que hay para un ADC. Dos de los más fáciles de
usar tablas son las siguientes:
• SwitchDoc laboratorios Grove I2C ADC - 4 canales, 16 bits de 3.3V / 5V compatible [ www.switchdoc.com/grove-4-chan
]
Figura 5-4 muestra el diagrama de bloques, incluyendo el divisor de tensión, del proyecto IOTPulse. El dispositivo
IOTPulse completado, incluyendo el caso 3D impreso se muestra en la figura 5-5 .
154
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
La construcción de la IOTPulse
La lista de piezas se muestra en la Tabla 5-2 , Seguido por la lista de cableado. Las piezas para el dispositivo IOTPulse son
fácilmente disponibles y sólo el divisor de tensión se requiere ninguna soldadura.
( continuado)
155
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Electrónica)
Electrónica)
Figura 5-6. FTDI esté conectado a la Junta Hurra. Nota Conexión GND
156
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Desde A Descripción
ESP8266 / GND PulseSensor / GND (Negro Wire) Planta para el sensor de pulso
ESP8266 / 3V PulseSensor / 3.3V (Red Wire) 3.3V de alimentación para el sensor de pulso
(púrpura Wire)
18 K / Puerto A ESP8266 / GND Terreno para la parte inferior del divisor resistivo
Encontrar un caso para un proyecto personalizado siempre puede ser un problema. Todos los proyectos en los capítulos han sugerido
utilizando la impresión 3D para construir los casos que se ajustan al proyecto, y el proyecto IOTPulse no es diferente. La parte más
interesante de este caso es la forma en que diseñamos un bisel que rodea la base de lo que el caso se ajustará la parte superior sobre la
caja inferior (figura 5-7 ).
157
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Hemos introducido OpenSCAD, un modelador 3D basado en código libre en los capítulos anteriores. Hay
cientos de ejemplos de modelos en Thingverse.com y el sitio web OpenSCAD para elegir y aprender. Listado 5-1 contiene
el código que construye el caso mostrado en la figura 5-7 .
//
// // Caso IOTPulse
// // SwitchDoc laboratorios de
agosto de 2015 //
incluir <RoundedRect.scad>
módulo rcube (tamaño = [30, 20, 10], radio = [3, 2, 1], centro = true)
casco () {
traducir (centro [0,0,0]: Capacidad / 2) {
cubo (tamaño 2 * radio + [2 * radio [0], 0,0], centro = true); cubo (tamaño 2
* radio + [0,2 * radio de [1], 0], centro = true); cubo (tamaño 2 * radio +
[0,0,2 * radio [2]], centro = true);
módulo IOTPulseTopCase () {
diferencia () {
// cubo ([82,62,25]);
158
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Unión() {
// labios de la batería se
traducen ([79-2,3,0]) del cubo
([1,28,6]);
traducir ([70-1.0,35,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100); traducir
([70-1.0,56,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100); traducir
([70-34,35,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100); traducir
([70-34,56,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100);
// brecha de 2,3 mm
159
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
// Primer caso
traducir ([0,70,0])
IOTPulseTopCase (); }
El código para el caso IOTPulse se divide en dos secciones principales. El programa principal se basa la parte inferior de
la caja mientras que la parte superior de la caja se encuentra en la función IOTPulseTopCase (). Cuando la construcción de
modelos con OpenSCAD, es una buena idea para romper las diferentes partes en funciones, incluso si sólo está llamando una
vez. Simplifica el código. Ahora, vamos a ver el software para IOTPulse.
software necesario
Para programar la junta de pulso IOT se necesita un Mac o PC para programar el ESP8266 a través del IDE de Arduino.
Véase el capítulo 2 de cómo configurar el IDE Arduino con las bibliotecas ESP8266.
El Código IOTPulse
Hay tres archivos que forman parte de la construcción para el software IOTPulse. El IOTPulse.ino es el archivo principal de
Arduino IDE (en el lenguaje C), y los otros dos archivos (interrupt.h y AllSerialHandling.h) están incluidos en el archivo
principal. Mientras que el código es bastante sencillo, los comentarios deben hacerse para cada módulo.
IOTPulse.ino
IOTPulse.ino es el programa principal para IOTPulse (Listado 5-2 ). Se compone de dos funciones principales, setup
() y loop (). La función de configuración () inicializa el código ESP8266 Wi-Fi, lee una dirección IP mediante DHCP
del punto de acceso inalámbrico del área, e inicializa las variables para contener micros (), que es una función que
devuelve el número de microsegundos desde el reinicio de los micros ESP8266 ( ) es una función de cronometraje.
Tenga en cuenta que la ESP8266 no tiene un reloj en tiempo real a bordo y realmente no sabe qué hora es. Sólo se
sabe cuánto tiempo ha estado funcionando. Si desea fijar la hora del día en la ESP8266, por favor revisar el
protocolo NTP en este instructivo [ http: // www. instructables.com/id/Internet-time-syncronized-clock-for-Arduino/ ] .
160
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
En el proyecto IOTPulse, realmente no importa qué hora es. El hecho de enviar una muestra a la Plataforma IOT
bluemix, nuestro amigo IBM marca de tiempo de la recepción de los datos. Si nos importaba nuestro tiempo, podríamos
construir un receptor de NTP y sincronizarlo a la hora de red en un servidor específico NTP. Estamos mucho más
interesados en intervalos de tiempo (en concreto 2 milisegundos y los intervalos de 10 segundos) en lugar de tiempo
absoluto.
La función loop () contiene el código para la operación en curso de la operación de recolección de datos IOTPulse.
Básicamente, hacemos cuatro cosas en la función loop ():
Nota al final de la función de bucle (), hay una función de rendimiento (). Esto se debe llamar periódicamente
para el software ESP8266 continúe funcionando la interfaz WiFi y otras funciones de mantenimiento. Recuerde, a
diferencia de un Arduino regular, hay una gran cantidad pasando en segundo plano para mantener este chip de
encendido y conectado a la red.
Una de las limitaciones del software ESP8266 actual es que no puede utilizar los temporizadores [ http://www.switchdoc.com
] para generar interrupciones sin causar la conexión Wi-Fi a fallar y detener la conexión al punto de acceso WiFi local
e Internet.
Esto hace que sea muy difícil para generar una interrupción a la computadora cada 2 ms como se requiera por la
PulseSensor. Se podría generar una interrupción cada 2 ms utilizando un temporizador de hardware externo y después
conectar la salida del temporizador de hardware a uno de los pines GPIO en la ESP8266, que todas pueden programarse
para generar una interrupción a la CPU.
Para resolver este problema, se utiliza una técnica de programación que es más intensivo de la CPU (lectura consume más
energía) que el esquema de interrupción. Comprobamos la hora periódicamente y ejecutar el software PulseSensor cada 2 ms y
también para conectar a la IBM bluemix cada 10 segundos.
La mayor desventaja de esto es que no se puede “dormir” el procesador con mucha facilidad. Estamos en busca
de una arquitectura alternativa para este problema y estamos viendo los sitios web de desarrollo de soluciones
ESP8266.
Sin embargo, con la excepción del consumo de energía, la solución actual funciona bien.
161
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
/*
Código laboratorios SwitchDoc para IOT pulso
Se conecta detector de impulsos a la IBM bluemix la IO usando un procesador ESP8266 basado en el código
pulsecounting de www.pulsesensor.com de noviembre de 2 015
2) determina BPM
extern "C" {
# incluir "user_interface.h"}
# incluir <ESP8266WiFi.h>
# incluir <PubSubClient.h> // https://github.com/knolleary/pubsubclient/ de prensa / tag / v2.3
162
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
// ------------------------------------------------ ----------------------
// Variables
int pulsePin = A0; // Sensor de Pulso cable violeta conectado al pin analógico
0
int blinkPin = 0; // pin llevó a parpadear en cada latido
int fadePin = 5; // pin para hacer clase de fantasía decoloración abrir y cerrar en cada
latido
int fadeRate = 0; // utilizado a desvanecerse LED con PWM en fadePin
# incluir "AllSerialHandling.h"
# incluir "interrupt.h"
devolución de llamada vacío (char * tema, byte * carga útil, sin signo int length) {Serial.println (
"devolución de llamada se invoca desde IOT bluemix"); }
WiFiClient wifiClient;
PubSubClient cliente (servidor de 1883, devolución de llamada, wifiClient);
void setup () {
pinMode (blinkPin, OUTPUT); // pin que parpadeará a los latidos del corazón!
163
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
// NOTA a continuación: Las nuevas versiones de las bibliotecas ESP8266 pueden requerir la siguiente
declaración
// en lugar de otro comunicado. WiFi.SSID () ha cambiado las definiciones en las nuevas versiones
Serial.println ( "");
// Nota: Las interrupciones en base a os_timer parece romper la ESP8266 WiFi. Pasando a
micros () Metodología de sondeo oldPulseTime = micros (); oldIOTTime = micros (); }
int beatValue = 0;
newPulseDeltaTime largo sin signo;
newIOTDeltaTime largo sin signo;
// SERIALOUTPUT ();
164
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
newPulseDeltaTime = micros () - oldPulseTime; // hacer esto se encarga el segundo vuelco 71, debido a
la aritmética unsighned
newIOTDeltaTime = micros () - oldIOTTime; // hacer esto se encarga el segundo vuelco 71, debido
a la aritmética unsighned
// carga útil Enviando: { "d": { "IOTPulse": "IP1", "VER": 2 "SC": 0, "BPM": 235, "IBI": 252}}
carga útil String = "{\" d \ ": {\" IOTPulse \ ": \" IP1 \ ""; de carga útil + = "\"
ver \ ":"; carga útil + = IOTPULSEVERSION; de carga útil + = "\ " SC \":";
carga útil + = SAMPLEcount; de carga útil + = "\ " BPM \":"; carga útil + =
BPM; de carga útil + = "\ " IBI \":"; carga útil + = IBI; de carga útil + = "\
"BC \":"; carga útil + = beatCount; carga útil + = "}}";
Serial.println (); }
165
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
AllserialHandling.h (Listado 5-3 ) Contiene las rutinas de depuración de salida en serie que
son útiles cuando la modificación del código.
//////////
Todo ///////// de serie Código de manejo,
///////// Es modificable con la variable 'serialVisual' ///////// Ajústelo en 'verdadero' o 'falso' cuando se declaró
al comienzo del código. /////////
166
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
// Envía datos a pulso el procesamiento de APP sensor, nativo Mac App, o lectores de serie de
terceros.
sendDataToSerial anular (símbolo char, int datos) {Serial.print
(símbolo);
Serial.println (datos); }
Interrupt.h (Listado 5-4 ) Se llama así porque el software original utilizó PulseSensor
un temporizador de Arduino para generar una 2ms de interrupción. Como se explicó anteriormente, la ESP8266 no es
actualmente capaz de hacer lo mismo mientras se mantiene una interfaz Wi-Fi funcional. El timerCallback () en interrupt.h
ahora se llama a una hora programada por la función loop () en el archivo IOTPulse.ino.
Básicamente, timerCallback () actúa como un detector y un filtro de promedio que detecta la fase de expansión en la
salida PulseSensor y luego construye un conjunto de veces para IBI (Intervalo entre latidos) y proporciona un promedio. Se
ajusta a los niveles registrados procedentes de la PulseSensor debido a que el nivel real no es tan importante como el
intervalo de tiempo entre pulsos ajustados de la PulseSensor. El software actúa como un pico y el detector a través de un
sistema de media que elimina el ruido de alta frecuencia.
tasa int volátil [10]; // matriz para contener últimos diez valores IBI
volátil largo sampleCounter unsigned = 0; // se utiliza para determinar el tiempo de pulso volátil largo
lastBeatTime unsigned = 0; // se utiliza para encontrar IBI
volátil int P = 680; // se usa para encontrar el pico en la onda del pulso, se
siembran 512
int volátil T = 680; // usado para encontrar artesa en la onda del pulso, se
siembran 512
volátil int Thresh = 700; // se utiliza para encontrar momento instantáneo de los latidos
volátil int amp = 100; // se utiliza para mantener la amplitud de forma de onda de pulso,
se sembró
volátil Firstbeat boolean = true; // se utiliza para sembrar variedad tasa por lo que
inicio con BPM razonable
167
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
volátil secondBeat boolean = false; // se utiliza para sembrar variedad tasa por lo que
inicio con BPM razonable
restartPulse vacío () {
P = 680; // se usa para encontrar el pico en la onda del pulso, se siembran 512
T = 680; // usado para encontrar artesa en la onda del pulso, se siembran 512
trillar = 700; // se utiliza para encontrar momento instantáneo de los latidos del corazón, cabeza de
serie 525
amp = 100; // se utiliza para mantener la amplitud de forma de onda de pulso, se sembró
Firstbeat = true; // se utiliza para sembrar variedad tasa por lo que inicio con BPM
razonable
secondBeat = false;
}
timerCallback anular (void * pArg);
168
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
169
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
si (Señal <trillaste && pulso == true) {// cuando los valores se van
abajo, el ritmo es más
digitalWrite (blinkPin, HIGH); // desactivar pin 13 LED
Pulso = false; // restablecer el indicador de impulso para que podamos hacerlo
de nuevo
} // fin ISR
170
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Figura 5-8 muestra el dispositivo IOTPulse completado en el caso. Tenga en cuenta los agujeros en la parte superior para ver los
LED de la placa ESP8266. Figura 5-9 muestra el sensor de pulso recortado en una oreja. Observe el LED verde se utiliza para detectar la
frecuencia del pulso en el oído.
171
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
172
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
La Fundación IO es el servicio de IBM bluemix que vamos a necesitar para conectar el ESP8266 al servicio en la nube
bluemix. Usted tendrá que crear una cuenta de ID de IBM. Puede hacerlo en la página de inicio bluemix muestra en la figura 5-11
.
173
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
hacia abajo en la parte inferior de la lista en la página web). A continuación, debe tener una pantalla similar a
174
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
MQTT y JSON.
MQTT
MQTT es un protocolo de mensajería basados en publicar suscribir- "peso ligero" para su uso en la parte superior del
protocolo TCP / IP, como los paquetes WiFi que estamos utilizando en este proyecto. Está diseñado para conexiones con
lugares remotos donde se requiere una "pequeña huella de código" o el ancho de banda es limitado. Ambas condiciones se
cumplen con un diseño ESP8266 IOT, así que tiene sentido utilizar. También hay una excelente biblioteca disponible para
MQTT para el IDE Arduino [ https://github.com/knolleary/pubsubclient ] . El patrón de mensajería publishsubscribe requiere un
intermediario de mensajes. El corredor es responsable de distribuir mensajes a los clientes interesados basados en el tema
de un mensaje (Figura 5-13 ).
175
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Publicación-suscripción es un patrón en el que los remitentes de los mensajes, llamados editores (en este caso nuestra
ESP8266 es el editor), no programa los mensajes que se enviarán directamente a los abonados, sino que caracterizan a las
cargas útiles de mensajes en clases sin el conocimiento específico de las cuales los suscriptores de los mensajes se envían a.
Del mismo modo, los abonados (IBM bluemix IOT en este caso) sólo recibirán mensajes que son de interés y sin
conocimientos específicos de los cuales los editores existen. El IBM bluemix funciona como el agente en este sistema y las
rutas de los datos publicados a los abonados correspondientes dentro de bluemix.
JSON es un formato estándar abierto que utiliza texto legible para transmitir objetos de datos que constan de pares atributo-valor.
Es el formato de datos principal que se utiliza para la comunicación de navegador / servidor asíncrono, sustituyendo en gran
medida XML. XML es un protocolo "más pesado", que también es de naturaleza jerárquica, pero con mucha más redundancia
que JSON. Sí, hay guerras de clase pasando para las personas que abogan JSON sobre XML, pero en el mundo actual de alta
velocidad de la comunicación, es raro que importa. Puede hacer que el argumento de que la mayor densidad de datos de JSON
es una mejor opción para aplicaciones IOT.
Este es un ejemplo del paquete de datos que estamos utilizando en el código ESP8266 bluemix en JSON para la carga
de datos LightSwarm:
{"re":
{
"LightSwarm IOT": "LS1",
"SAMPLEcount": 2118, "lightValue":
383}}
176
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Autenticación
Tenemos que tener un método seguro de autenticación que nuestro dispositivo ESP8266 se le permite poner los datos en las
ranuras correctas dentro de la IBM bluemix. Esto se hace en nuestro caso mediante el intercambio de una señal criptográfica que
se generan por bluemix e incluidos en nuestro código ESP8266.
Para ello tenemos que ir de nuevo a la cuenta bluemix que se configura en la publicación anterior y completar
los siguientes pasos:
La página.
177
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Le sugerimos que utilice IOTPulse-01 para el nombre del tipo de dispositivo. Desplazarse por el resto de los pasos. Hay
muchas opciones de configuración que casi todos se pueden dejar en blanco en nuestra aplicación actual. Usted está obligado a
tener un tipo de dispositivo y un identificador de dispositivo.
Cuando se ha creado el dispositivo, verá la página de credenciales del dispositivo. Asegúrese de guardar los datos, ya
que se utilizan para autenticar su boceto ESP8266 Arduino IDE en el siguiente paso (no hemos encontrado ninguna manera
de recuperar estas credenciales desde el sistema bluemix). Obviamente, no utilice las credenciales en la figura 5-16 . Ellos
no van a funcionar. Es necesario crear el suyo propio.
178
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Con el fin de obtener una pantalla que va en la plataforma bluemix, necesitamos conectar nuestro dispositivo al servicio de la IO
Real-Time Insights en bluemix. Las siguientes secciones discuten esto.
Paso 1: Agregue el servicio en Tiempo Real Insights IO a su tablero de instrumentos bluemix. Abrir el salpicadero bluemix (el primer
tablero después de inicio de sesión) y haga clic en “servicios de uso o API” y añadir las IO en tiempo real Insights como un servicio. Es
camino hacia abajo en la parte inferior de la página. A continuación, aparecerá la pantalla de la figura 5-17 .
179
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Paso 2: Conectar nuestro dispositivo a la IO Real-Time Página Insights mediante la generación de una clave de API y luego
generar una fuente de datos. Haga clic en el bloque de la IO Real-Time Insights se muestra en la figura 5-16 .
Paso 3: Generar las claves de la API para el uso de la fuente de datos y crear claves de la API para conectar los dos
servicios (Fundación de la IO IO y visualización en tiempo real):
1. Desde el tablero de instrumentos bluemix, haga clic en el Internet de las Cosas baldosas.
180
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
La adición de la fuente de datos (nuestro dispositivo IOTPulse) consiste de los siguientes (Figura 5-18 ):
esquema.
5. Los puntos de datos disponibles se definen en la carga útil JSON de los mensajes que se
envían por un dispositivo.
7. En el diálogo Añadir puntos de datos, seleccione uno o más puntos de datos para agregar y
8. Los puntos de datos seleccionados se añaden con la descripción del conjunto del nombre del
punto de datos.
9. A continuación, haga clic en la flecha verde (en el lado izquierdo de la pantalla) para guardar la
181
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Una vez que todos los datos de configuración está en su lugar y la información de autenticación está en su lugar en el programa
IOTPulse, los datos deben empiezan a fluir como se muestra en la figura 5-19 .
Desde la pantalla en la figura 5-20 , Haga clic en Iniciar la IO Real-Time Insights Dashboard en la columna de la derecha
inferior.
182
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Haga clic en el salpicadero y navegar cuadros de mando. Añadir un nuevo tablero de instrumentos. A continuación, haga lo siguiente:
2. Seleccionar gráfico;
5. Haga clic en la flecha verde. Figura 5-21 muestra la pantalla de IBM bluemix para el tendido de la interfaz de tablero de
instrumentos.
Si su ESP8266 está funcionando y enviando datos hasta el IBM bluemix IOT, a continuación, verá los valores
comienzan a poblar la gráfica, como se muestra en la figura 5-22 .
Temas avanzados
Las ofertas de nube de IBM tienen literalmente cientos de opciones y posibilidades para llevar sus datos a la nube IOT. A
continuación les mostramos algunas de estas “aplicaciones” disponibles en el sistema bluemix. Vamos a mostrar cómo representar
gráficamente los datos históricos IOT e introducir un sistema de programación compleja, pero muy potente,, Nodo-RED.
Información histórica
los datos históricos no son en tiempo real también se pueden ver en bluemix (figura 5-23 ). Esto requiere que usted construya
una aplicación (no es tan compleja como se podría pensar) y luego desplegar la aplicación. Un buen tutorial para esto se
encuentra en el sitio web de IBM bluemix [ https: //www.ng.bluemix. net / docs / entrantes / install_cli.html ] . No requieren la
instalación de una interfaz de línea de comandos para Cloud Foundry en su ordenador.
184
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Una cosa que este gráfico de datos histórica de nuestro pulso muestra es que los datos de IOTPulse podrían
mejorarse más de filtrado. El promedio de la frecuencia cardíaca se ve bien, pero los saltos arriba y abajo vea como el
ruido, sobre todo al principio de la gráfica.
Aplicaciones nodo-RED
Nodo-RED es una herramienta gráfica para cableado juntos dispositivos externos, APIs y servicios en línea. Se utiliza un editor
de flujo basado en navegador que hace que sea fácil de cablear juntos fluye de una extensa biblioteca y es fácil de añadir sus
propios nodos.
Nodo-RED es totalmente compatible con IBM bluemix. Se trata principalmente de un sistema de generación de software basado en
eventos. Si ocurre un evento (como IOTPulse envío de datos), puede tomar esos datos y procesar de varias maneras, enviarlo a otras
aplicaciones, y lo almacenan en bases de datos. Otras entradas pueden causar pantallas que se actualicen, las consultas que se enviarán
a las bases de datos, y muchos otros eventos.
Hemos construido una pequeña aplicación Nodo-RED para IOTPulse se muestra en la figura 5-24 .
185
CAPÍTULO 5 ■ Conexión de un dispositivo IOT a un servidor NUBE - IOTPULSE
Aplicaciones Watson
Una de las clases más excitante de las aplicaciones que se pueden construir en bluemix son los que utilizan el software de IBM
Watson. Todos los servicios de Watson en la plataforma bluemix se accede a través de transferencias HTTP conocidos como servicios
REST. RESTO significa Representación Transferencia de estado y es una forma común de acceso a los servicios basados en la web.
Watson es compatible con una serie de servicios muy sofisticados todos disponibles para su dispositivo y aplicaciones en
bluemix:
• Dictado a texto
• Texto a voz
• Traducción de idiomas
• Reconocimiento visual
Conclusión
El futuro de la IOT es de datos: cómo reunir, cómo transmitirlo, cómo analizar y mostrarlo, y cómo actuar en él. El
proyecto IOTPulse muestra cómo recopilar los datos y la forma de enviarlo a un sistema de computación en la nube
para el análisis y acciones.
Con un sensor adecuado, el proyecto IOTPulse podría ser un producto comercial. El sensor y el análisis de la
frecuencia cardíaca definitivamente no son de grado médico, pero todavía ilustra los principios del dispositivo IOT y la
relación con el dispositivo de la nube IOT.
186
CAPÍTULO 6
Capítulo Objetivo: Construir un dispositivo IOT para la lectura de etiquetas RFID en varios paquetes
El mundo de la IOT está dominado por pequeños ordenadores que tienen pequeñas cantidades de recursos y el
poder para comunicar la información con el resto del mundo. MQTT es una publicación-suscripción, protocolo ligero
para dispositivos IOT para comunicarse con el servidor y el servidor a través de, entre sí. MQTT también está
disponible para redes “malla” tipo, como Zigbee, que permiten la comunicación de dispositivo a dispositivo. RFID
(identificación por radiofrecuencia) es una forma barata de lectura de tarjetas y etiquetas numeradas de forma única a
través de ondas de radio de corta distancia. RFID y su primo, NFC (Near Field Communications) están apareciendo en
más y más aplicaciones.
En este capítulo, construimos un dispositivo RFID y luego conectarse a través de una editorial MQTT a un corredor
de MQTT como en el capítulo 5 , Pero con la diferencia de que estamos sustituyendo el intermediario IBM bluemix MQTT
con un corredor mosquitto se ejecuta en un 20 Frambuesa Pi $.
Mesa 6-1 que caracteriza a los diferentes aspectos del proyecto. Las calificaciones son del 1-10, siendo 1 el menos adecuado
para IOT y 10 es la más adecuada para aplicaciones de IO. Esto nos da una calificación de 8.3 CPLPFC. Grande para el aprendizaje y
la experimentación, y que podría ser desplegado para algunas aplicaciones del mercado.
procesador Power 9 80MHz Xtensa Harvard arquitectura de CPU, memoria RAM de datos ~
80KB / ~ 35 KB de RAM Instrucción / 200K ROM
Tenga en cuenta que el consumo de energía en esta solicitud podría reducirse drásticamente mediante la adición de un modo de
apagado, por ejemplo después de 5 minutos de no usar el lector de RFID.
[En.wikipedia.org/wiki/The_Thing_(listening_device)]
Las etiquetas RFID pueden ser (sin carga de la batería - estamos utilizando esta tecnología en este capítulo) activa, pasiva, y
la batería asistidos pasiva. Una etiqueta pasiva no contiene la batería, en lugar de utilizar la energía de radio transmitida por el lector
RFID. Para operar una etiqueta pasiva, tiene que ser golpeado con un nivel de potencia de aproximadamente mil veces mayor que
las transmisiones de la señal resultante.
188
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
Cuando una etiqueta RFID es golpeado por un haz de ondas de radio desde un transmisor, la etiqueta pasiva se enciende y
transmite de nuevo el número de identificación de la etiqueta y otra información. Esto puede ser un número de serie único, una
serie de valores o mucho, o cualquier otra información específica. Dado que las etiquetas tienen números únicos, el sistema RFID
puede leer varias etiquetas a la vez, con un poco de programación inteligente de receptor y transmisor.
Hay un número de diferentes estándares de RFID de uso común. Hay tres normas para poner los chips de identificación
de animales de compañía, que por supuesto no son compatibles entre sí y requieren diferentes lectores. Las etiquetas de corto
alcance que estamos utilizando en este capítulo operaron a la baja frecuencia de 125 kHz y pueden ir hasta 100 mm (figura 6-1 ).
Otras etiquetas pueden ser recogidos (con tecnología RFID activa) hasta 100 metros.
Mientras que las tecnologías RFID y NFC están diseñados para su uso corta distancia, la adición de un transmisor de gran
potencia y una gran antena puede cambiar el significado de “corta distancia”.
¿Qué es MQTT?
en el capítulo 5 , Se utilizó un módulo editor MQTT hablar con el agente de IBM en IBM MQTT bluemix.
Para refrescar la memoria del lector, MQTT es un protocolo de mensajería basados en publicar suscribir-“peso ligero”
para su uso en la parte superior del protocolo TCP / IP, como los paquetes WiFi que estamos utilizando en este proyecto. Está
diseñado para conexiones con lugares remotos donde se requiere una “pequeña huella de código” o el ancho de banda es
limitado.
189
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
Publicación-suscripción es un patrón en el que los remitentes de los mensajes, llamados editores (en este caso nuestro
proyecto IOTRFID es el editor), no programa los mensajes que se enviarán directamente a los abonados, sino que caracterizan
a las cargas útiles de mensajes en clases.
Se puede pensar en él como escribir historias para un periódico en el que no se sabe quién va a suscribirse al
artículo.
También compramos una etiqueta RFID 125KHz de Sparkfun. Tenga cuidado de la etiqueta RFID de comprar. No todos son
compatibles.
190
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
mensajes. En el IOTRFID
proyecto que se va a construir un intermediario de mensajes en la Raspberry Pi.
Figura 6-3 muestra el flujo de datos en toda la aplicación - incluyendo la Frambuesa Pi. El flujo de datos en esta solicitud es
básicamente una manera: desde la etiqueta RFID para el servidor mosquitto Frambuesa Pi. Tenga en cuenta, sin embargo, hay dos
canales disponibles más de la conexión Wi-Fi y se puede enviar comandos de nuevo al proyecto IOTRFID decirle al usuario
información sobre la pieza que se está inventariado. Por ejemplo, puede mostrar el destino de la caja o la fecha de caducidad.
191
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
Hay una serie de corredores MQTT disponible para diferentes máquinas. Para este proyecto, hemos seleccionado uno de los
corredores más populares y estables, “mosquitto.” Tenga en cuenta los dos “t” 's en mosquitto. La pesadilla de los correctores
ortográficos en todas partes.
Mosquitto apoya MQTT v3.1 / 3.1.1 y se instala fácilmente en el Pi de frambuesa y un poco menos fácil de configurar. A
continuación damos un paso a través de la instalación y configuración del agente mosquitto.
El software en el Raspberry Pi
Comenzamos con la creación del software en el Raspberry Pi. Hacemos esto para que nuestra IOTRFID tiene algo que hablar cuando nos
Como es el caso con la mayoría de los paquetes de Debian, se inicia inmediatamente el corredor. Ya que tenemos que
configurar primero, detenerlo:
192
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
verdadera
persistence_location / var / lib / mosquitto /
/etc/mosquitto/conf.d include_dir
tema log_dest
Esto pone a la información de registro como un “tema” para que podamos suscribirse a él más adelante para ver lo que está pasando
connection_messages cierto
log_timestamp verdadera
pid_file /var/run/mosquitto.pid
persistencia verdadera
persistence_location / var / lib / mosquitto /
193
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
connection_messages cierto
log_timestamp verdadera
/etc/mosquitto/conf.d include_dir
Cuando haya hecho la segunda declaración debería ver esto en la ventana de la terminal 1.
194
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
La construcción de la IOTRFID
El proyecto IOTRFID consta de cuatro partes principales:
• ESP8266
• Lector RFID
El propósito de este proyecto es un prototipo de un sistema de control de inventario que utiliza etiquetas RFID. El ESP8266
controla el lector de RFID y los informes de la etiqueta RFID para el servidor Frambuesa Pi. A continuación, utilizamos MQTT
través de la interfaz de conexión Wi-Fi en la ESP8266 para enviar la información de inventario a la Frambuesa Pi. La Raspberry Pi
podría utilizar la información RFID para trabajar con una base de datos, alertar al cliente final, etc.
195
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
el hardware
Los principales elementos de hardware en el dispositivo enjambre son los siguientes:
• Batería de 9 V - Power
El ESP8266 comunica con el Frambuesa Pi mediante la interfaz de WiFi. El ESP8266 utiliza un interfaz serie para
comunicarse con el sensor de luz. El Wi-Fi es un estándar que es muy común. La interfaz serie utilizado es un hilo
(línea Tx en el lector RFID para Rx en el ESP8266 - Pin GPIO # 4 en la ESP8266). En una interfaz serie, un bit a la vez
que se envía junto con detener e iniciar los bits de cada byte. Los datos se envían a 9600 baudios, que es una vieja
manera de decir aproximadamente 9600 bits por segundo.
196
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
Impreso caso 3D
El caso impresa en 3D para este proyecto cuenta con un soporte para una batería de 9 voltios, torres de alta tensión para mantener la antena
en su lugar, una ranura para montar el tablero con lector de RFID y torres de alta tensión para el ESP8266. El código es para OpenSCAD, un
sistema CAD 3D gratis que hace un llamamiento a los programadores. Figura 6-4
muestra el caso impresa en 3D con los pilones para el montaje de los tableros.
El siguiente código OpenSCAD construye la base de montaje paso a paso mediante la fusión de formas básicas tales
como cubos y conos. También construimos un soporte para mantener la batería se deslice en la base.
//
// IOT IOTFRFID Base de montaje //
// // laboratorios SwitchDoc
febrero de 2016 //
Unión() {
197
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
// labios de la batería se
traducen ([79,2,0]) del cubo
([1,28,4]);
traducir ([70-1.0,35,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100); traducir
([70-1.0,56,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100); traducir
([70-34,35,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100); traducir
([70-34,56,0])
cilindro (h = 10, r1 = 2,2, r2 = 1.35 / 2, $ fn = 100); }
// presentarse a bordo
198
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
traducir ([36,10,0])
cilindro (h = 10, r1 = 3,2, r2 = 2.40 / 2, $ fn = 100); traducir
([36,50,0])
cilindro (h = 10, r1 = 3,2, r2 = 2.40 / 2, $ fn = 100); }
Figura 6-5 muestra la parte posterior del lector de RFID 125 kHz Mini para mostrar claramente las etiquetas pines en la parte posterior
de la placa.
A continuación se presenta la lista completa de cableado para el proyecto IOTRFID. A medida de que conecte, marque cada cable para
mayor exactitud.
La clave para la tabla 6-3 Esta abajo. Mesa 6-3 contiene toda la información de cableado para la construcción de la
IOTRFID. Siga de cerca para que su proyecto funciona la primera vez. Esta tabla contiene todas las conexiones de los cables
individuales para completar el proyecto.
9V batería: 9VBat
199
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
Desde A Descripción
RFIDBoard / T1 Antena RFID JST2 Plug El plomo de la antena - Empuje el enchufe más de T1
y T2 - el orden no importa
Figura 6-6 muestra el JST2 Plug empujado sobre los dos pasadores en la placa RFID conectar la
placa de RFID con la antena.
200
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
las Bibliotecas
En este proyecto, estamos utilizando dos bibliotecas. Debido a que no tenemos que modificar las bibliotecas para que
funcionen con la ESP8266, no las hemos reproducido aquí. Las dos bibliotecas son los siguientes:
201
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
PubSubClient - Un cliente simple para MQTT. Esta es una biblioteca muy útil y
bien documentada. Utilizamos esta biblioteca para hablar con el servidor
MQTT (mosquitto) en la Raspberry Pi. [ http://pubsubclient.knolleary.net]
El software principal
El software ESP8266 Arduino IDE para este proyecto es relativamente sencillo. Verá algunas similitudes con el software IBM
bluemix en el último capítulo. La principal diferencia es que ahora están haciendo ambos extremos de las conexiones MQTT.
Recuerde que debe poner su propio punto de acceso WiFi y contraseña en el código, así como introducir la dirección IP de
su Frambuesa Pi.
El flujo general del software consiste en inicializar primero la conexión Wi-Fi y el hardware RFID y después de
entrar en un bucle, la comprobación de eventos RFID Tag.
/*
Código laboratorios SwitchDoc para IOT RFID
IOT RFID utiliza Publique Suscríbete a comunicar a Frambuesa Pi de enero de el año 2016
*/
// opciones en la placa
extern "C" {
# incluir "user_interface.h"}
# incluir <ESP8266WiFi.h>
# incluir "PubSubClient.h"
# incluir "seeedRFID.h"
# definir RFID_RX_PIN 4
# definir RFID_TX_PIN 5
# PRUEBA undef
// Variables
202
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
int blinkPin = 0; // pin llevó a parpadear en cada recepción del código RFID
# incluir "Utils.h"
# Definir la información
IOTRFIDVERSION 005 // Frambuesa Pi
devolución de llamada vacío (char * tema, byte * carga útil, sin signo int length) {Serial.println (
"devolución de llamada se invoca desde IOT RFID"); }
WiFiClient wifiClient;
PubSubClient cliente (servidor de 1883, devolución de llamada, wifiClient);
void setup () {
// poner su código de configuración aquí, para ejecutar una vez:
Serial.println ( "----------------");
Serial.println ( "IOTRFID publicación / suscripción de inventario");
Serial.println ( "----------------");
203
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
Serial.println ( "");
void loop () {
// ponga su código principal aquí, para ejecutar repetidamente:
count = 0;
Serial.println (); }
si (RFID.isAvailable ()) {
# terminara si
204
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
carga útil = "{\" d \ ": {\" IOTRFID \ ": \" IR1 \ ""; carga útil + =
"\" VER \ ": \" "; carga útil + = IOTRFIDVERSION; carga útil
+ = "\", \" RFID_ID \ ": \" "; carga útil + = String
(RFID.cardNumber ()); carga útil + = "\" "; carga útil + = "}}";
count = 0;
retardo (500); }}
rendimiento(); // Esto es necesario para la ESP8266 hacer las tareas en segundo plano}
----------------
IOTRFID publicación / suscripción de inventario
----------------
Conexión a WiFi ......
WiFi local conectada, la dirección IP: 192.168.1.135 cliente
reconexión a 192.168.1.40
205
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
Vuelve a la ventana Terminal 1 del anteriormente en este capítulo y mantenga presionada la tecla Control y haga clic en
“c” (Ctrl + C) para matar el proceso en ejecución de la etapa anterior. Si lo había cerrado, abrir otra ventana de terminal y
siguiendo las instrucciones a continuación.
Construir un archivo de Python para depurar y nuestra suscripción de registro en el corredor mosquitto:
nano IOTRFIDLogSubscribe.py
#
# laboratorios SwitchDoc
#
# suscripción pantalla de registro
#
# de enero de el año 2016
#
# La devolución de llamada para cuando el cliente recibe una respuesta desde el servidor CONNACK.
# La devolución de llamada para cuando un mensaje se publica se recibe del servidor. ON_MESSAGE def
(cliente, datos de usuario, msg):
impresión (msg.topic +" "+ str (msg.payload))
client = mqtt.Client ()
client.on_connect = on_connect
client.on_message = ON_MESSAGE
206
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
Utilizamos “sudo” para asegurarse de que el pitón se está ejecutando con privilegios de root para evitar problemas de permisos
posibles.
$ SYS / corredor / log / N 1454535157: Error de socket de cliente IOTRFID, desconectar. $ SYS / corredor / log /
N 1454535157: Nueva conexión de 192.168.1.135 en el puerto
1883.
$ SYS / corredor / log / N 1454535157: Nuevo cliente conectado desde 192.168.1.135 como IOTRFID (c1, k15).
Esto significa que su IOTRFID está conectado al corredor mosquitto MQTT. A continuación, vamos a ir a otra
#
#
# IOTRFID Subscribe Módulo
#
# Recibe el mensaje de inventario de IOTRFID
# SwitchDoc laboratorios de enero de el año 2016
#
JSON importación
# La devolución de llamada para cuando el cliente recibe una respuesta desde el servidor CONNACK.
207
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
# La devolución de llamada para cuando un mensaje se publica se recibe del servidor. ON_MESSAGE def
(cliente, datos de usuario, msg):
impresión (msg.topic +" "+ str (msg.payload))
resultado = json.loads (filter_non_printable (msg.payload)) # resultado es ahora iniciar y detener
caracteres de un dict / filtro
InventoryRFID = resultado de [ 'd'] [ 'RFID_ID']
impresión
client = mqtt.Client ()
client.on_connect = on_connect
client.on_message = ON_MESSAGE
Verá lo siguiente:
208
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
Si su IOTRFID está en marcha, debería ver algo similar a la siguiente en la ventana de serie Arduino
IDE:
Enviando IOTRFID carga útil: { "d": { "IOTRFID": "IR1", "VER": "5", "RFID_ ID": "2413943"}}
IOTRFID Publicar ok
Si nos fijamos en la ventana de depuración en la Terminal 1, debería ver algo como esto si no tiene errores:
$ SYS / corredor / log / N 1454536590: Nuevo cliente conectado desde 192.168.1.135 como IOTRFID (c1, k15).
209
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
$ SYS / corredor / log / N 1454536615: tiempo de espera del cliente IOTRFID ha superado, desconectar.
$ SYS / corredor / log / N 1454536615: Error de socket de cliente IOTRFID, desconectar. $ SYS / corredor / log /
N 1454536615: Nueva conexión de 192.168.1.135 en el puerto
1883.
$ SYS / corredor / log / N 1454536615: Nuevo cliente conectado desde 192.168.1.135 como IOTRFID (c1, k15).
Usted publicó acaba con éxito un formulario de mensajes IOTRFID MQTT al corredor mosquitto MQTT en
la Frambuesa Pi y la recibió en un suscriptor MQTT en la Terminal 2.
Ha conectado el dispositivo IOT en su propio agente MQTT tal como lo hizo con IBM bluemix en el
capítulo anterior.
# La devolución de llamada para cuando un mensaje se publica se recibe del servidor. ON_MESSAGE def
(cliente, datos de usuario, msg):
impresión (msg.topic +" "+ str (msg.payload))
resultado = json.loads (filter_non_printable (msg.payload)) # resultado es ahora iniciar y detener
caracteres de un dict / filtro
InventoryRFID = resultado de [ 'd'] [ 'RFID_ID']
impresión
Aunque sólo estamos imprimirlo a la pantalla, si alguien quisiera construir un sistema de inventario real, esta
función es donde se llame a la base de datos, programas de acción, y otros nodos de publicación-suscripción que
necesitan ser notificado de que esta pieza de inventario tiene sido escaneada.
Conclusión
Debe ser algo sorprendente que podemos duplicar una cantidad significativa de la funcionalidad de IBM bluemix con menos de
sólo el 50 $ de dólares en hardware. En verdad, lo hemos hecho con este proyecto. Sin embargo, hay un montón de cosas que
faltan en nuestra implementación en comparación con el sistema IBM bluemix. Nuestro sistema no tiene redundancia, no hay
manera de ampliarlo para decenas de miles de dispositivos, se carece de un panel de control administrativo real, y no ha
abordado la cuestión muy importante de la seguridad informática y hackability.
210
CAPÍTULO 6 ■ USO PARA IOT RFID y MQTT Y EL PI FRAMBUESA
Los conceptos que hemos explorado en este capítulo deben dar al lector algunas ideas muy sólidas en la
tecnología y la vuelta a un cuadro negro (como IBM bluemix) en algo que es más fácil de entender.
En cuanto a la seguridad informática se aplica a los dispositivos de IOT, esta es una excelente ramificarse en el capítulo siguiente,
211
CAPÍTULO 7
• La seguridad informática es lo
tratando de atacar nuestra infraestructura (electricidad, agua, alcantarillado, etc.). Ahora, con el advenimiento de la IOT, tienen una puerta de
entrada a su casa.
¿Adivina qué? Ellos van a atacar a su dispositivo IOT. Usted puede pensar que está a salvo porque no es muy
importante (ver hay 2 más abajo - no siendo importante, no es una buena defensa.); van a atacar.
Comprender un hecho muy importante. Los hackers atacan raramente algo específico. Utilizan programas para
atacar a miles y decenas de miles de cosas a la vez. Luego sólo tiene que esperar por los resultados. Si está expuesto en
Internet, ellos te encontrarán. Su trabajo es asegurarse de que no pueden hacer nada importante al respecto.
Quiénes son los piratas? Hay la gente de sombrero negro que tratan de hacer dinero de los ataques o
ransomware. Hay estados-nación que hacen esto (y no sólo los Estados Unidos, China y Rusia, tampoco. Corea del
Norte y muchas otras naciones tienen programas). No es sólo tan caro que hacer y el Internet le da acceso a
cualquier lugar.
Hay hackers de sombrero blanco que están tratando de encontrar y solucionar los problemas de seguridad en los programas y en
Ah, y luego hay un conjunto de otra categoría de personas que se encuentran en algún punto intermedio. sombreros grises, si
quieres. Estas son personas que no están realmente seguros de lo que están haciendo. Las personas pueden descargar programas de
hacking y ejecutarlos sin tener alguna idea de lo que está pasando. Estas personas se llaman “script kiddies” y pueden causar todo tipo de
daños a propósito o no.
IOT: Top Cinco cosas que debe saber sobre IOT Computer Security
El autor ha dirigido una compañía de seguridad informática y ha enseñado a la seguridad informática y la guerra de información a
nivel de grado y postgrado en varias universidades. En este capítulo estoy tomando una mirada diferente a la seguridad
informática que la mayoría de los libros técnicos. Mientras que estoy discutiendo métodos de cifrado y autenticación, También
estoy tomando una vista de nivel superior del problema y una visión realista de lo que puede y no se puede hacer con los
pequeños ordenadores que componen la IOT.
Con eso, vamos a empezar con mis pensamientos acerca de los cinco mejores para saber sobre la IOT seguridad informática.
"¿Qué? Eso no tiene ningún sentido. Mi solicitud sólo tiene 200 líneas de código en él y puedo ver que es
seguro!”
Hay dos cosas a considerar aquí. Primero de todo es que esos 200 líneas han sido compiladas por un compilador que tiene
100.000 líneas de código. El sistema operativo que se esté ejecutando en cuenta al menos 25.000 líneas de código (sí, incluso un
Arduino) y millones de líneas de código en una máquina de Frambuesa Pi o Windows. Sus 200 líneas de código interactúan con
decenas de miles de líneas de código. Usted no sabe qué tan grande es su propio programa. Usted no sabe sobre el compilador.
Usted no sabe acerca del sistema operativo. Sí, algunos micro-controladores le permiten configurar todo, pero en los sistemas de
desarrollo de hoy en día esta es la excepción y no la regla.
El segundo aspecto a considerar es un teorema probado desde el excelente libro de Matt Bishop [Computer Security: Arte y
Ciencia, Matt Bishop] sobre seguridad informática: “Es indecidible si un determinado estado de un sistema de protección dado es
seguro para un derecho genérico dado. ”
¿Qué significa esto? Esto significa que “se puede saber si su programa de ordenador es inseguro, pero no se
puede saber si es seguro.”
Ay.
214
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
Disponibilidad se refiere a la capacidad de acceder a información o recursos cuando sea necesario. Si alguien está haciendo
una denegación de servicio en su casa o su proveedor de Internet, no se puede llegar a su cerradura de la puerta. Sí, incluso con una
cerradura de la puerta conectado a Internet, usted debe tomar su llave física a lo largo. Y no establecer el código de acceso a su
cumpleaños.
En este capítulo, voy a hablar de algunas de las técnicas aplicables IOT para hacer frente a las tres
partes de la Tríada. La CIA Triad se muestra en la figura 7-1 .
215
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
En la otra dirección, la transmisión de la contraseña de su conexión Wi-Fi en el claro de un dispositivo IOT es una pieza
valiosa de información; y en la mayoría de los sistemas, sigue siendo valiosa de diez horas en el pasado.
Por lo tanto, el valor de la información tiene dos componentes principales. Es la información valiosa en el momento de
la producción, y por qué sigue siendo valioso como el tiempo avanza?
Después de un reembolso de deducciones seguros e impuestos menos, probablemente era incluso menos. La
sorprendente conclusión después de ver los informes es que las grandes brechas de datos no cuestan casi nada a estas
empresas. números y costes similares se aplican a la Sony y las violaciones de datos de Home Depot. Los costes no son
relevantes para estas grandes empresas.
Todos los consumidores incomodados por conseguir nuevas tarjetas de crédito, o tener el fraude en su tarjeta o su
identidad robada, probablemente sentir de forma diferente.
En una escala mucho más pequeña, he experimentado esto en un nivel más personal. En 2000, empecé un banco (sí, un
verdadero banco real asegurada por la FDIC) y han formado parte del consejo de administración desde entonces. Naturalmente,
he servido como presidente del Comité de Tecnología. Ha sido interesante.
A mediados de la década de 2000, nuestro proveedor de pago Visa se ha visto comprometida y tuvimos un pequeño problema de
fraude con las tarjetas comprometidas (alrededor de $ 2,000) que las normas dicen que éramos responsables. También tuvimos alrededor
de $ 10.000 de costes en la emisión de nuevas tarjetas. Nos dieron una pequeña reembolso de nuestra cyber-seguro, pero tuvimos que ir
después de que el proveedor de pago. Después de seis meses que iban a ninguna parte (que no querían que pagar nada, aunque era
claramente su culpa), nos dimos por vencidos. Por lo que realmente vale la pena en este caso? Usted, el consumidor, con mayores costos
pasados a usted.
216
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
La mayoría de los trabajos académicos se centran en el costo de la pérdida de datos y la exposición en las empresas grandes y
medianas de tamaño. No es sorprendente que poco trabajo sobre el coste de la pérdida de información y la exposición de IOT.
Así pues, cómo se asigna valor a la información en el IOT? Nos fijamos en lo que significa que el usuario tenga los datos
perdidos o comprometidos y estimar un daño financiero (o personal) para el usuario. Las empresas anteriormente se centran en
costo para ellos. En el IOT que hay que buscar en el costo para el usuario final.
¿Qué pasa si alguien hackea su cerradura de la puerta frontal inalámbrica? ¿Qué hay de su televisor? Según los
informes, el Smart TV de Samsung te escucha, incluso cuando no está hablando con el televisor. Te advierten de no discutir la
información sensible alrededor de su televisor. Buen dolor. Cuando se descubrió que era posible para introducirse en la cámara
de Samsung Smart TV en la parte superior del conjunto, sugirieron poner cinta negro sobre ella o empujándola en el set con un
lápiz. Samsung es una compañía de $ 180 mil millones al año. Se podría pensar que iban a poner un poco más en la seguridad
informática.
las previsiones de Gartner [ www.gartner.com/newsroom/id/3165317 ] que habrá 6.4 mil millones de IOT “cosas” conectada a
finales de 2016. Y se pronostica además que para el año 2020 será de 20 mil millones de “cosas” conectadas. Usando los números
aproximados de las previsiones de Gartner cantidad que se gasta en el mercado mundial de seguridad IOT (alrededor de $ 7 mil
millones en 2015 y el aumento de $ 30 mil millones en 2020), nos encontramos con un número interesante. La cantidad que se gastará
en la obtención de la IOT será de alrededor de $ 1 por cada dispositivo IOT. Ahora bien, esto es algo que podemos usar en nuestro
presupuesto para el desarrollo IOT. Mi sensación de la tripa es que se trata de la derecha.
De nuevo al valor de la información. En 2016, 5.5 millones de dispositivos IOT se conectan todos los días. Estos dispositivos están
conectados incluyen automóviles, electrodomésticos de cocina, televisores inteligentes, relojes de pulsera, juguetes, instrumentos
Confidencialidad - Criptografía
La confidencialidad se define como la ocultación de la información. Como se mencionó anteriormente, casi siempre se puede
obtener información de dispositivo si tiene acceso físico al dispositivo. Lo que nos estamos centrando en esta sección es la
protección del canal de transmisión de la información en lugar del propio dispositivo IOT física.
217
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
Nota de que no. 2 anterior, la oscuridad no cuenta como lo que va de la seguridad informática. Si estamos
transmitiendo información valiosa, entonces tenemos que cifrarlo utilizando técnicas criptográficas. ¿Qué es la criptografía?
Las técnicas criptográficas incluyen usos para la totalidad de la CIA Tríada, pero aquí nos vamos a centrar en el cifrado que
es un subconjunto de estas técnicas.
Discusión de las técnicas de criptografía y cifrado pueden llenar fácilmente un libro entero así que voy a permanecer
lejos de los cálculos y se centran en la aplicación. La única cosa que necesitamos discutir es que la criptografía moderna
se basa en gran medida en las metodologías matemáticas y ciencias de la computación. Todas estas técnicas de abajo se
puede dividir en base a las consideraciones teóricas de los algoritmos, pero es práctico hacerlo mediante cualquier técnica
conocida. Eso hace que estas técnicas Algún día “Computacionalmente seguro.” En el futuro que puede ser capaz de leer
el termómetro, pero ¿merece la pena? Depende del valor de la información.
Hay una cosa importante tener en cuenta sobre el cifrado y criptografía. Estos algoritmos tienden a ser
computacionalmente costosa en términos de cantidad de relojes de CPU y memoria RAM para hacer estos cálculos.
Recuerde que los dispositivos IOT no tienen una gran cantidad de relojes de CPU o una gran cantidad de memoria RAM. Por
lo tanto, utilizar la cantidad mínima de estas técnicas para proteger sus datos. Tienes que ser inteligente de ahorrar batería y
espacio de memoria RAM.
Criptografía en el Arduino
Existen básicamente dos formas de Arduino para comunicarse con dispositivos externos. Que o bien tienen una
conexión de red (Ethernet, Bluetooth, WiFi, Zigbee, u otras redes), o si tiene un conector en serie (USB, directamente
en serie). Mientras que las técnicas descritas en esta sección son aplicables a ambos tipos de conexiones, nos
centraremos en las técnicas de tipo red. Para el Arduino voy a centrarse en el uso de AES. Mientras que el siguiente
ejemplo se ejecuta en Arduino Mega2560, sino que también se puede ejecutar en un ESP8266 con cambios mínimos.
AES es lo que ellos llaman un cifrado de bloques simétrica utilizada por el gobierno de Estados Unidos para proteger la
información clasificada. Es bastante bueno cifrado y no puede ser rota en la redacción de este capítulo de los ataques de fuerza bruta.
Sin embargo, como Bruce brillante ha dicho, “Los ataques siempre mejoran; nunca empeoran “.
Los siguientes son sólo algunas de las bibliotecas AES disponibles para el Arduino:
• github.com/DavyLandman/AESLib
• spaniakos.github.io/AES/index.html
• utter.chaos.org.uk:/~markt/AES-library.zip
Estamos utilizando un Mega2560 Arduino (que se muestra en la figura 7-2 ) En lugar de un Arduino Uno
porque el Mega2560 tiene 8K bytes de SRAM disponibles frente bytes 2K en el Uno.
218
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
Vamos a utilizar la biblioteca Davy Landman para nuestros ejemplos. Para instalar en su biblioteca de Arduino, siga las
instrucciones en el archivo README.md. Lo que sigue es un ejemplo de cómo utilizar la biblioteca de AES en un programa de
Arduino. Puede sustituir cualquier Arduino para este ejemplo. Sin embargo, no se compila bajo el Arduino IDE ESP8266 a
menos que se realicen cambios en la propia biblioteca de AES.
// //
# incluir <AESLib.h>
219
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
void setup () {
Serial.begin (115,200); }
void loop () {
// ponga su código principal aquí, para ejecutar repetidamente:
// 16 bytes
datos char [] = "01234567890Hello";
Serial.println ();
}
Serial.println ();
// Ahora se encripta los datos utilizando una clave AES de 256 bytes
}
Serial.println ();
220
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
Nota la clave dada al comienzo del programa. Esta clave de 256 bits es lo que necesita tanto para cifrar y descifrar los
datos. Por supuesto, esto no es una muy buena clave en nuestro ejemplo.
los datos a ser cifrados (formato ASCII): los datos 01234567890Hello a cifrar
(formato hexadecimal): 303132333435363738393048656C6C6F
cifrada (en Hex): 438693C632D91AF2283651F416BBA61E
descifrado: 01234567890Hello
Esta es la única pieza de información secreta. Los dos extremos del canal de comunicación necesitan tener
esta tecla para AES para trabajar.
gestión de claves (cómo enviar estas claves alrededor) es un tema clave del diseño de la seguridad informática IOT y
será discutido más adelante en este capítulo.
En cuanto a este programa, se podía ver cómo se puede descompilar el código y recuperar la clave secreta. Este
es un ejemplo de por qué el acceso físico al dispositivo a menudo puede conducir a la capacidad de hackear el
dispositivo y la red de dispositivos.
¿A qué velocidad son estas bibliotecas en un Arduino? Basado en un ATMega328 16MHz, una clave AES de 128 bits puede generar
alrededor de 27.000 bytes por segundo. El uso de una clave de 256 bits que recibe alrededor
casi seguro que el caso), usted no será capaz de hacer que las tasas de estos datos de forma continua.
Tenga en cuenta que las bibliotecas AES ya están incorporados en el firmware de la ESP8266, pero a partir de la
redacción de este capítulo realmente no hay ejemplos completos de cómo usarlos y la documentación es muy escasa.
Criptografía en la Raspberry Pi
La Raspberry Pi tiene un conjunto mucho más rico de las bibliotecas de criptografía disponibles en el sistema operativo o
descargas tan fácilmente disponibles. Por ejemplo, si se está comunicando usando peticiones web (entre Frambuesa Pi de o
equipos basados en Linux), se puede utilizar SSL para cifrar el tráfico entre los dos nodos. Es altamente estandarizada, y si se
configura correctamente es muy seguro. ¿Por qué no utilizamos SSL en un sistema basado en Arduino o ESP8266? Dos
razones: en primer lugar, la memoria / procesamiento de las limitaciones de potencia; y el segundo es el problema de la
distribución de los certificados necesarios para los enlaces SSL seguras. Esta es otra variante del problema clave de
distribución.
Los mismos AES-256 funciones están disponibles en la Frambuesa Pi para que pudieran ser utilizados en la
comunicación con un Arduino. Sin embargo, este método es muy lejos de la implementación de SSL completa utilizada por
los navegadores web modernos y equipo (piensa https: // en lugar de http: //) .
221
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
La biblioteca de cifrado AES Spaniakos como antes citada bajo la criptografía en la sección Arduino también está
disponible para la Frambuesa Pi.
Tenga en cuenta que existen implementaciones de hardware de AES empezando a aparecer para Arduino y Raspberry Pi.
Integridad - Autenticación
La integridad se define como la fiabilidad de los datos o recursos. Tenga en cuenta la diferencia entre la integridad y
cifrado. Cuando hablo de la integridad, estoy hablando de asegurarse de que las directivas o los datos enviados a mi
dispositivo IOT no ha sido cambiado en el camino y que yo sepa a ciencia cierta que lo envió. Las directivas o datos pueden
o no pueden ser cifrados.
En cuanto a esto desde el punto de vista de valor de la información, esto significa que en realidad no importa si un hacker se
ve en los datos (estoy encender la calefacción en mi casa), pero nosotros usamos la integridad para asegurarse de que un hacker no
se puede forjar la directiva o los datos y que el hacker no puede cambiar los datos en sí.
Hay muchas maneras de utilizar algoritmos criptográficos para establecer la integridad del contenido
del mensaje y establecer que envió el mensaje.
Estableciendo que el mensaje no ha sido modificado en el camino se puede hacer mediante el uso de lo que se
llama un hash criptográfico en el mensaje. En concepto, se toma cada byte del mensaje y mediante el uso de un algoritmo
criptográfico, se puede determinar que el mensaje no ha sido modificado - con una muy, muy alto grado de certeza.
Con el fin de probar que el mensaje no ha sido alterado en el tránsito, tendrá que enviar el mensaje + el hash
toda la red. Al igual que el cifrado de ejemplo anterior, es necesario llevar a su mensaje y de hash criptográfica
del mensaje para generar los códigos hash. Vamos a utilizar el tenedor de Cathedrow biblioteca [ https://github.com/maniacbug/
CryptoSuite ] para este ejemplo.
Sin embargo, las bibliotecas requieren algunos ajustes para hacer que funcionen en las versiones más recientes del
IDE de Arduino, así que les han incluido en la descarga de este software como fichas adicionales. Esto funciona con una
placa Arduino y una tabla de ESP8266.
//
// Prueba de hash SHA256 //
# incluir "sha256.h"
222
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
Serial.println (); }
void setup () {
Serial.begin (115,200);
Serial.println ( "Prueba de hash SHA256");
Serial.println ();
void loop () {
* uint8_t de hash;
Sha256.init (); hashMessage
cadena; int i;
while (1) {
printHash (hash);
Serial.println (); retardo
(5000);
i ++;
223
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
Si se cambia el mensaje resumido, el hash SHA256 cambiará. Se puede decir que el mensaje no ha sido modificado
en ruta a su dispositivo. Tenga en cuenta que no tenemos la clave criptográfica para intercambiar. SHA256 funcionará igual
en todas partes.
Nota SwitchDoc Demostrando algo que no ha sido alterado durante la transmisión le dirá que está bien. Sin embargo, lo que
si sólo tenemos un mensaje ligeramente dañado? Esto podría ser causado por el ruido en la línea (piense en la comunicación
por satélite). Si desea corregir errores en un mensaje como este, se utiliza otro conjunto de algoritmos. códigos de corrección
de errores Reed-Solomon son un gran ejemplo de estos. Puede corregir los datos, entonces descifrarlo. Obviamente, es
necesario cifrar el mensaje primero y luego poner estos códigos en la parte superior de los datos cifrados para que su canal de
comunicación más fiable. Invirtiendo el orden (el cifrado del código Reed-Solomon) no tiene sentido y no proporcionará la
corrección de errores.
Funciona así. Bob tiene una clave privada, que sólo él conoce. Él también tiene una clave pública que se da a
cualquier persona que quiera comunicarse con él. Cuando Bob quiere enviar un mensaje a Alice, que codifica el
mensaje con su clave privada y la envía a Alice. Alice utiliza la clave pública que recibió de Bob para descifrar el
mensaje. Si se descifra con éxito, entonces Alice sabe que el mensaje vino de Bob.
Por lo tanto, el uso de este método de clave pública / privada, podemos cifrar el mensaje y demostrar que venía de Bob y no
se altera. Invirtiendo el procedimiento, se puede enviar un mensaje a Bob de Alice con seguridad.
224
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
OK, se ve perfecto. ¿Cuáles son las complicaciones? Una vez más estamos de vuelta a los intercambios de claves. Tanto nuestro
servidor IOT y el dispositivo IOT tiene que tener las claves privadas y publicar las claves públicas al servidor. Esto suena como un montón
de trabajo. Y es. Aquellos lectores moresophisticated se dará cuenta de que esto se parece mucho a SSH / HTTPS. Correcto. Y como se
señaló anteriormente, esas son las grandes bibliotecas para computadoras pequeñas, aunque la Frambuesa Pi puede manejar la
situación, la clase de procesadores Arduino realmente no puedo. El ESP8266 es apenas capaz de hacer esto (y lo hace por su opción de
actualización sobre el aire) pero no están distribuyendo llaves. Se ponen al día una comunicación unidireccional. Para los enlaces de
comunicación bidireccional, necesita llaves para ambas direcciones.
Hay un nivel adicional de complejidad establecido en la parte superior de esta. Los certificados deben ser trazables a una
autoridad de confianza conocido para probar el sistema no ha sido comprometida.
Mostrando ejemplos del software de clave pública / privada es mucho más allá del alcance de este libro.
Algunas palabras clave para buscar son “Firma Digital, Diffie-Hellman y RSA de clave pública de cifrado” en la
búsqueda de esta tecnología. Un buen ejemplo de un sistema que muestra este tipo de un sistema entre un Arduino y
un PC con Windows está disponible en este enlace: github.com/arpitchauhan/cryptographic-protocols-arduino-and-PC/
• Las claves públicas se intercambian de forma segura entre los dos dispositivos (Nota: ambos
• Después de que las claves públicas se intercambian, se puede transferir una clave de cifrado AES.
• Ahora, los dispositivos pueden comunicarse de forma segura y con seguridad usando AES como en el
ejemplo anterior.
Una cosa importante a tener en cuenta es el cifrado de clave pública / privada es mucho más costoso computacionalmente que el
cifrado AES. Esta es la razón por que el intercambio de sus claves AES con este esquema y luego sólo tiene que utilizar AES para enviar los
En realidad no hay mucha diferencia entre un ataque a negar el servicio (DOS), el Internet se cae, el reinicio del
router inalámbrico o su horno de microondas volverse loco. Todas estas cosas interrumpir su ruta de
comunicación a su dispositivo IOT.
Una cosa que los dispositivos inalámbricos IOT comerciales son especialmente vulnerables a es la incapacidad
de hablar con el servidor debido a ruido eléctrico en el entorno, ya sea generada por error oa propósito. Cuando usted
está planeando su dispositivo IOT, es necesario asegurarse de que el diseño de modo que el dispositivo puede
manejar una interrupción del servicio de comunicación, si se hace a propósito o por fallo del equipo. Tiene que haber
algún método para decirle al usuario o consumidor que tiene un fallo.
¿De qué manera los militares de evitar esto? Utiliza esquemas complejos como radios de salto de frecuencia, grandes
cantidades de energía radiada por radio a “quemar” el ruido, y grandes antenas. Estas no son las técnicas que están
disponibles a bajo precio a nuestros dispositivos IOT.
225
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
Gestión de claves
gestión de claves es un problema difícil. Gestión de la configuración de los dispositivos de IOT es difícil. De las secciones
anteriores de este capítulo, tenemos que tener una clave compartida para cifrar AES256 para mantener nuestra comunicación
confidencial. También necesitamos claves para probar que el mensaje ha llegado de la persona o servidor correcto.
Recuerde que cada vez que el dispositivo IOT está comunicando con el Internet o la red de área local,
hay una posibilidad de compromiso.
Hay dos enfoques para la gestión de claves en dispositivos IOT. La primera es mediante el uso de la gestión de claves de
hardware.
Empresas como Infineon construir chips que incluyen claves privadas y públicas que pueden ser utilizados para construir
redes de dispositivos IOT. Puede establecer certificados de confianza (que une a una autoridad de certificados de confianza) en el
momento de la fabricación y el establecimiento de un conjunto de protocolos de software para el uso de estas teclas después del
despliegue. A medida que el proceso y los chips se hacen menos caro, creo que vamos a ver más y más de estos tipos de
sistemas desplegados. Al momento de escribir este libro, estos chips no son baratos. El uso de uno de ellos más o menos el doble
del precio de su dispositivo IOT en muchos casos. ¿Qué pasa con el acceso físico a estos dispositivos? Sí, puede comprometer un
dispositivo de tomarlo y destrozarlo (y no me refiero sólo a tomar los tornillos a cabo. Estoy hablando de retirar el plástico de las
patatas fritas y pasar por el chip con un microscopio. Recuerde nuestra discusión sobre el valor de la información? Es probable que
no vale la pena hacer todo esto para poner en peligro su termostato o tostador.
El segundo método es utilizar software para distribuir las teclas durante la configuración (o incluso
durante la fabricación). Estos métodos se llaman en general PKI (Public Key Infrastructure).
En general, muchos dispositivos IOT son más vulnerables a los ataques que los servidores normales, PC y
teléfonos inteligentes debido a que operan con el software incorporado (firmware) que se ha desarrollado sin seguridad en
línea en mente. Hay muchos ejemplos de fallas de software realmente malas que pueden incluir la gestión de back-end
con contraseñas por defecto que se encuentran fácilmente en Internet y las comunicaciones no cifradas. La gente está
hackeando activamente en cosas como los routers y otros dispositivos conectados y su uso en el DOS (Denegación de
Servicio) ataques. Pensar en nuestros dispositivos LightSwarm en un capítulo anterior. Se podría programar a todos para
empezar a enviar mensajes tan pronto como sea posible y crear su propio ataque DOS. Durante el desarrollo de la
LightSwarm, que sin querer hice esa misma cosa. Me abruma el servidor Frambuesa Pi mediante el envío de mensajes a
la vez,
Otro problema real con dispositivos IOT es que el firmware interno dispositivo IO no puede ser actualizada por años (o la
empresa puede quedar fuera del negocio) y la infraestructura para la actualización de estos dispositivos simplemente no existe o
no.
El uso de métodos de PKI actuales son sólo poco práctico a escala a las próximas múltiples mil millones de dispositivos
IOT proyectados para ser conectado a la red. Debido a esto muchos fabricantes toman atajos para asegurar sus dispositivos. Por
ejemplo, todos los dispositivos IOT puede compartir una clave única (ya sea una clave de cifrado AES o un / par de claves
privadas sola público). Este método hace suministrar una cantidad significativa de la seguridad, pero si se ve comprometida la
clave única (como ha ocurrido muchas veces en la industria informática. Piense Sony y Microsoft), entonces toda la red está
abierta a los piratas informáticos.
La industria tiene las herramientas matemáticas y técnicas para proteger la IOT. Lo que no tenemos es un método
sencillo y seguro para la distribución de las claves para la totalidad de la IOT.
226
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
Este es un problema que no ha sido resuelto todavía y probablemente no será antes de desplegar otra unos mil
millones de ordenadores.
la administración de actualizaciones
De acuerdo con un experto (en realidad yo), los dos mayores problemas para mantener los dispositivos de seguridad IOT son los siguientes:
Ser capaz de actualizar el firmware es clave para evitar la obsolescencia y para recuperarse de fallas que salen a la
luz después de la implementación de dispositivos. Este es un canal muy importante de información que necesita ser
asegurado mediante cifrado, tanto desde el punto de vista de la integridad de datos y para asegurarse de que sólo se
actualiza de donde debería ser actualizada (no repudio). Las técnicas anteriores se pueden utilizar para hacer estas
mismas cosas.
Si alguien puede encontrar la manera de engañar a su sistema de actualización, la persona puede volver a programar
todo el sistema.
Conclusión
¿Por qué alguien quiere entrar en el termostato? Para proporcionar una entrada a la red. Recuerde que la violación de datos de
destino que hablé antes? Que se inició a través de una aplicación de mantenimiento del sistema de refrigeración. Se pusieron en
la red a través del aparato de aire acondicionado.
El IOT representa una gran oportunidad para mejorar la vida y experiencias de las personas. Con un gran
poder viene una gran responsabilidad. Al diseñar la Internet de las Cosas aplicación asesina y el dispositivo, la
seguridad en el diseño desde el principio. No virar en al final.
Mira las noticias. En un futuro próximo, verá artículos sobre las personas (y programas) pirateo de coches - oh
espera, que ya lo están haciendo. Verá artículos que tienen la piratería en cerraduras de las puertas del hotel - Oh,
espera, que ya lo están haciendo. Y verá la gente piratería en el termostato de su casa - Oh, espera, que ya están
haciendo eso, también.
El hombre escribió que su esposa lo había dejado por otro hombre y luego se trasladó a
su nuevo hombre en su antigua casa que habían compartido, que tenía un termostato
Honeywell WiFi. La ex amante aún podía controlar el termostato a través de la aplicación
móvil instalada en su teléfono inteligente, por lo que se utiliza para cambiar el entorno
para la pareja que ahora vive en su antigua casa: “Desde el pasado invierno Ohio ha sido
tan fría que he sido jugar con la temperatura, mientras que los nuevos tortolitos están
durmiendo. ¿Cada uno no quiere despertar a las 7 de la mañana a una casa de 40
grados? Cuando están lejos de sus escapadas de fin de semana,
227
CAPÍTULO 7 ■ COMPUTER de seguridad y la IOT
manubrio el calor de hasta 80 grados y volver a bajar a 40 antes de llegar a casa. Sólo puedo
imaginar lo que podrían ser sus facturas de electricidad. Me hace sonreír. Sé que esto no va a
durar para siempre, pero no puedo evitar sonreír cada vez que intento acceder y ver que
todavía funciona. Asimismo, no puede esperar a que un clima más cálido cuando puedo girar el
calor de hasta 80 grados, mientras que los tortolitos están durmiendo. Después de todo, ¿quién
no quiere despertar a un hogar de 80 grados en el medio de junio?”
Ahora concedido, que no es realmente un truco técnico - más de una experiencia de ingeniería social, pero
muestra lo que se puede hacer con estos pequeños sistemas.
Su termostato Nest (inserte su propio ejemplo IOT aquí) puede ser una puerta de entrada a su casa. En muchos
sistemas, como el termostato Nest, usted es sólo una contraseña de ser hackeado. Hace un buen argumento para una
buena contraseña en cualquier sistema que se expone a Internet.
Y recuerda que todos los dispositivos son vulnerables a ser hackeado con acceso físico. Así que asegúrese de mantener sus
llaves de metal “reales” seguro, también.
228
APÉNDICE
El IOT es un área de investigación activa y el despliegue activo. Nadie en la industria ha encontrado aún la “aplicación
asesina” que se llevará a la IOT con el despliegue de consumo masivo, pero es sólo una cuestión de tiempo. Si se toma el
tiempo para construir los proyectos IOT en los capítulos anteriores, ahora tiene un conjunto básico de habilidades para crear
prototipos e innovar en el espacio IOT. No hay mejor forma de aprender un nuevo conjunto de habilidades que realmente
construir cosas. Ese es el lema del Movimiento Maker.
Los siguientes son algunos de los proyectos IOT que actualmente estoy trabajando. Son buenas sugerencias para seguir
trabajando por su cuenta, si usted está tan inclinado.
• OurWeather - un no-soldadura requiere el kit de la estación meteorológica IOT para mayores de 8 años
• Dispositivos de construcción IOT utilizando conectores Grove para el prototipado rápido y fácil
Otra idea es que buscar en forma regular los siguientes sitios web para los nuevos dispositivos y nuevos sensores:
• www.sparkfun.com
• www.adafruit.com
• www.seeedstudio.com
• www.tinysine.com
• www.digkey.com
• www.mouser.com
• www.texasinstruments.com
Cuando veo a un nuevo sensor que es interesante, yo salto en él, construir un proyecto, y publicarla, ya sea en
revistas o en mi blog. Hay nuevos dispositivos de base IOT (como el Adafruit Hurra) que entrarán en funcionamiento todos
los días. Si usted ve uno y estás interesado, comprarlo y construir algo. Venga a visitar mi blog y unirse a la conversación en
www.switchdoc.com .
Palabras de despedida. . .
El IOT va a ser grande. ¿Qué tan grande, que nadie sabe. Las tecnologías que se están explotando en el mercado son
accesibles a la persona razonablemente técnicamente bien. Como siempre, me siento el mejor aprendizaje es por el hacer.
Si han construido los cinco proyectos en este libro, entonces usted tiene una muy buena idea de lo que está pasando con
los dispositivos en su hogar o lugar de trabajo. IOT, probablemente, no significa “Caja de Negro” para el lector más.
¿Alguna vez has oído hablar de la Ley de Metcalfe? Se dice que “el valor de una red de telecomunicaciones
es proporcional al cuadrado del número de usuarios conectados del sistema.”
Sustituto “Dispositivo IOT conectado” a “usuarios conectados” y leerlo de nuevo. El mundo está en la cúspide
de algo. Sólo podría ser más grande que el de Internet. Oh espera. Será Internet. La Internet de las cosas será
mucho mayor que la de Internet de personas conectadas.
Sigue leyendo los blogs y construir cosas. Mantenerse al día con la tecnología y el futuro no será tan
misteriosa como lo fue cuando se inició este libro.
230
Índice
do
programa de observación meteorológica ciudadana
(CWOP) Arquitectura, 173 de autenticación, 177, 179
paquetes APRS, 105-108 arquitectura de nube, 151 de origen de datos, 181
EW7667, 108-109 La computación JSON, 176 MQTT, 175-176 conocimientos en tiempo
en nube, 149-150 Criptografía real, 179-180, 182-183 dispositivos de base IOT, 230
IOTBeaconAir
Arduino, 218-221
fidencialidad, 217
hashes criptográficos, 222-225
Frambuesa Pi, 221
BLE, 116 escáner bluetooth, 118-119 confi guración,
133 CPLPFC, 115 de hardware, 115, 121 sistema de
re
iluminación Phillips Hue, 119-120 RSSI, el software
Dynamic Host Confi guración 134
Protocolo (DHCP), 30
EFGH
ESP8266 arquitectura, 122 mapa de
Adafruit Hurra ESP8266, 12 ADC, HTML, el programa de 130-133,
152-154 124-130
software, 202-205
232
■ ÍNDICE
S W, X, Y
sistema de clima IOT alimentado por energía solar aplicaciones Watson, 186
arquitectura, 67 de problemas
Brownout, 80 componentes, 65
Z
conectar y pruebas, 88-90 Zigbee, 120
233