Main Content

Send and Receive Serial Data Using Arduino Hardware

This example shows how to use Simulink® Support Package for Arduino® Hardware to send and receive serial data with Arduino hardware.

Supported Hardware

  • Arduino Mega 2560

  • Arduino Mega ADK

  • Arduino Uno

  • Arduino Due

  • Arduino MKR1000

  • Arduino MKR WIFI 1010

  • Arduino ZERO

  • Arduino Leonardo

  • Arduino Nano 33 IoT

  • Arduino Nano 33 BLE Sense

  • Arduino compatible ESP32 - WROOM

  • Arduino compatible ESP32 - WROVER

Introduction

In this example, the arduino_serial_sendreceive and arduino_serial_send_println Simulink models are used to send and receive serial data. These models use the Serial Transmit and Serial Receive blocks to exchange data.

In the arduino_serial_sendreceive model, the TX1 pin sends serial data to the RX1 pin of your Arduino hardware. This model is configured to run in External mode. For more information on External mode, see Tune and Monitor Model Running on Hardware.

In the arduino_serial_send_println model, the Arduino hardware sends data to your computer over the serial port 0 (USB port) of the Arduino hardware. This model is configured to run in Normal mode. In this mode, the model is deployed on the Arduino hardware.

The models provided in this example are preconfigured for the Arduino Mega 2560 board. You can run these models on any of the boards listed in the Supported Hardware section by changing the Hardware board parameter in the Simulink model. For more information on how to change the Hardware board parameter, see the Step 2: Configure the Model for Arduino Hardware section of this example.

Prerequisites

Before you start with this example, we recommend you complete the following:

Required Hardware

To run this example, you must have the following hardware:

  • Supported Arduino board

  • Connecting wires

  • USB cable

Step 1: Connect TX and RX Pins on Arduino Hardware

1. Connect your Arduino board to your computer using the USB cable.

2. Connect the TX1 pin to the RX1 pin of your Arduino hardware. This connection is a loopback connection.

Step 2: Configure Simulink Model for Arduino Hardware

1. Open the arduino_serial_sendreceive Simulink model.

This model is configured to run in External mode.

2. To configure the model, click Hardware Settings in the HARDWARE tab of the Simulink toolbar.

3. In the Configurations Parameters dialog box, select Hardware Implementation.

4. From the Hardware board list, select the type of Arduino board that you are using.

5. From the Groups list under Target hardware resources, select Serial port properties.

The Serial 1 baud rate parameter is set to 9600. In this example, the baud rate of Serial 1 baud rate is set because the TX1 and RX1 pins correspond to the Serial port 1 of the Arduino hardware. If you are using any other serial port pins for communication, specify the baud rate of the corresponding serial port.

6. Click Apply. Click OK to close the dialog box.

Step 3: Configure Blocks in Simulink Model

Double-click these blocks and verify the parameter values specified in the Block Parameters dialog box.

     Block           | Parameter Name                      | Value
    ---------------------------------------------------------------------------------
     Constant        | Constant value                      | [5682.769 -4561 7825]
                     | Interpret vector parameters as 1-D  | selected
                     | Sample time                         | 0.1
     Serial Transmit | Serial Port                         | 1
                     | Send mode                           | write
     Serial Receive  | Port number                         | 1
                     | Data type                           | double
                     | Data length                         | 3
                     | Sample time                         | 0.1
     Display Data    | Format                              | long
     Display Status  | Format                              | short

Note:

  • Because the TX1 pin is connected to the RX1 pin, specify the Serial Port parameter of the Serial Transmit block and the Port number parameter of the Serial Receive block as 1.

  • The Sample time parameter specified in the Constant block and the Serial Receive block must be the same.

Step 4: Validate Simulink Model Design Using Connected I/O

You can simulate the model in Normal mode with Connected I/O to validate the model design before generating the code and deploying the model on Arduino. When you simulate the model, the TX1 pin transmits data to the RX1 pin of your Arduino hardware. This communication between the model and Arduino does not require any code generation or model deployment, thus accelerating the simulation process. For more information on Connected I/O, see Communicate with Hardware Using Connected IO.

To simulate the model in Normal mode with Connected I/O:

1. On the Hardware tab of the Simulink model, in the Mode section, select Connected IO and then click Run with IO. The lower left corner of the model window displays status while Simulink prepares, downloads, and runs the Simulink model on your computer.

At each time step, the TX1 pin transmits the data specified in the Constant block to the RX1 pin of your Arduino hardware. The RX1 pin receives the data and displays it on the Display Output block.

2. Observe the output in the Display Output and Display Status blocks.

     Block          | Output                | Description
  ---------------------------------------------------------------------------------------
     Display Data   | [5682.769 -4561 7825] | Displays the data received
                    |                       | on the RX1 pin of the Arduino
                    |                       | hardware at the given time step.
                    |                       | The value is the same as
                    |                       | specified in the |Constant| block.
     Display Status | 1                     | A value of 1 indicates that
                    |                       | the Serial Receive block received data
                    |                       | at the given time step.

3. Disconnect the wire from the RX1 pin. Both the Display blocks now output 0. A value of 0 in the Display Status block indicates that no data is received at the given time step. If you reconnect the wire again, you can see that the values at the Display blocks are restored.

4. To stop running the model, click Stop.

Step 5: Run Simulink Model in External Mode (Monitor and Tune)

After you successfully simulate the model in Connected I/O, simulate the model in External mode. Unlike Connected I/O, the model is deployed as a C code on the hardware. The code obtains real-time data from the hardware.

To simulate the model in External mode:

1. On the Hardware tab of the Simulink model, in the Mode section, select Run on board and then click Monitor & Tune. The lower left corner of the model window displays status while Simulink prepares, downloads, and runs the Simulink model on the hardware.

2. To stop running the model, click Stop.

Step 6: Deploy Simulink Model on Arduino

1. Remove the wire connecting RX1 and TX1 pins because in this model, the data is sent to a serial terminal over the Serial port 0 (USB port).

2. Open the arduino_serial_send_println Simulink model.

This model is configured to run in Normal mode.

3. In the Configurations Parameters dialog box, go to Hardware Implementation > Target hardware resources > Groups > Serial port properties. Set Serial 0 baud rate to the maximum baud rate supported by the serial port of your Arduino hardware.

4. Double-click the Serial Transmit block and verify these parameter values.

     Parameter Name     | Value          | Description
    ----------------------------------------------------------------------------------------------------------
     Serial Port        | 0              | Send data over serial port 0.
     Send mode          | println        | Add a carriage return character '\r'(ASCII 13)
                        |                | and a newline character '\n'(ASCII 10) at the
                        |                | end of each byte of data.
     Label              | Counter_val    | The label for the data to be displayed on the serial terminal.

5. On the Hardware tab of the Simulink model, in the Mode section, select Run on board and then click Build, Deploy & Start. The lower left corner of the model window displays status while Simulink prepares, downloads, and runs the Simulink model on the hardware.

6. Open the serial terminal in your computer ( for example, Arduino IDE serial monitor). When logging in to the serial terminal:

  • Specify the COM port number that corresponds to your serial connection. To learn how to find the COM port number, see Configure Host and Bootloader COM Port Manually.

  • Specify the baud rate to the same value as the baud rate set in the Model Configuration Parameters dialog box. In this example, the baud rate is 115200.

After you login to the serial terminal, you can see that the counter values are displayed with label Counter_val :.

Other Things to Try

  • Configure the arduino_serial_sendreceive Simulink model to exchange data over other serial ports of the Arduino hardware.

  • Create a Simulink model that uses Serial Receive (Instrument Control Toolbox) and Serial Send (Instrument Control Toolbox) blocks from Instrument Control Toolbox™ to exchange serial data between your computer and Arduino hardware.