Skip to the content
PCBKitNew board
6 layers83.5 × 56 mmEspiff v3 1, the printed circuit board in 3D

An ESP32 in the Raspberry Pi form factor

Size
83.5 × 56 mm
Copper layers
6
Thickness
2.66 mm
Parts
172
Nets
198
Pads
743
Tracks, vias
3,384, 305
Pours
6
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
23 May 2022
Updated
12 May 2023

Overview

Espiff v3 1 is an open-source printed circuit board by MDCservice, from the MDCservice/EsPiFF repository on GitHub, published under the GPL-3.0 licence. It is a 6-layer board of 83.5 × 56 mm with 172 parts on 198 nets, routed with 3,384 tracks and 305 vias.

It is built around the CH340T, ESP32-WROVER-E(4MB) and IP101GR, with the MT9700, FM25CL64B-G and PCA9557PW among its other parts. Its parts include 56 capacitors, 53 resistors, 17 ICs, 13 diodes and 10 connectors. It belongs with the radio and wireless boards and the ESP32, RP2040 and RISC-V boards of this library.

Main components

12

README

README.md

EsPiFF

An ESP32 in the Raspberry Pi form factor

Meet the EsPiFF - The ESP32 in the Raspberry Pi 4 form factor

The EsPiFF

For applications, where the Raspberry Pi 4 is not robust enough, or take too much power, you can consider the EsPiFF as an option. The EsPiFF (V2) brings

  • ESP32-WROVER with dual core, 8MB PSRAM, 16 MB Flash
  • Ethernet wired and Wifi (Wifi need an external antenna with an uFL connector)
  • SD-card for data storage
  • up to 3 UARTs
  • an USB-C connector for power supply up to 5V, 3A
  • a Rasperry Pi header with 40 pin, compatible to all Raspberry Pi HATs

The EsPiFF V3 will bring the following

  • an RP2040 IO-processor additional to the ESP32
  • 2kByte FRAM for high-speed permanent storage
  • RTC Realtime clock
  • USB-A connector for USB-Host

HAT_dio EsPiFF-PLC

Why an ESP32 in the Raspberry Pi Form Factor?

We decided to build an alternative to the Raspberry Pi for our projects and products. As many others we were using the Raspberry Pi in our products, adding electronic payment to existing vending machines and coffee machines, in RFID solutions to read RFID tags in laundry and other application. While it was easy to get a solution up and running in a short time, over time we got a lot of problems resulting from using the Pi. A key problem of the Pi's design is, to rely on an SD-card. The SD-cards are made for digital cameras, to write on them a few times. A Linux system like the Pi on the other hand, is writing permanent its log files and swap partition or to the SD-card. As a result, after some months the SD-card broke and the application crashed. High-end industrial SD-card lasted longer, but finally still broke. An industrial controller simply can not base on a SD-card. The PI Operating system is also great for fast bring-up of a solution, but its more and more focused on media streaming then real-time tasks. It gets more and more overloaded with each new version. So we made the decision, to build a replacement, which is focused on high-reliability, but still enable the use of Raspberry Pi universum of add-ons, like HATs and enclosures. We choose the ESP32 dual core, 2x240MHz WROVER module with 8MB PSRAM and 16MB Flash. The EsPiFF, the Esp32 in Raspberry Pi Form Factor was born.

History

Version 1

The first version of the EsPiFF was born in a time, where all Ethernet Phy chips was unavailable. Our first prototype used a Waveshare LAN8720 module. Chip crysis! Interestingly, even no LAN8720 chips could be bought anywhere, but the modules was still available. Because the Waveshare module did not route the enable signal to the pin header, but left one pin unconnected on the pin header, we had to solder a wire from the oscillator to that unused pin on the header. After these, the board run well, and do so till now. We added 4 high side switches, and digital inputs to operate 4 door locks. These are the 4 white connectors opposite the RJ45 connectors. The Version 1 had the WROOM module of the ESP32.

Picture: the Version 1 of the EsPiFF

The Version 1

We ported the PostgreSQL client libray, based on SimplePgPSQL to the EsPiFF, what worked very well, even with the limited RAM and Flash. Not only SELECT, INSERT and UPDATE work, but also the brilliant PostgreSQL feature NOTIFY. As a result, the EsPiFF dont need to poll the PostgreSQL server, but get notified instead. We could define a trigger in PostgreSQL, and notify other EsPiFF board. Thats very cool.

Because of the ongoing chip crysis, we only select parts, what are available.

Version 2

The Version 2 After the LAN8720 chips got available again, we decided to make a new board revision. These are the current boards. We used the ESP32-WROVER module, for additional 8MB PSRAM and 16MB Flash. We also added an SD-card. Unfortunately, we used the wrong pinout, make it very difficult to change the SD-card. An other issue was a missing pull-up resistor on the LAN8720. We changed the USB connector to a Type-C connector, and configured it so, that 5V and up to 3A can be taken. Thats a big improvement, raising the available power from 0.5W to 15W. We removed the 4 door lock connectors, and put them on a HAT. Since version 1 we have a "Chafon-Connector", next to the USB connector. It is to connect the Chafon RFID Rain(UHF) modules. Additional, we replaced the UART pin headers with more robust JST connectors, left and right of the SD-card.

We could also compile and flash the Apache Nuttx operating system on the new board. A growing number of people are using ESP32-WROVER boards together with Nuttx as OS. This offers an somehow easy path of porting Linux and Raspberry Pi software on ESP32+Nuttx.

Version 3

This is the planned final version. Additional to the fix of the 2 known issues, we plan the following:

  • adding a I2C-RTC: a real-time clock will be needed for planned PLC usage.
  • adding a 2kByte FRAM: again for PLC application, a fast and non-volatile memory is needed. It offers near infinity write/read cycles compared to flash.
  • replace the WROVER module with a version with u.FL/IPEX connector. This enables an external antenna, longer range, mounting inside a metal enclosure with the antenna outside the enclosure.
  • adding a RP2040 co-processor. The ESP32 just not have enough pins free, to operate all the pins on the Raspberry Pi 40pin header. The last solution with the I2C port expander is too slow and unflexible. The much more powerfull RP2040 will solve these problem. It also offers an USB host port!
  • add a USB-A connector, to program the RP2040, and to enable to connect USB devices like keyboard, mouse, USB-sticks and so on.
  • add an HMI connector next to the SDcard socket. This is for our upcomming TFT displays, but can be used for UART based TFTs like the Nextion as well.

This is the current progress. We managed, to bring all the functionality on the board. We selected a 6 layer PCB, for best signal integrity.

The ESP32 can communicate with the RP2040 via SPI, where the ESP32 is the SPI master. Depend on the requirements, the communication protocol can be implemented application specific, with ether the Espressif IDF or Arduino IDE. Or an existing SPI driver from, for example NuttX, could be used on the ESP side, and the RP2040 emulating for example an SD card or a SPI Flash.

One more option is to run Firmata on the RP2040. This is a popular way for Arduino developers, to remote control and Arduino/RP2040 from a host computer, here the ESP32. For now, Firmata only supports UART communication, whats is also possible on the EsPiFF.

Because all pins on both the ESP32 and the RP2040 are used already, there are no decidated interupt pins between ESP32 and RP2040. The software should implement software interupts, when i.e. the receiving buffer reaches a certain level.

The Version 3

We finally replaced the LAN8720 Ethernet PHY by an IP101, as used in the Espressif Ethernet reference design. The LAN8720 showed stability problems, in combination with the ESP32-WROVER (it is working well with the ESP32-WROOM). Other projects with the ESP32-WROVER - LAN8720 combination (wESP, Olimex) seem to had the same problems, and also switched away from the LAN8720. On this point, a big "Thank you" to Ondrej from Espressif for all of his support in this field.

We also ordered customized cables, for the DF11 and display connectors, what offer DuPont on the opposite side. With these cables, breadbord or Nextion displays, or other 2.54mm headers can easily connected.

Typical applications

HMI, RFID reader and EsPiff-V2

This example show, how a Nextion 5 inch TFT, a HF RFID reader from Elatec (TWN4), a Chafon 8 channel RAIN UHF-RFID reader and a 3D printed enclosure can form an electronic identification system. We put the source code and the 3D design files into the example folder. Smaller or bigger Nextion TFTs can be used, when you adapt the 3D design.

The HMI interact with the user, ask him/her to put the HF-RFID card on the card reader. The TWN4 from Elatec is able to read near any LF or HF card, inclding the LEGIC chips used in many high secure access control applications. The TWN4 is inside the 3D printed enclosure, as well as the Nextion TFT.

With the 8 port RAIN UHF reader/writer from Chafon, we can monitor a whole area with up to 8 antennas. We use it to monitor 4 cabinets, other use cases could be the monitoring a whole room/warehouse, or the entrance of buiildings,etc. Chafon offer 1, 4, 8 and 16 port devices, and they are all compatible with the software.

In our application, we read/write direct to a PostgreSQL database, connected by wired ethernet, thats why we have ported the LibPQ (the PostgreSQL client library) to the ESP32. The use of other techniques, like MQTT, is also possible.

Picture: the open 3D printed enclsure, showing the Nextion 5'' TFT, and the TWN4 HF RFID reader HMI, RFID reader and EsPiff-V2

After the EsPiFF is now mature enough, we we are preparing a campaign at Crowd Supply. After the Pre-launch page will be available, we will update the info here. Hope you support us on our Crowd Supply campaign!

Please notice, that the ESP32-module PCB antenna can not be used, an external wifi antenna is required. This is because of space restrictions, the RasPi form factor not allow us to make the board larger, and there is simply no space left for the required keepout area for the PCB antenna. Most people will use a metal enclosure, what renders a PCB antenna useless anyway. We still have to use an ESP32-WROVER module containing a PCB antenna, because only these modules have 16 MB Flash, 8 MB PSRAM, and all the features we build in. Other modules, for example the ESP32-S3, does not have Ethernet MII.

Apache Nuttx can run on the EsPiFF! Next the wellknown FreeRTOS, there is an other, not so wellknown operating system supporting ESP32 and friends: Apache Nuttx (https://nuttx.apache.org). It has a very cool feature: runtime loading of ELF files (for example, from SDcard) into RAM, and then execute it in RAM. Very much like Windows/Linux/MacOS are doing it. Imagine, you can send a SDcard to your customer for software-update. Bye bye over the air(OTA) updates in enviroments, where OTA is not allowed.

Nuttx 11.0 on EsPiff-V3.1

ESP32 <> RP2040 interconnection

ESP32 <> RP2040

Latest news: We just finish the layout of the version 3.2, the version the crowd supply backer will get. Few interesting things:

  • We added not only Flash footprints for the ESP32, but also a footprint for an unpopulated SPI RAM for the RP2040. If you need up to 64 MBit SPI RAM for the RP2040, you can just mount an easy to solder SOIC-8 IC on the bottom, and you have 30 times(!) the RAM a normal RP2040 have.

Because several people mention the integrated PCB antenna, the version 3.2 offer at least a basic use of the PCB antenna. Still, the external PCB antenna is the prefered way to use Wifi with the EsPiFF, now to use the integrated PCB antenna as well. Keep in mind, that the ESP32-WROVER-IB module requires a solder jumper modification before the PCB antenna can be used. ESP32 Wifi

Team MDC

Parts

172
QtyValueFootprintReferences
27100nCapacitor_SMD:C_0603_1608MetricC12, C13, C16, C17, C18, C19, C20, C23, C27, C28, C29, C30, C31, C32, C34, C35 +11
1710kResistor_SMD:R_0603_1608MetricR1, R17, R18, R19, R22, R25, R28, R29, R34, R35, R41, R47, R48, R49, R50, R51 +1
95k1Resistor_SMD:R_0603_1608MetricR5, R7, R10, R12, R14, R15, R16, R20, R21
71kResistor_SMD:R_0603_1608MetricR2, R8, R23, R24, R32, R33, R53
63k3Resistor_SMD:R_0603_1608MetricR27, R40, R42, R43, R44, R46
51uCapacitor_SMD:C_0603_1608MetricC4, C9, C33, C38, C48
422u/6.3VCapacitor_SMD:C_0805_2012MetricC10, C24, C52, C57
427RResistor_SMD:R_0603_1608MetricR6, R9, R30, R31
427pCapacitor_SMD:C_0603_1608MetricC21, C22, C25, C26
447u/6.3VCapacitor_SMD:C_0805_2012MetricC11, C46, C47, C49
4MHmdc_footprints:MountingHole_M3_3.2mmH1, H2, H3, H4
31N5819WSDiode_SMD:D_SOD-323D1, D3, D4
210u/10VCapacitor_SMD:C_0603_1608MetricC53, C54
210u/50VCapacitor_SMD:C_0805_2012MetricC40, C41
212MHzCrystal:Crystal_SMD_2520-4Pin_2.5x2.0mmY2, Y3
22.2kResistor_SMD:R_0603_1608MetricR3, R4
220pCapacitor_SMD:C_0603_1608MetricC14, C15
222u/10VCapacitor_SMD:C_0603_1608MetricC44, C45
22N7002Package_TO_SOT_SMD:SOT-23Q5, Q6
2741G3157Package_TO_SOT_SMD:SOT-363_SC-70-6U3, U6
2BAT54CPackage_TO_SOT_SMD:SOT-23D2, D5
2BC817Package_TO_SOT_SMD:SOT-23Q3, Q4
2ConDF11_2x4mdc_footprints:DF11-8DP-2DS(52)J4, J5
2FB0805Resistor_SMD:R_0805_2012MetricFB1, FB3
2LEDyellowLED_SMD:LED_0603_1608MetricD9, D13
2MT9700Package_TO_SOT_SMD:SOT-23-5U12, U16
10RResistor_SMD:R_0603_1608MetricR11
110kResistor_SMD:R_Array_Convex_4x0603RA1
1120kResistor_SMD:R_0603_1608MetricR36
112kResistor_SMD:R_0603_1608MetricR39
11N5819Diode_SMD:D_SOD-323D7
11n/2kVCapacitor_SMD:C_1206_3216MetricC2
1220RResistor_SMD:R_0603_1608MetricR26
1220mF/4Vmdc_footprints:supercap_DMS3R3224RC1
122pCapacitor_SMD:C_0603_1608MetricC3
124kResistor_SMD:R_0603_1608MetricR37
125MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY4
12n7Capacitor_SMD:C_0603_1608MetricC42
132kHzCrystal:Crystal_SMD_2012-2Pin_2.0x1.2mmY1
14k7Resistor_SMD:R_0603_1608MetricR45
162kResistor_SMD:R_0603_1608MetricR38
16k19Resistor_SMD:R_0603_1608MetricR13
16uH8Inductor_SMD:L_Bourns-SRN4018L1
174xx2G32Package_SO:VSSOP-8_2.3x2mm_P0.5mmU9
1APX823Package_TO_SOT_SMD:SOT-23-5U2
1CH340TPackage_SO:SSOP-20_5.3x7.2mm_P0.65mmU11
1ConPoE_2x2Connector_PinHeader_2.54mm:PinHeader_2x02_P2.54mm_VerticalJ2
1Con_24VinConnector_JST:JST_EH_B2B-EH-A_1x02_P2.50mm_VerticalJ6
1ESP32-WROVER-EEspressif:ESP32-WROVER-EU5
1FB_800mAResistor_SMD:R_0805_2012MetricFB2
1FM25CL64Bmdc_footprints:SOIC8_W+N_combiU8
1HMI_ESP32c3_hostSideConnector_JST:JST_SUR_SM06B-SURS-TF_1x06-1MP_P0.80mm_HorizontalJ8
1HY931147C_PoEmdc_footprints:HY931147CJ1
1IP101GRPackage_DFN_QFN:QFN-32-1EP_4x4mm_P0.4mm_EP2.65x2.65mmU4
1JP_HF_USB_MISOConnector_PinHeader_2.00mm:PinHeader_1x03_P2.00mm_VerticalJP4
1JP_HF_USB_MOSIConnector_PinHeader_2.00mm:PinHeader_1x03_P2.00mm_VerticalJP1
1JP_ResetSelJumper:SolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mmJP3
1JP_WTIJumper:SolderJumper-2_P1.3mm_Open_Pad1.0x1.5mmJP2
1LEDblueLED_SMD:LED_0603_1608MetricD6
1LEDemeraldLED_SMD:LED_0603_1608MetricD12
1LEDgreenLED_SMD:LED_0603_1608MetricD10
1ME6211Package_TO_SOT_SMD:SOT-23-5U18
1PCA9557PWPackage_SO:TSSOP-16_4.4x5mm_P0.65mmU7
1PCF8563TPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU1
1RP2040_alternateFuncsmdc_footprints:QFN56_ThermalVias_0.3U13
1RT7272mdc_footprints:SOIC8-1EP_3.9x4.9mm_P1.27_ThermalViasU15
1Raspberry_Pi_2_3Connector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_VerticalJ10
1Resetmdc_footprints:Btn_KEY-SMD_JCLPCB_C698192RST1
1SDcard_molexmolex_sdcard:MOLEX_503398-1892J3
1SK4001Diode_SMD:D_SOD-123D11
1SMAJ6.0Diode_SMD:D_SMAD8
1TS3A5018mdc_footprints:UQFN-16_1.8x2.6_P0.4mmU17
1USB_Amdc_footprints:USB_A_C26235J9
1USB_BOOTmdc_footprints:Btn_TC-1109DE-C-FSW2
1USB_C_Receptacle_USB2.0mdc_footprints:USB_C_XKB_U262-16XN-4BVC11J7
1W25Q128mdc_footprints:SOIC8_5.23x5.23mm_P1.27mm_mdcU14

Questions

How big is the Espiff v3 1 PCB?

It measures 83.5 × 56 mm and has 6 copper layers, 2.66 mm thick.

What parts does the Espiff v3 1 use?

172 parts, built around the CH340T, ESP32-WROVER-E(4MB), IP101GR and MT9700. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Espiff v3 1 KiCad files?

From the MDCservice/EsPiFF repository on GitHub, at the commit this page was made from: the board is hardware/espiff_v3_1.kicad_pcb and its schematic hardware/espiff_v3_1.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Espiff v3 1 design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers95 × 85 mmNUC980, the printed circuit board in 3D

    NUC980

    TreeNewbeer/Coonix

    Coonix is a funny project about building a application platform in Allwinner-v3s processor.

    172 parts4
  • 2 layers70 × 76 mmControl, the printed circuit board in 3D

    Control

    Jochen0x90h/RoomControl

    Smart home room controller based on nRF52840 with MQTT and and IEEE 802.15.4 radio support. Buttons and relays for lights and roller shutters can also be connected with a local bus using LIN physical layer

    79 parts3
  • 2 layers100 × 60 mmDevice, the printed circuit board in 3D

    Device

    jayis1/hacker-devices

    Full-cycle hardware designs for security research devices — each device is a subfolder with its own README, schematics, PCB layout, and software stack

    11 parts2
  • 4 layers45.1 × 45.1 mmSuperPower uC KiCad, the printed circuit board in 3D

    SuperPower uC KiCad

    SuperPower/Artemis

    All hardware designs and products you can find in this repository is licensed under CERN Open Hardware Licence Version 2 - Weakly Reciprocal

    99 parts2
  • 2 layers46 × 26 mm1904 esp programmer, the printed circuit board in 3D

    1904 esp programmer

    selim13/esp-ch340-programmer

    CH340T based ESP32/ESP8266 programmer

    32 parts4MIT
  • 4 layers85 × 50 mmOpenHap, the printed circuit board in 3D

    OpenHap

    kenyattaejones32-boop/AQM

    Open-source hardware design for OpenHAP, an ESP32-based air quality monitor with CO sensing, thermistor temperature input, USB-C charging, and cellular data upload.

    269 parts