- ELV FS20 WUE und ELV Mini-USB-Modul UM2102 zusammenlöten
- USB Treiber installieren
- Mit RealTerm 02002fb01 (Textmode) aktivieren und schauen Statusabfrage 0201f0 durchführen
- Sensoren in Betrieb nehmen
- SimpleSerial Beispiel von http://csharp.simpleserial.com/ (Visual C#2010 Express) installieren
- Beispiel mit FS20 WUE spezifischen Elemente erweitern (initialisiertung, status, reset) - siehe code snippets weiter unten
- Start SimpleSerial, click auf "start" und dann "status":
Status: OKBaudrate: 4800 bpsFS20-Pakete: 0Wetterdaten-Pakete: 0 - Etwas warten, dann trudeln auch schon die Wetterdaten der 3 Sensoren ein
Sensor: 1Adresse: 1Temperatur: 1,9 C (0x0013)Luftfeuchtigkeit: 86,2 % (0x035E)Windgeschw.: 0,0 km/h (0x0000)Niederschlag: 0 (0x0000)Regen: Nein (0x00)
Sensor: 1Adresse: 0Temperatur: 12,1 C (0x0079)Luftfeuchtigkeit: 72,5 % (0x02D5)Windgeschw.: 0,0 km/h (0x0000)Niederschlag: 0 (0x0000)Regen: Nein (0x00)
Sensor: 1Adresse: 3Temperatur: 12,2 C (0x007A)Luftfeuchtigkeit: 67,1 % (0x029F)Windgeschw.: 0,0 km/h (0x0000)Niederschlag: 0 (0x0000)Regen: Nein (0x00)
c# Code snippets:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace SimpleSerial
{
public partial class Form1 : Form
{
// Add this variable
string RxString;
public Form1()
{
InitializeComponent();
}
private void buttonStart_Click(object sender, EventArgs e)
{
// FS20 WUE
serialPort1.PortName = "COM5";
serialPort1.BaudRate = 4800;
serialPort1.Open();
if (serialPort1.IsOpen)
{
buttonStart.Enabled = false;
buttonStop.Enabled = true;
textBox1.ReadOnly = false;
byte[] textMode = new byte[4] { 0x02, 0x02, 0xfb, 0x01 };
serialPort1.Write(textMode, 0, 4); // Text Mode
byte[] wetterDaten = new byte[4] { 0x02, 0x02, 0xf2, 0x01 }; // Wetterdaten sofort ausgeben
serialPort1.Write(wetterDaten, 0, 4);
byte[] fs20Daten = new byte[4] { 0x02, 0x02, 0xf1, 0x01 }; // fs20 sofort ausgeben
serialPort1.Write(fs20Daten, 0, 4);
}
}
private void buttonStop_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
buttonStart.Enabled = true;
buttonStop.Enabled = false;
textBox1.ReadOnly = true;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close();
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// If the port is closed, don't try to send a character.
if (!serialPort1.IsOpen) return;
// If the port is Open, declare a char[] array with one element.
char[] buff = new char[1];
// Load element 0 with the key character.
buff[0] = e.KeyChar;
// Send the one character buffer.
serialPort1.Write(buff, 0, 1);
// Set the KeyPress event as handled so the character won't
// display locally. If you want it to display, omit the next line.
e.Handled = true;
}
private void DisplayText(object sender, EventArgs e)
{
textBox1.AppendText(RxString);
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
}
private void status_Click(object sender, EventArgs e)
{
// If the port is closed, don't try to send a character.
if (!serialPort1.IsOpen) return;
// If the port is Open, declare a char[] array with one element.
byte[] getStatus = new byte[3] { 0x02, 0x01, 0xf0 };
serialPort1.Write(getStatus, 0, 3);
}
private void Reset_Click(object sender, EventArgs e)
{
// If the port is closed, don't try to send a character.
if (!serialPort1.IsOpen) return;
byte[] getStatus = new byte[3] { 0x02, 0x01, 0xf6 };
serialPort1.Write(getStatus, 0, 3);
}
}
}
Keine Kommentare:
Kommentar veröffentlichen