Spickzettel für ESP8266
Installation in der IDE
ESP8266 allgemein
GPIO |
Pin |
Funktion 1 |
Funktion 2 |
Funktion 3 |
Funktion 4 |
Funktion 5 |
|
Anmerkung |
0 |
15 |
IO0 |
SPI_CS2 |
|
|
CLK_OUT (out) |
|
muss bei Boot HIGH sein |
1 |
26 |
U0TXD |
SPI_CS1 |
|
IO1 |
CLK_RTC (out) |
|
muss bei Boot HIGH sein |
2 |
14 |
IO2 |
I2SO_WS |
UART1_TX
(during flash programming) |
|
UART0_TXD |
|
muss bei Boot HIGH sein |
3 |
25 |
U0RXD |
I2SO_DATA |
|
IO3 |
CLK_XTAL (out) |
|
|
4 |
16 |
IO4 |
CLK_XTAL (out) |
|
|
|
PWM3 |
|
5 |
24 |
IO5 |
CLK_RTC (out) |
|
|
|
IR-Rx |
|
6 |
21 |
SD_CLK |
SPI_CLK |
|
IO6 |
UART1_CTS (in) |
SPI-Flash |
|
7 |
22 |
SD_D0 |
SPIQ_MSIO |
|
IO7 |
UART1_TXD |
SPI-Flash |
|
8 |
23 |
SD_D1 |
SPID_MOSI |
|
IO8 |
UART1_RXD |
SPI-Flash |
|
9 |
18 |
SD_D2 |
SPIHD |
|
IO9 |
HSPIHD |
SPI-Flash |
|
10 |
19 |
SD_D3 |
SPIWP |
|
IO10 |
HSPIWP |
SPI-Flash |
|
11 |
20 |
SD_CMD |
SPI_CS0 |
|
IO11 |
UART1_RTS (out) |
SPI-Flash |
|
12 |
10 |
MTDI |
I2SI_DATA |
HSPI_MISO |
IO12 |
UART0_DTR (out) |
PWM0 |
|
13 |
12 |
MTCK |
I2SI_BCK |
HSPI_MOSI |
IO13 |
UART0_CTS (in) |
|
|
14 |
9 |
MTMS |
I2SI_WS |
HSPI_CLK |
IO14 |
UART0_DSR (in) |
PWM2, IR-Tx |
|
15 |
13 |
MTDO |
I2SO_BCK |
HSPI_CS |
IO15 |
UART0_RTS (out) |
PWM1 |
muss bei Boot LOW sein |
16 |
8 |
XPD_DCDC (out)
Deep-sleep wakeup |
RTC_GPIO0 |
EXT_WAKEUP (in) |
DEEPSLEEP (out) |
ANT_SWITCH_BIT0 (out) |
|
|
|
|
|
|
|
|
|
|
|
|
|
CHIP_EN |
|
|
|
|
|
muss ext. PullUp haben |
|
32 |
EXT_RSTB |
|
|
|
|
|
int. PullUp |
fett markiert sind die Defaults nach Reset
Hardware ESP-01
auf die Bestückungsseite gesehen:
+---------------+
| RX 7 8 | 3,3V
| IO0 5 6 | RST
| IO2 3 4 | EN
| GND 1 2 | TX
+---------------+
schwarzes Board mit P25Q80H 1MByte und einer LED
"ESP-01S"
- RST (Pin 32) mit 12k PullUp
- EN (Pin 7) mit 12k PullUp
- GPIO0 mit 12k PullUp
- GPIO1 TxD
- GPIO2 an LED mit 2,2k nach 3,3V
- GPIO3 RxD
- GPIO15/MTDO (Pin 13) mit 12k PullDown
- VDDPST (Pin 11) an 3,3V
- RES12K (Pin 31) mit 12k PullDown
- 26MHz-Quarz: Boot-Log mit 74880 baud (ESP8266 Datasheet "3.6 UART")
VisualStudio Code - platformio.ini
- [env:esp01_1m]
- platform = espressif8266
- board = esp01_1m
- board_build.flash_mode = dout
- monitor_speed = 74880
- ;monitor_speed = 115200
- upload_speed = 921600

blaues Board ESP-01 mit 25Q40BT 512kByte und zwei LEDs
"ESP-01"
- RST (Pin 32) offen (hat internen PullUp, darf gerne einen externen
haben)
- EN (Pin 7) offen (benötigt PullUp)
- GPIO0 offen (benötigt PullUp)
- GPIO1 TxD mit blauer LED über 2,2k an 3,3V
- GPIO2 offen (benötigt PullUp)
- GPIO3 RxD
- RES12K (Pin 31) mit 12k PullDown
- LED rot = Power 3,3V
- nur eine einzige 3,3V-Kapazität neben VDD3P3
VisualStudio Code - platformio.ini
- [env:esp01]
- platform = espressif8266
- board = esp07
USB-Adapter mit CH430G
- RST offen (hat internen PullUp, darf gerne einen externen haben)
- EN an 3,3V
- GPIO0 mit 10k PullUp
- GPIO2 mit 10k PullUp
- 3,3V LDO Torex XC6206 (200mA, 250mV Drop, max. 7V)
- für den Upload eines neuen Programms geeignet, aber zu schwach für
stabilen WiFi-Betrieb
- aus Hardware Design Guidelines: 500mA
- Design Guideline:
- RC an EXT_RSTB (10k PullUp + 100nF)
- U0TXD soll 499Ω-Reihenwiderstand haben (Entstörung)
Arduino
- "Generic ESP8266 Module"
- Builtin Led: "2"
- Crystal: "26 MHz"
- Flash Size: "512kB" bzw. "1MB"
- Reset Method: "no dtr (aka ck)"
%LOCALAPPDATA%\Arduino15\packages\esp8266\tools\python3\3.7.2-post1/python3
-I %LOCALAPPDATA%\Arduino15\packages\esp8266\hardware\esp8266\3.1.1/tools/upload.py
--chip esp8266 --port COM6 --baud 921600 --before no_reset --after soft_reset
write_flash 0x0 %TEMP%\arduino_build_51752/SGP30_demo.ino.bin
Hardware ESP-07
auf die Bestückungsseite gesehen:
+--------------+
| O ######## |
RST ) ( IO1/TX
ADC ) ( IO3/RX
EN ) ( IO5
IO16 ) ( IO4
IO14 ) ( IO0
IO12 ) ( IO2/LED mit 470 Ohm
IO13 ) ( IO15/MTDO
3,3V ) ( GND
+--------------+
In VS Code muss in der platformio.ini hinzugefügt werden:
- board_build.flash_mode = dout
- Serial.begin(74880);
- upload_speed = 921600
GPIOs
- aus dem SDK:
- gpio_pullup_en() und gpio_pullup_dis() werden bei GPIO16 ohne Aktion
mit ESP_OK verlassen, vermtl. weil an GPIO16 (RTC GPIO) kein PullUp
möglich ist
- gpio_pulldown_en() und gpio_pulldown_dis() werden außer bei GPIO16
ohne Aktion mit ESP_OK verlassen, vermtl. weil nur GPIO16 (RTC GPIO) ein
PullDown möglich ist
- PullUp können an GPIO0 bis 15 geschaltet werden
- PullDown kann an GPIO16 geschaltet werden
- gpio_pin_reg_t
- GPIO_PIN_REG_0 PERIPHS_IO_MUX_GPIO0_U
- GPIO_PIN_REG_1 PERIPHS_IO_MUX_U0TXD_U
- GPIO_PIN_REG_2 PERIPHS_IO_MUX_GPIO2_U
- GPIO_PIN_REG_3 PERIPHS_IO_MUX_U0RXD_U
- gpio_struct_t GPIO; [ESP-API
gpio_struct.h]
- gpio_output_disable() : GPIO.enable_w1tc |= (0x1 << gpio_num);
- gpio_output_enable() : GPIO.enable_w1ts |= (0x1 << gpio_num);
- gpio_set_level() : GPIO.out_w1ts |= (0x1 << gpio_num); bzw.
GPIO.out_w1tc |= (0x1 << gpio_num);
- gpio_get_level() : (GPIO.in >> gpio_num) & 0x1;
- Open-Drain: GPIO.pin[gpio_num].driver = 1;
I²C
- im Ruhezustand sind SCL und SDA high
- SDA ist gültig während SCL=high, SDA darf nur wechseln bei SCL=low
- SCL kann vom Slave low gehalten werden um die Übertragung zu pausieren (clock
stretching)
- Start-Condition: SDA low, während SCL high zu low Flanke (nach
Ruhezustand sind beide high):
- 0,0: SDA <= low
- 0,5: SCL <= low - Start.
- 1,0: SDA <= erstes Bit 7 (MSB, high oder low)
- 1,5: SCL <= high während Datenübernahme.
- 2,0: SCL <= low, SDA Bit 6
- 2,5: SCL <= high während Datenübernahme.
- 3,0: SCL <= low, SDA Bit 5
- 3,5: SCL <= high während Datenübernahme.
- 4,0: SCL <= low, SDA Bit 4
- 4,5: SCL <= high während Datenübernahme.
- 5,0: SCL <= low, SDA Bit 3
- 5,5: SCL <= high während Datenübernahme.
- 6,0: SCL <= low, SDA Bit 2
- 6,5: SCL <= high während Datenübernahme.
- 7,0: SCL <= low, SDA Bit 1
- 7,5: SCL <= high während Datenübernahme.
- 8,0: SCL <= low, SDA Bit 0
- 8,5: SCL <= high während Datenübernahme.
- 9,0: SCL <= low: Slave aktiviert ACK (SDA<=low)
- 9,5: SCL <= high Lesen des ACK.
- nach 8 Bits ist SCL low, während dem folgenden SCL-high wird das ACK
gelesen
- Stop-Condition: SDA low während SCL low zu high Flanke (bei
vorhergehende Übertragung des ACKs ist SCL high und SDA i.d.R. low)
- 10,0: SCL <= low, SDA <= low
- 10,5: SCL <= high - STOP
- 11,0: SDA <= high.
- wenn ein Slave SDA low hält: 9x SCL
- Gochkov hat die SDA-Ansteuerung nicht über OPEN_DRAIN, sondern über die
Umschaltung von OUTPUT einer (konstanten) 0 und INPUT_PULLUP realisiert, da
es kein OUTPUT_OD_PULLUP gibt, und er nicht auf den Pullup verzichten
wollte:
- SDA-low: GPES = (1 << twi_sda); OUTPUT
- SDA-high: GPEC = (1 << twi_sda); INPUT_PULLUP wurde vorher durch
pinMode(twi_sda, INPUT_PULLUP) konfiguriert
- wobei GPES = ESP8266_REG(0x310) //GPIO_ENABLE_SET WO und GPEC =
ESP8266_REG(0x314) //GPIO_ENABLE_CLR WO [Arduino
esp8266_peri.h]
entsprechend gpio_struct_t GPIO.enable_w1tc bzw. enable_w1ts
- ESP API
Erstellt 21.10.2022, zuletzt geändert
18.04.2024 18:37:20,
Besuche. © Christian Enders