Kann ich verstehen. War n geiles Spiel
Danke dir aber schonmal für die Rückmeldung!![]()
Kann ich verstehen. War n geiles Spiel
Danke dir aber schonmal für die Rückmeldung!![]()
Hallo Philipp,
es gibt prinzipiell 2 Möglichkeiten
1. über den webbrowser vom PC. Hat den Nachteil, dass man die Daten am PC nicht leicht weiterverarbeiten kann und das Programm hängt gelegentlich, wenn aus irgendwelchen Gründung die Verbindung abbricht. Außerdem braucht man ein längeres Programm im Microcontroller.
2. Besser finde ich es deshalb mit vb.net ein Programm zuschreiben das per UDP-Protokoll die Daten austauscht. Da steht die Verbindung immer. Beispielprogramm (ginge sicher auch anders):
WindowsForm Anwendung erstellen, einen Button, 2 Textfelder und einen Timer hinzufügen und folgenden Quellcode einfügen:
Die Einstellungen vom WiFly sind:Code:Imports System.Runtime.InteropServices.MarshalImports System.Drawing, System.Drawing.Imaging Imports System.Net, System.IO Imports System.Net.Sockets Public Class Form1 Inherits System.Windows.Forms.Form Dim sendbef As Integer, bytes(200) As Byte, udpclient1 As UdpClient, IPPort1 As IPEndPoint Public Sub New() InitializeComponent() udpclient1 = New System.Net.Sockets.UdpClient(23) IPPort1 = New IPEndPoint(IPAddress.Parse("192.168.1.25"), 80) Timer1.Interval = 100 : Timer1.Enabled = True End Sub Private Sub Timer1_Tick1(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick Do While udpclient1.Available > 0 Dim receiveBytes As [Byte]() = udpclient1.Receive(IPPort1) textbox1.text = System.Text.Encoding.UTF8.GetString(receiveBytes) Loop If sendbef = 1 Then sendbef = 0 bytes = System.Text.Encoding.ASCII.GetBytes(TextBox2.Text + Chr(13)) udpclient1.Send(bytes, bytes.Length, IPPort1) End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click sendbef = 1 End Sub Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing udpclient1.Close() Timer1.Enabled = False End End Sub End Class
<2.32> get ip
IF=UP
DHCP=OFF
IP=192.168.1.25:80
NM=255.255.255.0
GW=192.168.1.1
HOST=IPRechner:23
PROTO=UDP,TCP,
MTU=1524
FLAGS=0x7
TCPMODE=0x0
BACKUP=0.0.0.0
Im Mikrocontroller zum senden z.B.
Print Hex(sharp2); 'z.B. um werte als Hexadezimalzahlen zu übertragen
Print Message; 'z.B. string übertragen
Print Chr(13); 'gesendet wird erst bei Abschluss mit cr
zum empfangen z.B.
If Ischarwaiting() = 1 Then Inputhex Kurssoll 'falls Wert als HEX übertragen
Sollte so klappen.
Viele Grüße
Christian
Geändert von Christian H (26.05.2013 um 12:44 Uhr)
Hi Christian,
viieeeelen vielen Dank für deinen Code.
Ich konnte ihn halb erfolgreich bei mir umsetzen.
Mit deinem Code habe ich es geschafft eine Zeichenkette an den µC zu übertragen. Die umgekehrte Richtung funktioniert nur leider nicht. (Ich habe per RS232 Verbindung kontrolliert das alles funktionieren müsste)
Mein Problem ist, ich kann nicht mal eine Frage oder so stellen, da ich deinen Code zwar umsetzen konnte, aber leider nur seeehr wenig daran verstehe.
Du hast nicht zufällig ne Glaskugel, mit der du mal gucken kannst, was da nicht läuft ?
Oder vlt nen heißen Tipp, was ich mal kontrollieren könnte ??
Viele Grüße
Philipp
Hallo flipp86,
IP-Adressen und Port auf beiden Seiten richtig ?
im Microcontroller das Chr(13) zu Schluß (oder alternativ Print ohne ";"
baud-Rate wird wohl für Controler und WiFly gleich sein, da es ja in eine Richtung funktioniert.
Versuch mal textbox1.text = textbox1.text + System.Text.Encoding.UTF8.GetString(receiveBytes)
vielleicht überschreibt er ja einen Text gleich wieder mit nichts
sollte eigentlich klappen. Hast Du das Programm TeraTerm Pro ? Funktioniert´s denn damit?
Christian
ganz und gar nicht sicher
könnte auch gut damit zusammenhängen.
udpclient1 = New System.Net.Sockets.UdpClient(23)
hab in der Zeile zwei verschiedene Werte angegeben und beide male klappte das senden und nicht das empfangen. Insofern wird wohl mein Hoste Gate falsch sein.
Mal sehen wo ich das rausfinde. Programmier über einen Mac wo Windows virtuell drauf läuft
Das WiFly hat bei mir die IP 192.168.1.25 und den Port 80. Gateway ist bei mir 192.168.1.1 (IP vom Router). Im WiFly muß natürlich die IP und der Port (bei mir 23) vom Rechner(Host) eingegeben sein. Mußt ggf. bei Dir anpassen. Falls Das weiterhin nicht klappt kannst ja mal einen Ausdruck aller Einstellungen des WiFly schicken ( get everything ). Da es in eine Richtung funktioniert, wird´s wohl auch nicht an der firewall liegen.
Hi Christian,
ist das Setzen der IP-Adresse des Rechners, an den die Daten gesendet werden sollen nur über die Einstellungen im Wifly möglich oder kann man sie auch per Bascom festlegen, sozusagen während der Laufzeit des Programmes?
Danke für die Auszüge aus dem Quellcode!
Das wird mir sicher sehr helfen!
Crypi
Hi
man kann das auch zu Beginn des Programms einmal machen indem man ans WiFly per UART sendet
$$$
set ip host <addr> // set the IP address of the remote host <addr> IP von Deinem Rechner (z.B. 192.168.1.2)
set ip remote <port> // set the IP port of the remote host in meinem Beispiel ist das die 23
save // save settings in config file
reboot // reboot the modul oder exit
soweit ich mich erinnere kommt nach $$$ kein return, nach den Kommandos aber schon. Vor und nach $$$ muß eine Pause von etwa 1/2 Sekunde sein. Einmal eingestellt behält das Modul diese Eingaben. Ist also nur ein einziges mal erforderlich
Danke für deine Antwort!
Crypi
Lesezeichen