Wilde Tiere zähmen: Unterstützung für Homekits für den Redmond SkyPlug RSP-100S Smart Socket

Published on October 30, 2017

Wilde Tiere zähmen: Unterstützung für Homekits für den Redmond SkyPlug RSP-100S Smart Socket

  • Tutorial


Vorgeschichte


Zum ersten Mal erfuhr ich von dieser Steckdose aus dem Artikel Redmond SkyPlug RSP-100S Smart Socket Analyse des Designs und des elektrischen Schaltplans. Fehler identifizieren . Ich erinnere mich, dass ich mich nach dem Lesen zunächst für das Schema eines transformatorlosen Netzteils und für die kompakte Bauweise der Elemente im Sockelgehäuse interessierte, obwohl sich im Inneren ein vollwertiges Relais und nicht etwa ein Triac befindet.

Über Versuche, das Bluetooth-Modul neu zu programmieren, wurde nicht gesprochen, da die Programmierung von BLE-Geräten in der Vergangenheit eine sehr schwierige Aufgabe war. Hier ein Beispiel: Die Entwicklung von IoT-Geräten mit Bluetooth LE ist eindeutig kein Heimwerker-Level.

Im letzten Jahr hat sich die Situation jedoch grundlegend geändert ...

Alles begann damit, dass der indische Programmierer Sandeep Mistry (im Bild) ...

Bild

... portierte Wiring, auch als Arduino-Framework bekannt, auch einfach "arduino" auf die Nordic Semiconductor-Chips nRF51822 und nRF52832 und schrieb die BLEPeripheral- Bibliothek , um sie auf den oben genannten Peripheriegeräten mit Unterstützung für BLE4.x zu erstellen.

Dann Arduino AG (ex -arduino.org) schloss sich der Zusammenarbeit mit Nordic an und veröffentlichte das Arduino Primo- Board ...

Bild

... basierend auf dem nrf52832 Chip. Ich frage mich, wie schnell Sie den nRF52832 selbst auf der Platine finden (Hinweis: der große links ist nicht er) Zur Kompatibilität mit Arduino verwendet das Board den von Sandip erstellten Code , und er selbst wurde in den Staat aufgenommen. Die Geschichte wiederholt sich mit espressif, esp8266 und Ivan Grokhotkov (igrr), wo alles auf die gleiche Weise mit "Volks" -Entwicklungen begann.

Adafruit und Sparkfun wurden auch bald durch die Veröffentlichung von Boards auf dem nRF52 gekennzeichnet.



Im Allgemeinen scheint es, dass die nRF5-Familie (nRF51822 und nRF52832) jetzt der "modischste" Chip unter allen Majors ist, die den elektronischen DIY-Markt definieren. Mit "Major" meine ich Arduino, Adafruit und Sparkfun. Asiaten, die sich mit ITEAD oder SEEED auseinandersetzen, hinken immer noch hinterher, aber ich denke, das dauert nicht lange. Zumindest werben Chinesen ohne Namen mit Ali die Module auf diesen Chips aus, und wenn die Module auf nRF51822 ziemlich umständlich waren, dann sind die Module auf nRF52832 ausgezeichnet.

Was für ein Chip ist so bemerkenswert und warum hat er anscheinend endlich eine große Chance, den berühmten atmega328 im Heimwerkerbau zu ersetzen?

nRF5 SoC


Bild

Allgemeine Beschreibung


Der nRF52832 ist ein neues, leistungsstarkes, stromsparendes und flexibles „System auf einem Chip“ mit Unterstützung für Bluetooth Smart, ANT-Protokolle und proprietäre benutzerdefinierte Stacks im 2,4-GHz-Frequenzband.

Der nRF52832 basiert auf einem 32-Bit-ARM Cortex-M4F-Prozessorkern mit 512 kB Flash und 64 kB RAM-Speicher. Gemäß dem Arbeitsprotokoll ist nRF52832 vollständig kompatibel mit früheren Serien nRF51, nRF24L und nRF24AP, die von Nordic Semiconductor hergestellt wurden.

Dies ist auch sehr wichtig, zum Beispiel, ich habe die gesamte Heimautomation auf dem nRF24L01 durchgeführt und diese Abwärtskompatibilität macht es einfach, die Kombination atmega328 + nRf24 durch einen nRF5 zu ersetzen

Verbesserte Prozessorleistung


Der nRF52832 enthält den leistungsstarken ARM Cortex-M4F-Prozessorkern, der die Anforderungen vieler rechenintensiver Anwendungen erfüllt und gleichzeitig kompakte Anwendungen bietet, die auf einem einzigen Chip ausgeführt werden können. Der Kern ist in der Lage, die Probleme der digitalen Signalverarbeitung zu lösen, Gleitkommaoperationen durchzuführen, Multiplex- und Akkumulationsoperationen innerhalb eines Arbeitszyklus durchzuführen, Hardware unterstützt die energieeffizient implementierte Divisionsoperation in reellen und komplexen Formen.

Multiprotokoll-Funkteil


Das 2,4-GHz-Funkgerät ist mit Bluetooth Smart, ANT-Protokollstacks und proprietären Stacks kompatibel. Das Radio verfügt über ein eingebautes hochauflösendes RSSI-Register mit der Fähigkeit, im EasyDMA-Modus automatisch auf den direkten Speicherzugriff zuzugreifen, wenn Daten über Funk empfangen und gesendet werden. Nordic stellt auf seiner offiziellen Website Bluetooth Smart-, ANT- und Gazel-Protokollstacks (2,4 GHz) zum Herunterladen bereit.

Der Bluetooth-Stack in der nordischen Version heißt SoftDevice, erinnern Sie sich an dieses Wort, es wird uns heute begegnen.

Energieeffizienz


Der nRF52832 ist ein On-Chip-System mit sehr geringem Stromverbrauch, das eine Spannung im Bereich von 1,7 V bis 3,6 V verwenden kann. Alle Peripheriegeräte und Taktgeneratoren können schnell automatisch ausgeschaltet werden, um den Stromverbrauch auf ein Minimum zu reduzieren. Der integrierte Prozessorkern verfügt über ein automatisiertes adaptives Power-Management-System. Der Stromverbrauch wird beim Zugriff auf Peripheriegeräte automatisch in Abhängigkeit von den aktuell vom Prozessorkern ausgeführten Vorgängen angepasst, sodass nur die Komponenten des Systems funktionieren, die für die Ausführung der aktuellen Aufgabe erforderlich sind.

Hinzufügen: Die Möglichkeit, Pins neu zuzuweisen, Unterstützung für bis zu 8 Interrupts usw. Fast perfekter Chip :)

Die Transformation beginnt


Aber zurück zu unserer Steckdose. Wie sich herausstellte, ist es ideal für Heimwerker geeignet, nicht schlechter als die kultigen Sonoff-Module von ITEAD. Der Programmieranschluss ist freundlich gerendert und mit XP1 beschriftet:

Bild

Die Pin-Reihenfolge ist natürlich nicht signiert, aber es spielt keine Rolle, da wir eine Schaltung haben . Es hat eine kleine Ungenauigkeit, die richtige Reihenfolge der Stifte ist (von links nach rechts):

  • vcc
  • swdio
  • swdclk
  • gnd

Debug-Schnittstelle - SWD. Also, lass uns gehen:

  • Gehen Sie in der Arduino IDE zu Preferences und fügen Sie die URL sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json im Feld "Additional Board Manager URL" hinzu

  • Installation der nRF5-Unterstützung über Board Manager

  • Installieren Sie die BLE-Peripheriebibliothek entweder über Sketch | Libraries | Manage Libraries:



    entweder durch Herunterladen und Hinzufügen über Add .zip library

  • Wählen Sie eine generische nRF51-Karte und eine 16-KB-RAM-Version, 256-KB-Flash (xxaa)

  • Softdevice auswählen: "S110"

  • Klicken Sie auf den Menüpunkt nRf5 Flash SoftDevice (dies ist genug, um es einmal zu tun, dann können Sie verschiedene Skizzen ausfüllen, ohne das SoftDevice erneut zu flashen)
  • Niederfrequenztakt auswählen: „RC Oscillator“

  • Füllen Sie die Skizze

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

    // LED pin
    #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() {
    // set LED pin to output mode
    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();
    }

    void loop() {
    BLECentral central = blePeripheral.central();

    if (central) {
    while (central.connected()) {
    if (switchCharacteristic.written()) {
    // central wrote new value to characteristic, update LED
    if (switchCharacteristic.value()) {
    // Serial.println(F(«LED on»));
    digitalWrite(LED_PIN, HIGH);
    //digitalWrite(ON_PIN, HIGH);
    //digitalWrite(AUTH_PIN, HIGH);
    }
    else {
    //Serial.println(F(«LED off»));
    digitalWrite(LED_PIN, LOW);
    //digitalWrite(ON_PIN, LOW);
    //digitalWrite(AUTH_PIN, LOW);
    }
    }
    }

    }
    }


    Verwendung eines beliebigen SWD-Programmiergeräts wie SEGGER J-Link. Ich habe den im nrf52 Development Kit Debug Board eingebetteten J-Link verwendet, mit dem Sie nicht nur das Development Kit selbst, sondern auch externe Boards flashen können.


An dieser Stelle kann die Programmierung der Buchse selbst als abgeschlossen betrachtet werden und sie funktioniert BEREITS. Wie überprüfe ich es?

  • Laden Sie das Programm BLEScanner

    Bild

    Link für iOS herunter :

    Link für Android
  • In der Liste der Geräte finden wir Arduino und klicken auf Verbinden.

  • Klicken Sie anschließend auf das Feld Custom Service.

  • Und dann im Feld Write Value. Wenn Sie jetzt 01 schreiben, schaltet sich das Relais ein, 00 - schaltet sich aus.


Teil 2 Unterstützung für Homekit hinzufügen


Leider gibt es noch keine allgemein verfügbare Möglichkeit, den Homekit-Support direkt an ein BLE-Gerät zu binden. Hierfür ist die Zertifizierung von Apple im Rahmen des Mfi-Programms erforderlich, sodass die Unterstützung nur über ein Pad in Form eines Homekit-Servers möglich ist. Der bekannteste davon ist Homebridge.

Wir installieren den Homebridge selbst.

Ich habe einen erfolgreichen Homebridge für Raspberry pi 2, aber für die Zwecke dieser Veröffentlichung habe ich einen weiteren auf den Raspberry Pi Zero W gelegt.

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

Installieren Sie das BLE-Plugin

1) Wir haben die NOBLE- Javascript-Bibliothek aus der uns bereits bekannten Sandip Mistry, und er notiert hier:

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

2) Setzen Sie das eigentliche Plugin

sudo npm install -g homebridge-bluetooth

Homebridge konfigurieren

Bearbeiten Sie config.json im Ordner .homebridge. Wenn Sie einen Raspberry Pi 2 haben, befindet er sich im Home-Verzeichnis / home / pi

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

Und wir ersetzen seinen Inhalt durch

das hier
{
«bridge»: {
«name»: «igrushkin»,
«username»: «CC:22:3D:E3:CE:30»,
«port»: 51826,
«pin»: «314-15-926»
},
«description»: «Raspberry Pi Homebridge-Bluetooth Lightbulb Example»,
«platforms»: [
{
«platform»: «Bluetooth»,
«accessories»: [
{
«name»: «Arduino»,
«address»: «ff:86:91:c7:50:66»,
«services»: [
{
«name»: «LED»,
«type»: «Lightbulb»,
«UUID»: «19b10000e8f2537e4f6cd104768a1214»,
«characteristics»: [
{
«type»: «On»,
«UUID»: «19b10001e8f2537e4f6cd104768a1214»
}
]
}
]
}
]
}
]
}

Führen Sie homebridge im Debug-Modus aus (-D key, CAPITAL):

sudo homebridge -D

Verfolgen Sie die Nachrichten genau. Wir finden die Zeile „LED - Ignoriert“ und schreiben die BLE-Adresse unserer Steckdose aus (analog zur MAC-Adresse).

Alternative Option: wir starten hcitool (das Dienstprogramm für die Arbeit mit BLE-Geräten)

sudo hcitool lescan

und finden Sie die Adresse in der Liste der Geräte.

Beenden Sie mit Strg-C. Ändern Sie die Adresse in config.json in die richtige:

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

Führen Sie Homebridge erneut aus. Dieses Mal sollte alles in Ordnung sein und Homebridge wird unsere Verkaufsstelle glücklich erkennen.



Fazit


Ich denke, es macht keinen Sinn zu schreiben, wie man ein neues Gerät zu Homekit hinzufügt. Es wurde viel darüber geschrieben, einschließlich Informationen auf der Apple-Website. Ich kann nur sagen, dass es dafür bequemer ist, das Programm Elgato Eve zu verwenden , und nicht die native Home-Anwendung.

Bild

Verwendete Materialien:


  1. Smart Redmond SkyPlug RSP-100S-Buchse Analyse des Designs und des elektrischen Schaltplans. Mängel erkennen
  2. Arduino Core für Nordic Semiconductor nRF5-basierte Boards
  3. Homebridge-Bluetooth-Plugin
  4. edles A Node.js BLE (Bluetooth Low Energy) Zentralmodul.
  5. NRF52832 Bluetooth-Smart-Lösung