Control a Wemos using an application on your PC

In this example we will control an RGB led connected to our Wemos Mini from an application running on our PC. In this example I will use VB.net to write the application but you can use any language that has the ability to use the serial port.

I wanted to have a GUI but you can easily have a command line, also the app could be created in C#. I don’t really have a preference in that area. I just decided to do it in VB.net for a change rather than C#

Layout

Here is the layout, the LED is connected to pins 6, 7 and 8 of the Wemos Mini and we use 3v3 to power it. I had an RGB led breakout, common anode type

wemos and rgb led_bb

Arduino Code

The Arduino part is quite straightforward, basically it listens for a character on the serial port and then performs an action based on the character recieved. Our PC application will send numbers 1 to 6, each of these numbers will tie in with either switching an individual LED on or off on the RGB led.

[codesyntax lang=”cpp”]

int redPin = D6;
int greenPin = D7;
int bluePin = D8;

void setup()
{
  // declare the serial comm at 9600 baud rate
  Serial.begin(9600);
 
  // output pins
  pinMode(redPin, OUTPUT); // red
  pinMode(greenPin, OUTPUT); // green
  pinMode(bluePin, OUTPUT); // blue
  digitalWrite(redPin, HIGH);
  digitalWrite(greenPin, HIGH);
  digitalWrite(bluePin, HIGH);
}
 
void loop()
{
  // call the returned value from GetFromSerial() function
  switch(GetFromSerial())
  {
  case '1':
    digitalWrite(redPin, LOW);
    break;
  case '2':
    digitalWrite(redPin, HIGH);
    break;
  case '3':
    digitalWrite(greenPin, LOW);
    break;
  case '4':
    digitalWrite(greenPin, HIGH);
    break;
  case '5':
    digitalWrite(bluePin, LOW);
    break;
  case '6':
    digitalWrite(bluePin, HIGH);
    break;
  }
}
 
// read the serial port
int GetFromSerial()
{
  while (Serial.available()<=0) {
  }
  return Serial.read();
}

[/codesyntax]

Application

This was written in Visual Studio 2010.

I wanted to have a combo box with a list of com ports, the user would then select the correct one and press a button to connect, there would also be a button to disconnect. There would be 6 more buttons on the form these would switch the red, green and blue leds on and off

This is the GUI I designed in Visual Studio

rgb led gui

 

Now for the code for the application

[codesyntax lang=”vbnet”]

Imports System.IO.Ports

Public Class frmRGBLed
    Dim WithEvents serialPort As New SerialPort


    Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
        Try
            serialPort.BaudRate = 9600
            serialPort.PortName = cboPorts.SelectedItem.ToString
            serialPort.Parity = Parity.None
            serialPort.DataBits = 8
            serialPort.StopBits = 1
            serialPort.Open()
            serialPort.Encoding = System.Text.Encoding.Default
            If serialPort.IsOpen Then
                btnConnect.Visible = False
                cboPorts.Enabled = False
                btnDisconnect.Visible = True
            End If
        Catch
            serialPort.Close()
        End Try
    End Sub

    Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
        Try
            serialPort.Close()
            btnConnect.Visible = True
            btnDisconnect.Visible = False
            cboPorts.Enabled = True
            Exit Sub
        Catch
            MessageBox.Show("Problem closing port")
        End Try
    End Sub

    Private Sub blnRedOn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles blnRedOn.Click
        serialPort.Write("1")
    End Sub

    Private Sub btnRedOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRedOff.Click
        serialPort.Write("2")
    End Sub

    Private Sub btnGreenOn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGreenOn.Click
        serialPort.Write("3")
    End Sub

    Private Sub btnGreenOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGreenOff.Click
        serialPort.Write("4")
    End Sub

    Private Sub btmBlueOn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btmBlueOn.Click
        serialPort.Write("5")
    End Sub

    Private Sub btnBlueOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBlueOff.Click
        serialPort.Write("6")
    End Sub


    Private Sub GetSerialPortNames()
        For Each sport As String In My.Computer.Ports.SerialPortNames
            cboPorts.Items.Add(sport)
        Next
    End Sub

    Private Sub frmRGBLed_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            GetSerialPortNames()
            cboPorts.SelectedIndex = 0
        Catch
            MsgBox("No ports connected.")
        End Try
    End Sub

End Class

[/codesyntax]

 

You could add any other functionality you wanted, maybe a status bar. Automatic detection of the Wemos rather than using a combobox and buttons

Links

The complete code is in the following github location, I always find it easier to check out the code on your own machine. There is also the fritzing schematics and code for the Arduino IDE

https://github.com/esp8266learning/projects/tree/master/Wemos%20RGB%20Led

2 COMMENTS