Each laboratory node is equipped with an ESP32-S3 double-core chip. Several peripherals, networks and network services are available for the user. The UI is necessary to observe results in the camera when programming remotely. Thus, a proper understanding of UI programming is essential to successfully using the devices.
Note that each node has a unique ID built into the chip, as well as unique MAC addresses for the WiFi and Bluetooth interfaces.
Hardware reference
The table 1 lists all hardware components of the SUT's ESP32-S3 node and hardware details such as connectivity, protocols, GPIOs, etc. Please note that some pins overlap because buses such as SPI and I2C are shared among multiple components.
The node is present in the figure 1 and reference numbers reflecting components in the table 1.
Table 1:ESP32-S3 SUT Node Hardware Details
Component ID
Description
Hardware model (controller)
Control method
GPIOs (as connected to the ESP32-S3)
Remarks
1A
12V PWM controlled fan
Pe60251b1-000u-g99
PWM
FAN_PWM = 35
Fan blows air into the pressure chamber (yellow container) to stimulate air pressure changes.
1B
Pressure and environmental sensor
BME 280
I2C, address 0x76
SDA=5, SCL=4
Spinning of the fan causes air to blow inside the yellow chamber and thus causes air pressure to change.
2
Digital potentiometer
DS1803-100
I2C, address 0x28
SDA=5, SCL=4, analog input (A/D)=7
Digital potententiometer's output is connected to the A/D input of the MCU.
3
Temperature and humidity sensor 1
DHT11
proprietary protocol, one GPIO
control on GPIO 47
4
Temperature sensor 2
DS18B20
1-Wire
1-Wire interface on GPIO 6
5
2×16 LCD
HD44780
Proprietary 4 bit control interface
EN=1, RS=2, D4=39, D5=40, D6=41, D7=42
4-bit, simplified, one-directional (MCU→LCD) communication only
Each colour can be independently controlled with PWM. The LED is integrated with another, illuminating the colour sensor (9B) so that controlling this RGB LED also directly impacts the other.
The MCU standing behind the laboratory node is a genuine ESP32-S3-DevKitM-1-N8 from Espressif [1], present in figure 2:
A suitable platformio.ini file for the correct code compilation is presented below. It does not contain libraries that need to be added regarding specific tasks and hardware used in particular scenarios. The code below presents only the typical section. Refer to the scenario description for details regarding case-specific libraries needed for the implementation:
Figure 3 represents SUT's VREL Next Gen IoT remote lab networking infrastructure and services. Details are described below.
If you're a fully remote student, you do not have access to the public part of the network (addresses 157.158.56.0/24); thus, you need to use only IoT devices and services available in the internal IoT WiFi network that IoT devices you're programming can access.
If you're a SUT student or can access the campus network, you can also use 157.158.56.0/24 addresses.
Networking Layer
The WiFi network, separated (no routing to and from the Internet) for IoT experimentation is available for all nodes:
SSID: internal.IOT.NextGen
PASS: IoTlab32768
A public, wired (157.158.56.0/24) network is available only for on-site students and from the SUT's campus network.
It is important to distinguish the network context and use the correct address. Integration services usually have two interfaces: one is available from the IoT WiFi network so nodes can access it, and the other IP address (from the public campus network) is available only for students directly connected to it.
Application Layer Services
There are currently two application layer services available:
MQTT broker available on both addresses:
IP addresses: 192.168.91.5 (from internal IoT WiFi network), 157.158.56.57 (via the campus network);
Port: 1883 (TCP)
User: vrel
Pass: vrel2018
CoAP server with 2 endpoints:
IP addresses: 192.168.91.5 (from internal IoT WiFi network), 157.158.56.57 (via the campus network);
Port: 5683 (UDP)
Endpoints:
GET method for
coap://<ipaddress>/
that brings you a secret code in the message's payload,
GET method for
coap://<ipaddress>/hello
that brings you a hello world welcome message in the payload.