Tastendruck über Computernetzwerk erkennen

Ich möchte ein vernetztes Gerät (ähnlich einem Anruf beim Hotelzimmerservice) mit mehreren Eingangsleitungen erstellen, die auf einem Computer im Netzwerk eindeutig identifiziert werden können.

Ich habe ein Produkt mit ähnlicher Funktionalität gefunden.

Ich nehme an, das Gerät benötigt einen Mikrocontroller, der mit einem Ethernet-E / A-Controller verbunden ist? Benötige ich ein Betriebssystem, um TCP/IP-Nachrichtenpakete zu generieren, die auf einem PC erkannt werden können? Bitte schlagen Sie ein Blockschema vor, dem ich folgen kann, um dies zu tun.

Diese Frage ist zu weit gefasst.
@OlinLathrop: Einverstanden, ich fordere ein Schema an, mit dem ich anfangen kann zu arbeiten, würde mich freuen, wenn ich eine Roadmap bekomme und die Einzelheiten erkunden kann.

Antworten (3)

Mir ist nicht klar, was genau du willst. Ich denke, es ist wie folgt: Sie haben eine Reihe von Leitungen, die von einem Mikrocontroller verbunden werden müssen, und dieser Mikrocontroller sendet ein Signal an einen Computer. Der Computer verarbeitet dieses Signal.

Für den Mikrocontroller-Teil können Sie einen Chip mit integriertem Ethernet wie den von Olin erwähnten PIC18F67J60 verwenden . Sie können auch einen kleineren (einfacher zu programmierenden) Chip mit einem externen Ethernet-Chip wie dem ENC28J60 verwenden . Sie können Software für den Mikrocontroller schreiben, indem Sie den TCP/IP-Stack von Microchip , den TCP/IP-Stack von Olin Lathrop (siehe unter "Networking Example Firmware") oder die Implementierung von Matthew Schinkel in Jalv2 verwenden .

Da der Mikrocontroller ein Signal an den Computer sendet, ist es am einfachsten, den Computer zum Server und den Mikrocontroller zum Client zu machen. Das würde bedeuten, dass Sie eine Art Server auf dem Computer benötigen. Ich würde Ihnen empfehlen, sich für einen HTTP-Server zu entscheiden, da dafür die meisten Informationen verfügbar sind. Für Linux können Sie einen LAMP- Server verwenden - für Windows verwenden Sie WAMP oder XAMPP.

Sie müssen ein serverseitiges Skript erstellen, das die Anfrage vom Client verarbeitet. Der Client muss dieses Skript aufrufen. Sie könnten beispielsweise die Kundenanfrage stellen, /button.php?button=17wenn die Schaltfläche Nummer 17 gedrückt wurde. Dann könnte das serverseitige Skript so aussehen:

<?php
if (!isset($_GET['button'])) {                    // Check if ?button exists
    die('The button variable is mandatory.');     // If not, quit
}

$button = (int) $_GET['button'];                  // Cast ?button to an integer
if ($button == 0) {                               // Check if it was an integer
    die('Invalid button number.');                // If not, quit
}

// Do stuff with $button

Hier ist ein Blockschema:

Geben Sie hier die Bildbeschreibung ein

Lassen Sie mich das erklären.

  • Die Tasten und andere IO bilden die Eingabe für den Mikrocontroller, den Sie verwenden werden. Dies wären die Schaltflächen, die Sie verbinden werden, aber es könnten auch andere Dinge sein, wie I2C / SPI-Geräte oder was auch immer.

  • Sie können Informationen von diesem IO mit grundlegender Chipprogrammierung erhalten . Der Chip muss Werte von den Eingängen lesen.

  • Der Chip (könnte ein PIC sein) mit Ethernet (könnte eingebaut sein) verarbeitet die Eingabeinformationen und überträgt sie an die IP des Servers , beispielsweise 192.168.0.10.

  • Dazu muss es zunächst über den TCP/IP-Stack an den Router auf IP 192.168.0.1 gesendet werden . Auf dem Chip merkt man das nicht. Es ist so, als würdest du den Server direkt kontaktieren.

  • Der Router verarbeitet das Paket und sendet es unter 192.168.0.10 an den Server . Sie müssen dies nicht tun, das erledigt der Router von selbst.

  • Der Server erhält eine HTTP-Anforderung und muss diese verarbeiten. Es sendet eine Antwort auf 192.168.0.10 zurück an den Router, der sie an den Chip weiterleitet. Dies ist im Blockschema nicht dargestellt, da es in dieser Anwendung nicht benötigt wird: Daten müssen vom Chip zum Server gesendet werden , aber nicht zurück.

  • Die Daten vom Chip können vom Server verwendet werden , um sie auf einem Bildschirm anzuzeigen, in einer Datei zu speichern oder etwas anderes damit zu tun. Das liegt ganz bei Ihnen.

Sie können auch, wie Olin in den Kommentaren vorschlägt, einen TCP-Server anstelle eines HTTP-Servers verwenden. Dies ist möglich und effizienter (was ein theoretischer Profi ist, Sie werden es nicht bemerken). Ich würde einen Starter im Netzwerk empfehlen, um mit einem HTTP-Server zu gehen. Es gibt jede Menge Informationen zum Thema und der Einstieg ist sehr einfach. Wenn Sie sich bereits mit Netzwerken auskennen, können Sie auch einen TCP-Server erstellen. Keiner der beiden Server wäre auf der Clientseite komplexer zu implementieren.

1: Ich sehe nicht, wie ein "kleinerer" Chip als der 18F67J60 einfacher zu programmieren wäre. Die Größe ist orthogonal zum Schwierigkeitsgrad. Der Vorteil des '67J60 ist, dass er MAC/PHY eingebaut hat. 2: Ich habe auch einen kostenlosen Netzwerk-Stack für die 'J60-Reihe, der in der Veröffentlichung der PIC-Entwicklungstools unter embedinc.com/pic/dload.htm enthalten ist . 3: Warum die Komplexität von HTTP, wenn Sie einen einfachen TCP-Server erstellen können, nur um Daten von diesen Geräten zu akzeptieren?
Vielen Dank für eine so ausführliche Antwort. Wenn ich Sie also richtig verstehe, würde das Schema darin bestehen, die zu überwachenden Pins zu lesen, sie in eine HTTP-Anforderung zu codieren und über TCP/IP zu senden (unter Verwendung der von Ihnen erwähnten Bibliotheksquelle). Auf der PC-Seite entschlüsseln Sie die Nachricht und verwenden Sie sie in einer Anwendung. Irgendwelche Netzwerkbesonderheiten, um die ich mich kümmern muss?
@OlinLathrop 1: Der 18F67J60 hat ein Datenblatt von fast 500 Seiten. Zum Beispiel hat der 16F88 weniger als die Hälfte davon; Daher könnte es für den Anfang einfacher sein (mich eingeschlossen). 2: Danke, ich werde das bearbeiten. 3: Auf HTTP-Servern sind viel mehr Informationen verfügbar. Da es Open-Source-Lösungen für HTTP gibt, wird der Code dadurch nicht viel komplexer.
@OlinLathrop: Welches Level-Protokoll muss ich wirklich erreichen, da ich nur beabsichtige, den Leitungsstatus (Hi / Lo) in meiner Desktop-Anwendung zu erkennen?
@Bleamer genau. Sie benötigen keine Netzwerkspezifikationen, obwohl es nützlich wäre, eine statische IP-Adresse oder einen Hostnamen des Servers zu haben, damit Sie ihn im Chip fest codieren können. Auch die Kodierung der HTTP-Anforderung wird nicht so schwierig sein, es ist eine Basiszeichenfolge mit dem Zusatz der Schaltflächennummer.
@CamilStaps: Danke. Dies wäre das minimalistischste Schema? Verzeihen Sie mein Verständnis von Netzwerken.
@Bleamer nicht der Minimalist, aber meiner Meinung nach der einfachste. Ich habe ein Blockschema mit Erklärung für Sie hinzugefügt.
@Bleamer kein Problem :) Viel Glück!
Der PIC 16F88 ist viel zu klein, um einen TCP-Netzwerkstack zu unterstützen. Ein großer Teil des '67J60-Handbuchs beschreibt die Details des MAC/PHY. Entweder Sie verwenden vorhandene Software, um es zu steuern, oder Sie müssen das entsprechende Datenblatt für den externen MAC/PHY lesen. Das Datenblatt '67J60 sieht groß aus, weil es alles in einem Dokument ist.
@OlinLathrop: Sie schlagen vor, mit 18F67J60 zu gehen?
@OlinLathrop stimmt, es ist ein schlechtes Beispiel. Aber ich bin mir sicher, dass es Chips gibt, mit denen man einfacher anfangen kann als mit dem 18F67J60, die genug Programmspeicher für einen TCP/IP-Stack haben. Andererseits habe ich den 18F67J60 noch nie ausprobiert, und es könnte recht einfach sein, damit anzufangen.
@Bleamer: Ich habe darüber nachgedacht, einen eigenen TCP-Server auf der Seite des Host-Computers zu schreiben. Das ist ganz einfach. Ja, ich denke, ein 18F67J60 ist ein guter Chip dafür, oder sein größerer Bruder, der 18F87J60, wenn Sie viele Tasten anschließen müssen. Es ist die 80-polige Version des 64-poligen '67J60.

Ich würde vorschlagen, einen kostengünstigen Mikrocontroller namens "Electric Imp" zu verwenden, der klein ist (die Größe einer SD-Karte) und alles enthält, was Sie brauchen, um eine Taste zu haben, die eine sichere Verbindung über WLAN zum Internet herstellt und sogar funktioniert Batterieleistung.

Sobald Ihr Knopfdruck aus dem Internet ist, haben Sie natürlich 1001 verschiedene Möglichkeiten, was Sie damit machen können.

Eine wirklich nette Funktion ist, dass Ihre Code-Updates aus dem Internet auf das Gerät übertragen werden, sodass es vor Ort aktualisiert werden kann.

Holen Sie sich ein Mikro mit Ethernet-Fähigkeit, wie das PIC18F67J60, und verdrahten Sie alle Tasten damit. Das Mikro entprellt die Tasten. Wenn es Aktivitäten erkennt, die es wert sind, gemeldet zu werden, öffnet es eine TCP-Verbindung zu einem bekannten Server an einem bekannten Port, sendet die Informationen und schließt die Verbindung.