ESPRESSIF ESP32

Introduction

ESP32 is a series of low-cost, low-power system on a chip microcontrollers with integrated Wi-Fi and dual-mode Bluetooth. There are multiple modules based on this microcontroller that includes different kinds of antennas, pinouts and memory extensions. It is the successor to the ESP8266 microcontroller and is designed to be one of the most relevant IoT impulsor during the next years and there is a great diversity of variants that exploit its capacities together with other peripherals, integrating LoRa communication, audio amplifiers, LCD screens, etc.

Install On Arduino IDE

This device can be programmed directly from the Arduino IDE by including the ESP32 core libraries with Arduino Boards Manager. For this step, you will need first to include https://dl.espressif.com/dl/package_esp32_index.json into Additional Board Manager URLs field in the Arduino preferences.

Next, go to the Boards manager to install the ESP32 package. Search for the esp32 and install the package esp32 by Espressif Systems

After this process you should be able to select this board on your Arduino IDE and start creating your IoT projects with Thinger.io.

ESP32 WiFi

The following example will allow connecting your device to the cloud platform in a few lines via WiFi interface. Just modify the arduino_secrets.h file with your own information.

#define THINGER_SERIAL_DEBUG

#include <ThingerESP32.h>
#include "arduino_secrets.h"

ThingerESP32 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);

void setup() {
  // open serial for debugging
  Serial.begin(115200);

  pinMode(16, OUTPUT);

  thing.add_wifi(SSID, SSID_PASSWORD);

  // digital pin control example (i.e. turning on/off a light, a relay, configuring a parameter, etc)
  thing["GPIO_16"] << digitalPin(16);

  // resource output example (i.e. reading a sensor value)
  thing["millis"] >> outputValue(millis());

  // more details at http://docs.thinger.io/arduino/
}

void loop() {
  thing.handle();
}

ESP32 Ethernet

// It may be required to define this according to your specific board
// This example works for Olimex ESP32-PoE-ISO

//#define ETH_PHY_ADDR 0
#define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT
//#define ETH_PHY_TYPE ETH_PHY_LAN8720
#define ETH_PHY_POWER 12
//#define ETH_PHY_MDC 23
//#define ETH_PHY_MDIO 18
//#define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN

// enable debug output over serial
#define THINGER_SERIAL_DEBUG 

#include <ThingerESP32Eth.h>
#include "arduino_secrets.h"

ThingerESP32Eth thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);

void setup() {
 
  // enable serial for debugging
  Serial.begin(115200); 

  // example of fixed ip address (dhcp is used by default)
  //thing.set_address("192.168.1.55", "192.168.1.1", "255.255.255.0", "8.8.8.8", "8.8.4.4");
  
  // set desired hostname
  thing.set_hostname("ESP32Eth");

  // resource output example (i.e. reading a sensor value)
  thing["eth"] >> [](pson& out){
    out["hostname"] = ETH.getHostname();
    out["mac"] = ETH.macAddress();
    out["ip"] = ETH.localIP().toString();
    out["link"] = ETH.linkSpeed();
  };

  // more details at http://docs.thinger.io/arduino/
}

void loop() {
  thing.handle();
}

ESP32 WiFi WebConfig

It is possible to configure all parameters required for connection via a web Interface (captive portal). The device will create an access point where the user can connect to establish required information, like username, device identifier, credentials, and access point to connect.

#define THINGER_SERIAL_DEBUG

// Requires WifiManager from Library Manager or https://github.com/tzapu/WiFiManager
#include <ThingerESP32WebConfig.h>

ThingerESP32WebConfig thing;

void setup() {
  // open serial for debugging
  Serial.begin(115200);

  pinMode(27, OUTPUT);

  // digital pin control example (i.e. turning on/off a light, a relay, configuring a parameter, etc)
  thing["relay"] << digitalPin(27);

  // resource output example (i.e. reading a sensor value)
  thing["millis"] >> outputValue(millis());
}

void loop() {
  thing.handle();
}

Once this sketch is loaded in the device, it is possible to follow the next steps to connect it to the platform:

  1. Connect to Thinger-Device WiFi with your computer or phone, using thinger.io as WiFi password

  2. Wait for the configuration window, or navigate to http://192.168.4.1 if it does not appear

  3. Configure the wifi where the ESP32 will be connected, and your thinger.io device credentials

  4. Your device should be now connected to the platform.

The WebConfig interface includes different methods to control the captive portal:

  • clean_credentials: It clean all credentials from the device (WiFi/user parameters). This way, the next time the device is booted will create the captive portal again to request the WiFi configuration. It can be executed after a long press on a button.

  • set_user: Initializes the default user for connecting the device to the platform (if set, this parameter is not requested to the user in the captive portal).

  • set_device: Initializes the default device for connecting the device to the platform (if set, this parameter is not requested to the user in the captive portal).

  • set_password: Initializes the default device password for connecting the device to the platform (if set, this parameter is not requested to the user in the captive portal).

  • add_setup_parameter: Add additional parameters to be requested in the captive portal, for example, any other configuration required for the execution: sampling intervals, meta-data, thresholds, etc.

  • set_on_config_callback: Set a callback to receive configuration provided by the user in the captive portal, i.e., user, device, password, or any additional parameter configured.

  • set_on_wifi_config: Set a callback to receive the result of the WiFi configuration. If the connection did not succeed, it can be used to clean credentials, so, the captive portal runs again.

  • set_on_captive_portal_run: Set a callback to receive the WiFiManager instance before the captive portal is shown. It can be used to add any other customization over the WebConfig interface.

ESP32 WiFi SmartConfig

Coming soon

Last updated