This example uses two UARTs on the Netduino and demonstrates how to send a message over one UART to the second.

The full discussion regarding UARTs can be found on the Wilderness Labs Developer Portal.

Code

using System;
using System.Threading;
using System.IO.Ports;
using Microsoft.SPOT;
using System.Text;

namespace UARTTest
{
    public class Program
    {
        /// <summary>
        /// Two com ports, one sender and one receiver.
        /// </summary>
        /// <remarks>
        /// Note that the transmitter and the receiver must be configured to use the
        /// same baud rate, number of bits etc.
        /// </remarks>
        static SerialPort transmitter = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
        static SerialPort receiver = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);

        /// <summary>
        /// Timer object generates and event periodically to transmit data to the receiver.
        /// </summary>
        static Timer timer = new Timer(Timer_Interrupt, null, 0, 2000);

        /// <summary>
        /// Variables to hold information about the messages being transmitted and received.
        /// </summary>
        static int count = 0;
        static string messageBeingReceived = "";

        /// <summary>
        /// The entry point of the program, where the program control starts and ends.
        /// </summary>
        public static void Main()
        {
            transmitter.Open();
            receiver.Open();
            receiver.DataReceived += SerialDataReceived;
            Thread.Sleep(Timeout.Infinite);
        }

        /// <summary>
        /// Process data from the serial port(s)
        /// </summary>
        /// <param name="sender">Serial port that is receiving the data.</param>
        /// <param name="e">Event information.</param>
        static void SerialDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if ((e.EventType == SerialData.Chars) && (sender == receiver))
            {
                const int BUFFER_SIZE = 1024;
                byte[] buffer = new byte[BUFFER_SIZE];

                int amount = ((SerialPort)sender).Read(buffer, 0, BUFFER_SIZE);
                if (amount > 0)
                {
                    char[] characters = Encoding.UTF8.GetChars(buffer);
                    for (int index = 0; index < amount; index++)
                    {
                        if (buffer[index] == '\n')
                        {
                            Debug.Print("Message received: " + messageBeingReceived);
                            messageBeingReceived = "";
                        }
                        else
                        {
                            messageBeingReceived += characters[index];
                        }
                    }
                }
            }
        }

        /// <summary>
        /// Periodic interrupt generated by the timer.
        /// </summary>
        /// <param name="state">State.</param>
        static void Timer_Interrupt(object state)
        {
            if (transmitter.IsOpen)
            {
                count++;
                String messageToSend = count.ToString();
                Debug.Print("Sending message: " + messageToSend);
                messageToSend += "\n";
                transmitter.Write(Encoding.UTF8.GetBytes(messageToSend), 0, messageToSend.Length);
            }
        }
    }
}

Netduino Samples Github Repository

Full source code for all of the samples can be found in the Netduino Samples repository on Github.