Actions

KAmod ESP32 ETH POE (PL): Difference between revisions

From Kamamilabs.com - Wiki

 
(13 intermediate revisions by the same user not shown)
Line 36: Line 36:
<hr>
<hr>
==== Schemat elektryczny ====
==== Schemat elektryczny ====
Moduł ESP32 <br>
=====Moduł ESP32=====
<br>
<center>
<center>
[[File:KAmodESP32-POE sch1.png|none|900px|thumb|center]]
[[File:KAmodESP32-POE sch1.png|none|900px|thumb|center]]
</center>
</center>
<br>
<br>
Elementy odpowiedzialne za funkcje resetu i programowania  
=====Elementy odpowiedzialne za funkcje resetu i programowania =====
<center>
<center>
[[File:KAmodESP32-POE sch2.png|none|350px|thumb|center]]
[[File:KAmodESP32-POE sch2.png|none|350px|thumb|center]]
</center>
</center>


Złącze GPIO
=====Złącze GPIO=====
<center>
<center>
[[File:KAmodESP32-POE sch_gpio.png|none|700px|thumb|center]]
[[File:KAmodESP32-POE sch_gpio.png|none|700px|thumb|center]]
</center>
</center>


Diody sygnalizacyjne
=====Diody sygnalizacyjne=====
<center>
<center>
[[File:KAmodESP32-POE sch3.png|none|400px|thumb|center]]
[[File:KAmodESP32-POE sch3.png|none|400px|thumb|center]]
</center>
</center>


Interfejs Ethernet
=====Interfejs Ethernet=====
<center>
<center>
[[File:KAmodESP32-POE sch4.png|none|1100px|thumb|center]]
[[File:KAmodESP32-POE sch4.png|none|1100px|thumb|center]]
</center>
</center>


Zasilanie PoE
=====Zasilanie PoE=====
<center>
<center>
[[File:KAmodESP32-POE sch5.png|none|700px|thumb|center]]
[[File:KAmodESP32-POE sch5.png|none|700px|thumb|center]]
</center>
</center>


Interfejs USB-UART
=====Interfejs USB-UART=====
<center>
<center>
[[File:KAmodESP32-POE sch6.png|none|600px|thumb|center]]
[[File:KAmodESP32-POE sch6.png|none|600px|thumb|center]]
</center>
</center>


Źródło sygnału taktującego
=====Źródło sygnału taktującego=====
<center>
<center>
[[File:KAmodESP32-POE sch7.png|none|650px|thumb|center]]
[[File:KAmodESP32-POE sch8.png|none|400px|thumb|center]]
</center>
</center>


Blok zasilania o napięciu 3,3 V
=====Blok zasilania o napięciu 3,3 V=====
<center>
<center>
[[File:KAmodESP32-POE sch8.png|none|400px|thumb|center]]
[[File:KAmodESP32-POE sch7.png|none|700px|thumb|center]]
</center>
</center>
<hr>
<hr>


====Funkcje przypisane liniom GPIO====
====Funkcje przypisane liniom GPIO====
<hr>
<br>
W tabeli opisano funkcje, które zostały przydzielone poszczególnym liniom GPIO modułu ESP 32 na płytce KAmod ESP32 ETH+POE. Niektóre wyprowadzenia mają dodatkowe właściwości, co również zostało dokładnie opisane.
<br><br>
<center>
{| class="wikitable"  style="width: 1000px;"
|-
! style="text-align: center;"|'''GPIO'''
! style="text-align: center;"|'''Oznaczenie/funkcja'''
! style="text-align: center;"|'''Opis'''
! style="text-align: center;"|'''Numer pinu RPi Conn '''
'''(40-pin)'''
|-
| style="text-align: center;"|00
| style="text-align: center;"|BOOT SEL/RMII CLK
| style="text-align: center;"|
Boot Select - niski stan na tym wyprowadzeniu w chwili restartu modułu ESP32 uruchamia bootloader do programowania modułu ESP32
RMII CLK - w czasie normalnej pracy jest to wejście sygnału taktującego 50 MHz dla interfejsu RMII
| style="text-align: center;"|-
|-
| style="text-align: center;"|01
| style="text-align: center;"|UART TX
| style="text-align: center;"|
Wyjście szeregowego interfejsu UART, podłączone do konwertera UART-USB oraz do złącza RPi Conn J1-8
| style="text-align: center;"|8
|-
| style="text-align: center;"|02
| style="text-align: center;"|BOOT LOW/
LED D6
| style="text-align: center;"|
Wymagany jest stan niski na tym wejściu w chwili restartu modułu ESP32, dlatego zastosowano rezystor pull-down 10 k.
W czasie normalnej pracy steruje diodą LED D6 - stan wysoki powoduje świecenie diody LED.
| style="text-align: center;"|7
(pull-down)
|-
| style="text-align: center;"|03
| style="text-align: center;"|UART RX
| style="text-align: center;"|
Wejście szeregowego interfejsu UART, podłączone jednocześnie do UART-USB oraz do złącza RPi Conn J1-10
| style="text-align: center;"|10
|-
| style="text-align: center;"|04
| style="text-align: center;"|GPIO 04
| style="text-align: center;"|
Uniwersalny port wej/wyj
| style="text-align: center;"|15
|-
| style="text-align: center;"|05
| style="text-align: center;"|GPIO 05
| style="text-align: center;"|
Wymagany jest stan wysokii na tym wejściu w chwili restartu modułu ESP32, dlatego zastosowano rezystor pull-up 10 k.
Uniwersalny port wej/wyj
| style="text-align: center;"|13
(pull-up)
|-
| style="text-align: center;"|12
| style="text-align: center;"|SPI MISO/
GPIO 12
| style="text-align: center;"|
Wymagany jest stan niski na tym wejściu w chwili restartu modułu ESP32, dlatego zastosowano rezystor pull-up 10 k.
Wejście szeregowego interfejsu HSPI
| style="text-align: center;"|21
(pull-down)
|-
| style="text-align: center;"|13
| style="text-align: center;"|SPI MOSI/
GPIO 13
| style="text-align: center;"|
Wyjście szeregowego interfejsu HSPI
| style="text-align: center;"|19
|-
| style="text-align: center;"|14
| style="text-align: center;"|SPI CLK/
GPIO 14
| style="text-align: center;"|
Wyjście taktujące szeregowego interfejsu HSPI
| style="text-align: center;"|23


====Złącze RPi Conn w standardzie RPi====
<center>
{| class="wikitable"  style="width: 800px;"
|-
|-
! style="text-align: center;"|Złącze
| style="text-align: center;"|15
! style="text-align: center;"|Funkcja
| style="text-align: center;"|SPI CS/
GPIO 15
| style="text-align: center;"|
Wyjście aktywujące Chip Select szeregowego interfejsu HSPI. Na linii zastosowano rezystor pull-down 10 k.
| style="text-align: center;"|24
(pull-down)
|-
| style="text-align: center;"|16
| style="text-align: center;"|ETH RESET/
GPIO 16
| style="text-align: center;"|
Port GPIO16 został połączony z sygnałem zerującym Ethernet PHY – układ LAN8742. Stan niski na tym wyprowadzeniu blokuje działanie interfejsu Ethernet.
Przecięcie zworki JP1 odcina GPIO16 od Ethernet PHY.
| style="text-align: center;"|26
|-
| style="text-align: center;"|17
| style="text-align: center;"|GPIO 17
| style="text-align: center;"|
Uniwersalny port wej/wyj
| style="text-align: center;"|11
|-
| style="text-align: center;"|18
| style="text-align: center;"|ETH MDIO
| style="text-align: center;"|
Sterowanie interfejsem Ethernet
| style="text-align: center;"|-
|-
| style="text-align: center;"|19
| style="text-align: center;"|ETH TXD0
| style="text-align: center;"|
Sterowanie interfejsem Ethernet
| style="text-align: center;"|-
|-
| style="text-align: center;"|21
| style="text-align: center;"|ETH TXEN
| style="text-align: center;"|
Sterowanie interfejsem Ethernet
| style="text-align: center;"|-
|-
| style="text-align: center;"|22
| style="text-align: center;"|ETH TXD1
| style="text-align: center;"|
Sterowanie interfejsem Ethernet
| style="text-align: center;"|-
|-
| style="text-align: center;"|23
| style="text-align: center;"|ETH MDC
| style="text-align: center;"|
Sterowanie interfejsem Ethernet
| style="text-align: center;"|-
|-
| style="text-align: center;"|25
| style="text-align: center;"|ETH RXD0
| style="text-align: center;"|
Sterowanie interfejsem Ethernet
| style="text-align: center;"|-
|-
| style="text-align: center;"|26
| style="text-align: center;"|ETH RXD1
| style="text-align: center;"|
Sterowanie interfejsem Ethernet
| style="text-align: center;"|-
|-
| style="text-align: center;"|27
| style="text-align: center;"|ETH CR DV
| style="text-align: center;"|
Sterowanie interfejsem Ethernet
| style="text-align: center;"|-
|-
| style="text-align: center;"|32
| style="text-align: center;"|I2C SCL/
GPIO 32
| style="text-align: center;"|
Wyprowadzenie przygotowane do pracy jako linia SCL interfejsu I2C - zastosowano rezystor podciągający pull-up 2,2 k
| style="text-align: center;"|5, 28
|-
| style="text-align: center;"|33
| style="text-align: center;"|I2C SDA/
GPIO 33
| style="text-align: center;"|
Wyprowadzenie przygotowane do pracy jako linia SDA interfejsu I2C - zastosowano rezystor podciągający pull-up 2,2 k
| style="text-align: center;"|3, 27
|-
| style="text-align: center;"|34
| style="text-align: center;"|INPUT 34/
ADC1 CH6
| style="text-align: center;"|
Wyprowadzenie może pełnić rolę wejścia cyfrowego lub wejścia analogowego. Zastosowano rezystor podciągający pull-up 10 k
| style="text-align: center;"|18
(pull-up)
|-
| style="text-align: center;"|35
| style="text-align: center;"|INPUT 35/
ADC1 CH7
| style="text-align: center;"|
Wyprowadzenie może pełnić rolę wejścia cyfrowego lub wejścia analogowego. Zastosowano rezystor podciągający pull-up 10 k
| style="text-align: center;"|22
(pull-up)
|-
| style="text-align: center;"|36
| style="text-align: center;"|ADC1 CH0
| style="text-align: center;"|
Wejście analogowe z dodatkowym dzielnikiem napięcia 100 k/10 k
| style="text-align: center;"|16
|-
|-
| style="text-align: center;"|'''J1 – Goldpin 2x20'''
| style="text-align: center;"|39
| style="text-align: left;"|
| style="text-align: center;"|ADC1 CH3
:* Złącze w standardzie Raspberry Pi
| style="text-align: center;"|
:* Wyprowadzone niektóre porty GPIO modułu ESP32
Wejście analogowe z dodatkowym dzielnikiem napięcia 100 k/10 k
:* Wyprowadzone linie zasilania 5 V, 3,3 V, GND
| style="text-align: center;"|12
 
 
|}
|}
</center>
</center>
Złącze GPIO (J1) w standardzie Raspberry Pi zawiera 40 szpilek, do których doprowadzone są linie zasilania 5 V, 3,3 V, GND oraz niektóre wyprowadzenia GPIO modułu ESP32. Wyprowadzenia interfejsów UART (TXD, RXD), I2C (SDA, SCL) oraz SPI (MOSI, MISO, SCLK, CS0) zostały rozmieszczone tak, jak ma to miejsce w płytkach rodziny Raspberry Pi.<br><br>
 
Dokładny opis wyprowadzeń oraz ich funkcje pokazuje rysunek i tabela poniżej:
 
<hr>
 
====Złącze RPi Conn w standardzie RPi====
Złącze RPi Conn (J1) w standardzie Raspberry Pi zawiera 40 szpilek, do których doprowadzone są linie zasilania 5 V, 3,3 V, GND oraz niektóre wyprowadzenia GPIO modułu ESP32. Wyprowadzenia interfejsów UART (TXD, RXD), I2C (SDA, SCL) oraz SPI (MOSI, MISO, SCLK, CS0) zostały rozmieszczone tak, jak ma to miejsce w płytkach rodziny Raspberry Pi. Dokładny schemat wyprowadzeń oraz ich funkcje pokazuje rysunek:<br>
 
<center>
<center>
[[File:KAmodESP32-POE_gpio.png|none|750px|thumb|center]]
[[File:KAmodESP32-POE_gpio.png|none|750px|thumb|center]]
</center>
</center>
Opis wyprowadzeń został również naniesiony na spodzie płytki KAmod ESP32 ETH+POE:
Opis wyprowadzeń został również naniesiony na spodzie płytki KAmod ESP32 ETH+POE:
<center>
<center>
[[File:KAmodESP32-POE_gpio2.png|none|650px|thumb|center]]
[[File:KAmod_ESP32_PoE_02.jpg|none|850px|thumb|center]]
</center>
</center>
<center>
 
[[File:KAmod_ESP32_PoE_02.jpg|none|800px|thumb|center]]
</center>
'''Uwagi dotyczące sygnałów wyprowadzonych na złącze GPIO'''
:*Porty '''GPIO 34''', '''35''', '''36''' i '''39''' modułu ESP32 mogą pracować wyłącznie jako wejścia cyfrowe lub analogowe – zostały one oznaczone symbolem IN.
:*Porty '''GPIO 34''' i '''35''' zostały wyposażone w rezystory podciągające pull-up 10k.
:*Porty '''GPIO 36''' i '''39''' zostały wyposażone w dzielniki napięcia (100k/10k), dzięki czemu można do nich dołączyć napięcie o maksymalnej wartości 35 V.
:*Porty '''GPIO 32''' i '''33''' zostały dostosowane do funkcjonalności magistrali I2C i zawierają rezystory podciągające pull-up 2,2k.
:*Porty '''GPIO 1''' oraz '''GPIO 3''' pełnią funkcję interfejsu UART i zostały połączone do modułu konwertera USB-UART oraz równolegle do złącza GPIO J1. Interfejs UART wysyła/odczytuje dane do/z złącza GPIO J2 oraz konwertera USB-UART jednocześnie.
:*Porty '''GPIO5''', '''GPIO12''' oraz '''GPIO15''' konfigurują pewne parametry modułu ESP32. Ich stan jest odczytywany w momencie uruchomienia (restartu) modułu ESP32, dlatego zostały wyposażone w rezystory podciągające:GPIO5 – pull-up, GPIO12 – pull-down, GPIO15 – pull-down. Należy zadbać o to, aby poziom logiczny na tych wyprowadzeniach w momencie uruchomienia (restartu), odpowiadał stanowi wymuszonemu rezystorami pull-up/down.
:*Port '''GPIO16''' został połączony z sygnałem zerującym driver Ethernet – układ LAN8742. Stan niski na tym wyprowadzeniu blokuje działanie interfejsu Ethernet.
<br><br>


<hr>
<hr>


====Interfejs Ethernet====
====Interfejs Ethernet====
Line 341: Line 510:
[[File:KAmodESP32-POE_func.png|none|800px|thumb|center]]
[[File:KAmodESP32-POE_func.png|none|800px|thumb|center]]
</center>
</center>
<br>
<hr>
<hr>



Latest revision as of 14:33, 18 February 2026

Opis

KAmod ESP32 ETH POE - Płytka ewaluacyjna z modułem ESP32-WROOM połączonym z interfejsem Ethernet oraz układem zasilania PoE

Na płytce KAmod ESP32 ETH+POE znajduje się moduł ESP32-WROOM umożliwiający komunikację w sieci bezprzewodowej Wi-Fi 2,4 GHz, jednak został połączony z interfejsem przewodowym Ethernet z typowym złączem RJ45. Programowanie modułu ESP32 umożliwia konwerter USB-UART ze złączem USB-C. Płytkę uzupełnia układ zasilania PoE – Power over Ethernet, dzięki czemu zasilanie modułu może być dostarczane z instalacji internetowej. Konstrukcja płytki odpowiada SBC rodziny Raspberry Pi - ma wymiary 81x56 mm, a na charakterystycznym, 40-stykowym złączu zostały wyprowadzone wszystkie istotne porty I/O oraz napięcia zasilające 5 V oraz 3,3 V, które mogą zasilać dodatkowe komponenty dołączone do płytki.


Podstawowe cechy i parametry

  • Moduł ESP32-WROOM-32 - wydajny mikrokontroler z komunikacją Wi-Fi
  • Mikroprocesor Xtensa Dual-Core 32-bit LX6, max 240 MHz
  • Rozmiar pamięci: 520 kB SRAM, 4 MB SPI Flash
  • Komunikacja Wi-Fi 2,4 GHz, IEEE 802.11 b/g/n oraz Bluetooth 4.2 LE
  • Interfejs Ethernet na bazie układu LAN8742 (100/10 Mb; full/half duplex)
  • Zintegrowany konwerter UART-USB ze złączem USB-C umożliwiający programowanie modułu ESP32
  • Układ zasilania PoE, kompatybilny ze standardem IEEE 802.3af/at Class 0
  • Dostarcza stabilizowanych napięć 5 V oraz 3,3 V o łącznym prądzie do 1 A
  • Zabezpieczenie przepięciowe, przeciążeniowe oraz termiczne
  • Na 40-stykowe złącze w standardzie Raspberry Pi zostały wyprowadzone wszystkie istotne porty I/O oraz napięcia zasilające
  • Wymiary płytki: 85x56 mm, wysokość ok. 20 mm




Wyposażenie standardowe

Kod Opis
KAmodESP32 ETH+POE Zmontowany i uruchomiony moduł




Schemat elektryczny

Moduł ESP32


Elementy odpowiedzialne za funkcje resetu i programowania
Złącze GPIO
Diody sygnalizacyjne
Interfejs Ethernet
Zasilanie PoE
Interfejs USB-UART
Źródło sygnału taktującego
Blok zasilania o napięciu 3,3 V

Funkcje przypisane liniom GPIO


W tabeli opisano funkcje, które zostały przydzielone poszczególnym liniom GPIO modułu ESP 32 na płytce KAmod ESP32 ETH+POE. Niektóre wyprowadzenia mają dodatkowe właściwości, co również zostało dokładnie opisane.

GPIO Oznaczenie/funkcja Opis Numer pinu RPi Conn

(40-pin)

00 BOOT SEL/RMII CLK

Boot Select - niski stan na tym wyprowadzeniu w chwili restartu modułu ESP32 uruchamia bootloader do programowania modułu ESP32 RMII CLK - w czasie normalnej pracy jest to wejście sygnału taktującego 50 MHz dla interfejsu RMII

-
01 UART TX

Wyjście szeregowego interfejsu UART, podłączone do konwertera UART-USB oraz do złącza RPi Conn J1-8

8
02 BOOT LOW/

LED D6

Wymagany jest stan niski na tym wejściu w chwili restartu modułu ESP32, dlatego zastosowano rezystor pull-down 10 k. W czasie normalnej pracy steruje diodą LED D6 - stan wysoki powoduje świecenie diody LED.

7

(pull-down)

03 UART RX

Wejście szeregowego interfejsu UART, podłączone jednocześnie do UART-USB oraz do złącza RPi Conn J1-10

10
04 GPIO 04

Uniwersalny port wej/wyj

15
05 GPIO 05

Wymagany jest stan wysokii na tym wejściu w chwili restartu modułu ESP32, dlatego zastosowano rezystor pull-up 10 k. Uniwersalny port wej/wyj

13

(pull-up)

12 SPI MISO/

GPIO 12

Wymagany jest stan niski na tym wejściu w chwili restartu modułu ESP32, dlatego zastosowano rezystor pull-up 10 k. Wejście szeregowego interfejsu HSPI

21

(pull-down)

13 SPI MOSI/

GPIO 13

Wyjście szeregowego interfejsu HSPI

19
14 SPI CLK/

GPIO 14

Wyjście taktujące szeregowego interfejsu HSPI

23
15 SPI CS/

GPIO 15

Wyjście aktywujące Chip Select szeregowego interfejsu HSPI. Na linii zastosowano rezystor pull-down 10 k.

24

(pull-down)

16 ETH RESET/

GPIO 16

Port GPIO16 został połączony z sygnałem zerującym Ethernet PHY – układ LAN8742. Stan niski na tym wyprowadzeniu blokuje działanie interfejsu Ethernet. Przecięcie zworki JP1 odcina GPIO16 od Ethernet PHY.

26
17 GPIO 17

Uniwersalny port wej/wyj

11
18 ETH MDIO

Sterowanie interfejsem Ethernet

-
19 ETH TXD0

Sterowanie interfejsem Ethernet

-
21 ETH TXEN

Sterowanie interfejsem Ethernet

-
22 ETH TXD1

Sterowanie interfejsem Ethernet

-
23 ETH MDC

Sterowanie interfejsem Ethernet

-
25 ETH RXD0

Sterowanie interfejsem Ethernet

-
26 ETH RXD1

Sterowanie interfejsem Ethernet

-
27 ETH CR DV

Sterowanie interfejsem Ethernet

-
32 I2C SCL/

GPIO 32

Wyprowadzenie przygotowane do pracy jako linia SCL interfejsu I2C - zastosowano rezystor podciągający pull-up 2,2 k

5, 28
33 I2C SDA/

GPIO 33

Wyprowadzenie przygotowane do pracy jako linia SDA interfejsu I2C - zastosowano rezystor podciągający pull-up 2,2 k

3, 27
34 INPUT 34/

ADC1 CH6

Wyprowadzenie może pełnić rolę wejścia cyfrowego lub wejścia analogowego. Zastosowano rezystor podciągający pull-up 10 k

18

(pull-up)

35 INPUT 35/

ADC1 CH7

Wyprowadzenie może pełnić rolę wejścia cyfrowego lub wejścia analogowego. Zastosowano rezystor podciągający pull-up 10 k

22

(pull-up)

36 ADC1 CH0

Wejście analogowe z dodatkowym dzielnikiem napięcia 100 k/10 k

16
39 ADC1 CH3

Wejście analogowe z dodatkowym dzielnikiem napięcia 100 k/10 k

12




Złącze RPi Conn w standardzie RPi

Złącze RPi Conn (J1) w standardzie Raspberry Pi zawiera 40 szpilek, do których doprowadzone są linie zasilania 5 V, 3,3 V, GND oraz niektóre wyprowadzenia GPIO modułu ESP32. Wyprowadzenia interfejsów UART (TXD, RXD), I2C (SDA, SCL) oraz SPI (MOSI, MISO, SCLK, CS0) zostały rozmieszczone tak, jak ma to miejsce w płytkach rodziny Raspberry Pi. Dokładny schemat wyprowadzeń oraz ich funkcje pokazuje rysunek:

Opis wyprowadzeń został również naniesiony na spodzie płytki KAmod ESP32 ETH+POE:



Interfejs Ethernet

Na płytce KAmod ESP32 ETH+POE został zaimplementowany przewodowy interfejs Ethernet z klasycznym gniazdem RJ45 (J2). W roli drivera (PHY) interfejsu Ethernet zastosowano układ LAN8742, który jest kompatybilny z LAN8720 i jest wspierany w środowisku Arduino. Może działać z prędkościami 100 Mb lub 10 Mb w trybie Full-Duplex lub Half-Duplex.

Driver Ethernet jest połączony z modułem ESP32 poprzez interfejs RMII (Reduced media-independent interface). Przyporządkowanie sygnałów opisuje tabela:

Sygnał RMII Kierunek Wyprowadzenie modułu ESP32

TXD0

<-

GPIO19

TXD1

<-

GPIO22

TXEN

<-

GPIO21

RXD0

->

GPIO25

RXD1

->

GPIO26

CRS_DV

->

GPIO27

MDIO

<->

GPIO18

MDC

<-

GPIO23

REF_CLK

->

GPIO0

RESET

<-

GPIO16


Na złączu J2 znajdują się dwie diody sygnalizacyjne. Dioda po lewej stronie (POWER) sygnalizuje obecność głównego napięcia zasilającego - napięcia 3,3 V. Dioda po prawej stronie (LINK) miganiem sygnalizuje aktywność interfejsu Ethernet.


Zasilanie metodą PoE

Poprzez złącze ETH & PoE (J2) może być dostarczane zasilanie do płytki ewaluacyjnej. Zastosowany kontroler zasilania PoE bazuje na układzie MP8007, który jest kompatybilny ze standardami IEEE 802.3af - Powered Devices Type-1 oraz IEEE 802.3at - Powered Devices Type-2. Blok zasilania PoE jest skonfigurowany do pracy w klasie 0 (Class 0), która definiuje pobór mocy urządzenia w zakresie 0,5...13 W.

Zasilanie metodą PoE jest możliwe tylko w kompatybilnej instalacji, zawierającej urządzenie PSE (Power Sourcing Equipments) spełniające standard IEEE 802.3af/at np. router PoE. Prawidłowe działanie bloku zasilania PoE jest sygnalizowane świeceniem diody POE (D4).

W czasie pracy bloku zasilania PoE, może być słyszalny szum lub cichy pisk – jest to naturalne zjawisko wywołane działaniem przetwornicy impulsowej (SMPS).

Przy właściwym zasilaniu płytki ewaluacyjnej KAmod ESP32 ETH+POE wytwarzane są napięcia stabilizowane 5 V oraz 3,3 V, dostępne na złączy szpilkowym J1. Mogą posłużyć do zasilania innych modułów dołączonych do płytki ewaluacyjnej, należy jednak pamiętać, że sumaryczny prąd nie powinien przekraczać 1 A. Świecenie diody D4 oznacza prawidłowe działanie modułu zasilania PoE.

W instalacji PoE występują napięcia o wartościach sięgających aż 60 V. Wszelkie czynności wykonywane w takich instalacjach z użyciem płytki ewaluacyjnej KAmod ESP32 ETH+POE należy wykonywać ze szczególną ostrożnością i z zachowaniem zasad bezpieczeństwa.




Interfejs USB

Złącze P1 typu USB-C jest połączone z kontrolerem typu CH340, który realizuje funkcje konwertera USB-UART. Interfejs UART może być używany w docelowej aplikacji, ale służy także do programowania modułu ESP32. Proces programowania może przebiegać całkowicie automatycznie, ponieważ kontroler CH340 steruje kluczowymi wyprowadzeniami modułu ESP32 (GPIO0Boot Select oraz EN - Chip Power-up).

Połączenia sygnałów pomiędzy CH340 i ESP32 są następujące:

Sygnał kontrolera CH340 Wyprowadzenie modułu ESP32
TXD (wyjście danych) GPIO03 (UART0 RXD)
RXD (wejście danych) GPIO01 (UART0 TXD)
DTR (wyście kontroli transmisji) EN (Chip Power-up)
RTS (wyjście kontroli transmisji) GPIO0 (Boot Select)

Do linii TXD jest dołączona dioda led oznaczona USB (D3), która sygnalizuje odbieranie danych z interfejsu USB. W przypadku użycia w docelowej aplikacji konwertera USB-UART należy zadbać o to, aby linie DTR oraz RTS pozostały nieobsługiwane (Handshaking: None).

Złącze USB-C może służyć jako alternatywne wejście zasilania dla płytki KAmod ESP32 ETH+POE, jednak wtedy parametry obwodów zasilania nie będą spełnione. Napięcie na linii 5 V, będzie niższe i będzie wynosiło ok. 4,5 V; napięcie na linii 3,3 V nie powinno się zmienić; wydajność prądowa napięć 5 V oraz 3,3 V może być dużo niższa i będzie zależała od zastosowanego zasilania na złączu USB-C.




Przyciski oraz kontrolki sygnalizacyjne

Na płytce KAmod ESP32 ETH+POE znajdują się 4 diody LED, które sygnalizują działanie różnych komponentów – zgodnie z poniższą tabelą. Dioda D6 (LED IO-2) jest dołączona do wyprowadzenia GPIO2 modułu ESP32. Jej zaświecenie wymaga programowego ustawienia stanu wysokiego na wyprowadzeniu GPIO2.

Komponent Funkcja
D3 – USB
Miganie diody D3 oznacza przesyłanie danych z USB do modułu ESP32
D4 – POE
Świecenie diody D4 oznacza prawidłowe działanie modułu zasilania PoE
D5 – POW
Świecenie diody D5 oznacza obecność głównego napięcia zasilającego - napięcia 3,3 V
D6 – IO-2
Dioda D6 jest dołączona do wyprowadzenia GPIO2 modułu ESP32 i jej świecenie może być sterowane programowo

Przycisk RESET umożliwia wykonanie restartu modułu ESP32 oraz, jednocześnie kontrolera interfejsu Ethernet. Jest połączony z linią EN (Chip Power-up) modułu ESP32.

Przycisk PROG pozwala wprowadzić moduł ESP32 w tryb programowania. Należy wtedy nacisnąć przycisk RESET, następnie, trzymając wciśnięty RESET, przytrzymać przycisk PROG i wtedy zwolnić RESET, jednocześnie trzymając jeszcze przez chwilę wciśnięty PROG. Funkcjonalność ta może być przydatna, gdy z jakiegoś powodu tryb programowania nie będzie uruchamiany automatycznie poprzez konwerter USB-UART.

Komponent Funkcja
Przycisk SW1 – PROG
  • Uruchamia tryb programowania poprzez UART (tylko w momencie restartu modułu ESP32)
Przycisk SW2 – RESET
  • Powoduje restart modułu ESP32 oraz kontrolera interfejsu Ethernet




Funkcje zaawansowane

Zworki JP1 oraz JP3 znajdują się na dolnej stronie płytki ewaluacyjnej (bottom).

Komponent Funkcja
JP1 – ETH RST IO16
  • Zworka SMD, fabrycznie zwarta, stanowi połączenie portu GPIO16 z sygnałem zerowania drivera Ethernet
JP3 – DBG INFO EN
  • Zworka SMD, pozwala włączyć wysyłanie komunikatów systemowych – Debugging Log, poprzez interfejs UART (USB)

JP1 – ETH RST IO16 jest fabrycznie zwarta (ścieżka miedzi pomiędzy padami) i zapewnia połączenie pomiędzy portem GPIO16 modułu ESP32 i wejściem RESET drivera interfejsu Ethernet. Aby odłączyć port GPIO16 od sygnału zerowania drivera Ethernet należy przeciąć ostrym narzędziem powierzchnię płytki – tak jak wskazuje czerwona linia przy JP1 na poniższym rysunku. Ponowne połączenie sygnału zerowania jest możliwe poprzez naniesienie kropelki spoiwa lutowniczego, które połączy oba pady zworki JP1.

JP3 – DBG INFO EN jest fabrycznie połączona pomiędzy padem środkowym a padem numer 1 (masa zasilania) i powoduje wyciszenie komunikatów systemowych tzw. Debugging Log. Aby włączyć wysyłanie komunikatów systemowych należy przeciąć ostrym narzędziem powierzchnię płytki tak, jak wskazuje czerwona linia przy JP3 na poniższym rysunku oraz nanieść kroplę spoiwa lutowniczego, które połączy pady po przeciwnej stronie, pady 2-3 (do napięcia 3,3 V). Nie wolno połączyć padów 2-3, bez wcześniejszego rozdzielenia padów 1-2.



Wymiary

Wymiary płytki KAmod ESP32 ETH+POE to 85x56 mm. Wysokość maksymalna wynosi ok. 20 mm. Na płytce znajdują się 4 otwory montażowe o średnicy 3 mm rozmieszczone podobnie jak na płytkach z rodziny Raspberry Pi.




Program testowy

Kod programu testowego znajduje się poniżej, można go skompilować w środowisku Arduino.

Zawsze aktualna, najnowsza wersja oprogramowania znajduje się w repozytorium na portalu GitHub




//Ino Board: esp32 -> ESP32-WROOM_DA-Module
#include <ETH.h>
#include <WiFi.h>
/* 
   * ETH_CLOCK_GPIO0_IN   - default: external clock from crystal oscillator
   * ETH_CLOCK_GPIO0_OUT  - 50MHz clock from internal APLL on GPIO0
   * ETH_CLOCK_GPIO16_OUT - 50MHz clock from internal APLL on GPIO16
   * ETH_CLOCK_GPIO17_OUT - 50MHz clock from internal APLL inverted on GPIO17
*/
#ifdef ETH_CLK_MODE
  #undef ETH_CLK_MODE
#endif
#define ETH_CLK_MODE    ETH_CLOCK_GPIO0_IN
// Pin# of the enable signal for the external crystal oscillator (-1 to disable for internal APLL source)
#define ETH_POWER_PIN   -1
// Type of the Ethernet PHY (LAN8720 or TLK110)
#define ETH_TYPE        ETH_PHY_LAN8720
// I²C-address of Ethernet PHY (0 or 1 for LAN8720, 31 for TLK110)
#define ETH_ADDR        0
// Pin# of the I²C clock signal for the Ethernet PHY
#define ETH_MDC_PIN     23
// Pin# of the I²C IO signal for the Ethernet PHY
#define ETH_MDIO_PIN    18
// Mode select PINs
#define ETH_RXD0_MODE0   25
#define ETH_RXD1_MODE1   26
#define ETH_CRS_MODE2    27

#define ETH_RESET       16

#define LED_PIN         2

static bool eth_connected = false;

WiFiServer server(80);

// Select the IP address according to your local network
IPAddress myIP(10, 1, 0, 182);
IPAddress myGW(10, 1, 0, 252);
IPAddress mySN(255, 255, 0, 0);
IPAddress myDNS(8, 8, 8, 8);

void myEvent(WiFiEvent_t event) {
  switch (event) {
    case ARDUINO_EVENT_ETH_START:
      Serial.println("ETH Started");
      ETH.setHostname("esp32-ethernet");
      break;
    case ARDUINO_EVENT_ETH_CONNECTED:
      Serial.println("ETH Connected");
      break;
    case ARDUINO_EVENT_ETH_GOT_IP:
      //Serial.println("ETH Got IP");
      //Serial.println(ETH);
      Serial.print("ETH MAC: ");
      Serial.print(ETH.macAddress());
      Serial.print(", IPv4: ");
      Serial.print(ETH.localIP());
      if (ETH.fullDuplex()) {
        Serial.print(", FULL_DUPLEX");
      }
      Serial.print(", ");
      Serial.print(ETH.linkSpeed());
      Serial.println("Mbps");
      eth_connected = true;
      break;
    case ARDUINO_EVENT_ETH_LOST_IP:
      Serial.println("ETH Lost IP");
      eth_connected = false;
      break;
    case ARDUINO_EVENT_ETH_DISCONNECTED:
      Serial.println("ETH Disconnected");
      eth_connected = false;
      break;
    case ARDUINO_EVENT_ETH_STOP:
      Serial.println("ETH Stopped");
      eth_connected = false;
      break;
    default:
      break;
  }
}

void setup() {
  //ETH Reset assert
  pinMode(ETH_RESET, OUTPUT);
  digitalWrite(ETH_RESET, LOW);
  pinMode(ETH_RXD0_MODE0, INPUT_PULLUP);
  pinMode(ETH_RXD1_MODE1, INPUT_PULLUP);
  pinMode(ETH_CRS_MODE2, INPUT_PULLUP);

  //Serial - start
  Serial.begin(115200);
  
  pinMode(LED_PIN, OUTPUT);
  for(int i=0; i<7; i++){
    digitalWrite(LED_PIN, HIGH);
    delay(200);
    digitalWrite(LED_PIN, LOW);
    delay(200);
  }
  //ETH Reset deassert
  digitalWrite(ETH_RESET, HIGH);
  delay(50);

  WiFi.onEvent(myEvent);
  ETH.setAutoNegotiation(false);
  ETH.setFullDuplex(true);
  ETH.setLinkSpeed(true);
  ETH.begin(ETH_TYPE, ETH_ADDR,
            ETH_MDC_PIN, ETH_MDIO_PIN,
            ETH_POWER_PIN, ETH_CLK_MODE);
  //ETH.config(myIP, myGW, mySN, myDNS);

  while (!ETH.connected()){}
  server.begin();
}

void loop() {
  // listen for incoming clients
  WiFiClient client = server.available();

  if (client) {
    Serial.println("********New Client********");

    String currentLine = "";

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        //Serial.write(c);
        if (c == '\n') {

          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
            client.print("<H2>Click <a href=\"/H\">here</a> to turn ON the LED.<br>");
            client.print("Click <a href=\"/L\">here</a> to turn OFF the LED.<br>");
            client.print("Click <a href=\"/SEND\">here</a> to write to Serial (USB).<br></H2>");
            client.println();
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }

        //if (currentLine.endsWith("GET /H")) {
        if (currentLine.indexOf("GET /H") >= 0) {
          digitalWrite(LED_PIN, HIGH);
        }
        //if (currentLine.endsWith("GET /L")) {
        if (currentLine.indexOf("GET /L") >= 0) {
          digitalWrite(LED_PIN, LOW);
        }
        if (currentLine.endsWith("GET /SEND")) {
          Serial.println("\r\nHELLO - you send message via Serial(USB)");
        }
      }
    }

    delay(10);
    client.stop();
    Serial.println("********Client Disconnected********");
  }
}



Program testowy konfiguruje port GPIO2 jako wyjście sterujące diodą LED (D6) i sygnalizuje rozpoczęcie działania kilkoma mignięciami. Następnie uruchamia sprzętowy interfejs UART i konfiguruje go do pracy jako interfejs szeregowy połączony do konwertera UART-USB. Dzięki temu można monitorować działanie płytki w dowolnym programie typu terminal (Serial Monitor).

#define LED_PIN 2
pinMode(LED_PIN, OUTPUT);
for(int i=0; i<5; i++){
digitalWrite(LED_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
delay(200);
}
//Serial - start
Serial.begin(115200);



Przygotowanie do pracy drivera interfejsu Ethernet – układu LAN8742, wymaga dołączenia biblioteki ETH.h oraz zdefiniowania funkcji wyprowadzeń. Układ LAN8742 jest kompatybilny z układem LAN8720, który z kolei jest wspierany w środowisku Arduino.

#include <ETH.h>
/*
* ETH_CLOCK_GPIO0_IN - default: external clock from crystal oscillator
* ETH_CLOCK_GPIO0_OUT - 50MHz clock from internal APLL on GPIO0
* ETH_CLOCK_GPIO16_OUT - 50MHz clock from internal APLL on GPIO16
* ETH_CLOCK_GPIO17_OUT - 50MHz clock from internal APLL inverted on GPIO17
*/
#ifdef ETH_CLK_MODE
#undef ETH_CLK_MODE
#endif
#define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN
// Pin# of the enable signal for the external crystal oscillator (-1 to disable for internal APLL source)
#define ETH_POWER_PIN -1
// Type of the Ethernet PHY (LAN8720 or TLK110)
#define ETH_TYPE ETH_PHY_LAN8720
// I²C-address of Ethernet PHY (0 or 1 for LAN8720, 31 for TLK110)
#define ETH_ADDR 0
// Pin# of the I²C clock signal for the Ethernet PHY
#define ETH_MDC_PIN 23
// Pin# of the I²C IO signal for the Ethernet PHY
#define ETH_MDIO_PIN 18
#define ETH_RESET 16
//ETH Reset assert
pinMode(ETH_RESET, OUTPUT);
digitalWrite(ETH_RESET, LOW);
...
//ETH Reset deassert
digitalWrite(ETH_RESET, HIGH);
delay(200);



Teraz można uruchomić interfejs oraz serwer www:

WiFiServer server(80);
ETH.begin(ETH_TYPE, ETH_ADDR,
ETH_MDC_PIN, ETH_MDIO_PIN,
ETH_POWER_PIN, ETH_CLK_MODE);
...
while (!ETH.connected()){}
server.begin();



Po uruchomieniu programu testowego zostanie uruchomiony serwer www z bardzo prostą stroną internetową, która umożliwia sterowanie diodą LED D6 oraz wysłanie komunikatu poprzez port szeregowy:

Adres IP, który zostanie przydzielony serwerowi www w sieci LAN można odczytać z komunikatów wysyłanych przez port szeregowy:



Adres IP można również określić w programie, należy wtedy określić cztery parametry:

IPAddress myIP(10, 1, 0, 182);
IPAddress myGW(10, 1, 0, 252);
IPAddress mySN(255, 255, 0, 0);
IPAddress myDNS(8, 8, 8, 8);



a następnie wpisać polecenie:

ETH.config(myIP, myGW, mySN, myDNS);



przed linią:

server.begin();




Linki