Organiza y Localiza Componentes Raspberry Pi, Arduino y RFID Eficientemente
Componentes y materiales
| Raspberry Pi 2 Model B | × | 1 |
| Arduino UNO | × | 1 |
| Módulo RFID JT2850 | × | 1 |
| Antena RFID JT606 | × | 1 |
Herramientas y máquinas necesarias
| PC con Windows 10 y Visual Studio 2015 instalado |
| Teléfono Android |
Aplicaciones y servicios online
| Microsoft Windows 10 IoT Core |
| Microsoft Azure |
| Microsoft Visual Studio 2015 |
Sobre el proyecto
Contexto
¿Te has encontrado buscando algo mucho tiempo sin hallarlo? Aprovechando tecnología RFID, con lector RFID y múltiples etiquetas adheridas a objetos, podemos localizarlos fácilmente. Al comprar un artículo nuevo, pegas una etiqueta RFID y registras sus detalles en el sistema. Cuando necesites buscarlo pero no recuerdes dónde está, बस haz una búsqueda en la app móvil y sabrás en qué habitación de tu casa se encuentra.
La idea completa
Componentes: módulo lector UHF RFID, antena UHF RFID, Arduino UNO, Raspberry Pi 2 con Windows 10 IoT Core (ver guía instalación), app móvil y servicio web Azure para almacenamiento de datos.
Habrá múltiples módulos UHF RFID en la casa, cada uno conectado a un Arduino UNO, y estos a la Raspberry Pi 2. Para rastrear un objeto, se adhiere una etiqueta RFID y se registran sus detalles y valor RFID en el sistema. Los datos se guardan en Azure SQL Database vía Azure Web API.
Cuando el usuario busca un objeto sin saber su ubicación, abre la app móvil. Esta envía la petición a la Raspberry Pi 2 por WiFi. La Pi la reenvía a todos los Arduino UNO conectados. Cada Arduino envía comando de lectura a su módulo UHF RFID. Si algún lector capta el RFID buscado, devuelve el valor al Arduino, este devuelve la ubicación del lector a la Pi, y la Pi procesa y devuelve el resultado a la app.

¿Cómo hacerlo?
Desarrollaré una app en segundo plano (Background App) en Windows 10 IoT Core. Necesitaremos la IP de la Raspberry Pi 2. No hace falta pantalla gracias a Windows IoT Core Watcher. Conecta PC y Raspberry Pi 2 por cable de red:

El Watcher te dará la IP de tu Raspberry Pi 2:

Crear proyecto en Visual Studio 2015
Descarga el código compartido y ejecútalo en VS2015. Si creas proyecto nuevo:
- File → New → Project
- En plantillas Visual C#, busca "Background Application (IoT)". Pon nombre al proyecto.
- Click derecho en proyecto → Properties.
- En pestaña Debug configura:
- Platform: ARM
- Target Device: Remote Machine
- Remote machine: <tu IP del IoT Core Watcher>
- Desmarca "Use authentication"



Guarda y empieza a programar en StartupTask.cs.
Depuración en Visual Studio 2015
- Click en barra gris izquierda para poner breakpoint.
- Click en botón verde "Remote Machine" para iniciar depuración.
- En modo debug, el botón cambia a "Continue" y se activan botones paso a paso: Next, Step Into, Step Over, Step Out.
- Pasa ratón sobre variable para inspeccionar valor, o click derecho → "Add Watch" para añadir a lista de observación.




Crear Web API en Azure para transacciones IoT y app móvil
Crear proyecto ASP.NET Web Application
- Crear ASP.NET Web Application, nombre proyecto, OK.
- Elige MVC bajo plantilla ASP.NET 4.5.2 (o ASP.NET 5 preview con MVC6).
- Autenticación: "No authentication".
- Si quieres hospedar en cloud, marca "Host in the cloud".
- Si no tienes cuenta Azure, regístrate gratis con $200 crédito: azure.microsoft.com
- Login en Azure, rellena nombre web app y detalles.
- Espera a que VS2015 cree web app y base de datos en Azure.





Usar Entity Framework
- Abre Package Manager Console: Tools → NuGet Package Manager → Package Manager Console.
- Ejecuta:
Install-Package EntityFramework - Crea clase Model: click derecho en carpeta Models → Add → Class. Añade:
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; - Crea WebAPI Controller con Entity Framework: click derecho Controllers → Add → New Scaffolded Item → "Web API 2 Controller with actions, using Entity Framework".
- Rellena campos, click en + en Data context class para crear nuevo contexto.
- Click Add para generar scaffolded item. Verás controller y data context en carpetas Controllers y Models.
- Ejecuta en Package Manager Console:
Enable-MigrationsAdd-Migration <Nombre>Update-Database→ crea BD según migraciones. La encontrarás en tabla App_Data.









Publicar Web API
Verifica que existan GetMything(GET), PostMything(POST), PutMything(PUT), DeleteMything(DELETE) en MyThingsController.
- Build → Publish MyThingAPI.
- Selecciona Microsoft Azure Web Apps, login, elige web app existente.
- En Settings, verifica connection string y marca ambas casillas: "Use this connection string at runtime" y "Execute Code First Migration".
- Click Publish. VS lanzará la Web App en Azure tras éxito.




Prueba REST API con extensión Chrome "Advanced REST Client":

JSON para POST:
{
"id": 1,
"status": "0",
"rfid": "1009622005390623",
"image": "",
"name": "some tool",
"type": "tool",
"location": "bedroom",
"createdAt": "2015-10-13T10:26:01.14",
"lastUpdatedAt": "2015-10-13T10:26:01.14"
}
Crear App Universal Windows (UWP)
File → New → Project → Universal App (ej. Tablet). Reemplaza scripts .cs y .xaml con MyThingApp de GitHub.

Depuración: elige plataforma (ARM/x64/x86). En PC local 64-bit: x64 + "Local Machine".

Si todo va bien, verás la app funcionando:

Configurar Notification Hub y Push Notifications UWP
- Reserva nombre app en Windows Dev Center.
- En MyThingApp: click derecho proyecto → Store → Associate App with the Store.
- Crear Notification Hub: guía Azure
- Añade a
App.xaml.cs:
Llama enprivate async void InitNotificationsAsync() { var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); var hub = new NotificationHub("notification", "Endpoint=sb://smartwardrobe.servicebus.windows.net/;SharedAccessKeyName=DefaultListenSharedAccessSignature;SharedAccessKey=MlHoVfn1Ub/c2ThUha+Crn7hHSGmqofrW3cJ6IK89Ok="); var result = await hub.RegisterNativeAsync(channel.Uri); }OnLaunched:InitNotificationsAsync();EnMainPage.csconstructor:this.NavigationCacheMode = NavigationCacheMode.Required; - En
MyThingController(Web API), añade hilo para notificación tras crear registro:public class NotificationClass { internal async System.Threading.Tasks.Task<ThreadStart> SendNotificationAsync(string rfid) { NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("<tu connection string>", "<hub name>"); var toast = @"<toast launch="""" + rfid + @""""><visual><binding template=""ToastText01""><text id=""1"">New Mything need to update</text></binding></visual></toast>"; await hub.SendWindowsNativeNotificationAsync(toast); return null; } } // En PostMything tras éxito: NotificationClass notClass = new NotificationClass(); Thread notificationThread = new Thread(async x => { await notClass.SendNotificationAsync(myThing.rfid); }); notificationThread.Start(); - Recibirás notificación toast al crear registro. Click para abrir app y completar datos.





ENLACES DE REFERENCIA
- Guía paso a paso Windows 10 IoT Core: ms-iot.github.io
- Configurar VS2015 en PC: ms-iot.github.io
- Instalar Windows 10 IoT Core en Raspberry Pi 2: ms-iot.github.io
- Desarrollar app IoT (Blinky): ms-iot.github.io
- Ejemplo serial Windows IoT: ms-iot.github.io
- Repositorios Ms-IoT GitHub: GitHub
- Windows en GitHub: microsoft.github.io
- Ejemplo SoftwareSerial Arduino (UART): arduino.cc
- Tutorial comunicación serial SparkFun: learn.sparkfun.com
- Primeros pasos Azure Notification Hub: azure.microsoft.com
- Añadir push notifications a Mobile Services: azure.microsoft.com
- Code First Migrations: msdn.microsoft.com
- Publicar en Azure Web App con VS: docs.asp.net
- Publicar en Azure App Service: asp.net
Código
Código Arduino para módulo lector RFID
/* Comando lectura enviado a módulo RFID; al leer tag, retorna a puerto serie */
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
Serial.begin(9600);
while (!Serial) { ; } // esperar puerto serie (solo Leonardo)
mySerial.begin(9600);
}
void loop() {
if (mySerial.available()) {
// enviar comando lectura a módulo RFID
byte message[] = {0xA0,0x06,0x80,0x00,0x01,0x02,0x01,0xD6};
mySerial.write(message, sizeof(message));
// enviar datos de vuelta a serie
if(Serial.available()) Serial.write(mySerial.read());
}
}
Repositorio "Where is my thing" en GitHub
https://github.com/seeyouu87/where-is-my-thing
Piezas personalizadas y envolventes
Módulo lector UHF RFID JT2850. Para leer etiquetas RFID.
uhf_reader_jt2850.svg(x3)
Esquemáticos
Esquemático en Fritzing
Conexión Arduino a módulo UHF RFID.

Proceso de manufactura
- Sistema de control de acceso integrado con QR, RFID y verificación de temperatura
- Elegir el Sitio de Desarrollo Adecuado: Makerspaces, Aceleradoras y Socios de Producción
- Orígenes del Concepto de Aserrado: De Herramientas Antiguas a Máquinas Modernas
- Impresión 3D FDM hoy: Estado actual, hitos y perspectivas futuras
- Industria 4.0 hoy: Panorama actual y perspectivas 2017
- Dónde el aire comprimido impulsa procesos cotidianos
- Chuleta Microsoft Azure 2020: guía definitiva de servicios y arquitectura Azure
- Definiendo el Edge: Dónde ocurre realmente el Edge Computing
- 4 alternativas avanzadas al RFID pasivo para rastreo preciso de activos
- RFID activo: Visión general completa y casos de uso prácticos
- Orígenes de los metales: de las estrellas a la industria