Arduino Tian: Bridging the Gap with Dual-Core Power
The Arduino Tian is a versatile board featuring a dual-core processor, combining a powerful MIPS MCU with a familiar AVR microcontroller for flexible IoT and embedded projects.
Released by Arduino in 2015, the Arduino Tian was designed to offer a more powerful and flexible platform for makers, bridging the gap between simpler Arduino boards and more complex single-board computers. It aimed to provide the ease of use associated with the Arduino ecosystem while incorporating advanced features for more demanding applications.
At its heart, the Tian is powered by a MIPS-based Atheros AR9342 SoC, which includes a 600MHz MIPS24Kc processor. This is complemented by a separate ATmega32U4 microcontroller, the same chip found on popular boards like the Arduino Leonardo and Micro. This dual-processor architecture allows for a division of labor: the MIPS core handles complex tasks, networking, and running an embedded Linux distribution (Linino OS), while the ATmega32U4 manages real-time I/O operations and the Arduino API.
The Tian sits in a unique position within the Arduino family, offering a significant step up in processing power and connectivity compared to boards like the Uno or Mega, yet retaining the familiar Arduino programming environment. It was particularly suited for projects requiring network connectivity, data processing, and real-time control, such as IoT gateways, home automation hubs, or more sophisticated robotics.
Its history is tied to Arduino's efforts to integrate more powerful Linux-capable processors into their product line, enabling users to leverage both the simplicity of Arduino sketches and the power of a full operating system. This made it an attractive option for users looking to move beyond basic microcontroller projects and explore more advanced embedded Linux applications without completely leaving the Arduino ecosystem.
Watch
Related video, embedded from YouTube.
Specifications
| Microcontroller / SoC | Atheros AR9342 (MIPS24Kc) @ 600MHz + ATmega32U4 |
| Architecture | MIPS24Kc (64-bit capable) + AVR (8-bit) |
| Clock speed | 600 MHz (MIPS) + 16 MHz (ATmega32U4) |
| Flash / Storage | 256 MB DDR2 RAM (AR9342), 32 MB Flash (AR9342), 32 KB Flash (ATmega32U4) |
| RAM / SRAM | 256 MB DDR2 (AR9342), 2.5 KB SRAM (ATmega32U4) |
| Operating voltage | 3.3V |
| Digital I/O pins | 20 (ATmega32U4 - 7 can be PWM) |
| Analog / ADC | 7 (ATmega32U4 - 10-bit) |
| PWM | 7 (ATmega32U4) |
| Connectivity | Wi-Fi 802.11 b/g/n, Ethernet port |
| USB | 1x Micro-USB (for programming ATmega32U4 and power), 1x USB-A host port |
| Power input | 7-12V via DC barrel jack or 5V via Micro-USB |
Pinout & pin functions
| Pin | Function |
|---|---|
| GND | Ground |
| 3.3V | 3.3V Power Output |
| IOREF | Voltage Reference for I/O pins |
| D0 (RX) | Digital Pin 0, UART Receive |
| D1 (TX) | Digital Pin 1, UART Transmit |
| D2 | Digital Pin 2 |
| D3 | Digital Pin 3, PWM |
| D4 | Digital Pin 4 |
| D5 | Digital Pin 5, PWM |
| D6 | Digital Pin 6, PWM |
| D7 | Digital Pin 7 |
| D8 | Digital Pin 8 |
| D9 | Digital Pin 9, PWM |
| D10 (SS) | Digital Pin 10, SPI Slave Select |
| D11 (MOSI) | Digital Pin 11, SPI Master Out Slave In |
| D12 (MISO) | Digital Pin 12, SPI Master In Slave Out |
| D13 (SCK) | Digital Pin 13, SPI Clock |
| A0 | Analog Pin 0, ADC |
| A1 | Analog Pin 1, ADC |
| A2 | Analog Pin 2, ADC |
| A3 | Analog Pin 3, ADC |
| A4 (SDA) | Analog Pin 4, I2C Data |
| A5 (SCL) | Analog Pin 5, I2C Clock |
| RESET | Reset pin for ATmega32U4 |
| 5V | 5V Power Output (regulated) |
| VIN | Input voltage (7-12V) |
Wiring & circuit basics
The Arduino Tian operates at a logic level of 3.3V. This is crucial when interfacing with external components. Connecting 5V devices directly to 3.3V GPIO pins may not work reliably, and connecting 3.3V devices to 5V-tolerant pins requires careful consideration. If you need to interface with 5V logic devices, a level shifter is recommended to prevent damage to the Tian. Powering the board can be done via the DC barrel jack (7-12V recommended) or the Micro-USB port (5V). The barrel jack is preferred for higher current applications or when powering other devices from the board's 5V or 3.3V pins, as it bypasses the USB power limitations.
A common setup involves powering the board and then controlling an LED. Connect the longer leg (anode) of an LED to a digital pin, such as D9, and the shorter leg (cathode) to one end of a current-limiting resistor (typically 220-330 ohms). Connect the other end of the resistor to a GND pin on the Arduino Tian. When D9 is set to HIGH, current flows through the LED and resistor, illuminating the LED. The resistor protects the LED and the microcontroller pin from excessive current.
For I2C communication, which is used by many sensors like the MPU6050 or BMP280, connect the sensor's SDA pin to the Arduino Tian's A4 (SDA) pin and the sensor's SCL pin to the A5 (SCL) pin. Ensure the sensor is also powered with 3.3V and connected to a GND pin. Some I2C sensors may require pull-up resistors on the SDA and SCL lines, though many modern modules have these built-in.
Programming & getting started
The Arduino Tian can be programmed using the Arduino IDE, leveraging the ATmega32U4 microcontroller. When you connect the Tian via its Micro-USB port, it appears as a standard Arduino Leonardo. Select 'Arduino Tian' under the board menu in the IDE, and then choose the correct COM port. Uploading sketches is done through the IDE's upload button, which flashes the ATmega32U4. For more advanced use cases involving the MIPS core, you can install and run Linino OS, a Debian-based Linux distribution, allowing you to develop applications using Python, Node.js, or other Linux-compatible tools, often accessed via SSH.
To upload your first sketch, open the Arduino IDE, select 'Arduino Tian' from the Tools > Board menu, and the appropriate port. Write a simple sketch, like the Blink example, modifying the pin number if necessary. Click the Upload button. The ATmega32U4 will reset and enter bootloader mode, allowing the IDE to flash the new code. For Linux-based development, you would typically connect to the board via SSH after setting up networking and use standard Linux development tools.