
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) ...
...
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 ...
... 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
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 nRF5Mayor 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:

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):
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

→ 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 BLE1) 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 HomebridgeEdite 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.

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