Thing+ Guide for Arduino with ESP8266

※ Note: The ESP8266 has a 3.3V operating voltage. In this guide, 5V is applied to the RX and TX pins of the ESP8266, so the ESP8266 board may be broken. ※ Due to a bug in the WiFiEsp library, sensor data transmission is possible, but actuator commands can not be received at arduino side.

Arrangements: Arduino, Arduino AC power, ESP8266

Please apply AC power to Arduino.

1. ESP8266 F/W update

1.1 Circuit configuration


Esp8266 Arduino
Rx Rx
Tx Tx
CH_PD 3.3V
VCC 3.3V
Arduino Arduino

1.2 ESP8266 Flash Tool, SDK Download

1.3 Flash ESP8266 Firmware

  • Execute FLASH_TOOL_DIR/ESPFlashDownloadTool_V3.4.4.exe


  • Set the Download Patch Config window of Flash Tool as below.

    File Address
    SDK_DIR/bin/esp_init_data_default.bin 0xfc000
    SDK_DIR/bin/boot_v1.6.bin 0x00000
    SDK_DIR/bin/blank.bin 0xfe000
    SDK_DIR/bin/at/1024+1024/ 0x01000
  • After selecting, press Start at the bottom.   - If downloading does not work, try setting BaudRate to 115200.   - If it continues to fail, turn off both Arduino and Esp8266, wait 5 minutes and try again.

  • Remember the MAC address shown at the bottom left of FlashTool. We will use it later when registering the gateway.

1.4 Verify flashing and Baudrate set

  • With nothing connected to the GPIO0 pin of the ESP8266, turn the board off and then on.
  • Runs the Adunino IDE and turns on the serial monitor.
  • Change the setting part to Both NL & CR, 115200 BaudRate in the bottom-right of the serial monitor. SerialMonitor

  • To check whether ESP8266 is booted normally, send AT command and check whether OK response is coming.
  • Send AT + GMR command to check the firmware version.   - Finally, to set the Baudrate of the ESP8266 to 9600, transmit AT + UART_DEF = 9600,8,1,0,0.
  • If it is set to 9600 normally, it should be reset to 9600 as the baud rate of the serial monitor.       > All AT commands must be capitalized.
command response description
AT OK Verify normal operation of AT command
AT+GMR AT version: 14 2016 18:54:01)
SDK version:2.0.0(656edbf)
compile time:Jul 19 2016 18:44:22
Check to firmware version
AT+UART_DEF=9600,8,1,0,0 OK setting of Baudrate

2. Thing+ Guide for Arduino with ESP8266

2.1 Circuit configuration


Esp8266 Arduino
CH_PD 3.3V
VCC 3.3V

2.2 Install libraries

  • Scketch -> Include Library -> Manage Libraries -> Search and Install WiFiEsp
  • Scketch -> Include Library -> Manage Libraries -> Search and Install Thingplus
  • Scketch -> Include Library -> Manage Libraries -> Search and Install ArduinoJson
  • Scketch -> Include Library -> Manage Libraries -> Search and Install PubSubClient
  • Scketch -> Include Library -> Manage Libraries -> Search and Install Time
  • Scketch -> Include Library -> Manage Libraries -> Search and Install Timer

Reference : Install arduino firmware

2.2.1 Modifying the PubSubClient’s Header File

  • Arduino Library Directory Path

    Windows : My Documents\Arduino\libraries\
    Mac : ~/Documents/Arduino/libraries/
    Linux : /home/<your user name>/sketchbook/libraries
  • LibrayPath/PubSubClient/src/PubSubClient.h Open the file and make the following changes.



2.2.2 config setting

  • open LibraryPath/Thingplus/src/Thingplus.cpp and modify as the following.(at line: 230)
    • ->
void ThingplusClass::begin(Client& client, byte mac[], const char *apikey) {
	const char *server = "";
	const int port = 1883;

	this->mac = mac;
	snprintf(this->gatewayId, sizeof(this->gatewayId), PSTR("%02x%02x%02x%02x%02x%02x"),
			mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
	this->apikey = apikey;

	this->mqtt.setServer(server, port);

3. Register gateway

Reference : Register Gateway

  • In this guide, we will use LibrayPath/Thingplus/examples/ArduinoEsp8266/ArduinoEsp8266.ino as it is an example of connecting the esp8266 to the Arduino board.