User Manual Introduction ESP32 Open IoT and IIoT Gateways (P01 & P02) Open IoT Gateway is also called as a PAC (Programmable Automation Controller). PAC products combine the functionality and openness of a PC, the reliability of a programmable logic unit like PLC and the intelligence of I/O modules with flexible software tools for a wide range of applications from data acquisition, process control, motion control to energy and building management. Our PAC family includes FreeRTOS PACs and MicroPython PACs for different requirements in OS, CPU and development platform. The P01 and P02 Gateways are based on ESP32 Xtensa LX6 . If you want to get started, make sure you have complete set of: Tag-connect cable Tag-connect retaining clip board (optional) Open IoT and IIoT Gateway USB Programmer Hardware ESP32 Open IoT and IIoT Gateways (P01 & P02) Features Features Open IoT gateway ESD protection for the RS485 data line Power supply: +12 to +30 VDC Transmission speed up to 115200 bps Tx, Rx and power LED indicators RS485 embedded termination 120 ohm Optional W-iFi Operating temperatures: -40°C to +75°C DIN-rail mounting Dimensions: 90x56.4x22.5 mm 3 years warranty Customization of OEM is welcomed Frame ground FG Electronic circuits are constantly prone to electrostatic discharge ESD. Redisage Electronics modules feature a design for the frame ground terminal block FG. The frame ground provides a path for bypassing ESD, which provides enhanced static protection ESD abilities and ensures the module is more reliable. Connecting FG terminal block to the earth ground will bypass the ESD disturbances outside the device so will provide a better level of protection against ESD. Frame Ground FG connection reference drawing is provided below. If earth ground is not available FG can be left floating or it can be connected with the power supply GND. Specifications‎‎‎ Redisage PN P01 P02 Ports RS232 - - RS485 - - RS232/RS485 2x 2x Microcontroller ESP32 Wi-Fi ® N/A 802.11 b/g/n 150 Mbps / 2.4 GHz SMA socket connector for 2.4G antenna Tactile switch Power Voltage 12-30 VDC Power < 1 W Frame ground protection yes Baud rate up to 115200 bps LED indicators power, link activity, programmable RGB RS485 termination 120 ohm manually enabled Connector RS232/RS485 8-pin terminal block max. 2.5 mm 2 wire Power 3-pin terminal block max. 2.5 mm 2 wire Ethernet RJ45 Transmission distance RS485 max. 1,200 m at 9.6 kbps; max. 400 m at 115.2 kbps (Belden 9841 2P twisted-pair cable, if different cables are used, the transmission distance may change) RS232 max. 15 m at 115.2 kbps Mounting and enclosure DIN rail, plastic PA - UL 94 V0, black/green Temperatures -40°C to +75°C operating and storage Humidity 10 - 90% RH, non-condensing ESD protection ±4 kV contact discharge / ±8 kV air discharge Certification  CE, RoHS, EMC, LVD Norms 61000-6-2 - Immunity standard for industrial environments 61000-6-4 - Emission standard for industrial environments LED indicators Gateway P01 Gateway P02 LED indicator Color Function LED indicator Color Function PW Blue Power PW Blue Power ETH Green Network activity ETH Green Network activity ST Red / Green / Blue Programmable LED ST Red / Green / Blue Programmable LED Pin assignments P01 P02 Board overview The complete Open IoT and IIoT Gateway kit consists of: developer module RJ45 network adapter hardware programmer Power input pinout VCC  - power supply input 9-30 VDC GND  - power supply ground DI  - digital input (used while there is no button mounted and it can be shorten only to GND) FG  - frame ground Test connectors Provided test connectors can be used for board debugging. GPIO_38  - ESP32 general purpose input 3V3  - 3.3 VDC I2C_SCL,   I2C_SDA  - I2C connectors GND  - ground NC  - not connected FGC  - frame ground connector BUT_EXT  - button test line (default: high state) Q2  - Q2 output of parallel register (74HC595BQ) STCP  - clock input of serial register (74HC595BQ) SHCP  - clock input of buffer register (74HC595BQ) Q7S  - output of serial register (74HC595BQ) CHIP_PU  - chip power up line ('1' - powers chip up) Button / antenna The antenna connector can be replaced with a button which can be used for, for example, restoring device to the default configuration, saved in EEPROM. In order to use the button instead of the antenna, the R52 resistor (near the microUSB connector, on the bottom side) has to be soldered to the board. RS232 ports The device has 2 independent RS485 ports. RS485 ports The device is equipped with two MAX481 transceivers that enable communication in the RS485 standard on two channels independently. As the RS485_1 / RS232_1 and RS485_2 / RS232_2 standards use common microcontroller serial ports, it is possible to use only 1 interface from the pair at a time. ETHERNET In order to support the Ethernet network interface communication, the network adapter available in the kit must be installed on the module (pay attention to its correct installation). This interface is supported by the external IP101G physical layer which communicates with the ESP32 microcontroller. Micro USB Connector You need the C37 USB to UART FTDI Converter to connect the device with a PC console via USB. Programming The device can be programmed only with the external hardware programmer (for example P03 ) connected via Tag-Connect connector ( P04 ). Tag-Connect Socket pinout Programming ESP32 Open IoT and IIoT Gateways (P01 & P02) Install IDE Please, follow the instructions located here to install the ESP-IDF framework on your local machine. ESP-IDF is available both on Windows and Linux . It can also be installed through some popular IDEs: VS Code or Eclipse . ESP-IDF is required to build the examples written in C for the device. However, it can also be programmed in MicroPython ( Thonny ). Connect the programmer ESP32 IoT and IIoT Gateways can be programmed only with the external hardware programmer (for example P03 ) connected via the Tag-Connect connector. After connecting it to the board and a PC, a new COM port should be available. Tag-Connect Socket pinout   Connect the power supply In order to successfully flash the device, it has to be connected to the power supply (9 - 30 VDC) using the VCC and GND connectors. Create your own programs After all of the above steps are done, the device should be ready to be programmed. Example scripts and repositories are available  here . Build, flash and monitor the device VS Code ESP-IDF extension Make sure that there is a ".vscode" folder in the project tree. If not, add it with the "F1" + "ESP-IDF: Add vscode Configuration Folder" command. Set your device target with "F1" + "ESP-IDF: Set Espressif Device Target". Then choose current workspace folder and then "esp32". Lastly choose "Custom board" and confirm it. Set port where the device is attached to with "F1" + "ESP-IDF: Select Port to Use (COM, tty, usbserial)". Finally select "UART" flash method with "F1" + "ESP-IDF: Select Flash Method". Build your project, flash it to the device and open a serial monitor with the "F1" + "ESP-IDF: Build, Flash and Start a Monitor on your Device". If everything was set properly the serial monitor should open after a successful flash. Thonny Hit "F5" button in Thonny IDE to run the current script. Click "File" -> "Save copy..." -> "MicroPython device" and save this file as "main.py" in order to execute this code every time the gateway powers on. Other IDEs ESP32 Open IoT and IIoT Gateways (P01 & P02) The device can be programmed also in other development environments. Programming gateways is supported on every popular operating systems like Windows, Linux or MAC OS. This document was prepared in reference to Windows. ESP-IDF framework The main tool is ESP-IDF framework provided by Espressif. To get more information about installation, visit manufacturer’s  website: Get Started - ESP32 -  — ESP-IDF Programming Guide latest documentation . Manual Installation of ESP-IDF: Standard Setup of Toolchain for Windows - ESP32 -  — ESP-IDF Programming Guide latest documentation . During the ESP-IDF installation you might be asked for install Eclipse additionally. After successful process it is necessary to add new enviroment variables. Variables names: IDF_PATH - paste the path of the directory with ESP-IDF framework IDF_TOOLS_PATH - paste the path of the directory with ESP-IDF tools Finally you can run ESP-IDF CMD and start to manage your project. There should be an icon on the desktop or easy access to ESP-IDF. Create new project idf.py create-project -p Build project idf.py -p build Flash project idf.py -p flash idf.py -p flash monitor Erase flash esptool.py --port erase_flash MinGW Download MinGW with GUI from MinGW - Minimalist GNU for Windows and install on your PC. After a successful installation run MinGW Installation Manager (GUI). Now we need to install Basic Setup. Right click on every square fields in “Package” tab, then “Mark for Installation”. Next, in “Installation” tab click on “Apply Changes” and then “Apply”. To check if the installation is successful, open Command line and type: gcc --version IDE You can edit code in your preferred IDE as ESP-IDF is handling the final build and flash. Recommanded IDEs: CodeBlocks Visual Studio Code Eclipse Thonny IDE Visual Studio Code Download the package with example projects for IoT Gateway. Select one of the demos and copy it to a new directory. Open Visual Studio Code and click on the extension tab. Install and configure C/C++ extensions. Open directory in VS Code. If errors occur, edit “includePath” settings. Add the line "${env:IDF_PATH}/**". Now code is ready to be modified. To build or flash project, use ESP-IDF CMD. Visual Studio Code provides an extension “Espressif IDF” which has some issues at this moment. However it is not essential for editing code. CodeBlocks Download the package with example projects for IoT Gateway. Select one of the demos and copy it to a new directory. Run ESP-IDF CMD, set the path to your project and then generate project for CodeBlocks: cmake -G "CodeBlocks - MinGW Makefiles" Run CodeBlocks. Click on "File → Open…", find .cbp type file and click on “Open”. After this, there should be a project tree available and code is ready to be modified. To build or flash project, use ESP-IDF CMD. Thonny IDE Download and install Python interpreter. Download the package with example projects for IoT Gateway. Select one of the demos and copy it to a new directory. Run ESP-IDF CMD, erase flash using: esptool.py --port erase_flash Download  firmware which allows to run microPython. Flash .bin file using:  esptool.py --port write_flash -z 0x1000 Open serial port monitor like “Putty”, set COM port, baudrate, connection type to serial and click on “Open”. Now you can run Python console on ESP32. Download and install Thonny IDE . Click on "Tools → Options → Interpreter". In this tab you can choose an interpreter and COM port. After all the process Thonny IDE is ready to work. To flash the demo, open file in Thonny IDE. Next click on green button to run the current script. Uploading firmware To upload firmware, you need to use external programmer with Tag-connect. Pin Map ESP32 Open IoT and IIoT Gateways (P01 & P02) CGE2 rev. 4.1 Element Connection LED Power LED7 (blue) +3V3 ETHERNET LED1 (green) ETH_LED3/PHY_AD3 RGB programmable LED5 (red) Q6 RGB programmable LED5 (blue) Q5 RGB programmable LED5 (green) Q4 74HC595BQ shift register VCC +3V3 Q7S Q7S Q0 Q0 Q1 Q1 Q2 Q2 Q3 RS485_TER_EN2 Q4 Q4 Q5 Q5 Q6 Q6 Q7 RS485_TER_EN1 MR/ CHIP_PU (pull up) OE/ GND DS SERIAL_REG_DATA SHCP SHCP STCP STCP (pull down) GND GND TPAD GND MAX481CSA_1 UART RS485 transceiver DI UART1_TX DE UART1_DIR RE/ UART1_DIR RO UART1_RX A A_1 B B_1 MAX481CSA_2 UART RS485 transceivers DI UART2_TX DE UART2_DIR RE/ UART2_DIR RO UART2_RX A A_2 B B_2 ST3232BTR RS232 driver and receiver C1+ C1 (100 nF) C1- C1 (100 nF) C2+ C2 (100 nF) C2- C2 (100 nF) T1IN UART1_TX T2IN UART2_TX R1OUT UART1_RX R2OUT UART2_RX V+ C3 (100 nF) V- C4 (100 nF) T1OUT TXD1 T2OUT TXD2 R1IN RXD1 R2IN RXD2 USBLC6-2SC6 ESD protection VCC USB_V GND GND IO1_A DATA- IO1_B CONSOLE_RX IO2_A DATA+ IO2_B CONSOLE_TX MicroUSB type B V_BUS USB_V D- DATA- (CONSOLE_RX) D+ DATA+ (CONSOLE_TX) ID GND GND GND M24C02-RMC6TG_1 I2C EEPROM E0 GND E1 GND E2 +3V3 VSS GND VCC +3V3 WC/ GND SCL I2C_SCL SDA I2C_SDA M24C02-RMC6TG_2 I2C EEPROM E0 +3V3 E1 +3V3 E2 GND VSS GND VCC +3V3 WC/ GND SCL I2C_SCL (pull up) SDA I2C_SDA (pull up) GD25Q64CSIGTR QSPI FLASH CS# SPICS0 SO SPIQ WP# SPIWP VSS GND VCC VDD_SDIO HOLD# SPIHD SCLK SPICLK SI SPID IP101GRI ETHERNET transceivers MDC ETH_MDC MDIO ETH_MDIO MDI_TP TXD+ MDI_TN TXD- MDI_RP RXD+ MDI_RN RXD- X2 - X1 GND RESET_N ETH_RESET_N (pull up) ISET ETH_ISET (pull down) LED0/PHY_AD0 ETH_LED0/PHY_AD0 (pull up) LED3/PHY_AD3 ETH_LED3/PHY_AD3 (pull down) TEST_ON - REGOUT C21 (100 nF), C35 (10 uF) VDDIO +3V3 AVDD33 +3V3 GND GND TXEN ETH_TX_EN TXER/FXSD - TXCLK/50M_CLKI ETH_CLK_IN TXD0 ETH_TXD0 TXD1 ETH_TXD1 TXD2 - TXD3 - RXDV/CRS_DV/FX_HEN ETH_RX_CRS_DV RXCLK/50M_CLKO - RXD0 ETH_RXD0 RXD1 ETH_RXD1 RXD2 - RXD3 - RXER/INTR_32 - COL/RMII ETH_COL/RMII (pull up) CRS/LEDMOD - ESP32-DOWD VDDA_1 +3V3 LNA_IN ANT VDD3P3_1 VDD3P3 (+3V3) VDD3P3_2 VDD3P3 (+3V3) SENSOR_VP (GPI36) USB_DETECT (pull down) SENSOR_CAPP (GPI37) UART2_RX SENSOR_CAPN (GPI38) GPI_38 SENSOR_VN (GPI39) P_DETECT (pull up) CHIP_PU CHIP_PU (pull up) VDET_1 (GPI34) BUTTON_IN (pull up) VDET_2 (GPI35) UART1_RX 32K_XP (GPIO32) UART1_TX 32K_XN (GPIO33) SHCP GPIO25 ETH_RXD0 GPIO26 ETH_RXD1 GPIO27 ETH_RX_CRS_DV MTMS (GPIO14) UART1_DIR MTDI (GPIO12) UART2_DIR VDD3P3_RTC +3V3 MTCK (GPIO13) I2C_SDA (pull up) MTDO (GPIO15) STCP (pull down) GPIO2 I2C_SCL (pull up) GPIO0 ETH_CLK_IN, SPICS1 GPIO4 SERIAL_REG_DATA GPIO16 ETH_CLK VDD_SDIO VDD_SDIO GPIO17 SPICS1 SD_DATA_2 (GPIO9) SPIHD SD_DATA_3 (GPIO10) SPIWP SD_CMD (GPIO11) SPICS0 SD_CLK (GPIO6) SPICLK SD_DATA_0 (GPIO7) SPIQ SD_DATA_1 (GPIO8) SPID GPIO5 UART2_TX GPIO18 ETH_MDIO GPIO23 ETH_MDC VDD3P3_CPU +3V3 GPIO19 ETH_TXD0 GPIO22 ETH_TXD1 U0RXD (GPIO3) CONSOLE_RX U0TXD (GPIO1) CONSOLE_TX GPIO21 ETH_TX_EN VDDA_2 +3V3 XTAL_N XTAL_N XTAL_P XTAL_P VDDA_3 +3V3 CAP2 CAP2 CAP1 CAP1 GND GND Optional Element Connection Expander 1 FGC 2 - 3 CHIP_PU (pull up) 4 Q7S 5 SHCP 6 STCP (pull down) 7 Q2 8 BUT_EXT 9 GPI_38 10 +3V3 11 I2C_SCL (pull up) 12 I2C_SDA (pull up) 13 GND 14 GND 15 - 16 FGC Programmer 1 CONSOLE_RX 2 CONSOLE_TX 3 +3V3 4 CHIP_PU 5 GND 6 P_DETECT 7 - 8 - 9 BOOT 10 I2C_SCL 870-62WS5128 QSPI RAM CS# SPICS1 SO SPIQ WP# SPIWP VSS GND VCC VDD_SDIO HOLD# SPIHD SCLK SPICLK SI SPID Secure element SCL I2C_SCL (pull up) SDA I2C_SDA (pull up) VCC +3V3 IO - GND GND SI7006-A20/SI7020-A20 humidity and temperature sensor SDA I2C_SDA (pull up) GND GND DNC1 - SCL I2C_SCL (pull up) VDD +3V3 DNC2 - HTS221 humidity and temperature sensor VDD +3V3 CS +3V3 GND GND SCL/SPC I2C_SCL (pull up) SDA/SDI/SDO I2C_SDA (pull up) DRDY - LSM6DS33 accelerometer and gyro GND GND GND GND RES GND RES GND RES GND RES GND INT1 - INT2 - CS +3V3 SDO - SDA I2C_SDA (pull up) SCL I2C_SCL (pull up) VDDIO +3V3 VDD +3V3 RES GND NC - LIS3DH accelerometer VDD_IO +3V3 NC - NC - SCL/SPC I2C_SCL (pull up) GND GND SDA/SDI/SDO I2C_SDA (pull up) SDO/SAO - CS +3V3 INT2 - RES GND INT1 - GND GND ADC3 - VDD +3V3 ADC2 - ADC1 - IP101GRI ETHERNET transceivers ETH_RESET_N Q1 P03 Programmer ESP32 Open IoT and IIoT Gateways (P01 & P02) P01 and P02 can be programmed via P03 USB RS232 RS485 Converters. More info here .