ESP-Nodes/README.md

248 lines
12 KiB
Markdown
Raw Normal View History

2023-11-21 14:52:36 -05:00
# ESP-Nodes
2024-07-06 21:38:37 -04:00
Eco-system of ESP32s Nodes and ATtiny85 peripherals with different functionalities.
2024-07-06 21:20:47 -04:00
2024-07-07 08:55:19 -04:00
<p>The ESP32-Node is designed to be a low-cost, vanila solution for experimenting with embedded and IoT devices. The ESP32-Node is intended to College students taking Electronics program or advanced users who are looking for functional ESP32 embedded board with minimal size.</p>
2024-07-06 21:20:47 -04:00
2024-07-06 21:40:46 -04:00
<img alt="ESP32-Node PCB" src="https://github.com/alexandrebobkov/ESP-Nodes/blob/main/assets/ESP32-Node-001.jpg" width="50%"/>
2024-07-06 21:35:56 -04:00
2024-07-06 21:39:16 -04:00
<p><i>ESP32-Node Features:</i></p>
2024-07-07 12:40:14 -04:00
- Uses bare-bones ESP32-WROOM-32D Module [^1]
2024-07-06 21:44:07 -04:00
- Direct connections to all GPIOs
2024-07-07 12:40:14 -04:00
- Miniature in size; only 35.7mm x 35.7mm
2024-07-07 12:43:09 -04:00
- Built-in 3V3 voltage regulator (V<sub>max</sub>=15V) and reversed supply voltage polarity protection
2024-07-06 21:38:37 -04:00
- Pre-wired strapping pins for ensuring proper booting on power-on
2024-07-06 21:44:07 -04:00
- blue power-on LED
2024-07-06 21:38:37 -04:00
- two programmable LEDs
2024-07-06 22:58:19 -04:00
- programmable via [UART](https://github.com/alexandrebobkov/ESP-Nodes/tree/main?tab=readme-ov-file#uart) -> no need for serial drivers
2024-07-06 21:48:22 -04:00
2024-07-07 09:14:56 -04:00
### ESP32-WROOM-32D Module Adapter Pinouts
2024-07-14 02:43:59 -04:00
<p>ESP32-WROOM-32D modules are well suited for Wi-Fi and Bluetooth/Bluetooth LE-based connectivity applications and provide a solid dual-core performance. These modules target a wide variety of applications, ranging from low-power sensor networks to the most demanding tasks, such as voice encoding, music streaming and MP3 decoding.
</p>
2024-07-07 16:14:29 -04:00
<p>The adapter allows interchangability of ESP32 modules between different nodes. The adapter contains minimal components on its PCB, just enough to ensure module's operation. (ESP32 8-N-1)</p>
2024-07-06 21:48:22 -04:00
2024-07-06 21:51:42 -04:00
<img alt="ESP32-Node Pinout" src="https://github.com/alexandrebobkov/ESP-Nodes/blob/main/assets/ESP32-Node-pinout.png" width="350px"/>
2024-07-06 22:26:19 -04:00
| Physical Pin | Descrption and Logical Pin | Extended Function |
| --- | --- | --- |
| `1` `15` `38` | Ground | |
2024-07-06 22:52:53 -04:00
| `2` | `3V3` | |
2024-07-06 22:26:19 -04:00
| `3` | EN | |
2024-07-06 22:27:34 -04:00
| `4` `5` `6` `7` | **Inputs Only** `GPIO36` `GPIO39` `GPIO34` `GPIO35` | ADC1_CH0, ADC1_CH3, ADC1_CH6, ADC1_CH7 |
2024-07-06 22:26:19 -04:00
| `8` `9` | `GPIO32` `GPIO33` | TOUCH_9, TOUCH_8 |
2024-07-06 22:30:01 -04:00
| `10` `11` | `GPIO25` `GPIO26` | DAC_1, DAC_2 |
| `12` | `GPIO27` | TOUCH_7 |
2024-07-06 22:33:12 -04:00
| `13` `14` | `GPIO14` `GPIO12` | `HSPI_CLK` `HSPI_MISO` TOUCH_6 TOUCH_7 |
| `16` | `GPIO13` | `HSPI_MOSI` ADC2_CH4 |
2024-07-06 22:52:53 -04:00
| `17` `18` `19` `20` `21` `22` | **Module Internal Use Only** `GPIO09` `GPIO10` `GPIO11` `GPIO08` `GPIO07` `GPIO06` |
2024-07-06 22:35:34 -04:00
| `23` `24` | `GPIO02` `GPIO15` | AD2_CH3 ADC2_CH2 |
| `25` `26` | `GPIO00` `GPIO04` | TOUCH_1 TOUCH_0 |
2024-07-06 22:40:34 -04:00
| `27` `28` | `GPIO16` `GPIO17` | `UART2_RXD` `UART2_TXD` |
| `29` `30` `31` | `GPIO05` `GPIO18` `GPIO19` | `VSPI_CS0` `VSPI_CLK` `VSPI_MISO` |
| `32` | Not Connected |
| `33` | `GPIO21` | `SDA` |
| `34` `35` | `GPIO03` `GPIO01` | UART0_RXD UART0_TXD |
| `36` | `GPIO22` | `SCL` |
2024-07-06 22:50:39 -04:00
| `37` | `GPIO23` | VSPI_MOSI |
2024-07-06 22:54:48 -04:00
[^1]: https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf
2024-07-14 02:43:59 -04:00
### ESP32-C3 Module Adapter Pinouts
2024-07-14 02:59:57 -04:00
ESP32-C3 is a cost-effective, RISC-V-based MCU with Wi-Fi and Bluetooth 5 (LE) connectivity for secure IoT applications. ESP32-C3 Module offfers a cost-effective RISC-V MCU with Wi-Fi and Bluetooth 5 (LE) connectivity for secure IoT applications. [^5]
2024-07-14 02:47:49 -04:00
<p>These modules have a rich set of peripherals and high performance make the two modules an ideal choice for smart homes, industrial automation, health care, consumer electronics, etc</p>
2024-07-14 02:52:43 -04:00
<p>ESP32-C3 has 32-bit RISC-V-based MCU single-core processor with 400KB of SRAM, which is capable of running at 160MHz. t has integrated 2.4 GHz Wi-Fi and Bluetooth 5 (LE) with a long-range support. It has 22 programmable GPIOs with support for ADC, SPI, UART, I2C, I2S, RMT, TWAI, and PWM.</p>
2024-07-07 09:01:55 -04:00
2024-07-14 03:01:40 -04:00
<img alt="ESP32-C3 Block Diagram" src="https://github.com/alexandrebobkov/ESP-Nodes/blob/main/assets/ESP32-C3-diagram.png" width="400px"/>
2024-07-14 03:00:58 -04:00
2024-07-16 16:58:34 -04:00
### Strapping & Control Pins
| Pin | Default | Description |
| --- | --- | --- |
2024-07-16 17:01:50 -04:00
| `EN` | - | H: enables chip <br/> L: disables chip |
2024-07-16 16:58:34 -04:00
| `GPIO2` | n/a | 1 -> Download boot |
| `GPIO8` | n/a | 1 -> Download boot |
2024-07-16 16:45:46 -04:00
### DC Characteristics
| Variable | Parameter | min | Typ | max | Unit |
2024-07-16 17:10:04 -04:00
| --- | --- | --- | --- | --- | :---: |
2024-07-16 16:45:46 -04:00
| V<sub>IH</sub> | High-level Input voltage | 0.75xV<sub>DD</sub> | - | V<sub>DD</sub> + 0.3 | V |
2024-07-16 16:50:55 -04:00
| I<sub>IH</sub> | High-level Input current | - | - | 50 | nA |
2024-07-16 17:06:10 -04:00
|||||||
2024-07-16 17:07:15 -04:00
| V<sub>IL/sub> | Low-level Input voltage | -0.3 | - | 0.25xV<sub>DD</sub> | V |
2024-07-16 16:50:55 -04:00
| I<sub>IL</sub> | Low-level Input current | - | - | 50 | nA |
2024-07-16 17:10:49 -04:00
|||||||
2024-07-16 16:50:55 -04:00
| V<sub>OH</sub> | High-level Output voltage | 0.8xV<sub>DD</sub> | - | - | V |
| I<sub>OH</sub> | High-level Source current | - | 40 | - | mA |
2024-07-16 17:10:49 -04:00
|||||||
2024-07-16 17:10:04 -04:00
| V<sub>OL/sub> | Low-level Output voltage | - | - | 0.1xV<sub>DD</sub> | V |
2024-07-16 17:04:25 -04:00
| I<sub>OL</sub> | Low-level Sinc current | - | 28 | - | mA |
2024-07-16 17:10:49 -04:00
|||||||
2024-07-16 16:53:58 -04:00
| R<sub>PU</sub> | Pull-up resistor | - | 45 | - | kOm |
| R<sub>PD</sub> | Pull-down resistor | - | 45 | - | kOm |
| V<sub>IH_nRST</sub> | Chip reset release voltage | 0.75xV<sub>DD</sub> | - | V<sub>DD</sub> + 0.3 | V |
| V<sub>IL_nRST</sub> | Chip reset voltage | 0.75xV<sub>DD</sub> | -0.3 | 0.25xV<sub>DD</sub> | V |
2024-07-16 16:42:42 -04:00
2024-07-07 12:43:09 -04:00
### Programming via UART
2024-07-16 20:43:25 -04:00
ESP32 modules can be programmed using USB-UART adapter connected to the corresponding UART pins on the ESP32 module. This approach allows to save space on PCB boards, which is very helpful when PCB dimentions have constraints.
2024-07-16 21:16:41 -04:00
<img alt="ESP32 Programming via UART" src="https://github.com/alexandrebobkov/ESP-Nodes/blob/main/assets/UART.jpg" width="400px"/>
2024-07-14 12:52:32 -04:00
## Unified Configuration Framework
ESP Nodes performing specific operations can use different ESP32 Modules for optimization purposes. As dicersity of ESP32s being used by the Nodes increases, so does the code. However, in order to keep core code independent from the ESP32 Module being used, the so-called configurations specific for the particular ESP32 Module are defined in config.h file.
2024-07-14 12:55:47 -04:00
> [!IMPORTANT]
> Remember to add entry for congif.h inside .gitignore file to prevent Git from pushing security sensitive data to the repository.
2024-07-14 12:52:32 -04:00
```C
2024-07-14 13:01:11 -04:00
const *char WIFI_SSID = "IoT_bots";
const *char WIFI_PASSWORD = "405405405";
2024-07-14 12:55:47 -04:00
2024-07-14 12:57:34 -04:00
/* ESP32-WROOM Module */
2024-07-14 13:09:39 -04:00
#ifdef ESP32-WROOM
#define SCL_PIN (22)
#define SDA_PIN (21)
#endif
2024-07-14 12:57:34 -04:00
2024-07-14 13:09:39 -04:00
/* ESP32-C3 Module */
/* ESP32-S3 Module */
2024-07-14 12:57:34 -04:00
2024-07-14 13:05:01 -04:00
/* ESP32-C3 Super Mini */
2024-07-14 13:09:39 -04:00
#ifdef ESP32-C3-SuperMini
2024-07-14 13:04:38 -04:00
#define SCL_PIN (7)
#define SDA_PIN (6)
#define SYS_LED_PIN (8)
#define SCK_PIN (8)
#define MISO_PIN (9)
#define MOSI_PIN (10)
#define UART_RX_PIN (20)
#define UART_TX_PIN (21)
#define ADC1_PIN (1)
#define ADC2_PIN (0)
#define A0_PIN (2)
#define A1_PIN (3)
#define A2_PIN (4)
#define A3_PIN (5)
2024-07-14 13:09:39 -04:00
#endif
/* BME-280 */
#ifdef BME280
#define I2C_ADDRESS_BME280 0x76
#endif
/* BMP-280 */
#ifdef BME280
#define I2C_ADDRESS_BMP280 0x76
#endif
2024-07-14 12:57:34 -04:00
2024-07-14 12:52:32 -04:00
```
2024-07-07 12:44:08 -04:00
Bare-bones ESP32 module can be programmed via UART interface (`GPIO03` and `GPIO01`) using USB to UART adapter.
2024-07-07 09:01:55 -04:00
2024-07-08 23:32:01 -04:00
## Temperature Node. The Key Elements and Components
2024-07-07 09:07:15 -04:00
2024-07-07 09:14:56 -04:00
The **Temperature Node** broadcasts the air temperature, atmospheric pressure and air humidity over secured MQTT.
2024-07-07 09:04:53 -04:00
2024-07-10 09:23:16 -04:00
### I2C Air Temperature Thermostat (LM75A)
2024-07-10 09:42:54 -04:00
The LM75A is an industry-standard digital temperature sensor. The LM75A provides 9-bit digital temperature readings with an accuracy of ±2°C from 25°C to 100°C
and ±3°C over 55°C to 125°C. The LM75A operates with a single supply from +2.7 V to +5.5 V. Communication is accomplished over a 2-wire interface which operates up to 400kHz.
The LM75A has three address pins, allowing up to eight LM75A devices to operate on the same 2-wire bus. The LM75A has a dedicated over-temperature output (O.S.) with
programmable limit and hysteresis. This output has programmable fault tolerance, which allows the user to
define the number of consecutive error conditions that must occur before O.S. is activated.
2024-07-10 09:23:16 -04:00
```text
2024-07-10 09:42:54 -04:00
address: 0x49
2024-07-10 09:23:16 -04:00
```
2024-07-07 09:38:42 -04:00
### I2C Air Temperature, Pressure and Humidity Sensor Board (BME280)
2024-07-07 09:04:53 -04:00
2024-07-07 13:34:35 -04:00
BME280 is combined temperature, humidity and pressure sensor. The unit combines high linearity and high accuracy sensors and is perfectly feasible for low current consumption, long-term stability and high EMC robustness. The humidity sensor offers an extremely fast response time and therefore supports performance requirements for emerging applications such as context awareness, and high accuracy over a wide temperature range.[^2]
2024-07-07 12:12:54 -04:00
2024-07-08 22:56:57 -04:00
Below is the functional diagram of BME-/BMP-280. Notable difference between the two devices, is that BME-280 is capable of measuring relative humidity. BME-280 has square shape, while BMP-280 has rectangular shape.
2024-07-08 22:52:30 -04:00
<img alt="ESP32-Node Pinout" src="https://github.com/alexandrebobkov/ESP-Nodes/blob/main/assets/bme280_functional-diagram.png" width="400px"/>
2024-07-08 22:56:57 -04:00
BME-280 can come in a ready-to-use PCB ...
2024-07-07 09:32:26 -04:00
<img alt="ESP32-Node Pinout" src="https://github.com/alexandrebobkov/ESP-Nodes/blob/main/assets/BME280.jpg" width="200px"/>
2024-07-07 09:29:55 -04:00
2024-07-07 09:34:32 -04:00
> [!IMPORTANT]
2024-07-07 13:36:22 -04:00
> BM**E**280[^2] and BM**P**280[^3] look almost identical. However, BME280 sensor has a square form, while BMP280 has a rectangular form. In addition, the two sensor boards can have different I<sup>2</sup>C addresses.
2024-07-07 09:34:59 -04:00
>
> <img alt="ESP32-Node Pinout" src="https://github.com/alexandrebobkov/ESP-Nodes/blob/main/assets/BME280-BMP280.jpg" width="100px"/>
2024-07-07 09:34:32 -04:00
2024-07-07 12:18:14 -04:00
**4-pin variant**
2024-07-07 13:36:22 -04:00
The BME280 sensor board interface uses 4 pins and is 13mm by 10.5mm in size. The four pins are `VIN`, `GND`, `SCL` and `SDA`. The measured values are sent via I<sup>2</sup>C protocol. The I<sup>2</sup>C slave address is pre-defined and can take value either 0x76 or 0x77 (BME280 Datasheet, page 32)[^4].
2024-07-07 09:27:57 -04:00
2024-07-07 11:54:40 -04:00
### Wiring
2024-07-07 12:40:14 -04:00
| Pin | ESP32 GPIO |
2024-07-07 12:12:18 -04:00
| --- | --- |
2024-07-07 12:17:07 -04:00
| `SCL` | `GPIO22` |
| `SDA ` | `GPIO21` |
2024-07-07 12:12:18 -04:00
2024-07-07 17:45:05 -04:00
### Reading Values
2024-07-07 17:46:36 -04:00
```C
2024-07-07 18:00:46 -04:00
i2c_master_write_read_device(I2C_MASTER_NUM, 0x76, &reg_addr, 1, data, len, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS);
2024-07-07 17:46:36 -04:00
```
2024-07-08 10:31:21 -04:00
<p>Data readout is done by starting a burst read from 0xF7 to 0xFC (temperature and pressure) or from 0xF7 to 0xFE (temperature, pressure, and humidity). The data are rad out in an unsigned 20-bit format both for pressure and for temperature, and in an unsigned 26-bit format for humidity. After the uncompensated values for pressure, temperature, and humidity have been read, the actual humidity, pressure and temperature needs to be calculated using the compensation parameters stored in the device.</p>
2024-07-08 18:07:44 -04:00
<img alt="BME-/BMP-280 Memory Map" src="https://github.com/alexandrebobkov/ESP-Nodes/blob/main/assets/BME280_BMP280_Registers.png" width="90%"/>
2024-07-08 18:07:00 -04:00
2024-07-08 23:31:34 -04:00
BME-/BMP-280 can communicate via I<sup>2</sup>C. The two diagrams below summarize algorithm of reading and writting values to/from the sensor.
2024-07-08 22:56:57 -04:00
2024-07-08 22:58:21 -04:00
<img alt="BME-/BMP-280 I2C Read & Write" src="https://github.com/alexandrebobkov/ESP-Nodes/blob/main/assets/bme280_i2c_read-write.png" width="100%"/>
2024-07-08 22:50:42 -04:00
2024-07-10 09:23:16 -04:00
## Display Node
2024-07-10 09:19:56 -04:00
```text
OLED address = 0x3C
2024-07-10 13:59:03 -04:00
0.91" 128x32
2024-07-10 09:19:56 -04:00
```
2024-07-14 19:31:55 -04:00
### e-Paper
2024-07-14 19:33:11 -04:00
#### ESP32-WROOM Module
Wiring table
2024-07-14 19:31:55 -04:00
| ESP32-WROOM | e-Paper |
| --- | --- |
2024-07-14 21:01:25 -04:00
| `GPIO4` (hSPI HD) | `BUSY` (Purple) |
| `GPIO5` (vSPI CS) | `CS` (Orange) |
| `GPIO16` (RxD) | `RST` (White) |
| `GPIO17` (TxD) | `DC` (Green) |
| `GPIO18` (vSPI CLK) | `CLK` (Yellow) |
| `GPIO23` (vSPI D) | `DIN` (Blue) |
2024-07-14 19:31:55 -04:00
#### ESP32-C3
2024-07-14 19:33:11 -04:00
| ESP32-C3 | e-Paper |
| --- | --- |
2024-07-14 21:01:25 -04:00
| `GPIO7` (fSPI D) | `DIN` (Blue) |
| `GPIO10` (fSPI CS) | `CS` (Orange) |
2024-07-14 21:20:33 -04:00
| `RXD` `GPIO20` (RxD) | `RST` (White) |
| `TXD` `GPIO21` (TxD) | `DC` (Green) |
2024-07-14 21:01:25 -04:00
| `GPIO6` (fSPI CLK) | `CLK` (Yellow) |
| `GPIO4` (fSPI HD) | `BUSY` (Purple) |
2024-07-14 19:33:11 -04:00
2024-07-16 23:57:15 -04:00
# Espressif ESP RainMaker Provisioning
ESP RainMaker is a complete, yet light-weight, AIoT solution that enables private Cloud deployment for your business in a simple, cost-effective and efficient manner. ESP RainMaker is a light-weight AIoT Cloud software, fully integrated into the AWS serverless architecture, which allows customers to build, develop and deploy customized AIoT solutions with a minimum amount of code and maximum security. [^7]
2024-07-08 22:59:07 -04:00
---
2024-07-08 23:08:50 -04:00
## REFERENCES
2024-07-08 22:59:07 -04:00
2024-07-07 12:06:19 -04:00
[^2]: https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/
2024-07-07 13:34:35 -04:00
[^3]: https://www.bosch-sensortec.com/products/environmental-sensors/pressure-sensors/bmp280/
2024-07-14 02:49:52 -04:00
[^4]: https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme280-ds002.pdf
2024-07-16 22:15:31 -04:00
[^5]: https://www.espressif.com/en/news/ESP32_C3
2024-07-16 23:57:15 -04:00
[^6]: https://dashboard.rainmaker.espressif.com/login
[^7]: https://rainmaker.espressif.com/