mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-21 10:26:06 +03:00
* Added null pointer check * Fixed typo * Added Serial.setRxBufferSize method description in libraries reference document
195 lines
6.9 KiB
ReStructuredText
195 lines
6.9 KiB
ReStructuredText
Reference
|
|
=========
|
|
|
|
Digital IO
|
|
----------
|
|
|
|
Pin numbers in Arduino correspond directly to the ESP8266 GPIO pin
|
|
numbers. ``pinMode``, ``digitalRead``, and ``digitalWrite`` functions
|
|
work as usual, so to read GPIO2, call ``digitalRead(2)``.
|
|
|
|
Digital pins 0—15 can be ``INPUT``, ``OUTPUT``, or ``INPUT_PULLUP``. Pin
|
|
16 can be ``INPUT``, ``OUTPUT`` or ``INPUT_PULLDOWN_16``. At startup,
|
|
pins are configured as ``INPUT``.
|
|
|
|
Pins may also serve other functions, like Serial, I2C, SPI. These
|
|
functions are normally activated by the corresponding library. The
|
|
diagram below shows pin mapping for the popular ESP-12 module.
|
|
|
|
.. figure:: esp12.png
|
|
:alt: Pin Functions
|
|
|
|
Pin Functions
|
|
|
|
Digital pins 6—11 are not shown on this diagram because they are used to
|
|
connect flash memory chip on most modules. Trying to use these pins as
|
|
IOs will likely cause the program to crash.
|
|
|
|
Note that some boards and modules (ESP-12ED, NodeMCU 1.0) also break out
|
|
pins 9 and 11. These may be used as IO if flash chip works in DIO mode
|
|
(as opposed to QIO, which is the default one).
|
|
|
|
Pin interrupts are supported through ``attachInterrupt``,
|
|
``detachInterrupt`` functions. Interrupts may be attached to any GPIO
|
|
pin, except GPIO16. Standard Arduino interrupt types are supported:
|
|
``CHANGE``, ``RISING``, ``FALLING``.
|
|
|
|
Analog input
|
|
------------
|
|
|
|
ESP8266 has a single ADC channel available to users. It may be used
|
|
either to read voltage at ADC pin, or to read module supply voltage
|
|
(VCC).
|
|
|
|
To read external voltage applied to ADC pin, use ``analogRead(A0)``.
|
|
Input voltage range is 0 — 1.0V.
|
|
|
|
To read VCC voltage, use ``ESP.getVcc()`` and ADC pin must be kept
|
|
unconnected. Additionally, the following line has to be added to the
|
|
sketch:
|
|
|
|
.. code:: cpp
|
|
|
|
ADC_MODE(ADC_VCC);
|
|
|
|
This line has to appear outside of any functions, for instance right
|
|
after the ``#include`` lines of your sketch.
|
|
|
|
Analog output
|
|
-------------
|
|
|
|
``analogWrite(pin, value)`` enables software PWM on the given pin. PWM
|
|
may be used on pins 0 to 16. Call ``analogWrite(pin, 0)`` to disable PWM
|
|
on the pin. ``value`` may be in range from 0 to ``PWMRANGE``, which is
|
|
equal to 1023 by default. PWM range may be changed by calling
|
|
``analogWriteRange(new_range)``.
|
|
|
|
PWM frequency is 1kHz by default. Call
|
|
``analogWriteFreq(new_frequency)`` to change the frequency.
|
|
|
|
Timing and delays
|
|
-----------------
|
|
|
|
``millis()`` and ``micros()`` return the number of milliseconds and
|
|
microseconds elapsed after reset, respectively.
|
|
|
|
``delay(ms)`` pauses the sketch for a given number of milliseconds and
|
|
allows WiFi and TCP/IP tasks to run. ``delayMicroseconds(us)`` pauses
|
|
for a given number of microseconds.
|
|
|
|
Remember that there is a lot of code that needs to run on the chip
|
|
besides the sketch when WiFi is connected. WiFi and TCP/IP libraries get
|
|
a chance to handle any pending events each time the ``loop()`` function
|
|
completes, OR when ``delay`` is called. If you have a loop somewhere in
|
|
your sketch that takes a lot of time (>50ms) without calling ``delay``,
|
|
you might consider adding a call to ``delay`` function to keep the WiFi
|
|
stack running smoothly.
|
|
|
|
There is also a ``yield()`` function which is equivalent to
|
|
``delay(0)``. The ``delayMicroseconds`` function, on the other hand,
|
|
does not yield to other tasks, so using it for delays more than 20
|
|
milliseconds is not recommended.
|
|
|
|
Serial
|
|
------
|
|
|
|
``Serial`` object works much the same way as on a regular Arduino. Apart
|
|
from hardware FIFO (128 bytes for TX and RX) ``Serial`` has
|
|
additional 256-byte TX and RX buffers. Both transmit and receive is
|
|
interrupt-driven. Write and read functions only block the sketch
|
|
execution when the respective FIFO/buffers are full/empty. Note that
|
|
the length of additional 256-bit buffer can be customized.
|
|
|
|
``Serial`` uses UART0, which is mapped to pins GPIO1 (TX) and GPIO3
|
|
(RX). Serial may be remapped to GPIO15 (TX) and GPIO13 (RX) by calling
|
|
``Serial.swap()`` after ``Serial.begin``. Calling ``swap`` again maps
|
|
UART0 back to GPIO1 and GPIO3.
|
|
|
|
``Serial1`` uses UART1, TX pin is GPIO2. UART1 can not be used to
|
|
receive data because normally it's RX pin is occupied for flash chip
|
|
connection. To use ``Serial1``, call ``Serial1.begin(baudrate)``.
|
|
|
|
If ``Serial1`` is not used and ``Serial`` is not swapped - TX for UART0
|
|
can be mapped to GPIO2 instead by calling ``Serial.set_tx(2)`` after
|
|
``Serial.begin`` or directly with
|
|
``Serial.begin(baud, config, mode, 2)``.
|
|
|
|
By default the diagnostic output from WiFi libraries is disabled when
|
|
you call ``Serial.begin``. To enable debug output again, call
|
|
``Serial.setDebugOutput(true)``. To redirect debug output to ``Serial1``
|
|
instead, call ``Serial1.setDebugOutput(true)``.
|
|
|
|
You also need to use ``Serial.setDebugOutput(true)`` to enable output
|
|
from ``printf()`` function.
|
|
|
|
The method ``Serial.setRxBufferSize(size_t size)`` allows to define the
|
|
receiving buffer depth. The default value is 256.
|
|
|
|
Both ``Serial`` and ``Serial1`` objects support 5, 6, 7, 8 data bits,
|
|
odd (O), even (E), and no (N) parity, and 1 or 2 stop bits. To set the
|
|
desired mode, call ``Serial.begin(baudrate, SERIAL_8N1)``,
|
|
``Serial.begin(baudrate, SERIAL_6E2)``, etc.
|
|
|
|
A new method has been implemented on both ``Serial`` and ``Serial1`` to
|
|
get current baud rate setting. To get the current baud rate, call
|
|
``Serial.baudRate()``, ``Serial1.baudRate()``. Return a ``int`` of
|
|
current speed. For example
|
|
|
|
.. code:: cpp
|
|
|
|
// Set Baud rate to 57600
|
|
Serial.begin(57600);
|
|
|
|
// Get current baud rate
|
|
int br = Serial.baudRate();
|
|
|
|
// Will print "Serial is 57600 bps"
|
|
Serial.printf("Serial is %d bps", br);
|
|
|
|
| ``Serial`` and ``Serial1`` objects are both instances of the
|
|
``HardwareSerial`` class.
|
|
| I've done this also for official ESP8266 `Software
|
|
Serial <https://github.com/esp8266/Arduino/blob/master/doc/libraries.md#softwareserial>`__
|
|
library, see this `pull
|
|
request <https://github.com/plerup/espsoftwareserial/pull/22>`__.
|
|
| Note that this implementation is **only for ESP8266 based boards**,
|
|
and will not works with other Arduino boards.
|
|
|
|
Progmem
|
|
-------
|
|
|
|
The Program memory features work much the same way as on a regular
|
|
Arduino; placing read only data and strings in read only memory and
|
|
freeing heap for your application. The important difference is that on
|
|
the ESP8266 the literal strings are not pooled. This means that the same
|
|
literal string defined inside a ``F("")`` and/or ``PSTR("")`` will take
|
|
up space for each instance in the code. So you will need to manage the
|
|
duplicate strings yourself.
|
|
|
|
There is one additional helper macro to make it easier to pass
|
|
``const PROGMEM`` strings to methods that take a ``__FlashStringHelper``
|
|
called ``FPSTR()``. The use of this will help make it easier to pool
|
|
strings. Not pooling strings...
|
|
|
|
.. code:: cpp
|
|
|
|
String response1;
|
|
response1 += F("http:");
|
|
...
|
|
String response2;
|
|
response2 += F("http:");
|
|
|
|
using FPSTR would become...
|
|
|
|
.. code:: cpp
|
|
|
|
const char HTTP[] PROGMEM = "http:";
|
|
...
|
|
{
|
|
String response1;
|
|
response1 += FPSTR(HTTP);
|
|
...
|
|
String response2;
|
|
response2 += FPSTR(HTTP);
|
|
}
|