Showing posts with label Arduino Esplora. Show all posts
Showing posts with label Arduino Esplora. Show all posts

Friday, September 26, 2014

Esplora TFT work on Arduino Uno

The Arduino TFT screen is a backlit LCD screen with headers, designed to fit Arduino Esplora or the Arduino Robot. This module is also compatible with any AVR-based Arduino (Uno, Leonardo, etc...) or with the Arduino Due. Read Connecting to other Arduino boards for more details.

This example, TFTGraph, run on Arduino Uno board, reads the value of analog input on A0, and graphs the values on the screen.


To connect Arduino TFT to Arduino Uno board:


Run example of TFTGraph example from Arduino IDE, File > Examples > TFT > Arduino > TFTGraph.

/*

 TFT Graph

 This example for an Arduino screen reads
 the value of an analog sensor on A0, and
 graphs the values on the screen.

 This example code is in the public domain.

 Created 15 April 2013 by Scott Fitzgerald

 http://arduino.cc/en/Tutorial/TFTGraph

 */

#include <TFT.h>  // Arduino LCD library
#include <SPI.h>

// pin definition for the Uno
#define cs   10
#define dc   9
#define rst  8

// pin definition for the Leonardo
// #define cs   7
// #define dc   0
// #define rst  1

TFT TFTscreen = TFT(cs, dc, rst);

// position of the line on screen
int xPos = 0;

void setup() {
  // initialize the serial port
  Serial.begin(9600);

  // initialize the display
  TFTscreen.begin();

  // clear the screen with a pretty color
  TFTscreen.background(250, 16, 200);
}

void loop() {
  // read the sensor and map it to the screen height
  int sensor = analogRead(A0);
  int drawHeight = map(sensor, 0, 1023, 0, TFTscreen.height());

  // print out the height to the serial monitor
  Serial.println(drawHeight);

  // draw a line in a nice color
  TFTscreen.stroke(250, 180, 10);
  TFTscreen.line(xPos, TFTscreen.height() - drawHeight, xPos, TFTscreen.height());

  // if the graph has reached the screen edge
  // erase the screen and start again
  if (xPos >= 160) {
    xPos = 0;
    TFTscreen.background(250, 16, 200);
  }
  else {
    // increment the horizontal position:
    xPos++;
  }

  delay(16);
}


Thursday, April 10, 2014

Arduino Esplora example: read bmp from SD Card, display on TFT screen

Example of Arduino Esplora, read bmp from AD Card, and display on TFT screen.

#include <Esplora.h>
#include <SPI.h>
#include <SD.h>
#include <TFT.h>

// SD Chip Select pin
#define SD_CS    8

// this variable represents the image to be drawn on screen
PImage image;
int prvSwitch1, prvSwitch2, prvSwitch3, prvSwitch4;

void setup() {
  Esplora.writeRGB(255, 255, 255);
  
  EsploraTFT.begin();
  EsploraTFT.background(0, 0, 0);
  EsploraTFT.stroke(255,255,255);
  
  // initialize the serial port
  Serial.begin(9600);
  while (!Serial) {
    // wait for serial line to be ready
  }

  // try to access the SD card
  Serial.print("Initializing SD card...");
  EsploraTFT.text("Initializing SD card...", 0, 10);
  if (!SD.begin(SD_CS)) {
    Serial.println("failed!");
    EsploraTFT.text("failed!", 0, 10);
    return;
  }
  Serial.println("OK!");
  EsploraTFT.text("OK!", 0, 10);

  image = EsploraTFT.loadImage("arduino.bmp");

  if (image.isValid() != true) {
    Serial.println("error while loading arduino.bmp");
    EsploraTFT.text("error while loading arduino.bmp", 0, 10);
  }
  
  Esplora.writeRGB(0, 0, 0);
  EsploraTFT.background(0, 0, 0);
  Serial.println("started");
  EsploraTFT.text("started", 0, 10);

}

void loop(){
  int sw = Esplora.readButton(SWITCH_1);
  if(sw != prvSwitch1){
    prvSwitch1 = sw;
    if(sw == LOW){
      Esplora.writeRGB(255, 255, 255);
      Serial.println("Switch1 pressed");
      EsploraTFT.image(image, 0, 0);
      Esplora.writeRGB(0, 0, 0);
    }
  }
  
  sw = Esplora.readButton(SWITCH_2);
  if(sw != prvSwitch2){
    prvSwitch2 = sw;
    if(sw == LOW){
      Esplora.writeRGB(255, 255, 255);
      Serial.println("Switch2 pressed");
      EsploraTFT.background(255, 0, 0);
      Esplora.writeRGB(0, 0, 0);
    }
  }
  
  sw = Esplora.readButton(SWITCH_3);
  if(sw != prvSwitch3){
    prvSwitch3 = sw;
    if(sw == LOW){
      Esplora.writeRGB(255, 255, 255);
      Serial.println("Switch3 pressed");
      EsploraTFT.background(0, 255, 0);
      Esplora.writeRGB(0, 0, 0);
    }
  }
  
  sw = Esplora.readButton(SWITCH_4);
  if(sw != prvSwitch4){
    prvSwitch4 = sw;
    if(sw == LOW){
      Esplora.writeRGB(255, 255, 255);
      Serial.println("Switch4 pressed");
      EsploraTFT.background(0, 0, 255);
      Esplora.writeRGB(0, 0, 0);
    }
  }
  
}

Monday, March 10, 2014

Arduino + Raspberry Pi + Node.js

Cross-post with Hello Raspberry Pi: Communication between RAspberry Pi and Arduino, using Node.js.

This example demonstrate how to send data between Raspberry Pi and Arduino Esplora board via USB, using Node.js.


Node.js script run on Raspberry Pi.
//To install 'serialport' locally, enter the command:
//$ npm install serialport
//Otherwise, Error: Cannot find module 'serialport' will reported

var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort('/dev/ttyACM0', 
    {   baudrate: 9600,
        dataBits: 8,
        parity: 'none',
        stopBits: 1,
        flowControl: false
    });

serialPort.on("open", function () {
    console.log('open');
    serialPort.on('data', function(data) {
        console.log('data received: ' + data);
        });
    serialPort.write("Hello from Raspberry Pi\n", function(err, results) {
        console.log('err ' + err);
        console.log('results ' + results);
        });
});

Arduino side, (same as in the post "Serial communication between Arduino Esplora and PC").
#include <Esplora.h>
#include <TFT.h>
#include <SPI.h>
 
int prevSw1 = HIGH;
int incomingByte = 0;
String charsIn = "";
char printout[20];  //max char to print: 20
  
void setup() {
   
    EsploraTFT.begin();  
    EsploraTFT.background(0,0,0);
    EsploraTFT.stroke(255,255,255);  //preset stroke color
      
    //Setup Serial Port with baud rate of 9600
    Serial.begin(9600);
     
    //indicate start
    Esplora.writeRGB(255, 255, 255);
    delay(250);
    Esplora.writeRGB(0, 0, 0);
     
}
  
void loop() {
    int sw1 = Esplora.readButton(SWITCH_1);
    if(sw1 != prevSw1){
      if(sw1 == LOW){
        Serial.println("Hello from Arduino Esplora");
      }
      prevSw1 = sw1;
    }
     
    while (Serial.available()) {
      char charRead = Serial.read();
      charsIn.concat(charRead);
    }
    if(charsIn != ""){
      Serial.println("How are you, " + charsIn);
      charsIn.toCharArray(printout, 21);
      EsploraTFT.background(0,0,0);
      EsploraTFT.text(printout, 0, 10);
      charsIn = "";
    }
}

Tuesday, March 4, 2014

Bi-direction serial communication using java-simple-serial-connector

Last post "JavaFX + java-simple-serial-connector + Arduino" implement simple one way communication from PC run JavaFX to Arduino. This example implement bi-direction sending and receiving between PC and Arduino, using java-simple-serial-connector.



To implement receiving, we have to implement SerialPortEventListener, and add it with serialPort.addEventListener().

package javafx_jssc;

import java.io.UnsupportedEncodingException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class JavaFX_jSSC extends Application {

    SerialPort serialPort;
    ObservableList<String> portList;

    ComboBox comboBoxPorts;
    TextField textFieldOut, textFieldIn;
    Button btnOpenSerial, btnCloseSerial, btnSend;

    private void detectPort() {

        portList = FXCollections.observableArrayList();

        String[] serialPortNames = SerialPortList.getPortNames();
        for (String name : serialPortNames) {
            System.out.println(name);
            portList.add(name);
        }
    }

    @Override
    public void start(Stage primaryStage) {

        detectPort();

        comboBoxPorts = new ComboBox(portList);
        textFieldOut = new TextField();
        textFieldIn = new TextField();

        btnOpenSerial = new Button("Open Serial Port");
        btnCloseSerial = new Button("Close Serial Port");
        btnSend = new Button("Send");
        btnSend.setDisable(true);   //default disable before serial port open
        
        btnOpenSerial.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent t) {
                closeSerialPort();              //close serial port before open
                if(openSerialPort()){
                    btnSend.setDisable(false);
                }else{
                    btnSend.setDisable(true);
                }
            }
        });
        
        btnCloseSerial.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent t) {
                closeSerialPort();
                btnSend.setDisable(true);
            }
        });

        btnSend.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent t) {
                
                if(serialPort != null && serialPort.isOpened()){
                    try {
                        String stringOut = textFieldOut.getText();
                        serialPort.writeBytes(stringOut.getBytes());
                    } catch (SerialPortException ex) {
                        Logger.getLogger(JavaFX_jSSC.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }else{
                    System.out.println("Something wrong!");
                }
            }
        });

        VBox vBox = new VBox();
        vBox.getChildren().addAll(
                comboBoxPorts,
                textFieldOut,
                textFieldIn,
                btnOpenSerial,
                btnCloseSerial,
                btnSend);

        StackPane root = new StackPane();
        root.getChildren().add(vBox);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {

            @Override
            public void handle(WindowEvent t) {
                closeSerialPort();
            }
        });

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

    private boolean openSerialPort() {
        boolean success = false;
        
        if (comboBoxPorts.getValue() != null
                && !comboBoxPorts.getValue().toString().isEmpty()) {
            try {
                serialPort = new SerialPort(comboBoxPorts.getValue().toString());
                
                serialPort.openPort();
                serialPort.setParams(
                        SerialPort.BAUDRATE_9600,
                        SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE);
                
                serialPort.addEventListener(new MySerialPortEventListener());
                
                success = true;
            } catch (SerialPortException ex) {
                Logger.getLogger(JavaFX_jSSC.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return success;
    }

    private void closeSerialPort() {
        if (serialPort != null && serialPort.isOpened()) {
            try {
                serialPort.closePort();
            } catch (SerialPortException ex) {
                Logger.getLogger(JavaFX_jSSC.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
        serialPort = null;
    }
    
    class MySerialPortEventListener implements SerialPortEventListener {

        @Override
        public void serialEvent(SerialPortEvent serialPortEvent) {
            
            if(serialPortEvent.isRXCHAR()){
                try {
                    int byteCount = serialPortEvent.getEventValue();
                    byte bufferIn[] = serialPort.readBytes(byteCount);
                    
                    String stringIn = "";
                    try {
                        stringIn = new String(bufferIn, "UTF-8");
                    } catch (UnsupportedEncodingException ex) {
                        Logger.getLogger(JavaFX_jSSC.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    textFieldIn.setText(stringIn);
                    
                } catch (SerialPortException ex) {
                    Logger.getLogger(JavaFX_jSSC.class.getName()).log(Level.SEVERE, null, ex);
                }
                
            }
            
        }
        
    }
}

Arduino Esplora side, refer to previous post.

Monday, March 3, 2014

JavaFX + java-simple-serial-connector + Arduino

This example implement a simple Java application using java-simple-serial-connector library (jSSC) , with JavaFX user interface, send bytes to Arduino Esplora via USB.



package javafx_jssc;

import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import jssc.SerialPort;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class JavaFX_jSSC extends Application {
    
    ObservableList<String> portList;
    
    private void detectPort(){
        
        portList = FXCollections.observableArrayList();

        String[] serialPortNames = SerialPortList.getPortNames();
        for(String name: serialPortNames){
            System.out.println(name);
            portList.add(name);
        }
    }
    
    @Override
    public void start(Stage primaryStage) {
        
        detectPort();

        final ComboBox comboBoxPorts = new ComboBox(portList);
        final TextField textFieldOut = new TextField();
        Button btnSend = new Button("Send");
        
        btnSend.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent t) {

                if(comboBoxPorts.getValue() != null && 
                    !comboBoxPorts.getValue().toString().isEmpty()){
                    
                    String stringOut = textFieldOut.getText();
                    
                    try {
                        SerialPort serialPort = 
                            new SerialPort(comboBoxPorts.getValue().toString());                        
                        
                        serialPort.openPort();
                        serialPort.setParams(
                                SerialPort.BAUDRATE_9600,
                                SerialPort.DATABITS_8,
                                SerialPort.STOPBITS_1,
                                SerialPort.PARITY_NONE);
                        serialPort.writeBytes(stringOut.getBytes());
                        serialPort.closePort();
                        
                    } catch (SerialPortException ex) {
                        Logger.getLogger(
                            JavaFX_jSSC.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    
                }else{
                    System.out.println("No SerialPort selected!");
                }
            }
        });
        
        VBox vBox = new VBox();
        vBox.getChildren().addAll(
                comboBoxPorts, 
                textFieldOut, 
                btnSend);
        
        StackPane root = new StackPane();
        root.getChildren().add(vBox);
        
        Scene scene = new Scene(root, 300, 250);
        
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
    
}


Arduino code in Esplora side (same as in the post "Serial communication between Arduino Esplora and PC").
#include <Esplora.h>
#include <TFT.h>
#include <SPI.h>

int prevSw1 = HIGH;
int incomingByte = 0;
String charsIn = "";
char printout[20];  //max char to print: 20
 
void setup() {
  
    EsploraTFT.begin();  
    EsploraTFT.background(0,0,0);
    EsploraTFT.stroke(255,255,255);  //preset stroke color
     
    //Setup Serial Port with baud rate of 9600
    Serial.begin(9600);
    
    //indicate start
    Esplora.writeRGB(255, 255, 255);
    delay(250);
    Esplora.writeRGB(0, 0, 0);
    
}
 
void loop() {
    int sw1 = Esplora.readButton(SWITCH_1);
    if(sw1 != prevSw1){
      if(sw1 == LOW){
        Serial.println("Hello from Arduino Esplora");
      }
      prevSw1 = sw1;
    }
    
    while (Serial.available()) {
      char charRead = Serial.read();
      charsIn.concat(charRead);
    }
    if(charsIn != ""){
      Serial.println("How are you, " + charsIn);
      charsIn.toCharArray(printout, 21);
      EsploraTFT.background(0,0,0);
      EsploraTFT.text(printout, 0, 10);
      charsIn = "";
    }
}

Read last post for Install and test java-simple-serial-connector with Arduino.

Next:
- Bi-direction serial communication using java-simple-serial-connector


Thursday, February 20, 2014

Send data from Android to Arduino Esplora in USB Host Mode

It's a exercise in my another blog "Android-er: Send Hello to Arduino from Android in USB Host Mode". The post show how to detect attached Arduino Esplora board on Android, run in USB Host Mode, and send data to it.

Monday, February 10, 2014

Esplora example: read temperature sensor

This example read and display temperature sensor of Arduino Esplora on TFT screen, in celsius and fahrenheit.

Read temperature sensor on Arduino Esplora
Read temperature sensor on Arduino Esplora

#include <TFT.h>
#include <SPI.h>
#include <Esplora.h>

int celsius = 0;
int fahrenheit = 0;
char printoutC[3];
char printoutF[3];

void setup()
{
    EsploraTFT.begin();
    EsploraTFT.background(0,0,0);
    
    //preset dummy reading to print
    String dummy = "0";
    dummy.toCharArray(printoutC, 3);
    dummy.toCharArray(printoutC, 3);
    
    EsploraTFT.stroke(255,255,255);
    EsploraTFT.text("degree C: ", 0, 10);
    EsploraTFT.text("degree F: ", 0, 20);
} 

void loop()
{
    //read the temperature sensor
    celsius = Esplora.readTemperature(DEGREES_C);  
    fahrenheit = Esplora.readTemperature(DEGREES_F);

    //clear previous print of reading
    EsploraTFT.stroke(0,0,0);
    EsploraTFT.text(printoutC, 60, 10);
    EsploraTFT.text(printoutF, 60, 20);
    
    String(celsius).toCharArray(printoutC,3);
    String(fahrenheit).toCharArray(printoutF,3);
    EsploraTFT.stroke(255,255,255);
    EsploraTFT.text(printoutC, 60, 10);
    EsploraTFT.text(printoutF, 60, 20);

    delay(1000);
}

Monday, February 3, 2014

Example of Timer Interrupt on Arduino

It's example to use Timer Interrupt of Arduino Esplora, to toggle RGB LED when timer interrupt reached.



testTimer.ino
#include <Esplora.h>

volatile boolean ledon;
volatile unsigned long lasttime;
volatile unsigned long now;
 
void setup() {
    ledon = true;
    Esplora.writeRGB(100, 100, 100);

    lasttime = millis();
    
    // initialize Timer1
    noInterrupts(); // disable all interrupts
    TCCR1A = 0;
    TCCR1B = 0;

    TCNT1 = 34286; // preload timer 65536-16MHz/256/2Hz
    TCCR1B |= (1 << CS12); // 256 prescaler
    TIMSK1 |= (1 << TOIE1); // enable timer overflow interrupt
    interrupts(); // enable all interrupts
    
}
 
void loop() {
 
}

ISR(TIMER1_OVF_vect)
{
    TCNT1 = 34286; // preload timer
    
    ledon = !ledon;
    if(ledon){
        Esplora.writeRGB(0, 0, 1);
    }else{
        Esplora.writeRGB(0, 0, 0);
    }
    
    now = millis();
    Serial.println(now - lasttime);
    lasttime = now;
}

reference: http://blog.oscarliang.net/arduino-timer-and-interrupt-tutorial/

Tuesday, January 28, 2014

Send data to Arduino from Linux PC, program in C with GUI of GTK+3, as ColorChooser

In this example, we are going to develop a GUI program on Ubuntu Linux using C with GTK+3, select color to set LCD screen and LED on Arduino Esplora via USB serial.


In order to program with GTK+3, we have to install it on our PC, read last post "Install GTK+3 and compile with gcc in Linux". For the USB Serial communication part, refer to the post "Serial communication between Arduino and PC using C with termios".

Here is the code combine the termios and GTK+3 GtkColorChooser to build GUI for user to choice color, and send to Arduino Esplora via USB serial.

GtkEsploraColor.c:
#include <gtk/gtk.h>

#include <string.h>
#include <fcntl.h>
#include <termios.h>

int tty_fd;
struct termios old_stdio;

static void 
chooser_color_activated(GtkColorChooser *chooser, 
 GdkRGBA *color, gpointer user_data)
{
 GtkWidget *window = user_data;
 
 int intR = (int)((color->red)*65535);
 int intG = (int)((color->green)*65535);
 int intB = (int)((color->blue)*65535);
 GdkColor gColor = {
  0,
  intR, 
  intG, 
  intB};
 gtk_widget_modify_bg(GTK_WIDGET(window), GTK_STATE_NORMAL, &gColor);
 
 char bytes[] = {
  (char)(intB>>8), 
  (char)(intG>>8), 
  (char)(intR>>8)};
 
 write(tty_fd, bytes, 3);
}

void destroy( GtkWidget *widget,
              gpointer   data )
{
 close(tty_fd);
 tcsetattr(STDOUT_FILENO,TCSANOW,&old_stdio);
 
 g_print ("Bye!\n");
    gtk_main_quit();
}

int main( int argc, char *argv[])
{
 //Prepare for termios
 struct termios tio;
 struct termios stdio;
 //struct termios old_stdio;
 //int tty_fd;
 
 unsigned char c='D';
 tcgetattr(STDOUT_FILENO,&old_stdio);
 
 printf("Please start with %s /dev/ttyACM0 (for example)\n",argv[0]);
 memset(&stdio,0,sizeof(stdio));
 stdio.c_iflag=0;
 stdio.c_oflag=0;
 stdio.c_cflag=0;
 stdio.c_lflag=0;
 stdio.c_cc[VMIN]=1;
 stdio.c_cc[VTIME]=0;
 tcsetattr(STDOUT_FILENO,TCSANOW,&stdio);
 tcsetattr(STDOUT_FILENO,TCSAFLUSH,&stdio);
 fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); // make the reads non-blocking
 
 memset(&tio,0,sizeof(tio));
 tio.c_iflag=0;
 tio.c_oflag=0;
 tio.c_cflag=CS8|CREAD|CLOCAL; // 8n1, see termios.h for more information
 tio.c_lflag=0;
 tio.c_cc[VMIN]=1;
 tio.c_cc[VTIME]=5;
 
 tty_fd=open(argv[1], O_RDWR | O_NONBLOCK);
 cfsetospeed(&tio,B9600); // 9600 baud
 cfsetispeed(&tio,B9600); // 9600 baud
 
 tcsetattr(tty_fd,TCSANOW,&tio);
 //---
 
    GtkWidget *window;
    GtkWidget *box;
    GtkWidget *label;
    GtkWidget *chooser;

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(window), 400, 250);
    gtk_window_set_title(GTK_WINDOW(window), "arduino-er.blogspot.com");

    box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);

 label = gtk_label_new("GtkColorChooser to Arduino Esplora");
    gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 3);

 //Create GtkColorChooser
    chooser = gtk_color_chooser_widget_new();
    gtk_box_pack_start(GTK_BOX(box), chooser, FALSE, FALSE, 3);
    g_signal_connect (GTK_COLOR_CHOOSER(chooser),
                    "color-activated", 
                    G_CALLBACK (chooser_color_activated), 
                    window);

    g_signal_connect(G_OBJECT(window), "destroy", 
        G_CALLBACK(destroy), NULL);

    gtk_container_add(GTK_CONTAINER(window), box);
    gtk_widget_show_all(window);
    gtk_main();

    return 0;
}

Compile it with command:
$ gcc GtkEsploraColor.c -o GtkEsploraColor `pkg-config --cflags --libs gtk+-3.0`

Arduino Esplora code, SerialColor.ino:
It's same as in the post "Serial communication between Arduino Esplora and PC")
#include <Esplora.h>
#include <TFT.h>
#include <SPI.h>

void setup() {
  
    EsploraTFT.begin();  
    EsploraTFT.background(0,0,0);
    EsploraTFT.stroke(255,255,255);  //preset stroke color
     
    //Setup Serial Port with baud rate of 9600
    Serial.begin(9600);
    
    //indicate start
    Esplora.writeRGB(255, 255, 255);
    delay(250);
    Esplora.writeRGB(0, 0, 0);
    
}
 
void loop() {
    
    if(Serial.available()){
      char bytesIn[3] = {0x00, 0x00, 0x00};
      int i = 0;
      while(Serial.available()){
        bytesIn[i] = Serial.read();
        i++;
        if(i==3)
          break;
      }
      
      EsploraTFT.background(bytesIn[0], bytesIn[1], bytesIn[2]);
      Esplora.writeRGB(bytesIn[0], bytesIn[1], bytesIn[2]);
    }
}


Before run GtkEsploraColor, determine the connect USB port with dmesg:
- Insert Arduino Esploar to USB port
- Enter the command to check the port
$ dmesg
- The attached port should be listed in last lines. It's ttyACM0 in my setup
- Enter the command to run:
$ ./GtkEsploraColor /dev/ttyACM0
- Double Click on the color buttons to set color. The LCD screen and LED on Arduino Esplora should be changed accordingly.

Monday, January 27, 2014

Serial communication between Arduino and PC using C with termios

This example show how to implement Serial communication using C language with termios.h. It run on Ubuntu, and send and receive data to and from Arduino Esplora connected with USB cable.


The C program, testTermios.c, in Ubuntu side copy from example in http://en.wikibooks.org/wiki/Serial_Programming/Serial_Linux#termios, it is a simple terminal program with termios.h.
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
 
int main(int argc,char** argv)
{
 struct termios tio;
 struct termios stdio;
 struct termios old_stdio;
 int tty_fd;
 
 unsigned char c='D';
 tcgetattr(STDOUT_FILENO,&old_stdio);
 
 printf("Please start with %s /dev/ttyS1 (for example)\n",argv[0]);
 memset(&stdio,0,sizeof(stdio));
 stdio.c_iflag=0;
 stdio.c_oflag=0;
 stdio.c_cflag=0;
 stdio.c_lflag=0;
 stdio.c_cc[VMIN]=1;
 stdio.c_cc[VTIME]=0;
 tcsetattr(STDOUT_FILENO,TCSANOW,&stdio);
 tcsetattr(STDOUT_FILENO,TCSAFLUSH,&stdio);
 fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); // make the reads non-blocking
 
 memset(&tio,0,sizeof(tio));
 tio.c_iflag=0;
 tio.c_oflag=0;
 tio.c_cflag=CS8|CREAD|CLOCAL; // 8n1, see termios.h for more information
 tio.c_lflag=0;
 tio.c_cc[VMIN]=1;
 tio.c_cc[VTIME]=5;
 
 tty_fd=open(argv[1], O_RDWR | O_NONBLOCK);
 cfsetospeed(&tio,B115200); // 115200 baud
 cfsetispeed(&tio,B115200); // 115200 baud
 
 tcsetattr(tty_fd,TCSANOW,&tio);
 while (c!='q')
 {
  if (read(tty_fd,&c,1)>0)        write(STDOUT_FILENO,&c,1);
  // if new data is available on the serial port, print it out
  if (read(STDIN_FILENO,&c,1)>0)  write(tty_fd,&c,1);
  // if new data is available on the console, send it to the serial port
 }
 
 close(tty_fd);
 tcsetattr(STDOUT_FILENO,TCSANOW,&old_stdio);
 
 return EXIT_SUCCESS;
}

Compile it with the command:
$ gcc testTermios.c -o testTermios

To run it with specified device port, run the command dmesg to check the Arduino Esplora connected post:
$ dmesg

It's ttyACM0 in my case.

Run:
$ ./testTermios /dev/ttyACM0

Press any key will send to ttyACM0, press 'q' to quit.

In Arduino Esplora side, testSerial.ino. (It is same as the example in "Serial communication between Arduino Esplora and PC", using Arduino IDE's Serial Monitor.)
#include <Esplora.h>
#include <TFT.h>
#include <SPI.h>

int prevSw1 = HIGH;
int incomingByte = 0;
String charsIn = "";
char printout[20];  //max char to print: 20
 
void setup() {
  
    EsploraTFT.begin();  
    EsploraTFT.background(0,0,0);
    EsploraTFT.stroke(255,255,255);  //preset stroke color
     
    //Setup Serial Port with baud rate of 9600
    Serial.begin(9600);
    
    //indicate start
    Esplora.writeRGB(255, 255, 255);
    delay(250);
    Esplora.writeRGB(0, 0, 0);
    
}
 
void loop() {
    int sw1 = Esplora.readButton(SWITCH_1);
    if(sw1 != prevSw1){
      if(sw1 == LOW){
        Serial.println("Hello from Arduino Esplora");
      }
      prevSw1 = sw1;
    }
    
    while (Serial.available()) {
      char charRead = Serial.read();
      charsIn.concat(charRead);
    }
    if(charsIn != ""){
      Serial.println("How are you, " + charsIn);
      charsIn.toCharArray(printout, 21);
      EsploraTFT.background(0,0,0);
      EsploraTFT.text(printout, 0, 10);
      charsIn = "";
    }
}


Next:
- Send data to Arduino from Linux PC, program in C with GUI of GTK+3, as ColorChooser

Saturday, January 25, 2014

Serial communication between Arduino Esplora and PC

This example show bi-direction serial communication between Arduino Esplora and PC. In PC side, the Serial Monitor can be used as terminal to send data to and receive data from Arduino Esplora.


Arduino Esplora sample code:
#include <Esplora.h>
#include <TFT.h>
#include <SPI.h>

int prevSw1 = HIGH;
int incomingByte = 0;
String charsIn = "";
char printout[20];  //max char to print: 20
 
void setup() {
  
    EsploraTFT.begin();  
    EsploraTFT.background(0,0,0);
    EsploraTFT.stroke(255,255,255);  //preset stroke color
     
    //Setup Serial Port with baud rate of 9600
    Serial.begin(9600);
    
    //indicate start
    Esplora.writeRGB(255, 255, 255);
    delay(250);
    Esplora.writeRGB(0, 0, 0);
    
}
 
void loop() {
    int sw1 = Esplora.readButton(SWITCH_1);
    if(sw1 != prevSw1){
      if(sw1 == LOW){
        Serial.println("Hello from Arduino Esplora");
      }
      prevSw1 = sw1;
    }
    
    while (Serial.available()) {
      char charRead = Serial.read();
      charsIn.concat(charRead);
    }
    if(charsIn != ""){
      Serial.println("How are you, " + charsIn);
      charsIn.toCharArray(printout, 21);
      EsploraTFT.background(0,0,0);
      EsploraTFT.text(printout, 0, 10);
      charsIn = "";
    }
}

Related:
Serial communication between Arduino and PC using C with termios

Wednesday, January 22, 2014

Arduino Esplora example for Accelerometer

This example read Accelerometer senser on Esplora board, and display on LCD screen accordingly; such that you can know how Accelerometer work.


#include <TFT.h>
#include <SPI.h>
#include <Esplora.h>

const int MAX_W = 160;
const int MAX_H = 128;
int xCenter = MAX_W/2;
int yCenter = MAX_H/2;

int xPos = xCenter; 
int yPos = yCenter;
int xPrev = xCenter;
int yPrev = yCenter;
char printoutX[5];
char printoutY[5];
char printoutZ[5];


void setup(){
  Serial.begin(9600);
  Mouse.begin();
  
  EsploraTFT.begin();  
  EsploraTFT.background(0,0,0);

  //preset dummy reading to print
  String dummy = "0";
  dummy.toCharArray(printoutX,5);
  dummy.toCharArray(printoutY,5);
  dummy.toCharArray(printoutZ,5);
}

void loop(){
  
  if(Esplora.readButton(SWITCH_1) == LOW){
    EsploraTFT.background(0,0,0);
  }
  
  int xValue = Esplora.readAccelerometer(X_AXIS);
  int yValue = Esplora.readAccelerometer(Y_AXIS);
  int zValue = Esplora.readAccelerometer(Z_AXIS);
  
  
  xPos = map(xValue, -512, 512, MAX_H, 0);
  yPos = map(yValue, -512, 512, 0, MAX_H);
  
  //clear previous print of reading
  EsploraTFT.stroke(0,0,0);
  EsploraTFT.text(printoutX,0,10);
  EsploraTFT.text(printoutY,0,20);
  EsploraTFT.text(printoutZ,0,30);
  
  String(xValue).toCharArray(printoutX,5);
  String(yValue).toCharArray(printoutY,5);
  String(zValue).toCharArray(printoutZ,5);
  EsploraTFT.stroke(255,255,255);
  EsploraTFT.text(printoutX,0,10);
  EsploraTFT.text(printoutY,0,20);
  EsploraTFT.text(printoutZ,0,30);
  
  if(xPos!=xPrev || yPos!=yPrev){
    
    EsploraTFT.line(xPrev, yPrev, xPos, yPos);
    
    xPrev=xPos;
    yPrev=yPos;
  }
  
  delay(10);
}

Insert LCD screen on Arduino Esplora

This post show how to insert optional LCD screen on Arduino Esplora board in right direction.

Refer to "Esplora Pinout Diagram", there are two connectors on Esplora board, the TFT display connector is located on the right side, for optional color LCD screen, SD card, or other devices that use the SPI protocol. On your LCD board, there should be some marking, something GND, BL, RESET...+5V... on the LCD connector. Just insert the LCD screen in the direction to match the connectors.

Unofficial Esplora Pinout Diagram

It's a nice unofficial Esplora Pinout Diagram, PDF version is available to download HERE.

Unofficial Esplora Pinout Diagram
Unofficial Esplora Pinout Diagram

Saturday, January 18, 2014

Arduino Esplora Joystick Mouse with Button function

This example work on last post "Auto center Arduino Esplora Joystick Mouse of Arduino Esplora", with button function added.

#include <TFT.h>
#include <SPI.h>
#include <Esplora.h>

const int MAX_W = 160;
const int MAX_H = 128;
int xCenter = MAX_W/2;
int yCenter = MAX_H/2;

int xPos = xCenter; 
int yPos = yCenter;
int xPrev = xCenter;
int yPrev = yCenter;
char printoutX[5];
char printoutY[5];
char printoutSlider[5];

int centerJoystickX, centerJoystickY;

int JoystickButton;
int prevJoystickButton;

void setup(){
  Serial.begin(9600);
  Mouse.begin();
  
  EsploraTFT.begin();  
  EsploraTFT.background(0,0,0);
  EsploraTFT.stroke(255,255,255);
  EsploraTFT.line(xCenter, 0, xCenter, MAX_H);
  EsploraTFT.line(0, yCenter, MAX_W, yCenter);

  //preset dummy reading to print
  String dummy = "0";
  dummy.toCharArray(printoutX,5);
  dummy.toCharArray(printoutY,5);
  dummy.toCharArray(printoutSlider,5);
  
  //Read Joystick center position at start-up
  centerJoystickX = Esplora.readJoystickX();
  centerJoystickY = Esplora.readJoystickY();
  
  //preset JoystickSwitch states
  JoystickButton = HIGH;
  prevJoystickButton = HIGH;
}

void loop(){
  int xValue = Esplora.readJoystickX();
  int yValue = Esplora.readJoystickY();
  int sliderValue = Esplora.readSlider();
  
  //map stick value to TFT screen position
  if(xValue >= centerJoystickX){
    xPos = map(xValue, 512, centerJoystickX, 0, xCenter);
  }else{
    xPos = map(xValue, centerJoystickX, -512, xCenter, MAX_W);
  }
  
  int mouseX, mouseY;
  
  if(xValue >= centerJoystickX){
    xPos = map(xValue, 512, centerJoystickX, 0, xCenter);
    
    //report mouse position only if position offset > slider
    if((xValue - centerJoystickX) >= sliderValue){
      mouseX = map( xValue, 512, centerJoystickX, -10, 0);
    }else{
      mouseX = 0;
    }
  }else{
    xPos = map(xValue, centerJoystickX, -512, xCenter, MAX_W);
    
    //report mouse position only if position offset > slider
    if((centerJoystickX - xValue) >= sliderValue){
      mouseX = map( xValue, centerJoystickX, 512, 0, -10);
    }else{
      mouseX = 0;
    }
  }
  
  if(yValue >= centerJoystickY){
    yPos = map(yValue, 512, centerJoystickY, MAX_H, yCenter);
    
    //report mouse position only if position offset > slider
    if((yValue - centerJoystickY) >= sliderValue){
      mouseY = map( yValue, 512, centerJoystickY, 10, 0);
    }else{
      mouseY = 0;
    }
  }else{
    yPos = map(yValue, centerJoystickY, -512, yCenter, 0);
    
    //report mouse position only if position offset > slider
    if((centerJoystickY - yValue) >= sliderValue){
      mouseY = map( yValue, centerJoystickY, 512, 0, 10);
    }else{
      mouseY = 0;
    }
  }
  
  Mouse.move(mouseX, mouseY, 0);
  
  //clear previous print of reading
  EsploraTFT.stroke(0,0,0);
  EsploraTFT.text(printoutX,0,10);
  EsploraTFT.text(printoutY,0,20);
  EsploraTFT.text(printoutSlider,0,30);
  
  String(xPos).toCharArray(printoutX,5);
  String(yPos).toCharArray(printoutY,5);
  String(sliderValue).toCharArray(printoutSlider,5);
  EsploraTFT.stroke(255,255,255);
  EsploraTFT.text(printoutX,0,10);
  EsploraTFT.text(printoutY,0,20);
  EsploraTFT.text(printoutSlider,0,30);
  
  if(xPos!=xPrev || yPos!=yPrev){
    
    EsploraTFT.line(xPrev, yPrev, xPos, yPos);
    EsploraTFT.stroke(0,0,255);
    EsploraTFT.point(xPos, yPos);
    
    xPrev=xPos;
    yPrev=yPos;
  }
  
  //Read JoystickButton
  //send Mouse.press()/.release() if JoystickButton changed
  JoystickButton = Esplora.readJoystickButton();
  if(JoystickButton != prevJoystickButton){

    if(JoystickButton == LOW){
      Mouse.press();
      Esplora.writeRed(100);
    }else{
      Mouse.release();
      Esplora.writeRed(0);
    }
    prevJoystickButton = JoystickButton;
  }
  
  delay(10);
}

Friday, January 17, 2014

Auto center Arduino Esplora Joystick Mouse of Arduino Esplora

This example is a Arduino Esplora Joystick Mouse with auto center, and you can adjust the sensitivity using the Esplora's slider (the Linear Potentiometer).



Arduino IDE come with a EsploraJoystickMouse example (in Arduino IDE > File > Examples > Esplora > Beginners > EsploraJoystickMouse, or here), it will report mouse position to your PC base on Esplora's Joystick.

WARNING: this sketch will take over your mouse movement. If you lose control of your mouse do the following:
 1) unplug the Esplora.
 2) open the EsploraBlink sketch
 3) hold the reset button down while plugging your Esplora back in
 4) while holding reset, click "Upload"
 5) when you see the message "Done compiling", release the reset button.

It is possible that your mouse will auto-run when the joystick is in rest position. Because it assume the function Esplora.readJoystickX() and Esplora.readJoystickY() return 0 at center rest position. But it is not the actual case, most probably it return non-0 even the Joystick is in rest position.

The below example, modified from last example Read joystick and display on TFT, read the actual center postion at power up (assume it is in rest), to offset the x, y postion accordingly. And also it will compare the x, y values with the slider value to adjust the sensitivity. If the movement of x, y postion is less than slider, it will return no movement to PC.

#include <TFT.h>
#include <SPI.h>
#include <Esplora.h>

const int MAX_W = 160;
const int MAX_H = 128;
int xCenter = MAX_W/2;
int yCenter = MAX_H/2;

int xPos = xCenter; 
int yPos = yCenter;
int xPrev = xCenter;
int yPrev = yCenter;
char printoutX[5];
char printoutY[5];
char printoutSlider[5];

int centerJoystickX, centerJoystickY;

int JoystickButton;
int prevJoystickButton;

void setup(){
  Serial.begin(9600);
  Mouse.begin();
  
  EsploraTFT.begin();  
  EsploraTFT.background(0,0,0);
  EsploraTFT.stroke(255,255,255);
  EsploraTFT.line(xCenter, 0, xCenter, MAX_H);
  EsploraTFT.line(0, yCenter, MAX_W, yCenter);

  //preset dummy reading to print
  String dummy = "0";
  dummy.toCharArray(printoutX,5);
  dummy.toCharArray(printoutY,5);
  dummy.toCharArray(printoutSlider,5);
  
  //Read Joystick center position at start-up
  centerJoystickX = Esplora.readJoystickX();
  centerJoystickY = Esplora.readJoystickY();
  
  //preset JoystickSwitch states
  JoystickButton = HIGH;
  prevJoystickButton = HIGH;
}

void loop(){
  int xValue = Esplora.readJoystickX();
  int yValue = Esplora.readJoystickY();
  int sliderValue = Esplora.readSlider();
  
  //map stick value to TFT screen position
  if(xValue >= centerJoystickX){
    xPos = map(xValue, 512, centerJoystickX, 0, xCenter);
  }else{
    xPos = map(xValue, centerJoystickX, -512, xCenter, MAX_W);
  }
  
  int mouseX, mouseY;
  
  if(xValue >= centerJoystickX){
    xPos = map(xValue, 512, centerJoystickX, 0, xCenter);
    
    //report mouse position only if position offset > slider
    if((xValue - centerJoystickX) >= sliderValue){
      mouseX = map( xValue, 512, centerJoystickX, -10, 0);
    }else{
      mouseX = 0;
    }
  }else{
    xPos = map(xValue, centerJoystickX, -512, xCenter, MAX_W);
    
    //report mouse position only if position offset > slider
    if((centerJoystickX - xValue) >= sliderValue){
      mouseX = map( xValue, centerJoystickX, 512, 0, -10);
    }else{
      mouseX = 0;
    }
  }
  
  if(yValue >= centerJoystickY){
    yPos = map(yValue, 512, centerJoystickY, MAX_H, yCenter);
    
    //report mouse position only if position offset > slider
    if((yValue - centerJoystickY) >= sliderValue){
      mouseY = map( yValue, 512, centerJoystickY, 10, 0);
    }else{
      mouseY = 0;
    }
  }else{
    yPos = map(yValue, centerJoystickY, -512, yCenter, 0);
    
    //report mouse position only if position offset > slider
    if((centerJoystickY - yValue) >= sliderValue){
      mouseY = map( yValue, centerJoystickY, 512, 0, 10);
    }else{
      mouseY = 0;
    }
  }
  
  Mouse.move(mouseX, mouseY, 0);
  
  //clear previous print of reading
  EsploraTFT.stroke(0,0,0);
  EsploraTFT.text(printoutX,0,10);
  EsploraTFT.text(printoutY,0,20);
  EsploraTFT.text(printoutSlider,0,30);
  
  String(xPos).toCharArray(printoutX,5);
  String(yPos).toCharArray(printoutY,5);
  String(sliderValue).toCharArray(printoutSlider,5);
  EsploraTFT.stroke(255,255,255);
  EsploraTFT.text(printoutX,0,10);
  EsploraTFT.text(printoutY,0,20);
  EsploraTFT.text(printoutSlider,0,30);
  
  if(xPos!=xPrev || yPos!=yPrev){
    
    EsploraTFT.line(xPrev, yPrev, xPos, yPos);
    EsploraTFT.stroke(0,0,255);
    EsploraTFT.point(xPos, yPos);
    
    xPrev=xPos;
    yPrev=yPos;
  }
  
  delay(10);
}

Next: Arduino Esplora Joystick Mouse with Button function

Tuesday, January 14, 2014

Arduino Esplora example: read joystick and display on TFT

This example read joystick on Arduino Esplora, and display on TFT shield.


The function Esplora.readJoystickX() and Esplora.readJoystickY().
  • Esplora.readJoystickX() read the position of the X-axis of the joystick. When the joystick is in the center, it returns zero. Positive values indicate the joystick has moved to the right and negative values when moved to the left.
  • Esplora.readJoystickY() read the position of the Y-axis of the joystick. When the joystick is in the center, it returns zero. Positive values indicate the joystick has moved up and negative values when moved down.
With function map(value, fromLow, fromHigh, toLow, toHigh), it's easy to map value from joysticks to screen coordinates. It re-maps a number from one range to another. That is, a value of fromLow would get mapped to toLow, a value of fromHigh to toHigh, values in-between to values in-between.

Example code:
#include <TFT.h>
#include <SPI.h>
#include <Esplora.h>

const int MAX_W = 160;
const int MAX_H = 128;
int xCenter = MAX_W/2;
int yCenter = MAX_H/2;

int xPos = xCenter; 
int yPos = yCenter;
int xPrev = xCenter;
int yPrev = yCenter;
char printoutX[5];
char printoutY[5];

void setup(){
  EsploraTFT.begin();  
  EsploraTFT.background(0,0,0);
  EsploraTFT.stroke(255,255,255);
  EsploraTFT.line(xCenter, 0, xCenter, MAX_H);
  EsploraTFT.line(0, yCenter, MAX_W, yCenter);

  //preset dummy reading to print
  String dummy = "0";
  dummy.toCharArray(printoutX,5);
  dummy.toCharArray(printoutY,5);
}

void loop(){
  int xValue = Esplora.readJoystickX();
  int yValue = Esplora.readJoystickY();

  //clear previous print of reading
  EsploraTFT.stroke(0,0,0);
  EsploraTFT.text(printoutX,0,10);
  EsploraTFT.text(printoutY,0,20);
  
  String(xValue).toCharArray(printoutX,5);
  String(yValue).toCharArray(printoutY,5);
  EsploraTFT.stroke(255,255,255);
  EsploraTFT.text(printoutX,0,10);
  EsploraTFT.text(printoutY,0,20);
  
  //map stick value to TFT screen position
  xPos = map( xValue, 512, -512, 0, MAX_W);
  yPos = map( yValue, 512, -512, MAX_H, 0);
  
  if(xPos!=xPrev || yPos!=yPrev){
    
    EsploraTFT.line(xPrev, yPrev, xPos, yPos);
    EsploraTFT.stroke(0,0,255);
    EsploraTFT.point(xPos, yPos);
    
    xPrev=xPos;
    yPrev=yPos;
  }
  
  delay(50);
}

Next example: Auto center Arduino Esplora Joystick Mouse

Monday, January 13, 2014

Arduino Esplora example: read slider and display on TFT

The example run on Esplora, read from slider, and display on TFT.

#include <TFT.h>
#include <SPI.h>
#include <Esplora.h>

const int MAX_W = 160;
const int MAX_H = 128;
unsigned long ul_MAX_H = (unsigned long)MAX_H;
const int MAX_SLIDER = 1023;

int xPos = 0; 
int yPos = 0;
int xPrev = 0;
int yPrev = MAX_H;
char printout[5];

void setup(){
  EsploraTFT.begin();  
  EsploraTFT.background(0,0,0);

  //preset dummy reading to print
  String dummy = "0";
  dummy.toCharArray(printout,5);
}

void loop(){
  int slider = Esplora.readSlider();

  //clear previous print of reading
  EsploraTFT.stroke(0,0,0);
  EsploraTFT.text(printout,0,10);
  //update reading
  String(slider).toCharArray(printout,5);
  EsploraTFT.stroke(255,255,255);
  EsploraTFT.text(printout,0,10);

  // update the location of the dot
  xPos++;
  //align y-position
  yPos = MAX_H - slider * ul_MAX_H/MAX_SLIDER;
  EsploraTFT.line(xPrev, yPrev, xPos, yPos);

  // if the x position reach screen edges, 
  // clear screen
  if(xPos >= MAX_W){
    EsploraTFT.background(0,0,0);
    xPos = 0;
  }

  // update the point's previous location
  xPrev=xPos;
  yPrev=yPos;

  delay(50);
}

Sunday, July 28, 2013

Arduino Esplora Board



The Arduino Esplora is a microcontroller board derived from the Arduino Leonardo. The Esplora differs from all preceding Arduino boards in that it provides a number of built-in, ready-to-use setof onboard sensors for interaction. It's designed for people who want to get up and running with Arduino without having to learn about the electronics first.


The Esplora has onboard sound and light outputs, and several input sensors, including a joystick, a slider, a temperature sensor, an accelerometer, a microphone, and a light sensor. It also has the potential to expand its capabilities with two Tinkerkit input and output connectors, and a socket for a color TFT LCD screen.

Like the Leonardo board, the Esplora uses an Atmega32U4 AVR microcontroller with 16 MHz crystal oscillator and a micro USB connection capable of acting as a USB client device, like a mouse or a keyboard.

In the upper left corner of the board there is a reset pushbutton, that you can use to restart the board. There are four status LEDS : ON [green] indicates whether the board is receiving power supply L [yellow] connected directly to the microcontroller, accessible through pin 13 RX and TX [yellow] indicates the data being transmitted or received over the USB communication

The board contains everything needed to support the microcontroller; simply connect it to a computer with a USB cable to get started.

The Esplora has built-in USB communication; it can appear to a connected computer as a mouse or keyboard, in addition to a virtual (CDC) serial / COM port. This has other implications for the behavior of the board; these are detailed on the getting started page.

The board includes: Analog joystick with central push-button, 4 push-buttons, Linear pot, mic, light sensor, temp sensor, 3-axis accelerometer, buzzer, RGB LED, 4 TinkerKit (2 In, 2 Out), TFT display connector

Arduino Esplora Board

Arduino Esplora Board

Arduino Esplora Board

For a step-by-step introduction to the Esplora, check out the Getting Started with Esplora guide.