Hello everybody, has someone ever tried to access an Esp 32 with the PC software processing? With the Arduino it’s pretty easy, I would just like to try it with the ESP… https://processing.org/
3 Answers
Hi.
I’ve never experimented with Processing on the ESP.
If anybody knows if it is possible and how to do it, please share.
Regards,
Sara
Hello Sara,
I experimented a little bit and am amazed how easy it was to send an instruction from ESP 32 and receive something from ESP 32.
Here is the code for ESP and processing…
ESP32 WEMOS with OLED
// Include the correct display library // For a connection via I2C using Wire include #include <Wire.h> // Only needed for Arduino 1.6.5 and earlier #include "SSD1306.h" // alias for `#include "SSD1306Wire.h"` // or #include "SH1106.h" alis for `#include "SH1106Wire.h"` // For a connection via I2C using brzo_i2c (must be installed) include // #include <brzo_i2c.h> // Only needed for Arduino 1.6.5 and earlier // #include "SSD1306Brzo.h" // #include "SH1106Brzo.h" // For a connection via SPI include // #include <SPI.h> // Only needed for Arduino 1.6.5 and earlier // #include "SSD1306Spi.h" // #include "SH1106SPi.h" // Use the corresponding display class: // Initialize the OLED display using SPI // D5 -> CLK // D7 -> MOSI (DOUT) // D0 -> RES // D2 -> DC // D8 -> CS // SSD1306Spi display(D0, D2, D8); // or // SH1106Spi display(D0, D2); // Initialize the OLED display using brzo_i2c // D3 -> SDA // D5 -> SCL // SSD1306Brzo display(0x3c, D3, D5); // or // SH1106Brzo display(0x3c, D3, D5); // Initialize the OLED display using Wire library SSD1306 display(0x3c, 5, 4); // SH1106 display(0x3c, D3, D5); char val; // Variable für // Adapted from Adafruit_SSD1306 void drawLines() { for (int16_t i=0; i<DISPLAY_WIDTH; i+=4) { display.drawLine(0, 0, i, DISPLAY_HEIGHT-1); display.display(); delay(10); } for (int16_t i=0; i<DISPLAY_HEIGHT; i+=4) { display.drawLine(0, 0, DISPLAY_WIDTH-1, i); display.display(); delay(10); } delay(250); display.clear(); for (int16_t i=0; i<DISPLAY_WIDTH; i+=4) { display.drawLine(0, DISPLAY_HEIGHT-1, i, 0); display.display(); delay(10); } for (int16_t i=DISPLAY_HEIGHT-1; i>=0; i-=4) { display.drawLine(0, DISPLAY_HEIGHT-1, DISPLAY_WIDTH-1, i); display.display(); delay(10); } delay(250); display.clear(); for (int16_t i=DISPLAY_WIDTH-1; i>=0; i-=4) { display.drawLine(DISPLAY_WIDTH-1, DISPLAY_HEIGHT-1, i, 0); display.display(); delay(10); } for (int16_t i=DISPLAY_HEIGHT-1; i>=0; i-=4) { display.drawLine(DISPLAY_WIDTH-1, DISPLAY_HEIGHT-1, 0, i); display.display(); delay(10); } delay(250); display.clear(); for (int16_t i=0; i<DISPLAY_HEIGHT; i+=4) { display.drawLine(DISPLAY_WIDTH-1, 0, 0, i); display.display(); delay(10); } for (int16_t i=0; i<DISPLAY_WIDTH; i+=4) { display.drawLine(DISPLAY_WIDTH-1, 0, i, DISPLAY_HEIGHT-1); display.display(); delay(10); } delay(250); } // Adapted from Adafruit_SSD1306 void drawRect(void) { for (int16_t i=0; i<DISPLAY_HEIGHT/2; i+=2) { display.drawRect(i, i, DISPLAY_WIDTH-2*i, DISPLAY_HEIGHT-2*i); display.display(); delay(10); } } // Adapted from Adafruit_SSD1306 void fillRect(void) { uint8_t color = 1; for (int16_t i=0; i<DISPLAY_HEIGHT/2; i+=3) { display.setColor((color % 2 == 0) ? BLACK : WHITE); // alternate colors display.fillRect(i, i, DISPLAY_WIDTH - i*2, DISPLAY_HEIGHT - i*2); display.display(); delay(10); color++; } // Reset back to WHITE display.setColor(WHITE); } // Adapted from Adafruit_SSD1306 void drawCircle(void) { for (int16_t i=0; i<DISPLAY_HEIGHT; i+=2) { display.drawCircle(DISPLAY_WIDTH/2, DISPLAY_HEIGHT/2, i); display.display(); delay(10); } delay(1000); display.clear(); // This will draw the part of the circel in quadrant 1 // Quadrants are numberd like this: // 0010 | 0001 // ------|----- // 0100 | 1000 // display.drawCircleQuads(DISPLAY_WIDTH/2, DISPLAY_HEIGHT/2, DISPLAY_HEIGHT/4, 0b00000001); display.display(); delay(200); display.drawCircleQuads(DISPLAY_WIDTH/2, DISPLAY_HEIGHT/2, DISPLAY_HEIGHT/4, 0b00000011); display.display(); delay(200); display.drawCircleQuads(DISPLAY_WIDTH/2, DISPLAY_HEIGHT/2, DISPLAY_HEIGHT/4, 0b00000111); display.display(); delay(200); display.drawCircleQuads(DISPLAY_WIDTH/2, DISPLAY_HEIGHT/2, DISPLAY_HEIGHT/4, 0b00001111); display.display(); } void printBuffer(void) { // Initialize the log buffer // allocate memory to store 8 lines of text and 30 chars per line. display.setLogBuffer(5, 30); // Some test data const char* test[] = { "Hello", "World" , "working" }; for (uint8_t i = 0; i < 11; i++) { display.clear(); // Print to the screen display.println(test[i]); // Draw it to the internal screen buffer display.drawLogBuffer(0, 0); // Display it on the screen display.display(); delay(500); } } void setup() { Serial.begin(9600); // starte serial für Processing display.init(); // display.flipScreenVertically(); display.setContrast(255); } void loop() { // Abfrage der Variable von serial if (Serial.available()) { // If data is available to read, val = Serial.read(); // read it and store it in val } if (val == '1') { // If 1 was received drawLines(); delay(1000); display.clear(); drawRect(); delay(1000); display.clear(); fillRect(); delay(1000); display.clear(); drawCircle(); delay(1000); display.clear(); printBuffer(); delay(1000); display.clear(); } delay (10); }
Processing code
import processing.serial.*; Serial myPort; // Create object from Serial class void setup() { size(200,200); //make our canvas 200 x 200 pixels big String portName = Serial.list()[4]; //change the 0 to a 1 or 2 etc. to match your port myPort = new Serial(this, portName, 9600); } void draw() { if (mousePressed == true) { //if we clicked in the window myPort.write('1'); //send a 1 println("1"); } else { //otherwise myPort.write('0'); //send a 0 println ("0"); } }