Espressif ESP8266 and ESP32 topic
- Introduction
- DFRobot ESPBee
- Manufacturer Documentation
- Modem Constructor
- Example Code
- Reference
- Detailed Descriptions
Introduction
These are handy, cheap, and very widely available WiFi and WiFi/Bluetooth modules. They use relatively little power amd can be put in a deep sleep mode to greatly reduce power draw. The types of sleep they can use are dependent on the breakout you have. If you're shopping for boards, I strongly recommend getting a breakout that exposes the deep sleep wake up (RSTB/DIO16) pin so that you can put the chip in its lowest power mode. When using the AT command firmware, it is not possible to purposefully enter light sleep mode. The module will enter light sleep on its own after some (undocumented) idle period. In my testing, I've never seen the module drop to the documented light sleep power levels regardless of the length of time idle.
DFRobot ESPBee
I don't actually recommend this module. It gets hot and eats power for no apparent reason. And the pin connections are a bit strange. But it is cheap and available. The pins are technically available to use the ESP's "light sleep" but I've never successfully gotten the module to actually enter light sleep mode. It always runs at full power draw. It's not possible to use deep sleep on the DFRobot bee.
Manufacturer Documentation
More information on the ESP8266 is here: https:/
Modem Constructor
Construct a new Espressif ESP8266 object. The constuctor initializes all of the provided member variables, constructs a loggerModem parent class with the appropriate timing for the module, calls the constructor for a TinyGSM modem on the provided modemStream, and creates a TinyGSM Client linked to the modem. Should be set to a negative number if the modem should be continuously powered or the power cannot be controlled by the MCU.
Should be set to a negative number if the modem reset pin is not connected to the MCU. This is the ESP's
EspressifESP8266::
Parameters
modemStream
The Arduino stream instance for serial communication.
powerPin
The digital pin number of the mcu pin controlling power to the modem (active
HIGH
).
modemResetPin
The digital pin number of the pin on the mcu attached the the hard or panic reset pin of the modem.
ssid
The wifi network ID.
pwd
The wifi network password, assuming WPA2.
RSTB/DIO16
pin.
Example Code
The ESP8266 is used in the menu a la carte example and the logging to ThingSpeak example.
Classes
- class EspressifESP8266
- The loggerModem subclass for any breakout of the Espressif ESP8266 wifi chip or ESP32 wifi/bluetooth chip that has been flashed with Espressif's AT command firmware.
Modem Pin Settings and Timing
The timing and pin level settings for an ESP8266 (or ESP32)
- #define ESP8266_STATUS_LEVEL = HIGH
- The loggerModem::
_statusLevel. - #define ESP8266_STATUS_TIME_MS = 350
- The loggerModem::
_statusTime_ms. - #define ESP8266_RESET_LEVEL = LOW
- The loggerModem::
_resetLevel. - #define ESP8266_RESET_PULSE_MS = 1
- The loggerModem::
_resetPulse_ms. - #define ESP8266_WAKE_LEVEL = LOW
- The loggerModem::
_wakeLevel. - #define ESP8266_WAKE_PULSE_MS = 0
- The loggerModem::
_wakePulse_ms. - #define ESP8266_WAKE_DELAY_MS = 0
- The loggerModem::
_wakeDelayTime_ms. - #define ESP8266_ATRESPONSE_TIME_MS = 700
- The loggerModem::
_max_atresponse_time_ms. - #define ESP8266_DISCONNECT_TIME_MS = 500
- The loggerModem::
_disconnetTime_ms. - #define ESP8266_RECONNECT_TIME_MS = 2500
- The amount of time in ms it takes the ESP8266 to reconnect using saved credentials.
Define documentation
#define ESP8266_STATUS_LEVEL = HIGH
#include <src/modems/EspressifESP8266.h>
The loggerModem::
It is not possible to get status from the ESP8266 in deep sleep mode - during deep sleep the pin state is undefined.
For cases where a pin is defined for light sleep mode, the Espressif documentation states:
since the system needs some time to wake up from light sleep, it is suggested that wait at least 5ms before sending next AT command. The documentation doesn't say anything about the time before the pin reaches the expected level. The status level during light sleep is user selectable, this library sets it low for wake and high for sleep. Of course, despite being able to configure light sleep mode for the module, it's not actually possible to purposefully enter light sleep via AT commands, so we are dependent on the module deciding it's been idle long enough and entering sleep on its own. It is a terrible system. Use a deep-sleep with reset if possible.
#define ESP8266_STATUS_TIME_MS = 350
#include <src/modems/EspressifESP8266.h>
The loggerModem::
It is not possible to get status from the ESP8266 in deep sleep mode - during deep sleep the pin state is undefined.
For cases where a pin is defined for light sleep mode, the Espressif documentation states:
since the system needs some time to wake up from light sleep, it is suggested that wait at least 5ms before sending next AT command. The documentation doesn't say anything about the time before the pin reaches the expected level. The status level during light sleep is user selectable, this library sets it low for wake and high for sleep. Of course, despite being able to configure light sleep mode for the module, it's not actually possible to purposefully enter light sleep via AT commands, so we are dependent on the module deciding it's been idle long enough and entering sleep on its own. It is a terrible system. Use a deep-sleep with reset if possible.
#define ESP8266_RESET_LEVEL = LOW
#include <src/modems/EspressifESP8266.h>
The ESP8266 is reset with a low pulse on pin 32. The reset time is undocumented but very fast - 1ms seems to be sufficient
#define ESP8266_RESET_PULSE_MS = 1
#include <src/modems/EspressifESP8266.h>
The loggerModem::
The ESP8266 is reset with a low pulse on pin 32. The reset time is undocumented but very fast - 1ms seems to be sufficient
#define ESP8266_WAKE_LEVEL = LOW
#include <src/modems/EspressifESP8266.h>
This light sleep wake level is user configurable on the ESP8266. This library uses a LOW
level for wake.
#define ESP8266_WAKE_PULSE_MS = 0
#include <src/modems/EspressifESP8266.h>
The loggerModem::
This light sleep wake level is user configurable on the ESP8266. This library uses a LOW
level for wake.
#define ESP8266_WAKE_DELAY_MS = 0
#include <src/modems/EspressifESP8266.h>
The loggerModem::
The ESP8266 turns on when power is applied regardless of pin states. No further wake command is needed.
#define ESP8266_ATRESPONSE_TIME_MS = 700
#include <src/modems/EspressifESP8266.h>
The loggerModem::
The serial response time after boot (via power on or reset) is undocumented for the ESP8266. Other users online estimate about 350ms.
In my fiddling, the ESP32 running AT firmware takes a bit longer; 700ms may be safe.
The serial response time on waking from light sleep is 5ms.
#define ESP8266_DISCONNECT_TIME_MS = 500
#include <src/modems/EspressifESP8266.h>
The loggerModem::
The disconnect time for the ESP8266 is not documented (and the status pin isn't valid) so this time is just an estimate.
#define ESP8266_RECONNECT_TIME_MS = 2500
#include <src/modems/EspressifESP8266.h>
The amount of time in ms it takes the ESP8266 to reconnect using saved credentials.