"Wie der Apfel eines Auges ..." oder wir stellen ein einfaches Sicherheitssystem her, das auf einem Mikrocontroller (Canny oder Arduino) und Raspberry PI basiert

Während der Vorbereitung des Artikels über die Erkennung von Mikrocontrollern mit TensorFlow und OpenCV fielen mir gleichzeitig Craftduino, Canny 3 tiny und Raspberry PI auf. Danach entschied ich, dass es großartig wäre, sie erneut in einem Artikel zu kombinieren. Ich habe lange darüber nachgedacht, worüber ich schreiben soll, und dann schäme ich mich zuzugeben, dass ich ein gesunder Onkel war und noch nie etwas über UART verbunden hatte. "Alles muss im Leben versucht werden", dachte ich. Es ist jedoch langweilig, nur über die Verbindung zu UART zu schreiben. Daher wurden sofort alle Arten von „Spielzeug“ bestellt, darunter das brandneue Arduino und einige Sensoren.

Also werden wir heute ein Sicherheitssystem für meinen Lieblingsstift erstellen. Bist du überrascht, warum ein Stift? Das Geheimnis ist einfach, ich bin in allen Fragen der Elektronik sehr unerfahren. Als ich den Drucksensor bestellte, dachte ich, dass er über den gesamten Bereich funktionieren würde, aber es stellte sich heraus, dass er nur für einen bestimmten Kontaktbereich funktioniert. Seltsamerweise, aber im ganzen Haus gab es nichts Schweres, Stabiles und Passendes, außer diesem Stift. Nun, bis auf meinen Finger, aber ich war nicht bereit, damit zu experimentieren .

In diesem Artikel werde ich meine Erfahrungen mit dem Anschluss eines Drucksensors und eines Doppler-Bewegungssensors an Mikrocontroller teilen. Wir werden die Controller über die kabelgebundene UART-Schnittstelle mit dem GPIO Raspberry PI 3 verbinden. Dann werden wir ein einfaches Programm an Python schreiben, um den Status des Sicherheitssystems anzuzeigen, und am Ende werden wir das Smartphone mit VNC an die „Himbeere“ anschließen, um das Sicherheitssystem in einiger Entfernung vom Computer zu überwachen.

Möchten Sie Indiana Jones arbeitslos machen? Dann sind Sie unter Katze willkommen.



Wie immer werde ich am Anfang erklären, dass ich selbst neu in der Heimwerkerelektronik bin und langsam von Artikel zu Artikel lerne. Nehmen Sie daher nicht wahr, was ich als die ultimative Wahrheit schreiben werde. Sicher kann alles besser gemacht werden.

Wir werden heute über Folgendes sprechen:

Teil I: Einführung
Teil II: Anschließen der Schaltung und des Programms für Canny 3 winzig
Teil III: Anschließen der Schaltung und des Programms für Arduino Uno
Teil IV: Raspberry PI und das Überwachungsprogramm in Python
Teil V: Fazit

Teil I: Einführung


Der aufmerksame Leser kann die Frage stellen: „Warum haben Sie Arduino gekauft, wenn Sie CraftDuino bereits erwähnt haben?“. Alles ist sehr alltäglich. CraftDuino brach erneut. EinmalDrzugrikIch habe es repariert und jetzt ist es "Selbstisolation" und ich wollte eine Person nicht umsonst stören.

Also näherten wir uns reibungslos der Materialbasis. Für diesen Artikel habe ich verwendet:

  1. Druckwiderstand FSR402:


  2. Doppler-Bewegungssensor RCWL-0516:


    In dem Geschäft, in dem ich beide Sensoren in der Beschreibung auf der Website gekauft habe, wurde geschrieben, dass sie für Arduino waren, aber in der Praxis stellte sich heraus, dass keine speziellen Bibliotheken benötigt wurden und alles ohne Probleme auf Canny begann.
  3. Mikrocontroller Arduino Uno:


  4. Canny 3 Tiny Microcontroller - Version mit Klemmenblock und Kabelbaum:


  5. Raspberry PI 3 Modell B Single Board Computer:

  6. Sonstiges: Breboard-Steckbretter, Krokodildrähte und -clips, Himbeer-Netzteil

Kommen wir zur Sache.

Teil II: Anschließen der Schaltung und des Programms für Canny 3 tiny


Es gibt viele Beispiele im Internet, wie man Arduino über UART verbindet. Es gibt viel weniger Beispiele für Canny. Beginnen wir also damit.
Um die Länge des Artikels nicht zu erhöhen und mich nicht zu wiederholen, möchte ich Sie daran erinnern, dass ich in diesem Artikel die grundlegendsten Probleme bei der Arbeit mit Canny und der CannyLab-Entwicklungsumgebung sowie ein Beispiel für den Anschluss von Sensoren an einen Analog-Digital-Wandler (ADC) und die Übertragung einer Nachricht über Virtual COM betrachtet habe Port habe ich in diesem Artikel gemacht .

Für diejenigen, die dies nicht lesen, aber sofort versuchen, die Sensoren an den ADC anzuschließen, gibt es einen wichtigen Punkt. Wiederholen Sie meinen Fehler nicht, damit die Ausgänge der Controller Nr. 5 und Nr. 6 im ADC-Modus funktionieren, müssen Sie die Jumper wie in der Abbildung unten einstellen. Es ist nicht schwer, auch ich habe es getan.


Ein weiterer wichtiger Punkt an den Controller-Ausgängen ist die Versorgungsspannung. Wenn Sie also eine externe Stromquelle anstelle von USB anschließen, stellen Sie sicher, dass die Ausgangsspannung die zulässige Spannung für Sensoren und UART nicht überschreitet.

Für diesen Artikel hätte uns ein Jumper gereicht, aber wenn wir einen Lötkolben hätten, warum sollten wir dann Zeit mit Kleinigkeiten verschwenden?

Achten Sie auf den Klemmenblock. Der native Kabelbaum ist bei dieser Version des Controllers Standard. Er ist robust und wahrscheinlich praktisch, wenn er im Auto verwendet wird, jedoch nicht für Experimente am Tisch. Ich habe mir das Know-how ausgedacht, das native Geschirr durch Gurte ersetzt, die oft mit Computerausrüstung gebündelt sind, oder in Geschäften verkauft, in denen DIY-Elektronik verkauft wird, und es hat sich als sehr praktisch herausgestellt. Sie sitzen nicht schlecht im Block, sind weich und verlängern sich zusätzlich.

Fahren wir mit dem Verbindungsdiagramm fort:


Alles ist ganz einfach und erfordert keine besonderen Fähigkeiten, ich denke, fast jeder kann damit umgehen.

Lassen Sie uns zunächst die Macht des Boards behandeln. Wir werden den "Boden" vom "-" Ausgang des Controllers nehmen, aber mit dem Plus ist nicht alles so klar. Auf den ersten Blick erscheint es logisch, eine Verbindung zum „+“ - Terminal herzustellen, in der Praxis handelt es sich jedoch anscheinend um ein Terminal für + 5V INPUT. Stattdessen konfigurieren wir stattdessen einen der Ausgänge als + 5V-Ausgang, versorgen ihn mit einer logischen Einheit und ziehen ihn auf das „Plus“. Ich habe mich für Ausgang 3 entschieden.

Der Drucksensor ist sehr einfach angeschlossen. In der Tat ist dies ein Widerstand. Wir versorgen eines seiner „Beine“ mit Strom und wickeln von den zweiten „Beinen“ den Draht zum an den ADC angeschlossenen Controller-Eingang (entweder Nr. 5 oder Nr. 6). Ich habe Nr. 6 gewählt.

Ich habe den Drucksensor übrigens zweimal verloren. Mein zweiter Fehler war das Anschließen des Sensors. Es passt nicht in das Steckbrett, es stellt sich heraus, dass es an einen Schraubklemmenblock oder ähnliches angeschlossen werden muss. Ich musste mit den "Krokodilen" raus.

Der Bewegungssensor ist nicht viel komplizierter angeschlossen. Wir stecken +5 V von der Platine in die Vin-Buchse, verbinden ihn mit der GND-Buchse auf dem Steckbrett und verbinden die OUT-Buchse mit einem beliebigen Digitaleingang des Controllers. Ich habe ihn an Ausgang Nr. 5 angeschlossen (wir wir werden es nicht in den ADC-Modus schalten).

Es bleibt, den Controller über UART mit der "Raspberry" zu verbinden. Dazu muss der Controller-Ausgang Nr. 2, der in unserem UART-Modus zum TX-Ausgang wird, mit dem Raspberry GPIO RX-Eingang verbunden werden, und die Erdung auf der Platine und der Raspberry PI GPIO GND müssen ebenfalls angeschlossen werden.

Viele Leute raten dazu, den Spannungspegel auf 3,3 V zu koordinieren, und ich habe sogar versucht, Canny über einen Spannungsteiler anzuschließen, aber es funktioniert schlechter als ohne (oder funktioniert überhaupt nicht), also habe ich in diesem Fall direkt an den Raspberry UART angeschlossen. Es scheint, dass nichts ausgebrannt ist. Alles arbeitet.


Vielleicht hatten Sie den Gedanken: "Warum ist es mit Kabeln zum UART verbunden, wenn möglich über Bluetooth?" In der Tat gibt es viele Beispiele für die Verbindung von Arduino über UART mit dem HC-06-Modul im Netzwerk. Wenn Sie dem Forum glauben , stellt Canny auch problemlos eine Verbindung her. Aber ich habe es nicht selbst versucht. Ich wollte eine Verbindung über Kabel herstellen und habe beschlossen, die Bluetooth-Verbindung auf das nächste Mal zu verschieben.

So sieht die Schaltung aus:


Fahren wir mit dem Programm für die Steuerung fort (Diagramm):


Im Block "Parametereinstellung" schalten wir den ADC-Modus für Kanal (Eingang) Nr. 6 ein, übertragen Kanal Nr. 3 in den diskreten Ausgangsmodus und speisen eine logische Einheit ein (in unserem Fall + 5V). In diesem Artikel wurde fast alles analysiert .

Nur UART-Einstellungen sind uns unbekannt. Zum Glück ist alles einfach. Canny 3 tiny hat nur 1 UART-Schnittstelle (zum Beispiel hat Canny 7 zwei davon). Wenn der UART-Modus aktiviert ist, wird Ausgang Nr. 1 zu RX, Ausgang Nr. 2 TX. Wir werden die übliche Baudrate von 9600 wählen, aber der Datenübertragungsmodus ist begrenzt. Die verfügbare Anzahl von Datenbits beträgt nur 8 Bytes und 1 Stoppbit (für "ältere" Controller-Modelle gibt es mehr Auswahlmöglichkeiten). Um UART zu aktivieren, muss das UART1-Konfigurationsregister in das entsprechende Register eingetragen werden Schreiben Sie eine vordefinierte Konstante:


In unserem Fall war es sogar möglich, eine Konstante zu wählen, die nur den UART-Übertragungsmodus enthielt, da wir nicht vorhaben, etwas zurückzunehmen. Aber ich habe beschlossen, ein allgemeineres Beispiel zu zeigen.

Wenn Sie beim Erstellen des Diagramms den richtigen Controller ausgewählt haben, können Sie in CannyLab nicht die Konstante auswählen, die nicht zu ihm passt. Daher funktioniert die Auswahl eines wissentlich gefährlichen Modus nicht. Die Wahrheit ist immer die Möglichkeit, eine Konstante manuell einzugeben, aber es ist besser, dies nicht zu tun.

Wir werden 10 Zeichen in der Nachricht senden (einschließlich 2 Probleme), also werden wir eine Konstante von 10 in das Nachrichtenregister schreiben.

Ich bin mir nicht sicher, ob 1 TX auf eins angehoben wird, aber nur für den Fall, dass ich dieses Element aktiviert habe, wie ich es verstehe, brauche ich es Nicht mit einem Widerstand festziehen.

Im Block"Periodisches Senden über UART und VCP"
Wir verwenden den PWM-Generator, um 1 Mal in 2 Sekunden zu senden, damit der Controller den Kanal keine Sekunde lang verstopft, indem er ständig eine Nachricht sendet. Wir verwenden den "Trailing Edge Detector". Dies funktioniert nur einmal im Moment des Umschaltens von eins auf null. Wenn die Steuerung zu diesem Zeitpunkt bereit ist, eine Nachricht über UART zu senden, kommen zwei Einheiten an den Eingang des logischen Multiplikationsblocks, ebenfalls "1", und weisen die Steuerung an, eine Nachricht über UART zu senden und auch nur für den Fall, dass ein USB-COM-Anschluss debuggt wird (darüber habe ich in einem früheren Artikel ausführlich geschrieben ).

Im Block "Anzeige"Alles ist ganz einfach. Wenn die Werte des Drucksensors unter einem bestimmten Schwellenwert liegen und der Bewegungssensor ausgelöst hat (er gibt dem Ausgang „1“), schalten wir die grüne LED der Steuerung als Alarmsignal ein.

Es wäre cool, wenn das System wie in einem Film funktionieren würde:



Aber wir beschränken uns nur darauf, die LED einzuschalten.

Hier ist eine visuelle Demonstration:


Es ist noch der letzte Block „Nachrichtenbildung“ übrig .

Wir empfangen Daten vom ADC, die ADC-Auflösung liegt zwischen 0 und 1023. Wir senden Zeichen an UART, was bedeutet, dass die Messwerte vom Drucksensor in eine Zeichenfolge umgewandelt werden müssen. Da die maximale Anzahl 1023 (4 Stellen) beträgt, benötigen wir 4 Bytes. "Number to String Converter" gibt ein paar Zeichen an den Ausgängen aus. Wir haben 2 Zeichenpaare, von denen jedes UART- und VCP-Nachrichten an die Installationsregister sendet. Als nächstes müssen wir ein Trennzeichen schreiben, damit die Messwerte nicht zusammengeführt werden, da CannyLab einige Zeichen verwendet. Dann nehmen wir zwei Leerzeichen als Trennzeichen. In ähnlicher Weise konvertieren wir die Messwerte des Bewegungssensors. Er ergibt entweder 00 oder 01, was bedeutet, dass wir nur ein Zeichenpaar benötigen. Schreiben Sie ganz am Ende der Nachricht die Zeilenumbruch- und Zeilenumbruchzeichen.

Wie ich bereits in dem Artikel über den Fotowiderstand geschrieben habe, verfügt Canny nicht über einen eigenen COM-Port-Monitor, aber Sie können jeden von Drittanbietern verwenden. Da wir die Arduino-IDE etwas später verwenden, verwenden wir den integrierten COM-Port-Monitor.

Also lege ich einen Finger auf den Drucksensor und bewege mich auf dem Weg:



Das Diagramm kann wie der gesamte folgende Code von GitHub heruntergeladen werden .

Nun gehen wir weiter zum Arduino.


Teil III: Schaltplan und Programm für Arduino Uno


Ich werde nicht so ausführlich über Arduino sprechen, weil alles ziemlich trivial ist.

Schaltplan:



Beachten Sie! Da der Arduino RX / TX-Ausgang mit 5 V und der Raspberry PI mit 3,3 V betrieben wird, wird empfohlen, den Arduino mit speziellen Modulen oder zumindest mit einem Spannungsteiler an den Raspberry UART anzuschließen. Ich habe kein spezielles Modul, aber der Spannungsteiler ist immer willkommen. Ich habe 3 Widerstände mit einem Nennwert von 1000 Ohm genommen. Und er tippte nach dem zweiten Widerstand, auf den 2/3 der Spannung abfallen wird. Wenn Sie die Stromversorgung über USB auf 5 V abrunden, stellt sich heraus, dass dies nur der Fall ist 5*0.66=3.3 .

Obwohl ich Arduino auch direkt mit dem UART Raspberry PI verbunden habe und alles zu funktionieren schien.

Wir verbinden den Drucksensor mit „+“ und mit dem Analogeingang „A1“. Der Bewegungssensor für Stromversorgung und Digitaleingang Nr. 5.

So sieht die Schaltung im zusammengebauten Zustand aus:



Hier ist der Skizzencode für Ardino: Der Code ist einfach, das einzige, was es wert ist, erklärt zu werden, ist die Variable „Anpassung“. Tatsache ist, dass der Drucksensor bei Anschluss an den Arduino manchmal auch ohne Last Werte ungleich Null zeigte, und ich dachte an nichts Besseres, als den Durchschnittswert von „Rauschen“ zu subtrahieren, um die Messwerte mit Canny zu vereinheitlichen. Ebenso wie im vorherigen Fall haben wir das Display mit einer eingebauten LED implementiert, falls die Sensoren funktionierten:

byte photoPin = A0;

void setup() {
Serial.begin(9600);
pinMode(photoPin, INPUT);
pinMode(5, INPUT);
pinMode(13, OUTPUT);
}

void loop() {
int adjustment = 250;
int pressure_sensor = analogRead(A1) - adjustment;
int motion_sensor = digitalRead(5);

Serial.print(pressure_sensor);
Serial.print(" ");
Serial.println(motion_sensor);
if ((pressure_sensor<380) && (motion_sensor==1))
{
digitalWrite(LED_BUILTIN, HIGH);
}
else {
digitalWrite(LED_BUILTIN, LOW);
}
delay(1000);
}









Teil IV: Raspberry PI und das Überwachungsprogramm in Python


Zuerst müssen Sie UART sowie SSH und VNC aktivieren und dann über ein Smartphone eine Verbindung zu Raspberry herstellen.

Gehen Sie zu den Raspberry PI-Einstellungen und aktivieren Sie SSH, VNC, UART wie im Bild:



Nur für den Fall, ich habe Bluetooth ausgeschaltet.

Wir werden ein einfaches Python-Programm schreiben. Ich habe die integrierte IDE verwendet und keine zusätzlichen Python-Module installiert. Ich hatte einen Raspbian mit mittelgroßem Desktop-Image, der ungefähr 1,1 GB benötigt.

In unserem Überwachungsprogramm verwenden wir sowohl die Konsole als auch die grafische Oberfläche, um Informationen anzuzeigen. Um die GUI zu implementieren, habe ich mich für Tkinter entschieden. Ich benutze es wirklich zum zweiten Mal in meinem Leben, aber ich brauchte nur ein paar Textfelder und ein Dialogfeld.

Hier ist der Programmcode:

import serial
import time
from tkinter import *
from tkinter import ttk
from tkinter import messagebox

serialport = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1.0) 

window = Tk()  
window.title("Security system for my pen")  
window.geometry('400x170')
#Presure sensor label
lbl_ps = ttk.Label(window, text="Pressure sensor", font=("Arial Bold", 20))
lbl_ps.grid(column=0, row=0)
lbl_ps_status = ttk.Label(window, text=" ",  font=("Arial Bold", 20))
lbl_ps_status.grid(column=1, row=0)
#Motion sensor label
lbl_ms = ttk.Label(window, text="Motion sensor", font=("Arial Bold", 20))
lbl_ms.grid(column=0, row=1)
lbl_ms_status = ttk.Label(window, text=" ", font=("Arial Bold", 20))
lbl_ms_status.grid(column=1, row=1)

while True:
   counter = 0
   rcv = serialport.readline().decode('utf-8').replace("\r\n","").split('  ')
   if (len(rcv)==2):
       ps=rcv[0]
       ms=rcv[1]
       print (ps+ " " +ms)
       if (int(ps)<380):
           lbl_ps_status.config(text = " Warning!")
           counter += 1
       else:
           lbl_ps_status.config(text = " Ok")

       if (int(ms)>0):
           lbl_ms_status['text']=" Warning!"
           counter += 1
       else:
           lbl_ms_status['text']=" Ok"  
       window.update_idletasks()  
       window.update()
       if (counter == 2):
            messagebox.showinfo("Alarm!", "heck your pen!")     
       time.sleep(1)


Ich werde wahrscheinlich den Import von Bibliotheken überspringen.

Nach dem Import legen wir die Einstellungen für UART, den Port selbst, die Geschwindigkeit und das Timeout fest.

serialport = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1.0) 


Als nächstes platzieren wir Textfelder (Beschriftung) im Tabellenlayout (im Raster).
Wir haben 4 Felder, von denen 2 unverändert sind, und der Status des Sensors wird in den anderen beiden angezeigt.

window.title("Security system for my pen")  
window.geometry('400x170')
#Presure sensor label
lbl_ps = ttk.Label(window, text="Pressure sensor", font=("Arial Bold", 20))
lbl_ps.grid(column=0, row=0)
lbl_ps_status = ttk.Label(window, text=" ",  font=("Arial Bold", 20))
lbl_ps_status.grid(column=1, row=0)
#Motion sensor label
lbl_ms = ttk.Label(window, text="Motion sensor", font=("Arial Bold", 20))
lbl_ms.grid(column=0, row=1)
lbl_ms_status = ttk.Label(window, text=" ", font=("Arial Bold", 20))
lbl_ms_status.grid(column=1, row=1)


Erstellen Sie als Nächstes eine Endlosschleife.
Zu Beginn des Zyklus setzen wir das Alarmetikett zurück counter .
Lesen Sie dann die Daten von der seriellen Schnittstelle.
Um nicht alle Einträge wie "\ x00" anzuzeigen, codieren wir die Nachricht in UTF-8 neu.
Dann entfernen wir den Anfang und das Ende der Zeile, so dass nur noch Zahlen übrig bleiben.
Als nächstes teilen wir die Zeile, achten auf die Leerzeichen 2, nicht auf 1.
Damit das Programm nicht abstürzt, wenn die Nachricht falsch ist, wird der weitere Code, der an den Empfang der Nachricht gebunden ist, in eine bedingte Struktur gepackt, die nur funktioniert, wenn die Nachricht in zwei Teile geteilt werden kann.
Zeigen Sie den Drucksensor und den Bewegungssensor in der Konsole an.

while True:
   counter = 0
   rcv = serialport.readline().decode('utf-8').replace("\r\n","").split('  ')
   if (len(rcv)==2):
       ps=rcv[0]
       ms=rcv[1]
       print (ps+ " " +ms)


Wir überprüfen, ob die Sensoren funktionieren. Wenn alles in Ordnung ist, schreibt das System „OK“. Wenn einer der Sensoren funktioniert, erhöht sich der Zähler um 1 und es wird eine Warnung ausgegeben.


       if (int(ps)<380):
           lbl_ps_status.config(text = " Warning!")
           counter += 1
       else:
           lbl_ps_status.config(text = " Ok")

       if (int(ms)>0):
           lbl_ms_status['text']=" Warning!"
           counter += 1
       else:
           lbl_ms_status['text']=" Ok"  


Im letzten Block aktualisieren wir die Elemente des Tkinter-Formulars. Anschließend überprüfen wir, wie viele Sensoren funktionierten. Wenn beide Sensoren im Zyklus gearbeitet haben, erscheint ein modales Fenster mit einer Alarmmeldung.


       window.update_idletasks()  
       window.update()
       if (counter == 2):
            messagebox.showinfo("Alarm!", "heck your pen!")     
       time.sleep(1)


Hierbei ist zu beachten, dass der Bewegungssensor ab dem Moment der Bewegungserkennung zwei Sekunden lang den Ausgang „1“ hält. In der Regel funktioniert das System also.

Unten finden Sie Screenshots, die den Betrieb des Programms zeigen:

Alle Sensoren sind ruhig:



Eines von zwei Dingen hat funktioniert:



Beide funktionierten, das System wartet darauf, dass der Bediener bestätigt:



Es scheint, dass alles wie geplant war.


Fazit


Abschließend sollten Sie von einem Smartphone aus eine Verbindung zu einem Raspberry PI herstellen. Im Prinzip gibt es nichts Kompliziertes. Wenn Sie eine Verbindung von einem Computer aus herstellen können, können Sie dies von einem Telefon aus tun. Alles, was Sie wissen müssen, ist die Himbeer-IP, der Benutzername und das Passwort. Ich habe VNC Viewer auf meinem Android-Smartphone installiert, aber Sie können sicherlich einen anderen Client haben.

Es ist nicht sehr bequem zu bedienen, aber es funktioniert:


Ich möchte Sie noch einmal daran erinnern, dass der gesamte Code von GitHub heruntergeladen werden kann .

Jedes Mal verspreche ich mir, dass ich keinen langen Artikel schreiben werde, aber auch hier hat der Entwurf 10 gedruckte Seiten überschritten. Der Artikel zeigt ein einfach zu implementierendes Beispiel für ein hausgemachtes Sicherheitssystem. Der Spielraum für Vorstellungskraft ist riesig.

Wenn ich verstehe, dass der Artikel für Sie interessant war, werde ich später einen weiteren Artikel über die Verbindung über einen Bluetooth-Adapter skizzieren.

UPD:
Es scheint, dass ich eine kleine Artikelserie habe, daher werde ich der Einfachheit halber Links zu anderen verwandten Artikeln hinterlassen:


  1. "Eins, zwei, drei - verbrenne den Weihnachtsbaum!" oder mein erster Blick auf den winzigen Controller CANNY 3 .
  2. "Ziel hat viele Erscheinungsformen ..." oder wir automatisieren die Steuerung einer Autolampe mit CANNY 3 tiny und einem Fotowiderstand .
  3. "Welche Yachthäfen?" oder wir steuern den Controller über Bluetooth mit einer mobilen Anwendung auf Xamarin (Android) .

All Articles