Hey,
ein kleines Langeweile-Projekt von mir. Ich dachte, ich teile die kleine Spielerei mit Euch, evtl. mach einer was draus. Los gehts....
In diesem Tutorial möchte ich erklären, wie man eine .Net-Anwendung vom Android-Handy aus fernsteuern kann. Was braucht man dafür?
1. Ein aktuelles Android-Handy.
2. Die App QPython qpython.com/ oder im PlayStore einfach QPython eingeben (QPython 3L).
3. Handy muss im selben Netzwerk angemeldet sein, wie der PC auf dem die .NET-Anwendung läuft.
4. Die Newtonsoft.JSON-Library für das VB-Projekt github.com/JamesNK/Newtonsoft.Json/releases (Version 12.0.3), ältere sollten auch ohne Probleme gehen.
Ist die App installiert, so solltet ihr einen Ordner
![](https://www.vb-paradise.de/index.php/Attachment/47036-Screenshot-20200406-185958-png/?thumbnail=1&s=12f64a27f7c3817ed7d81a990d4a817cdcb3bdd1)
Das nun folgende Python-Script gehört in den Ordner
Hier die Code-Datei.... accelerometer.txt (Die Endung .txt bitte nach
Dieses Python-Script liest die Werte des Beschleunigsungssensors aus und sendet diese als JSON-String an die .NET Anwendung.... Meine Kenntnisse in Python sind eher beschränkt, der Code könnte bestimmt besser aussehen, aber gut.
Der .NET-Teil ist eine Windows-Forms-Anwendung (.NET-Framework).
Diese Anwendung erstellt im ersten Schritt einen Server, auf den sich das Python-Script verbindet (evtl. müsst ihr den Port bei Euch anpassen. Mag sein, dass dieser belegt ist.). Die Daten werden vom Python-Script aus als JSON-String gesendet. Auf VB-Seite wird dieser String wieder in eine Liste von Single gecastet und verarbeitet. Ich weise die Daten aus dem Sensor hier nur rudimentär an ein PointF-Objekt zu. Das kann man mit Sicherheit noch verfeinern und die Bewegungen flüssiger machen. Hat nun alles geklappt, so startet ihr die VB-Anwendung und das Python-Skript. Ihr solltet nun ein rotes Rechteck auf der Form haben, welches ihr mit dem Handy bewegen könnt. Liegt das Handy der Länge nach flach auf dem Tisch vor Euch, entspricht dies keiner Bewegung...
Hier das VB-Projekt (VS2019): WindowsApp11.zip Nicht vergessen, die Newtonsoft-DLL einzubinden....!
Und noch ein kleines Demo-Video: https://www.youtube.com/watch?v=c7thqx5J8dw
Bei Fragen einfach hier posten, stehe meistens zur Verfügung....!
ein kleines Langeweile-Projekt von mir. Ich dachte, ich teile die kleine Spielerei mit Euch, evtl. mach einer was draus. Los gehts....
In diesem Tutorial möchte ich erklären, wie man eine .Net-Anwendung vom Android-Handy aus fernsteuern kann. Was braucht man dafür?
1. Ein aktuelles Android-Handy.
2. Die App QPython qpython.com/ oder im PlayStore einfach QPython eingeben (QPython 3L).
3. Handy muss im selben Netzwerk angemeldet sein, wie der PC auf dem die .NET-Anwendung läuft.
4. Die Newtonsoft.JSON-Library für das VB-Projekt github.com/JamesNK/Newtonsoft.Json/releases (Version 12.0.3), ältere sollten auch ohne Probleme gehen.
Ist die App installiert, so solltet ihr einen Ordner
qpython
in Eurem MainStorage vorfinden. Bei mir sieht dies so aus....Das nun folgende Python-Script gehört in den Ordner
scripts3
Quellcode
- import androidhelper
- import time
- import socket
- import json
- #benötigt, um auf die Sensoren zugreifen zu können.
- droid = androidhelper.Android()
- def com():
- #erzeugt eine Standard-Socket-Objekt.
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- #Verbindung zum Server.
- s.connect(("192.168.178.5", 20005))
- #startet die Abfrage der Sensoren.
- droid.startSensingTimed(1, 250)
- while True:
- try:
- #sendet die JSON-Daten an den Server.
- s.send(readAcc().encode("utf8"))
- #empfängt das ok des Servers.
- r = s.recv(1024).decode("utf8")
- #wartet 0.1 Sekunden bis zur nächsten
- #Übertragung
- time.sleep(0.1)
- except:
- #tritt ein Fehler auf, so wird aus dem
- #While-Loop ausgebrochen.
- break
- #beendet die Abfrage der Sensoren.
- droid.stopSensing()
- #schliesst die Verbindung zum Server endgültig.
- s.close()
- def readAcc():
- #liest die gegenwärtigen Daten des Beschleunigungs-
- #Sensors.
- result = droid.sensorsReadAccelerometer().result
- #gibt die Daten als Json-Objekt zurück.
- return json.dumps(result)
- #Einstiegspunkt ins Programm.
- com()
Hier die Code-Datei.... accelerometer.txt (Die Endung .txt bitte nach
.py
abändern. Das Forum erlaubt Dateien mit der Endung .py nicht). Die IP-Adresse müsst ihr natürlich auf die Adresse abändern, auf der dann die VB-Anwendung läuft!!!!Dieses Python-Script liest die Werte des Beschleunigsungssensors aus und sendet diese als JSON-String an die .NET Anwendung.... Meine Kenntnisse in Python sind eher beschränkt, der Code könnte bestimmt besser aussehen, aber gut.
Der .NET-Teil ist eine Windows-Forms-Anwendung (.NET-Framework).
VB.NET-Quellcode
- Imports System.Net
- Imports System.Net.Sockets
- Imports System.Text
- Imports Newtonsoft.Json
- Public Class Form1
- Private _server As Socket
- Private _location As PointF
- Public Sub New()
- InitializeComponent()
- 'Puffer aktivieren, damit die Animation etwas flüssiger läuft.
- Me.DoubleBuffered = True
- 'Mitte der Form.
- _location = New PointF(Me.ClientSize.Width \ 2, Me.ClientSize.Height \ 2)
- 'Standard-Socket.
- _server = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
- 'Bindet den Socket an alle verfügbaren Interfaces auf dem PC, Port ist willkürlich gewählt.
- _server.Bind(New IPEndPoint(IPAddress.Any, 20005))
- 'Versetzt den Socket in den Listening-Modus. Benötigt, um Verbindungen anzunehmen.
- _server.Listen(10)
- 'Startet den Thread, der auf Verbindungsanfragen horcht und reagiert.
- Task.Run(Sub() Accept())
- End Sub
- Private Sub Accept()
- While True
- 'Blockiert solange, bis eine Verbindungsanfrage eingeht, darum ein extra Thread.
- Dim client = _server.Accept()
- 'Startet abermals einen neuen Thread, der die Nachrichten vom Client verarbeitet.
- Task.Run(Sub() HandleCommunication(client))
- End While
- End Sub
- Private Sub HandleCommunication(client As Socket)
- 'Ein Byte-Array für die eingehenden Nachrichten. 4kb sollten reichen.
- Dim buffer(4096) As Byte
- While True
- Try
- 'Blockiert, bis Daten zu lesen an der Schnittstelle anstehen. Sind Daten vorhanden,
- 'so werden diese in das Byte-Array kopiert und die Anzahl der gelesenen Bytes
- 'werden in der Variablen r gespeichert.
- Dim r = client.Receive(buffer, SocketFlags.None)
- 'Gibt die Receive-Funktion 0 zurück, so hat die Gegenstelle die Verbindung geschlossen
- 'und die Kommunikation wird beendet.
- If r = 0 Then Throw New Exception()
- 'Die empfangenen Bytes werden dem Format (utf-8) entsprechend in einen String umgewandelt.
- 'GetString beginnt beim Array (buffer) bei 0 und liest die Anzahl der empfangenen Bytes (r)
- 'und dekodiert diese.
- Dim message = Encoding.UTF8.GetString(buffer, 0, r)
- 'Dem Client wird eine Bestätigung gesendet.
- client.Send(Encoding.UTF8.GetBytes("ok"), SocketFlags.None)
- 'Die empfangene Nachricht wird mit Hilfe der Newtonsoft-Json-Lib in eine Liste von
- 'Doubles gecastet. X=0, Y=1, Z=2.
- Dim data = JsonConvert.DeserializeObject(Of List(Of Single))(message)
- 'Abarbeitung der Daten.
- OnUpdate(data)
- Catch ex As Exception
- 'Tritt ein Fehler auf, so wird die Client geschlossen und der While-Loop beendet.
- client.Close()
- Exit While
- End Try
- End While
- End Sub
- Private Sub OnUpdate(data As List(Of Single))
- 'X-Wert ist das erste Element im Array.
- _location.X -= data(0)
- 'Y-Wert ist das zweite Element im Array.
- _location.Y += data(1)
- 'Form neu zeichnen.
- Me.Invalidate()
- End Sub
- Protected Overrides Sub OnPaint(e As PaintEventArgs)
- 'Bessere Darstellungsqualität.
- e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
- 'Zeichnen des Rechtecks.
- e.Graphics.FillRectangle(Brushes.Red, New RectangleF(_location, New SizeF(10, 10)))
- MyBase.OnPaint(e)
- End Sub
- End Class
Diese Anwendung erstellt im ersten Schritt einen Server, auf den sich das Python-Script verbindet (evtl. müsst ihr den Port bei Euch anpassen. Mag sein, dass dieser belegt ist.). Die Daten werden vom Python-Script aus als JSON-String gesendet. Auf VB-Seite wird dieser String wieder in eine Liste von Single gecastet und verarbeitet. Ich weise die Daten aus dem Sensor hier nur rudimentär an ein PointF-Objekt zu. Das kann man mit Sicherheit noch verfeinern und die Bewegungen flüssiger machen. Hat nun alles geklappt, so startet ihr die VB-Anwendung und das Python-Skript. Ihr solltet nun ein rotes Rechteck auf der Form haben, welches ihr mit dem Handy bewegen könnt. Liegt das Handy der Länge nach flach auf dem Tisch vor Euch, entspricht dies keiner Bewegung...
Hier das VB-Projekt (VS2019): WindowsApp11.zip Nicht vergessen, die Newtonsoft-DLL einzubinden....!
Und noch ein kleines Demo-Video: https://www.youtube.com/watch?v=c7thqx5J8dw
Bei Fragen einfach hier posten, stehe meistens zur Verfügung....!
Die Unendlichkeit ist weit. Vor allem gegen Ende. ![?(](https://www.vb-paradise.de/wcf/images/smilies/confused.png)
Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken.![8o](https://www.vb-paradise.de/wcf/images/smilies/w00t.png)
![?(](https://www.vb-paradise.de/wcf/images/smilies/confused.png)
Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken.
![8o](https://www.vb-paradise.de/wcf/images/smilies/w00t.png)