Before install ESP32/8266 on Arduino IDE running on Ubuntu, python is needed to be installed. Otherwise, you will be reported with error of: exec: "python": executable file not found in $PATH
To install python and wget on Ubuntu, run the command in terminal:
$ sudo apt install python
$ sudo apt install python-pip
$ pip install wget
The simplest way to install ESP32/8266 on Arduino IDE is using Boards Manager,
To add boards manager, click in the menu
> File > Preferences >
Enter https://dl.espressif.com/dl/package_esp32_index.json (for ESP32) or/and http://arduino.esp8266.com/stable/package_esp8266com_index.json (for ESP8266) in Additional Boards Manager URLs. When add multiple URLs, separating them with commas.
This video show how:
If you run with error of: ImportError: No module named serial.tools.list_ports
Most likely the pyserial is too old, re-install it with:
$ pip install pyserial
This video show how to install the latest Arduino IDE 1.8.9 on a fresh new Ubuntu 18.10 (on VirtualBox 6.0/Windows 10).
This installation is very straightforward:
- visit Arduino Software download page to download the Linux 32 bits or 64 bits version corresponding to your system.
- Extract the downloaded file to the where you want to install.
- Open Terminal to run the install.sh with sudo. $ sudo ./install.sh
After finished, you can start Arduino IDE with arduino command or from Application launcher.
But...up to this step, you have no permission to access the serial port. When you download the code to Arduino devices, you will be reported with error:
avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied
To fix it, you have to add permission:
- Open Terminal, enter the command: $ sudo usermod -a -G dialout <username> $ sudo chmod a+rw /dev/ttyACM0
The first thing I want to do is make the OLED work. But it's only limit info from the seller, only mention that it's WEMOS LoLin32, without any about the OLED. So I have to search, guess and try.
After searched in some Chinese website, I guess that the OLED driver for this module should be SSD1306, with I2C interface. and the I2C pin should be 5 and 4 for ESP32.
// Copy from Arduino Playground - i2c_scanner
// https://playground.arduino.cc/Main/I2cScanner/
// --------------------------------------
// i2c_scanner
//
// Version 1
// This program (or code that looks like it)
// can be found in many places.
// For example on the Arduino.cc forum.
// The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
// Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26 2013
// V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Changes by louarnold removed.
// Scanning addresses changed from 0...127 to 1...119,
// according to the i2c scanner by Nick Gammon
// https://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
// As version 4, but address scans now to 127.
// A sensor seems to use address 120.
// Version 6, November 27, 2015.
// Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
#include <Wire.h>
void setup()
{
Wire.begin(5,4); //Modifed for ESP32
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
Remember to select board of "WEMOS LoLin32" before download.
The I2C address is 0x3C.
Then I tried to find any library suitable in Arduino IDE, and found "ESP8266 and ESP32 Oled Driver for SSD1306 by Daniel Eichhorn, Fabrice Weinberg".
Luckily it work as expect.
Tried to load the example of SSD1306SimpleDemo, simple modify the code
SSD1306Wire display(0x3c, D3, D5);
to
SSD1306Wire display(0x3c, 5, 4);
to make it work for this module.
This video show how to:
A minimum exercise to display simple text.
/*
* A ESP32/OLED exercise to display simple text
* Board:
* esp32 by Espressif Systems version 1.0.4
* OLED library:
* ESP8266 and ESP32 Oled Driver for SSD1306 displays version 4.1.0
*/
#include <Wire.h> // Only needed for Arduino 1.6.5 and earlier
#include "SSD1306Wire.h" // legacy: #include "SSD1306.h"
#include "images.h"
// Initialize the OLED display using Arduino Wire:
SSD1306Wire display(0x3c, 5, 4);
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println();
// Initialising the UI will init the display too.
display.init();
display.flipScreenVertically();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_16);
}
void loop() {
display.clear();
display.drawString(0, 0, "ESP32/OLED");
display.drawString(0, 15, "exercise:");
display.drawString(0, 30, "To display");
display.drawString(0, 45, "simple text");
display.display();
delay(100);
}