Connecting multiple [sensors](https://www.ampheo.com/c/sensors) to an [Arduino Uno](https://www.ampheo.com/product/a000046-25542493)'s single serial port (UART: RX/TX) requires careful planning because the hardware UART (pins 0 and 1) is shared with USB communication and can only handle one device at a time. Below are practical solutions to interface multiple sensors while avoiding conflicts. ![FQ701MUJWUYM8A8](https://hackmd.io/_uploads/ryCDjPYQge.png) **1. Use SoftwareSerial for Additional Serial Ports** The SoftwareSerial library lets you create virtual serial ports on other digital pins, allowing multiple sensors to communicate simultaneously. Limitation: Not all pins support reliable high-speed communication (best under 9600 baud). **Wiring Example:** * Hardware UART (Pins 0,1): Reserved for USB debugging (or one sensor). * SoftwareSerial Pins: Connect additional sensors (e.g., GPS, Bluetooth) to other digital pins (2–13). **Code Example:** ``` cpp #include <SoftwareSerial.h> // Create virtual serial ports SoftwareSerial sensor1(2, 3); // RX, TX (Sensor 1 on pins 2 & 3) SoftwareSerial sensor2(4, 5); // RX, TX (Sensor 2 on pins 4 & 5) void setup() { Serial.begin(9600); // Hardware UART for USB sensor1.begin(9600); // Sensor 1 (e.g., GPS) sensor2.begin(9600); // Sensor 2 (e.g., Bluetooth) } void loop() { // Read from Sensor 1 if (sensor1.available()) { Serial.write(sensor1.read()); // Forward to USB } // Read from Sensor 2 if (sensor2.available()) { Serial.write(sensor2.read()); } } ``` Note: Avoid using pins 0, 1, and 2 if you need interrupts. **2. Use I2C or SPI for Non-Serial Sensors** Many sensors (e.g., [BME280](https://www.ampheo.com/product/bme280-26836707), MPU6050) support I2C (A4/A5) or SPI (D10-D13), freeing up the UART for critical serial devices. **I2C Wiring Example:** ![企业微信截图_20250613165939](https://hackmd.io/_uploads/HyCKdDKXlg.png) **SPI Wiring Example:** ![企业微信截图_20250613170002](https://hackmd.io/_uploads/HkIj_vFQee.png) **3. Multiplexing with a UART Splitter (Hardware Solution)** For bidirectional communication, use a UART multiplexer (e.g., [CD4051](https://www.onzuu.com/search/CD4051), [74HC4051](https://www.onzuu.com/search/74HC4051)) to switch between sensors dynamically. **Wiring:** * Connect all sensors' TX lines to the multiplexer inputs. * Connect the multiplexer output to [Arduino](https://www.ampheo.com/c/development-board-arduino)'s RX pin (0). * Control the multiplexer with Arduino's digital pins. **Code Example:** ``` cpp void setup() { Serial.begin(9600); pinMode(6, OUTPUT); // Mux control pin S0 pinMode(7, OUTPUT); // Mux control pin S1 } void loop() { // Read Sensor 1 (Mux channel 0) digitalWrite(6, LOW); digitalWrite(7, LOW); if (Serial.available()) { /* Process data */ } // Read Sensor 2 (Mux channel 1) digitalWrite(6, HIGH); digitalWrite(7, LOW); if (Serial.available()) { /* Process data */ } } ``` **4. Use a Protocol Converter (UART to I2C/SPI)** Convert serial sensor data to I2C/SPI using: * [SC16IS750](https://www.onzuu.com/search/SC16IS750) (UART-to-I2C bridge) * FT232H (USB-to-serial, for advanced setups) **5. Daisy-Chaining Sensors with Shared UART** Some sensors (e.g., Modbus devices) support daisy-chaining with unique addresses. **Example: RS485 Sensors** 1. Connect all sensors to an RS485 bus (A/B lines). 2. Use MAX485 module to interface with Arduino. 3. Assign unique IDs to each sensor. **Critical Considerations** 1. Baud Rate Conflicts: Ensure all devices use the same baud rate (e.g., 9600). 2. Power Limits: Avoid exceeding the Uno’s 5V/40mA per pin. 3. SoftwareSerial Limits: * Only one SoftwareSerial port can receive data at a time. * Higher baud rates (>57600) may cause errors. **Recommended Approach** ![企业微信截图_20250613170207](https://hackmd.io/_uploads/HyLmYDFmle.png) **Troubleshooting Tips** * Garbage Data: Check baud rates and wiring (cross RX/TX correctly). * Crashing: Disable Serial.print() if using pins 0/1 for sensors. * Memory Issues: Use PROGMEM for large strings (saves SRAM). By combining SoftwareSerial, I2C/SPI, and hardware multiplexing, you can efficiently connect multiple sensors to an [Arduino Uno](https://www.ampheoelec.de/product/a000046-25542493) without sacrificing functionality.