
Contexte
Pour la première fois, j'ai
découvert cette prise de courant dans l'article
Prise intelligente Redmond SkyPlug RSP-100S Analyse du schéma de conception et du circuit électrique. Identification des lacunes . Je me souviens qu'après l'avoir lu, je me suis d'abord intéressé au circuit d'une source d'alimentation sans transformateur et à la compacité des éléments dans le boîtier de prise malgré le fait qu'il y ait un relais à part entière à l'intérieur, et non, disons, un triac.
Il n'a été question d'aucune tentative de reprogrammation du module Bluetooth, car la programmation des appareils BLE a toujours été une tâche très difficile. Voici un exemple:
développer des appareils IoT à l'aide de Bluetooth LE n'est clairement pas un niveau de bricolage.
Cependant, au cours de la dernière année, la situation a radicalement changé ...
Tout a commencé avec le fait que le programmeur indien Sandeep Mistry (photo) ...
... Wired
porté , alias le framework Arduino, c'est juste "arduino" sur les puces Nordic Semiconductor nRF51822 et nRF52832, en écrivant la bibliothèque
BLEPeripheral dans le
tas pour créer des périphériques avec le support BLE4.x sur les puces ci-dessus
Puis Arduino AG (ex-arduino.org) est entré en collaboration avec Nordic et a sorti l'
Arduino Primo ...
... basé sur la puce nrf52832. Je me demande à quelle vitesse vous trouvez le nRF52832 réel sur la carte (indice: le gros à gauche n'est-ce pas). Pour la compatibilité avec Arduino, la carte utilise le
code créé par Sandeep, et lui-même a été accepté dans l'état. L'histoire se répète avec espressif, esp8266 et Ivan Grokhotkov (igrr), où tout a commencé avec des développements "folk".
Adafruit et Sparkfun ont également rapidement noté la sortie de cartes sur nRF52.

D'une manière générale, il semble que la famille nRF5 (nRF51822 et nRF52832) soit désormais la puce la plus «à la mode» de toutes les majors qui définissent le marché du bricolage électronique. Par «majors», j'entends Arduino, Adafruit et Sparkfun. Les Asiatiques en la personne d'ITEAD ou SEEED sont toujours en retard, mais je pense que ce n'est pas pour longtemps. Au moins noname, les Chinois avec Ali tamponnent les modules sur ces puces avec force et main, et si les modules sur nRF51822 étaient assez maladroits, alors les modules sur nRF52832 sont excellents.
Quel type de puce est si remarquable et pourquoi, apparemment, a-t-il une grande chance de remplacer enfin le célèbre atmega328 dans le bricolage?
nRF5 SoC
Description générale
Le nRF52832 est un nouveau système «puce sur puce» puissant, basse consommation et flexible avec prise en charge des protocoles Bluetooth Smart, ANT et des piles propriétaires développées par l'utilisateur dans la gamme de fréquences 2,4 GHz.
Le nRF52832 est construit sur le cœur du processeur ARM Cortex-M4F 32 bits avec 512 Ko de mémoire Flash et 64 Ko de RAM. Selon le protocole d'exploitation, le nRF52832 est entièrement compatible avec les séries précédentes nRF51, nRF24L et nRF24AP fabriquées par Nordic Semiconductor.
C'est également très important, par exemple, j'ai fait toute ma domotique sur nRF24L01 et cette compatibilité descendante facilite le remplacement de la combinaison de atmega328 + nRf24 par un nRF5Augmentation des performances du processeur
Le nRF52832 contient un puissant processeur ARM Cortex-M4F qui répond aux exigences de nombreuses performances informatiques exigeantes, mais à des applications compactes pouvant fonctionner sur une seule puce. Le noyau est capable de résoudre les tâches de traitement numérique du signal, d'effectuer des opérations en virgule flottante, d'effectuer des opérations de multiplexage et d'accumulation au cours d'un cycle de travail, et le matériel prend en charge les opérations de division mises en œuvre de manière écoénergétique sous des formes matérielles et complexes.
Partie radio multiprotocole
La radio 2,4 GHz est compatible avec les piles Bluetooth Smart, le protocole ANT et toutes les piles propriétaires. La radio a un registre RSSI haute résolution intégré avec la possibilité de fonctionner automatiquement en mode EasyDMA pour un accès direct à la mémoire au moment de la réception et de la transmission de données par voie hertzienne. Nordic fournit les piles de protocoles Bluetooth Smart, ANT et Gazel (2,4 GHz) en tant que contenu téléchargeable sur son site officiel.
La pile Bluetooth dans la version nordique s'appelle SoftDevice, rappelez-vous ce mot, nous le verrons encore aujourd'hui.Efficacité énergétique
Le nRF52832 est un système à ultra-basse consommation sur puce, capable d'utiliser une puissance comprise entre 1,7 V et 3,6 V. Tous les périphériques et générateurs d'horloge peuvent être rapidement éteints automatiquement afin de réduire la consommation d'énergie à un niveau minimum. Le cœur de processeur intégré possède un système de gestion adaptative de l'alimentation automatisé. La consommation d'énergie est automatiquement ajustée en fonction des opérations actuellement effectuées par le cœur du processeur lors de l'accès aux périphériques de telle manière que seuls les composants du système qui sont nécessaires pour effectuer la tâche en cours fonctionnent.
Ajouter: la possibilité de réaffecter des broches, la prise en charge d'un maximum de 8 interruptions et autres, autres, autres. Puce presque parfaite :)
La transformation commence
Mais revenons à notre point de vente. En fin de compte, il est idéal pour le bricolage, pas pire que les modules Sonoff emblématiques d'ITEAD. Le connecteur de programmation est aimablement rendu et désigné comme XP1:

L'ordre des broches, bien sûr, n'est pas signé, mais cela n'a pas d'importance, car nous avons un
schéma . Il y a une petite inexactitude, l'ordre correct des broches est le suivant (de gauche à droite):
L'interface de débogage est SWD. Alors allons-y:
- Dans l'IDE Arduino, allez dans Préférences et ajoutez l'url sandeepmistry.imtqy.com/arduino-nRF5/package_nRF5_boards_index.json dans le champ "Additional Board Manager URL"

- Installer le support nRF5 via Board Manager

- Installez la bibliothèque de périphériques BLE via Sketch | Libraries | Manage Libraries:

Ou en téléchargeant et en ajoutant via la bibliothèque Add .zip

- Nous sélectionnons la carte Generic nRF51 et l'option 16kB RAM, 256kB flash (xxaa)

- Sélectionnez le périphérique logiciel: «S110»

- Nous cliquons sur l'élément de menu nRf5 Flash SoftDevice (il suffit de le faire une fois, à l'avenir, vous pouvez télécharger différents croquis sans reflasher SoftDevice) Comme vous vous en souvenez, SoftDevice est une pile BLE fermée de Nordic lui-même, qui fournit une api de haut niveau pour travailler avec Bluetooth
- Sélectionnez l'horloge basse fréquence: «Oscillateur RC»

- Remplissez l'esquisse
Esquisse#include <SPI.h>
#include <BLEPeripheral.h>
// broche 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);
void setup () {
// mettre la broche LED en mode de sortie
pinMode (LED_PIN, OUTPUT);
// 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 ();
}
boucle vide () {
BLECentral central = blePeripheral.central ();
if (central) {
while (central.connected ()) {
if (switchCharacteristic.written ()) {
// central a écrit une nouvelle valeur pour la caractéristique, mettre à jour la LED
if (switchCharacteristic.value ()) {
// Serial.println (F ("LED allumée"));
digitalWrite (LED_PIN, HIGH);
// digitalWrite (ON_PIN, HIGH);
// digitalWrite (AUTH_PIN, HIGH);
}
sinon {
//Serial.println (F (targetLED off »));
digitalWrite (LED_PIN, LOW);
// digitalWrite (ON_PIN, LOW);
// digitalWrite (AUTH_PIN, LOW);
}
}
}
}
}
Utiliser n'importe quel programmeur prenant en charge SWD, par exemple SEGGER J-Link. J'ai utilisé J-Link, intégré à la carte de débogage du kit de développement nrf52, il vous permet de flasher non seulement le kit de développement lui-même, mais également des cartes externes.

Sur cette programmation du point de vente lui-même peut être considéré comme terminé et cela fonctionne déjà. Comment le vérifier?
- téléchargez le programme BLEScanner

→ Lien pour iOS:
→ Lien pour Android - Dans la liste des appareils, nous trouvons Arduino et cliquez sur Connecter

- Ensuite, cliquez sur le champ Service personnalisé

- Et puis sur le champ Write Value. Maintenant, si vous écrivez 01, le relais s'allumera, 00 s'éteindra.

Deuxième partie Ajout de la prise en charge de Homekit
Malheureusement, il n'existe aucun moyen public de fixer directement la prise en charge de Homekit à un appareil BLE. Cela nécessite la certification Apple dans le cadre du programme Mfi, donc le support n'est possible que par le biais de la pose sous la forme d'un serveur Homekit, dont le plus célèbre est Homebridge.
Installer Homebridge lui-mêmeMon Homebridge sur Raspberry Pi 2 fonctionne avec succès pour moi, mais pour les besoins de cette publication, j'en ai mis un autre sur le Raspberry Pi Zero W (je n'entrerai pas dans les détails, si cela m'intéresse, je suis prêt à répondre aux questions dans les commentaires)
sudo apt-get install npm sudo npm install -g --unsafe-perm homebridge node-gyp
Installer le plugin BLE1) Nous avons mis la bibliothèque javascript
NOBLE de Sandip Mystry, déjà connue de nous, et il a noté ici:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev sudo npm install -g noble
2) Nous mettons le plugin lui-même
sudo npm install -g homebridge-bluetooth
Configuration de HomebridgeModifiez config.json dans le dossier .homebridge. Si vous avez un Raspberry Pi 2, il se trouve dans le répertoire personnel / home / pi
nano /home/pi/.homebridge/config.json
Et remplacez son contenu par
le voici{
"Pont": {
"Nom": "igrushkin",
"Nom d'utilisateur": "CC: 22: 3D: E3: CE: 30",
"Port": 51826,
"Pin": "314-15-926"
},
"Description": "Exemple d'ampoule Raspberry Pi Homebridge-Bluetooth",
"Plateformes": [
{
"Plateforme": "Bluetooth",
"Accessoires": [
{
"Nom": "Arduino",
"Adresse": "ff: 86: 91: c7: 50: 66",
"Services": [
{
"Nom": "LED",
"Type": "Ampoule",
"UUID": "19b10000e8f2537e4f6cd104768a1214",
"Caractéristiques": [
{
"Type": "On",
"UUID": "19b10001e8f2537e4f6cd104768a1214"
}
]
}
]
}
]
}
]
}
Nous démarrons homebridge en mode débogage (touche -D, lettre CAPITAL):
sudo homebridge -D
suivez attentivement les messages. Nous trouvons la ligne «LED - Ignoré» et écrivons l'adresse BLE de notre prise (analogue à l'adresse MAC).
Alternative: exécutez hcitool (utilitaire pour travailler avec les périphériques BLE)
sudo hcitool lescan
et recherchez l'adresse dans la liste des appareils.
Quittez en appuyant sur Ctrl-C. Remplacez l'adresse dans config.json par la bonne:
nano /home/pi/.homebridge/config.json
Lancez à nouveau homebridge. Tout devrait bien se passer cette fois, et Homebridge se fera un plaisir de reconnaître notre point de vente.

Conclusion
Je pense qu'il est inutile d'écrire comment ajouter un nouvel appareil à Homekit, beaucoup a été écrit à ce sujet, y compris des informations sur le site d'Apple lui-même. Je peux seulement dire que pour cela, il est plus pratique d'utiliser le programme
Elgato Eve plutôt que l'application native Home.

Matériaux utilisés:
- Prise intelligente Redmond SkyPlug RSP-100S Analyse de la conception et du schéma électrique. Identification des lacunes
- Arduino Core pour cartes basées sur Nordic Semiconductor nRF5
- plugin homebridge-bluetooth
- Module central noble A Node.js BLE (Bluetooth Low Energy).
- Solution intelligente Bluetooth NRF52832