Arduino UNO Q RS422

Use RS422 serial communication with the Arduino UNO Q and a TTL-to-RS422 module. RS422 uses differential signaling over two twisted pairs — one pair for transmit, one for receive — enabling full-duplex, long-distance communication up to 1200m with high noise immunity. With Bridge and Telegram, you can send and receive RS422 data remotely from Python or your phone.

In this tutorial, you will learn:

Arduino UNO Q RS422

Hardware Preparation

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
1×TTL to RS422 Module
1×Jumper Wires
1×Optionally, RS422 to USB Cable
1×Recommended: Screw Terminal Block Shield for Arduino Uno
1×Recommended: Sensors/Servo Expansion Shield for Arduino Uno
1×Recommended: Breadboard Shield for Arduino Uno
1×Recommended: Enclosure for Arduino Uno
1×Recommended: Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Disclosure: Some of the links provided in this section are Amazon affiliate links. We may receive a commission for any purchases made through these links at no additional cost to you.
Additionally, some of these links are for products from our own brand, DIYables .

Overview of the TTL to RS422 Module

The Arduino UNO Q MCU communicates over UART using TTL logic levels (3.3V). To communicate with RS422-compatible industrial devices, cameras, or CNC controllers over long distances, you need to convert TTL to the RS422 differential standard. The TTL-to-RS422 module performs this conversion in both directions.

RS422 key characteristics:

  • Full-duplex communication (separate TX and RX pairs)
  • Long distance: up to 1200 meters
  • High noise immunity due to differential signaling
  • Point-to-point or limited multi-drop (up to 10 receivers per driver)
RS422 Module Pinout

Pinout

  • TTL interface (connects to Arduino UNO Q MCU):
    • VCC: Power — connect to 3.3V
    • GND: Ground
    • RXD: Data input — connect to MCU TX pin (D6)
    • TXD: Data output — connect to MCU RX pin (D7)
  • RS422 interface:
    • A (R+): RX+ — connect to remote TX+ (T+/Y pin)
    • B (R-): RX− — connect to remote TX- (T-/Z pin)
    • Y (T+): TX+ — connect to remote RX+ (R+/A pin)
    • Z (T-): TX− — connect to remote RX- (R-/B pin)

Wiring Diagram

The wiring diagram between Arduino UNO Q TTL to RS422 Module

This image is created using Fritzing. Click to enlarge image

TTL-to-RS422 Module Pin Arduino UNO Q MCU Pin Note
VCC 3.3V
GND GND
RXD D6 (MCU TX)
TXD D7 (MCU RX)

Connect A/B (R+/R-) and Y/Z (T+/T-) to the corresponding pins of your RS422 device or a USB-to-RS422 adapter for PC testing.

How To Program For RS422

  • Include SoftwareSerial and create an RS422 serial object:
#include <SoftwareSerial.h> SoftwareSerial rs422(7, 6); // RX: D7, TX: D6
  • Read incoming RS422 data:
if (rs422.available()) { char data = rs422.read(); }
  • Send data over RS422:
rs422.print("Hello from Arduino UNO Q"); rs422.println("With newline");

Arduino UNO Q Code

/* * This Arduino UNO Q code was developed by newbiely.com * * This Arduino UNO Q code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-rs422 */ // COPYRIGHT newbiely.com // AUTHOR: newbiely // This code is made available for public use without restriction. // For complete instructions, tutorials, and further information, visit: // https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-rs422 #include <SoftwareSerial.h> SoftwareSerial rs422(7, 6); // RX: D7, TX: D6 void setup() { Monitor.begin(9600); // USB serial for debug output rs422.begin(9600); // RS422 module serial delay(100); } void loop() { // Forward data from RS422 to Monitor if (rs422.available()) { char data = rs422.read(); Monitor.print(data); rs422.print(data); // echo back to sender } // Forward data from Monitor to RS422 if (Monitor.available()) { char data = Monitor.read(); rs422.print(data); } }

Detailed Instructions

First time with Arduino UNO Q? Follow the Getting Started with Arduino UNO Q tutorial before proceeding.

  • Connect: Wire the TTL-to-RS422 module to the Arduino UNO Q MCU as shown in the wiring diagram.
  • Open Arduino App Lab: Launch Arduino App Lab and wait until it detects your Arduino UNO Q.
  • Create a new App: Click the Create New App button.
Create New App in Arduino App Lab on Arduino UNO Q
  • Give the App a name, for example: RS422
  • Click Create to confirm.
Arduino App Lab App folders and files on Arduino UNO Q
  • Paste the sketch: Copy the MCU code above and paste it into sketch/sketch.ino.
  • Upload: Click the Run button in Arduino App Lab.
Click Run button in Arduino App Lab on Arduino UNO Q

Testing

To test RS422 communication:

  • Connect the T+/T- and R+/R- pins to a USB-to-RS422 adapter:
Arduino UNO Q RS422 to PC communication
  • Open a Serial Terminal (such as Tera Term or PuTTY) on your PC.
  • Set the baud rate to 9600, select the correct COM port.
  • Type any text and send it. The Arduino UNO Q will echo it back — you should see the echoed data in the terminal.

Bridge: Linux + MCU

This section shows how to send and receive RS422 data from the Linux side (Python) via Bridge:

  • The TTL-to-RS422 module is connected to the MCU via SoftwareSerial — the MCU handles all serial I/O
  • The MPU cannot use SoftwareSerial directly — it calls Bridge functions to send/receive RS422 data
  • The MPU has Wi-Fi — running full Debian Linux, it can relay RS422 data to Telegram or web services
  • Arduino_RouterBridge enables RPC communication between the two processors
  • ⚠️ /dev/ttyHS1 (Linux) and Serial1 (MCU) are RESERVED by the router — never open them in user code

MCU Code (Bridge)

/* * This Arduino UNO Q code was developed by newbiely.com * * This Arduino UNO Q code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-rs422 */ // COPYRIGHT newbiely.com // AUTHOR: newbiely // This code is made available for public use without restriction. // For complete instructions, tutorials, and further information, visit: // https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-rs422 #include "Arduino_RouterBridge.h" #include <SoftwareSerial.h> SoftwareSerial rs422(7, 6); // RX: D7, TX: D6 String received_data = ""; String send_rs422(String arg) { rs422.println(arg); Monitor.print("Sent via RS422: "); Monitor.println(arg); return "ok:sent"; } String get_received(String arg) { String result = received_data; received_data = ""; return result; } void setup() { Bridge.begin(); Monitor.begin(); rs422.begin(9600); delay(100); Bridge.provide_safe("send_rs422", send_rs422); Bridge.provide("get_received", get_received); Monitor.println("Arduino UNO Q RS422 Bridge ready"); } void loop() { while (rs422.available()) { char c = rs422.read(); received_data += c; } }

Python Code (Bridge)

/* * This Arduino UNO Q code was developed by newbiely.com * * This Arduino UNO Q code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-rs422 */ # COPYRIGHT newbiely.com # AUTHOR: newbiely # This code is made available for public use without restriction. # For complete instructions, tutorials, and further information, visit: # https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-rs422 from arduino.app_utils import * import time def loop(): print("Sending message via RS422...") result = Bridge.call("send_rs422", "Hello from Arduino UNO Q!") print(f"Result: {result}") time.sleep(1) data = Bridge.call("get_received") if data: print(f"Received via RS422: {data}") else: print("No data received") time.sleep(2) App.run(user_loop=loop)

Detailed Instructions

  • Connect: Wire the TTL-to-RS422 module to the Arduino UNO Q as shown above.
  • Open Arduino App Lab and create a new App named RS422Bridge.
  • Paste the MCU sketch into sketch/sketch.ino.
  • Paste the Python code into the Python file.
  • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
Add sketch library in Arduino App Lab on Arduino UNO Q
  • Search for Arduino_RouterBridge created by Arduino and click the Install button.
My Apps / DIYables Apps
Run
Bricks
No bricks added...
Sketch Libraries
No sketch libra...
Files
python
sketch
.gitignore
README.md
app.yaml
sketch.ino
Add sketch library
Arduino_RouterBridge Arduino

This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

0.4.1
Install
More Info
  • Upload: Click the Run button. Python will send a message via RS422 and read back any echoed data.
Click Run button in Arduino App Lab on Arduino UNO Q

App Lab Console Output

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Arduino UNO Q RS422 Bridge ready [2026-04-29 09:00:06] Sent via RS422: Hello from Arduino UNO Q!
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:06] Sending message via RS422... [2026-04-29 09:00:06] Result: ok:sent [2026-04-29 09:00:07] Received via RS422: Hello from Arduino UNO Q!

Telegram

Send and receive RS422 data through Telegram — forward messages from precision industrial equipment to your phone or send commands from Telegram to an RS422 device.

MCU sketch: Keep the same MCU sketch from the previous Bridge section.

Python Code (Telegram)

/* * This Arduino UNO Q code was developed by newbiely.com * * This Arduino UNO Q code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-rs422 */ # COPYRIGHT newbiely.com # AUTHOR: newbiely # This code is made available for public use without restriction. # For complete instructions, tutorials, and further information, visit: # https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-rs422 from arduino.app_utils import * import requests import time TELEGRAM_BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" CHAT_ID = "YOUR_CHAT_ID" last_update_id = 0 def get_updates(): global last_update_id url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates" params = {"offset": last_update_id + 1, "timeout": 5} try: response = requests.get(url, params=params, timeout=10) data = response.json() if data["ok"]: return data["result"] except Exception as e: print(f"Error getting updates: {e}") return [] def send_message(chat_id, text): url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = {"chat_id": chat_id, "text": text} try: requests.post(url, data=payload, timeout=10) except Exception as e: print(f"Error sending message: {e}") def loop(): updates = get_updates() for update in updates: last_update_id = update["update_id"] if "message" not in update: continue message = update["message"] chat_id = message["chat"]["id"] text = message.get("text", "").strip() print(f"Received: {text}") if text == "/start": send_message(chat_id, "Arduino UNO Q RS422 Bot\n" "/send <message> - Send a message via RS422\n" "/read - Read data received from RS422") elif text.startswith("/send"): parts = text.split(" ", 1) if len(parts) < 2: send_message(chat_id, "Usage: /send <message>") else: result = Bridge.call("send_rs422", parts[1]) send_message(chat_id, f"Sent via RS422: {parts[1]}") elif text == "/read": data = Bridge.call("get_received") if data: send_message(chat_id, f"Received via RS422:\n{data}") else: send_message(chat_id, "No data received yet.") else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(0.3) App.run(user_loop=loop)

Detailed Instructions

  • Replace YOUR_TELEGRAM_BOT_TOKEN with your actual bot token from BotFather.
  • Replace YOUR_CHAT_ID with your Telegram chat ID.
  • Paste the Python code into your App's Python file (keep the same MCU sketch).
  • Click the Run button — send /send Hello in Telegram to transmit data over RS422.

App Lab Console Output

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:10:05] Received: /send Hello RS422 device! [2026-04-29 09:10:09] Received: /read
Telegram
Telegram 12:45
Welcome to Telegram!
ArduinoBot 10:19
Chatting with Arduino...
telegram-botfather
BotFather Yesterday
Your bot has been created.

ArduinoBot

bot
Today
/send Hello RS422 device!
10:15 AM ✓✓
Sent via RS422: Hello RS422 device!
10:16 AM
/read
10:17 AM ✓✓
Received via RS422: Hello RS422 device!
10:18 AM

OpenClaw

...OPENCLAW

OpenClaw support for Arduino UNO Q RS422 is coming soon.

...OPENCLAW

Project Ideas

You can build many useful projects with RS422 communication and Arduino UNO Q:

  • CNC Machine Monitor: Connect the Arduino UNO Q to a CNC controller via RS422; the MCU reads position and status messages, and Python sends real-time updates to Telegram when machining starts, pauses, or completes
  • High-Speed Camera Trigger: Use RS422 to send precise trigger signals to industrial cameras; Python determines the trigger timing via Bridge and sends the command to the MCU, which transmits the trigger pulse over the RS422 differential pair
  • Long-Distance Sensor Array: Wire RS422 over 500m to a remote environmental sensor station; the MCU reads sensor data over RS422 and Python logs readings and sends Telegram alerts when values cross thresholds
  • PLC Status Dashboard: Connect to a PLC's RS422 programming port to read diagnostic data; Python formats the data as a status report and sends it to Telegram on a scheduled interval
  • Precision Motion Controller: Send position commands from Telegram via Bridge to the MCU, which forwards them over RS422 to a servo driver — enabling remote, full-duplex control of a precision actuator

Challenge Yourself

Ready to go further with RS422 on Arduino UNO Q? Try these challenges:

  • Easy: Add a /ping Telegram command that sends a fixed string PING\n via RS422 and immediately reads the reply with get_received — useful for testing whether the connected RS422 device is responsive.
  • Medium: Implement a message log: Python stores the last 10 received RS422 messages in a Python list; a /history Telegram command returns all stored messages as a numbered list — giving you a recent communication history from your phone.
  • Advanced: Build a full-duplex RS422 relay: Python maintains a loop that sends a heartbeat string via send_rs422 every 10 seconds, reads any incoming data with get_received, and forwards it to Telegram — while also listening for Telegram commands to send custom messages, creating a complete bidirectional RS422-to-Telegram gateway.

※ OUR MESSAGES

  • As freelancers, We are AVAILABLE for HIRE. See how to outsource your project to us
  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!