Domesticar a un animal salvaje: agregar soporte Homekit a la "salida inteligente" Redmond SkyPlug RSP-100S



Antecedentes


Por primera vez me enteré de esta salida del artículo Smart socket Redmond SkyPlug RSP-100S Análisis del diseño y diagrama del circuito eléctrico. Identificación de deficiencias . Recuerdo que después de leerlo, primero me interesé por el circuito de una fuente de alimentación sin transformador y qué tan compactamente se colocan los elementos en la caja del zócalo a pesar del hecho de que hay un relé completo dentro y no, por ejemplo, un triac.

No se habló de ningún intento de reprogramar el módulo Bluetooth, ya que la programación de dispositivos BLE ha sido históricamente una tarea muy difícil. Aquí hay un ejemplo: el desarrollo de dispositivos IoT con Bluetooth LE claramente no es un nivel de bricolaje.

Sin embargo, durante el año pasado, la situación ha cambiado radicalmente ...

Todo comenzó con el hecho de que el programador indio Sandeep Mistry (en la foto) ...

imagen

... portado Wiring, también conocido como el marco Arduino, es solo "arduino" en los chips Nordic Semiconductor nRF51822 y nRF52832, escribiendo la biblioteca BLEPeripheral en el montón para crear periféricos con soporte BLE4.x en los chips anteriores

Entonces Arduino AG (ex-arduino.org) entró en colaboración con Nordic y lanzó el Arduino Primo ...

imagen

... basado en el chip nrf52832. Me pregunto qué tan rápido encontrará el nRF52832 real en el tablero (pista: el grande de la izquierda no lo es). Para compatibilidad con Arduino, la placa utiliza el código creado por Sandeep, y él mismo fue aceptado en el estado. La historia se repite con espressif, esp8266 e Ivan Grokhotkov (igrr), donde todo comenzó con desarrollos "populares".

Adafruit y Sparkfun pronto también notaron el lanzamiento de tableros en nRF52.



En general, parece que la familia nRF5 (nRF51822 y nRF52832) es ahora el chip más "de moda" entre todos los grandes que definen el mercado de bricolaje electrónico. Por "mayores" me refiero a Arduino, Adafruit y Sparkfun. Los asiáticos en la persona de ITEAD o SEEED todavía están atrasados, pero creo que esto no es por mucho tiempo. Al menos no, los chinos con Ali están estampando los módulos en estos chips con might y main, y si los módulos en nRF51822 eran bastante incómodos, entonces los módulos en nRF52832 son excelentes.

¿Qué tipo de chip es tan notable y por qué, aparentemente, tiene grandes posibilidades de reemplazar finalmente el famoso atmega328 en manualidades de bricolaje?

nRF5 SoC


imagen

Descripción general


nRF52832 es un nuevo sistema "chip-on-chip" potente, de baja potencia y flexible con soporte para Bluetooth Smart, protocolos ANT y pilas patentadas del diseño propio del usuario en el rango de frecuencia de 2.4GHz.

nRF52832 se basa en el núcleo del procesador ARM Cortex-M4F de 32 bits con 512kB Flash y 64kB RAM. Según el protocolo operativo, nRF52832 es totalmente compatible con las series nRF51, nRF24L y nRF24AP anteriores fabricadas por Nordic Semiconductor.

Esto también es muy importante, por ejemplo, tengo toda mi automatización del hogar realizada en nRF24L01 y esta compatibilidad con versiones anteriores hace que sea fácil reemplazar la combinación de atmega328 + nRf24 con un nRF5

Mayor rendimiento del procesador


nRF52832 contiene un potente núcleo de procesador ARM Cortex-M4F que cumple con los requisitos de muchas prestaciones informáticas exigentes, pero con aplicaciones compactas que pueden ejecutarse en un solo chip. El kernel es capaz de resolver las tareas de procesamiento de señal digital, realizar operaciones de punto flotante, realizar operaciones de multiplexación y acumulación dentro de un ciclo de trabajo, y es compatible con la operación de división implementada con eficiencia energética en formas materiales y complejas.

Pieza de radio multiprotocolo


La radio de 2,4 GHz es compatible con las pilas de protocolo Bluetooth Smart, ANT y cualquier pila patentada. La radio tiene un registro RSSI de alta resolución incorporado con la capacidad de funcionar automáticamente en modo EasyDMA para acceder directamente a la memoria en el momento de recibir y transmitir datos por el aire. Nordic proporciona las pilas de protocolos Bluetooth Smart, ANT y Gazel (2.4GHz) como contenido descargable en su sitio web oficial.

La pila de Bluetooth en la versión nórdica se llama SoftDevice, recuerde esta palabra, todavía la veremos hoy.

Eficiencia energética


nRF52832 es un sistema de potencia ultrabaja en un chip, capaz de usar energía en el rango de 1.7V a 3.6V. Todos los periféricos y generadores de reloj se pueden apagar rápidamente automáticamente para reducir el consumo de energía a un nivel mínimo. El núcleo del procesador integrado tiene un sistema de administración de energía adaptativo automatizado. El consumo de energía se ajusta automáticamente dependiendo de las operaciones que realiza actualmente el núcleo del procesador al acceder a dispositivos periféricos de tal manera que solo los componentes del sistema que son necesarios para llevar a cabo la tarea actual funcionen.

Agregue: la capacidad de reasignar pines, soporte para hasta 8 interrupciones y otros, otros, otros. Chip casi perfecto :)

Comienza la transformación


Pero volvamos a nuestra tienda. Resultó que es ideal para bricolaje, no es peor que los icónicos módulos Sonoff de ITEAD. El conector de programación se representa amablemente y se designa como XP1:

imagen

El orden de los pines, por supuesto, no está firmado, pero esto no importa, porque tenemos un esquema . Hay una pequeña inexactitud, el orden correcto de los pines es el siguiente (de izquierda a derecha):

  • vcc
  • swdio
  • swdclk
  • gnd

La interfaz de depuración es SWD. Entonces, vamos:

  • En el IDE de Arduino, vaya a Preferencias y agregue la url sandeepmistry.imtqy.com/arduino-nRF5/package_nRF5_boards_index.json en el campo "URL de administrador de placa adicional"

  • Instalar soporte nRF5 a través de Board Manager

  • Instale la biblioteca periférica BLE a través de Sketch | Bibliotecas | Administrar bibliotecas:



    O mediante la descarga y la adición a través de Agregar biblioteca .zip

  • Seleccionamos la placa Genérica nRF51 y la opción 16kB RAM, 256kB flash (xxaa)

  • Seleccione Softdevice: "S110"

  • Hacemos clic en el elemento de menú nRf5 Flash SoftDevice (es suficiente para hacerlo una vez, en el futuro puede cargar diferentes bocetos sin actualizar SoftDevice). Como recordará, SoftDevice es una pila BLE cerrada del propio Nordic, que proporciona una API de alto nivel para trabajar con Bluetooth
  • Seleccione Reloj de baja frecuencia: "Oscilador RC"

  • Llenar el boceto

    Bosquejo
    #include <SPI.h>
    #include <BLEPeripheral.h>

    // pin LED
    #define LED_PIN 3
    #define ON_PIN 2
    #define AUTH_PIN 1

    BLEPeripheral blePeripheral = BLEPeripheral ();

    BLEService ledService = BLEService ("19b10000e8f2537e4f6cd104768a1214");
    BLECharCharacteristic switchCharacteristic = BLECharCharacteristic ("19b10001e8f2537e4f6cd104768a1214", BLERead | BLEWrite);

    configuración nula () {
    // establece el pin LED en modo de salida
    pinMode (LED_PIN, SALIDA);
    // pinMode (ON_PIN, OUTPUT);
    // pinMode (AUTH_PIN, OUTPUT);
    // pinMode (0, INPUT_PULLUP);

    blePeripheral.setLocalName ("LED");
    blePeripheral.setAdvertisedServiceUuid (ledService.uuid ());

    blePeripheral.addAttribute (ledService);
    blePeripheral.addAttribute (switchCharacteristic);

    blePeripheral.begin ();
    }

    bucle vacío () {
    BLECentral central = blePeripheral.central ();

    si (central) {
    while (central.connected ()) {
    if (switchCharacteristic.written ()) {
    // central escribió un nuevo valor a la característica, actualiza el LED
    if (switchCharacteristic.value ()) {
    // Serial.println (F ("LED encendido"));
    digitalWrite (LED_PIN, ALTO);
    // digitalWrite (ON_PIN, HIGH);
    // digitalWrite (AUTH_PIN, HIGH);
    }
    más {
    //Serial.println (F (targetLED apagado »));
    digitalWrite (LED_PIN, BAJO);
    // digitalWrite (ON_PIN, LOW);
    // digitalWrite (AUTH_PIN, LOW);
    }
    }
    }

    }
    }


    Usar cualquier programador con soporte SWD, por ejemplo, SEGGER J-Link. Utilicé J-Link, integrado en la placa de depuración del kit de desarrollo nrf52, le permite actualizar no solo el kit de desarrollo en sí, sino también placas externas.


En esta programación, la salida en sí puede considerarse completada y ya funciona. ¿Cómo verificarlo?

  • descargue el programa BLEScanner

    imagen

    Enlace para iOS:

    Enlace para Android
  • En la lista de dispositivos encontramos Arduino y hacemos clic en Conectar

  • Luego, haga clic en el campo Servicio personalizado

  • Y luego en el campo Escribir valor. Ahora, si escribe 01, el relé se encenderá, 00 se apagará.


Parte dos Agregar soporte de Homekit


Desafortunadamente, no hay una forma disponible públicamente de fijar el soporte de Homekit a un dispositivo BLE directamente. Esto requiere la certificación de Apple bajo el programa Mfi, por lo que el soporte solo es posible mediante la instalación en forma de un servidor Homekit, el más famoso de los cuales es Homebridge.

Instalar homebridge en sí

Mi homebridge en Raspberry pi 2 funciona con éxito para mí, pero para los fines de esta publicación, puse otra en Raspberry Pi Zero W (no voy a entrar en detalles, si está interesado, estoy listo para responder preguntas en los comentarios)

sudo apt-get install npm sudo npm install -g --unsafe-perm homebridge node-gyp 

Instale el complemento BLE

1) Ponemos la biblioteca NOBLE javascript de Sandip Mystry, que ya conocemos, y señaló aquí:

 sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev sudo npm install -g noble 

2) Ponemos el complemento en sí

 sudo npm install -g homebridge-bluetooth 

Configurando Homebridge

Edite config.json en la carpeta .homebridge. Si tiene una Raspberry Pi 2, entonces está en el directorio de inicio / home / pi

 nano /home/pi/.homebridge/config.json 

Y reemplazar su contenido con

aqui esta
{
"Puente": {
"Nombre": "igrushkin",
"Nombre de usuario": "CC: 22: 3D: E3: CE: 30",
"Puerto": 51826,
"Pin": "314-15-926"
},
"Descripción": "Ejemplo de bombilla Bluetooth Homebridge-Raspberry Pi",
"Plataformas": [
{
"Plataforma": "Bluetooth",
"Accesorios": [
{
"Nombre": "Arduino",
"Dirección": "ff: 86: 91: c7: 50: 66",
"Servicios": [
{
"Nombre": "LED",
"Tipo": "Bombilla",
"UUID": "19b10000e8f2537e4f6cd104768a1214",
"Características": [
{
"Tipo": "Activado",
"UUID": "19b10001e8f2537e4f6cd104768a1214"
}
]
}
]
}
]
}
]
}

Comenzamos homebridge en modo de depuración (-D clave, letra CAPITAL):

 sudo homebridge -D 

sigue de cerca los mensajes. Encontramos la línea "LED - Ignorado" y escribimos la dirección BLE de nuestra salida (análoga a la dirección MAC).

Alternativa: ejecute hcitool (utilidad para trabajar con dispositivos BLE)

 sudo hcitool lescan 

y encuentre la dirección en la lista de dispositivos.

Salga presionando Ctrl-C. Cambie la dirección en config.json a la correcta:

 nano /home/pi/.homebridge/config.json 

Inicie homebridge nuevamente. Esta vez todo debería estar bien, y Homebridge reconocerá felizmente nuestra salida.



Conclusión


Creo que no tiene sentido escribir cómo agregar un nuevo dispositivo a Homekit, se ha escrito mucho sobre esto, incluida la información en el sitio de Apple. Solo puedo decir que para esto es más conveniente usar el programa Elgato Eve , en lugar de la aplicación Home nativa.

imagen

Materiales utilizados


  1. Toma inteligente Redmond SkyPlug RSP-100S Análisis del diseño y diagrama del circuito eléctrico. Identificación de deficiencias.
  2. Arduino Core para placas basadas en Nordic Semiconductor nRF5
  3. complemento homebridge-bluetooth
  4. noble A Node.js BLE (Bluetooth Low Energy) módulo central.
  5. Solución inteligente NRF52832 Bluetooth

Source: https://habr.com/ru/post/es407683/


All Articles