<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.cognifront.com/docs/index.php?action=history&amp;feed=atom&amp;title=MDM331AID%2FExperiment_12_ESPNOW</id>
	<title>MDM331AID/Experiment 12 ESPNOW - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.cognifront.com/docs/index.php?action=history&amp;feed=atom&amp;title=MDM331AID%2FExperiment_12_ESPNOW"/>
	<link rel="alternate" type="text/html" href="https://www.cognifront.com/docs/index.php?title=MDM331AID/Experiment_12_ESPNOW&amp;action=history"/>
	<updated>2026-10-22T05:47:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.cognifront.com/docs/index.php?title=MDM331AID/Experiment_12_ESPNOW&amp;diff=1360&amp;oldid=prev</id>
		<title>CogWikiEditor: Created page with &quot;= Experiment: Secure Sensor Data Transmission Using ESP-NOW =  == Aim ==  To implement secure wireless transmission of temperature and humidity data between two ESP32 devices using ESP-NOW with AES-128-based encryption.  == Objectives ==  * To understand the concept of ESP-NOW communication in IoT systems. * To interface a DHT11 temperature and humidity sensor with an ESP32. * To transmit sensor data directly between two ESP32 devices without using an access point or clo...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.cognifront.com/docs/index.php?title=MDM331AID/Experiment_12_ESPNOW&amp;diff=1360&amp;oldid=prev"/>
		<updated>2026-10-07T12:13:58Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= Experiment: Secure Sensor Data Transmission Using ESP-NOW =  == Aim ==  To implement secure wireless transmission of temperature and humidity data between two ESP32 devices using ESP-NOW with AES-128-based encryption.  == Objectives ==  * To understand the concept of ESP-NOW communication in IoT systems. * To interface a DHT11 temperature and humidity sensor with an ESP32. * To transmit sensor data directly between two ESP32 devices without using an access point or clo...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Experiment: Secure Sensor Data Transmission Using ESP-NOW =&lt;br /&gt;
&lt;br /&gt;
== Aim ==&lt;br /&gt;
&lt;br /&gt;
To implement secure wireless transmission of temperature and humidity data between two ESP32 devices using ESP-NOW with AES-128-based encryption.&lt;br /&gt;
&lt;br /&gt;
== Objectives ==&lt;br /&gt;
&lt;br /&gt;
* To understand the concept of ESP-NOW communication in IoT systems.&lt;br /&gt;
* To interface a DHT11 temperature and humidity sensor with an ESP32.&lt;br /&gt;
* To transmit sensor data directly between two ESP32 devices without using an access point or cloud server.&lt;br /&gt;
* To configure ESP-NOW communication between a transmitter and receiver.&lt;br /&gt;
* To understand peer-to-peer wireless communication in IoT systems.&lt;br /&gt;
* To configure ESP-NOW encryption using a Primary Master Key (PMK) and Local Master Key (LMK).&lt;br /&gt;
* To understand how AES-128-based encryption protects ESP-NOW communication.&lt;br /&gt;
* To verify that the receiver successfully obtains the transmitted sensor data.&lt;br /&gt;
&lt;br /&gt;
== Components Required ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 80%;&amp;quot;&lt;br /&gt;
! Sr. No.&lt;br /&gt;
! Component&lt;br /&gt;
! Quantity&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ESP32 Development Board&lt;br /&gt;
| 2&lt;br /&gt;
| One transmitter and one receiver&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| DHT11 Sensor&lt;br /&gt;
| 1&lt;br /&gt;
| Measures temperature and humidity&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| USB Cable&lt;br /&gt;
| 2&lt;br /&gt;
| Programming and powering ESP32 boards&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Jumper Wires&lt;br /&gt;
| As required&lt;br /&gt;
| Electrical connections&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Computer&lt;br /&gt;
| 1&lt;br /&gt;
| Programming and monitoring&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Arduino IDE&lt;br /&gt;
| 1&lt;br /&gt;
| ESP32 programming&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
&lt;br /&gt;
=== ESP-NOW ===&lt;br /&gt;
&lt;br /&gt;
ESP-NOW is a connectionless wireless communication protocol developed by Espressif for communication between ESP devices.&lt;br /&gt;
&lt;br /&gt;
It allows ESP32 devices to exchange data directly without requiring a traditional Wi-Fi access point or Internet connection. It is suitable for IoT applications such as sensors, remote controls and local device-to-device communication.&lt;br /&gt;
&lt;br /&gt;
The communication structure used in this experiment is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DHT11 Sensor&lt;br /&gt;
      ↓&lt;br /&gt;
ESP32 Transmitter&lt;br /&gt;
      ↓&lt;br /&gt;
   ESP-NOW&lt;br /&gt;
      ↓&lt;br /&gt;
ESP32 Receiver&lt;br /&gt;
      ↓&lt;br /&gt;
Serial Monitor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ESP-NOW Peer Communication ===&lt;br /&gt;
&lt;br /&gt;
In ESP-NOW, devices communicate using peer-to-peer wireless communication.&lt;br /&gt;
&lt;br /&gt;
The transmitter sends a sensor-data packet to the MAC address of the receiver.&lt;br /&gt;
&lt;br /&gt;
Unlike a normal Wi-Fi application, the devices do not need to establish a conventional IP connection with each other.&lt;br /&gt;
&lt;br /&gt;
=== ESP-NOW Security ===&lt;br /&gt;
&lt;br /&gt;
ESP-NOW provides security using the &amp;#039;&amp;#039;&amp;#039;CCMP&amp;#039;&amp;#039;&amp;#039; security mechanism.&lt;br /&gt;
&lt;br /&gt;
A Primary Master Key (PMK) and Local Master Keys (LMKs) are used for encrypted peer communication.&lt;br /&gt;
&lt;br /&gt;
The PMK is used to protect the LMK using AES-128, while the LMK associated with a paired device is used to encrypt the ESP-NOW communication frame.&lt;br /&gt;
&lt;br /&gt;
The basic security structure is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
             Primary Master Key&lt;br /&gt;
                     ↓&lt;br /&gt;
               Protects LMK&lt;br /&gt;
                     ↓&lt;br /&gt;
          Local Master Key&lt;br /&gt;
                     ↓&lt;br /&gt;
             AES-128 / CCMP&lt;br /&gt;
                     ↓&lt;br /&gt;
          Encrypted ESP-NOW&lt;br /&gt;
                Communication&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If an LMK is not configured for a paired device, that ESP-NOW communication is not encrypted. Therefore, configuring the encrypted peer correctly is an important part of this experiment.&lt;br /&gt;
&lt;br /&gt;
=== AES-128 ===&lt;br /&gt;
&lt;br /&gt;
AES stands for Advanced Encryption Standard.&lt;br /&gt;
&lt;br /&gt;
ESP-NOW uses AES-128 as part of its security mechanism. AES-128 uses a 128-bit key to protect the communication.&lt;br /&gt;
&lt;br /&gt;
In this experiment, the encryption is handled by the ESP-NOW security mechanism rather than manually implementing AES encryption in the application code.&lt;br /&gt;
&lt;br /&gt;
Therefore:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sensor Data&lt;br /&gt;
     ↓&lt;br /&gt;
ESP-NOW Security&lt;br /&gt;
     ↓&lt;br /&gt;
AES-128 / CCMP Protection&lt;br /&gt;
     ↓&lt;br /&gt;
Wireless Transmission&lt;br /&gt;
     ↓&lt;br /&gt;
ESP32 Receiver&lt;br /&gt;
     ↓&lt;br /&gt;
Decrypted Sensor Data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Advantages of ESP-NOW ===&lt;br /&gt;
&lt;br /&gt;
* Direct communication between ESP32 devices.&lt;br /&gt;
* Does not require an Internet connection.&lt;br /&gt;
* Does not require a cloud server.&lt;br /&gt;
* Low communication overhead.&lt;br /&gt;
* Suitable for local IoT applications.&lt;br /&gt;
* Supports encrypted peer communication.&lt;br /&gt;
* Suitable for sensor and control applications.&lt;br /&gt;
&lt;br /&gt;
== Pin Connections ==&lt;br /&gt;
&lt;br /&gt;
=== DHT11 to ESP32 Transmitter ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! DHT11 Pin&lt;br /&gt;
! ESP32 Pin&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| VCC&lt;br /&gt;
| 3.3V&lt;br /&gt;
| Power supply&lt;br /&gt;
|-&lt;br /&gt;
| DATA&lt;br /&gt;
| GPIO 4&lt;br /&gt;
| Digital sensor data&lt;br /&gt;
|-&lt;br /&gt;
| GND&lt;br /&gt;
| GND&lt;br /&gt;
| Ground&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The second ESP32 is used only as the receiver and does not require a DHT11 sensor.&lt;br /&gt;
&lt;br /&gt;
== Connection Diagram ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                 TRANSMITTER&lt;br /&gt;
&lt;br /&gt;
        +-------------------+&lt;br /&gt;
        |       DHT11       |&lt;br /&gt;
        |                   |&lt;br /&gt;
        | VCC DATA GND      |&lt;br /&gt;
        +--+----+----+------+&lt;br /&gt;
           |    |    |&lt;br /&gt;
          3.3V GPIO4 GND&lt;br /&gt;
           |    |    |&lt;br /&gt;
     +-----+----+----+-----+&lt;br /&gt;
     |       ESP32 #1      |&lt;br /&gt;
     |    TRANSMITTER      |&lt;br /&gt;
     +----------+----------+&lt;br /&gt;
                |&lt;br /&gt;
                |&lt;br /&gt;
                |  Secure ESP-NOW&lt;br /&gt;
                |  AES-128 / CCMP&lt;br /&gt;
                |&lt;br /&gt;
                ↓&lt;br /&gt;
     +---------------------+&lt;br /&gt;
     |      ESP32 #2       |&lt;br /&gt;
     |      RECEIVER       |&lt;br /&gt;
     +----------+----------+&lt;br /&gt;
                |&lt;br /&gt;
                ↓&lt;br /&gt;
          Serial Monitor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Program ==&lt;br /&gt;
&lt;br /&gt;
=== Important Configuration ===&lt;br /&gt;
&lt;br /&gt;
The following example uses:&lt;br /&gt;
&lt;br /&gt;
* ESP32 #1 as the transmitter.&lt;br /&gt;
* ESP32 #2 as the receiver.&lt;br /&gt;
* DHT11 connected to GPIO 4 of ESP32 #1.&lt;br /&gt;
* A fixed PMK for the ESP-NOW security configuration.&lt;br /&gt;
* A fixed LMK for the encrypted transmitter-receiver peer.&lt;br /&gt;
* The receiver&amp;#039;s MAC address configured in the transmitter.&lt;br /&gt;
* The transmitter&amp;#039;s MAC address configured in the receiver.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The MAC addresses must be changed to match the two ESP32 boards being used.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Find the MAC Address ===&lt;br /&gt;
&lt;br /&gt;
Upload the following program to each ESP32 separately:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;WiFi.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  WiFi.mode(WIFI_STA);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;ESP32 MAC Address: &amp;quot;);&lt;br /&gt;
  Serial.println(WiFi.macAddress());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open the Serial Monitor at &amp;#039;&amp;#039;&amp;#039;115200 baud&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ESP32 MAC Address: 24:6F:28:AA:BB:CC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Record the MAC address of both ESP32 boards.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: ESP32 Transmitter Program ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;WiFi.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;esp_now.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;DHT.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define DHTPIN 4&lt;br /&gt;
#define DHTTYPE DHT11&lt;br /&gt;
&lt;br /&gt;
DHT dht(DHTPIN, DHTTYPE);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
   Replace this with the MAC address&lt;br /&gt;
   of ESP32 Receiver.&lt;br /&gt;
*/&lt;br /&gt;
uint8_t receiverAddress[] =&lt;br /&gt;
{&lt;br /&gt;
  0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
   16-byte Primary Master Key.&lt;br /&gt;
*/&lt;br /&gt;
uint8_t PMK[] =&lt;br /&gt;
{&lt;br /&gt;
  &amp;#039;P&amp;#039;,&amp;#039;M&amp;#039;,&amp;#039;K&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;,&lt;br /&gt;
  &amp;#039;6&amp;#039;,&amp;#039;7&amp;#039;,&amp;#039;8&amp;#039;,&amp;#039;9&amp;#039;,&amp;#039;A&amp;#039;,&amp;#039;B&amp;#039;,&amp;#039;C&amp;#039;,&amp;#039;D&amp;#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
   16-byte Local Master Key.&lt;br /&gt;
*/&lt;br /&gt;
uint8_t LMK[] =&lt;br /&gt;
{&lt;br /&gt;
  &amp;#039;L&amp;#039;,&amp;#039;M&amp;#039;,&amp;#039;K&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;,&lt;br /&gt;
  &amp;#039;6&amp;#039;,&amp;#039;7&amp;#039;,&amp;#039;8&amp;#039;,&amp;#039;9&amp;#039;,&amp;#039;A&amp;#039;,&amp;#039;B&amp;#039;,&amp;#039;C&amp;#039;,&amp;#039;D&amp;#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
} SensorData;&lt;br /&gt;
&lt;br /&gt;
SensorData data;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  dht.begin();&lt;br /&gt;
&lt;br /&gt;
  WiFi.mode(WIFI_STA);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Transmitter MAC: &amp;quot;);&lt;br /&gt;
  Serial.println(WiFi.macAddress());&lt;br /&gt;
&lt;br /&gt;
  if (esp_now_init() != ESP_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;ESP-NOW initialization failed&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
     Set Primary Master Key.&lt;br /&gt;
  */&lt;br /&gt;
  if (esp_now_set_pmk(PMK) != ESP_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;PMK configuration failed&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
     Configure encrypted receiver.&lt;br /&gt;
  */&lt;br /&gt;
  esp_now_peer_info_t peerInfo = {};&lt;br /&gt;
&lt;br /&gt;
  memcpy(&lt;br /&gt;
    peerInfo.peer_addr,&lt;br /&gt;
    receiverAddress,&lt;br /&gt;
    6&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  peerInfo.channel = 0;&lt;br /&gt;
  peerInfo.encrypt = true;&lt;br /&gt;
&lt;br /&gt;
  memcpy(&lt;br /&gt;
    peerInfo.lmk,&lt;br /&gt;
    LMK,&lt;br /&gt;
    16&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  if (esp_now_add_peer(&amp;amp;peerInfo) != ESP_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Failed to add encrypted peer&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;Secure ESP-NOW transmitter ready&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  data.temperature = dht.readTemperature();&lt;br /&gt;
  data.humidity = dht.readHumidity();&lt;br /&gt;
&lt;br /&gt;
  if (isnan(data.temperature) ||&lt;br /&gt;
      isnan(data.humidity))&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;DHT11 reading failed&amp;quot;);&lt;br /&gt;
    delay(2000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  esp_err_t result = esp_now_send(&lt;br /&gt;
    receiverAddress,&lt;br /&gt;
    (uint8_t *)&amp;amp;data,&lt;br /&gt;
    sizeof(data)&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  if (result == ESP_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Encrypted sensor data sent&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Data transmission failed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Temperature: &amp;quot;);&lt;br /&gt;
  Serial.print(data.temperature);&lt;br /&gt;
  Serial.println(&amp;quot; °C&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Humidity: &amp;quot;);&lt;br /&gt;
  Serial.print(data.humidity);&lt;br /&gt;
  Serial.println(&amp;quot; %&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3: ESP32 Receiver Program ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;WiFi.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;esp_now.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
   Replace this with the MAC address&lt;br /&gt;
   of ESP32 Transmitter.&lt;br /&gt;
*/&lt;br /&gt;
uint8_t transmitterAddress[] =&lt;br /&gt;
{&lt;br /&gt;
  0x24, 0x6F, 0x28, 0x11, 0x22, 0x33&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
   Same 16-byte Primary Master Key&lt;br /&gt;
   used by the transmitter.&lt;br /&gt;
*/&lt;br /&gt;
uint8_t PMK[] =&lt;br /&gt;
{&lt;br /&gt;
  &amp;#039;P&amp;#039;,&amp;#039;M&amp;#039;,&amp;#039;K&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;,&lt;br /&gt;
  &amp;#039;6&amp;#039;,&amp;#039;7&amp;#039;,&amp;#039;8&amp;#039;,&amp;#039;9&amp;#039;,&amp;#039;A&amp;#039;,&amp;#039;B&amp;#039;,&amp;#039;C&amp;#039;,&amp;#039;D&amp;#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
   Same 16-byte Local Master Key&lt;br /&gt;
   used by the transmitter.&lt;br /&gt;
*/&lt;br /&gt;
uint8_t LMK[] =&lt;br /&gt;
{&lt;br /&gt;
  &amp;#039;L&amp;#039;,&amp;#039;M&amp;#039;,&amp;#039;K&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;,&lt;br /&gt;
  &amp;#039;6&amp;#039;,&amp;#039;7&amp;#039;,&amp;#039;8&amp;#039;,&amp;#039;9&amp;#039;,&amp;#039;A&amp;#039;,&amp;#039;B&amp;#039;,&amp;#039;C&amp;#039;,&amp;#039;D&amp;#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
} SensorData;&lt;br /&gt;
&lt;br /&gt;
SensorData receivedData;&lt;br /&gt;
&lt;br /&gt;
void onDataReceive(&lt;br /&gt;
  const esp_now_recv_info_t *info,&lt;br /&gt;
  const uint8_t *incomingData,&lt;br /&gt;
  int len&lt;br /&gt;
)&lt;br /&gt;
{&lt;br /&gt;
  if (len != sizeof(SensorData))&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Invalid data size&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  memcpy(&lt;br /&gt;
    &amp;amp;receivedData,&lt;br /&gt;
    incomingData,&lt;br /&gt;
    sizeof(receivedData)&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;Secure sensor data received&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Temperature: &amp;quot;);&lt;br /&gt;
  Serial.print(receivedData.temperature);&lt;br /&gt;
  Serial.println(&amp;quot; °C&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Humidity: &amp;quot;);&lt;br /&gt;
  Serial.print(receivedData.humidity);&lt;br /&gt;
  Serial.println(&amp;quot; %&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  WiFi.mode(WIFI_STA);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Receiver MAC: &amp;quot;);&lt;br /&gt;
  Serial.println(WiFi.macAddress());&lt;br /&gt;
&lt;br /&gt;
  if (esp_now_init() != ESP_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;ESP-NOW initialization failed&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
     Set Primary Master Key.&lt;br /&gt;
  */&lt;br /&gt;
  if (esp_now_set_pmk(PMK) != ESP_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;PMK configuration failed&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
     Configure the encrypted transmitter peer.&lt;br /&gt;
  */&lt;br /&gt;
  esp_now_peer_info_t peerInfo = {};&lt;br /&gt;
&lt;br /&gt;
  memcpy(&lt;br /&gt;
    peerInfo.peer_addr,&lt;br /&gt;
    transmitterAddress,&lt;br /&gt;
    6&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  peerInfo.channel = 0;&lt;br /&gt;
  peerInfo.encrypt = true;&lt;br /&gt;
&lt;br /&gt;
  memcpy(&lt;br /&gt;
    peerInfo.lmk,&lt;br /&gt;
    LMK,&lt;br /&gt;
    16&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  if (esp_now_add_peer(&amp;amp;peerInfo) != ESP_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Failed to add encrypted peer&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  esp_now_register_recv_cb(onDataReceive);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;Secure ESP-NOW receiver ready&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  delay(100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code Explanation ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code / Function&lt;br /&gt;
! Explanation&lt;br /&gt;
|-&lt;br /&gt;
| `WiFi.mode(WIFI_STA)`&lt;br /&gt;
| Configures the ESP32 Wi-Fi interface in station mode.&lt;br /&gt;
|-&lt;br /&gt;
| `esp_now_init()`&lt;br /&gt;
| Initializes ESP-NOW communication.&lt;br /&gt;
|-&lt;br /&gt;
| `esp_now_set_pmk()`&lt;br /&gt;
| Sets the Primary Master Key used by ESP-NOW security.&lt;br /&gt;
|-&lt;br /&gt;
| `esp_now_peer_info_t`&lt;br /&gt;
| Stores information about the ESP-NOW peer.&lt;br /&gt;
|-&lt;br /&gt;
| `peer_addr`&lt;br /&gt;
| Stores the MAC address of the communication peer.&lt;br /&gt;
|-&lt;br /&gt;
| `peerInfo.encrypt = true`&lt;br /&gt;
| Enables encrypted ESP-NOW communication with the configured peer.&lt;br /&gt;
|-&lt;br /&gt;
| `peerInfo.lmk`&lt;br /&gt;
| Stores the Local Master Key associated with the peer.&lt;br /&gt;
|-&lt;br /&gt;
| `esp_now_add_peer()`&lt;br /&gt;
| Adds the encrypted peer to the ESP-NOW peer list.&lt;br /&gt;
|-&lt;br /&gt;
| `dht.readTemperature()`&lt;br /&gt;
| Reads temperature from the DHT11.&lt;br /&gt;
|-&lt;br /&gt;
| `dht.readHumidity()`&lt;br /&gt;
| Reads humidity from the DHT11.&lt;br /&gt;
|-&lt;br /&gt;
| `esp_now_send()`&lt;br /&gt;
| Sends the sensor-data packet to the receiver.&lt;br /&gt;
|-&lt;br /&gt;
| `esp_now_register_recv_cb()`&lt;br /&gt;
| Registers the function that is called when ESP-NOW data is received.&lt;br /&gt;
|-&lt;br /&gt;
| `memcpy()`&lt;br /&gt;
| Copies the received byte data into the sensor-data structure.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Security Configuration ==&lt;br /&gt;
&lt;br /&gt;
Two keys are used in the practical.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Size&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| PMK&lt;br /&gt;
| 16 bytes&lt;br /&gt;
| Primary Master Key used to protect the LMK.&lt;br /&gt;
|-&lt;br /&gt;
| LMK&lt;br /&gt;
| 16 bytes&lt;br /&gt;
| Local Master Key associated with the encrypted peer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ESP-NOW documentation specifies 16-byte PMK and LMK values. The PMK is used to encrypt the LMK using AES-128, while the LMK is used for protecting the communication frame with CCMP.&lt;br /&gt;
&lt;br /&gt;
The transmitter and receiver must use the corresponding key configuration.&lt;br /&gt;
&lt;br /&gt;
== Security Flow ==&lt;br /&gt;
&lt;br /&gt;
The complete security process is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                 Sensor Data&lt;br /&gt;
                     ↓&lt;br /&gt;
              ESP32 Transmitter&lt;br /&gt;
                     ↓&lt;br /&gt;
               ESP-NOW Peer&lt;br /&gt;
                     ↓&lt;br /&gt;
               LMK / PMK&lt;br /&gt;
                     ↓&lt;br /&gt;
             AES-128 / CCMP&lt;br /&gt;
                     ↓&lt;br /&gt;
             Encrypted Frame&lt;br /&gt;
                     ↓&lt;br /&gt;
              Wireless Transfer&lt;br /&gt;
                     ↓&lt;br /&gt;
               ESP32 Receiver&lt;br /&gt;
                     ↓&lt;br /&gt;
              Decryption /&lt;br /&gt;
              Security Check&lt;br /&gt;
                     ↓&lt;br /&gt;
               Sensor Data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Procedure ==&lt;br /&gt;
&lt;br /&gt;
# Connect the DHT11 sensor to GPIO 4 of the transmitter ESP32.&lt;br /&gt;
# Connect both ESP32 boards to the computer using USB cables.&lt;br /&gt;
# Install the ESP32 board package in Arduino IDE.&lt;br /&gt;
# Install the DHT sensor library if required.&lt;br /&gt;
# Upload the MAC-address program to both ESP32 boards.&lt;br /&gt;
# Record the MAC address of the transmitter.&lt;br /&gt;
# Record the MAC address of the receiver.&lt;br /&gt;
# Enter the receiver MAC address in the transmitter program.&lt;br /&gt;
# Enter the transmitter MAC address in the receiver program.&lt;br /&gt;
# Keep the PMK and LMK identical on both ESP32 programs.&lt;br /&gt;
# Upload the receiver program to ESP32 #2.&lt;br /&gt;
# Open the receiver Serial Monitor at 115200 baud.&lt;br /&gt;
# Upload the transmitter program to ESP32 #1.&lt;br /&gt;
# Open the transmitter Serial Monitor at 115200 baud.&lt;br /&gt;
# Verify that both devices report successful ESP-NOW initialization.&lt;br /&gt;
# Verify that the encrypted peer is added successfully.&lt;br /&gt;
# Observe the DHT11 temperature and humidity readings on the transmitter.&lt;br /&gt;
# Observe the corresponding readings on the receiver.&lt;br /&gt;
# Verify that the receiver obtains the sensor data through the secured ESP-NOW link.&lt;br /&gt;
# Record the observed values.&lt;br /&gt;
&lt;br /&gt;
== Observations and Output ==&lt;br /&gt;
&lt;br /&gt;
=== Transmitter Output ===&lt;br /&gt;
&lt;br /&gt;
The transmitter Serial Monitor should display output similar to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Transmitter MAC: 24:6F:28:AA:BB:CC&lt;br /&gt;
Secure ESP-NOW transmitter ready&lt;br /&gt;
&lt;br /&gt;
Encrypted sensor data sent&lt;br /&gt;
Temperature: 27.40 °C&lt;br /&gt;
Humidity: 61.00 %&lt;br /&gt;
&lt;br /&gt;
Encrypted sensor data sent&lt;br /&gt;
Temperature: 27.50 °C&lt;br /&gt;
Humidity: 61.00 %&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Receiver Output ===&lt;br /&gt;
&lt;br /&gt;
The receiver Serial Monitor should display:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Receiver MAC: 24:6F:28:11:22:33&lt;br /&gt;
Secure ESP-NOW receiver ready&lt;br /&gt;
&lt;br /&gt;
Secure sensor data received&lt;br /&gt;
Temperature: 27.40 °C&lt;br /&gt;
Humidity: 61.00 %&lt;br /&gt;
&lt;br /&gt;
Secure sensor data received&lt;br /&gt;
Temperature: 27.50 °C&lt;br /&gt;
Humidity: 61.00 %&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Observation Table ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sr. No.&lt;br /&gt;
! Transmitter Temperature&lt;br /&gt;
! Receiver Temperature&lt;br /&gt;
! Transmitter Humidity&lt;br /&gt;
! Receiver Humidity&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 27.40 °C&lt;br /&gt;
| 27.40 °C&lt;br /&gt;
| 61 %&lt;br /&gt;
| 61 %&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 27.50 °C&lt;br /&gt;
| 27.50 °C&lt;br /&gt;
| 61 %&lt;br /&gt;
| 61 %&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 27.50 °C&lt;br /&gt;
| 27.50 °C&lt;br /&gt;
| 62 %&lt;br /&gt;
| 62 %&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; The values shown above are example observations. Actual readings depend on the DHT11 sensor and surrounding environmental conditions.&lt;br /&gt;
&lt;br /&gt;
== Security Verification ==&lt;br /&gt;
&lt;br /&gt;
The security can be demonstrated by intentionally changing the security configuration.&lt;br /&gt;
&lt;br /&gt;
For example, the following tests can be performed:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Test&lt;br /&gt;
! Expected Result&lt;br /&gt;
|-&lt;br /&gt;
| Correct receiver MAC and matching PMK/LMK&lt;br /&gt;
| Sensor data is successfully received.&lt;br /&gt;
|-&lt;br /&gt;
| Incorrect receiver MAC&lt;br /&gt;
| Data is not delivered to the intended receiver.&lt;br /&gt;
|-&lt;br /&gt;
| Incorrect LMK&lt;br /&gt;
| Encrypted peer communication does not work correctly.&lt;br /&gt;
|-&lt;br /&gt;
| ESP-NOW peer encryption disabled&lt;br /&gt;
| Communication is no longer using the configured encrypted peer mechanism.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This demonstrates that secure ESP-NOW communication depends on correctly configured peer security parameters.&lt;br /&gt;
&lt;br /&gt;
== ESP-NOW vs Normal Wi-Fi Communication ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! Normal Wi-Fi Application&lt;br /&gt;
! ESP-NOW&lt;br /&gt;
|-&lt;br /&gt;
| Communication&lt;br /&gt;
| Usually through an IP network&lt;br /&gt;
| Direct device-to-device&lt;br /&gt;
|-&lt;br /&gt;
| Internet required&lt;br /&gt;
| May be required&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Access point required&lt;br /&gt;
| Usually&lt;br /&gt;
| Not for direct ESP-NOW communication&lt;br /&gt;
|-&lt;br /&gt;
| IoT sensor applications&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| Encrypted peer communication&lt;br /&gt;
| Depends on the Wi-Fi/security protocol used&lt;br /&gt;
| Supported through ESP-NOW security&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ESP-NOW is specifically designed for direct communication between ESP devices and does not require an access point for device-to-device communication.&lt;br /&gt;
&lt;br /&gt;
== Security Considerations ==&lt;br /&gt;
&lt;br /&gt;
* The PMK and LMK used in this experiment are demonstration keys.&lt;br /&gt;
* Real IoT systems should use properly managed, unique keys.&lt;br /&gt;
* Keys should not be exposed publicly or hard-coded in production firmware without appropriate protection.&lt;br /&gt;
* The experiment demonstrates link-level ESP-NOW security and does not represent complete IoT security.&lt;br /&gt;
* Broadcast ESP-NOW communication does not provide the same encrypted peer mechanism as an encrypted unicast peer. Espressif notes that multicast vendor-specific action frames are not supported for encryption.&lt;br /&gt;
* Only authorized peers should be added when transmitting sensitive information.&lt;br /&gt;
&lt;br /&gt;
== Result ==&lt;br /&gt;
&lt;br /&gt;
The DHT11 sensor was successfully interfaced with the ESP32 transmitter, and temperature and humidity data were transmitted wirelessly to a second ESP32 using ESP-NOW. Encrypted peer communication was configured using a PMK and LMK, providing AES-128-based protection through ESP-NOW&amp;#039;s CCMP security mechanism. The transmitted sensor values were successfully received by the second ESP32.&lt;br /&gt;
&lt;br /&gt;
== Viva Questions ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q1. What is ESP-NOW?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
ESP-NOW is a connectionless wireless communication protocol developed by Espressif for direct communication between ESP devices.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q2. Does ESP-NOW require an Internet connection?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
No. ESP-NOW can communicate directly between ESP devices without an Internet connection.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q3. Does ESP-NOW require a Wi-Fi router?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
No. Direct ESP-NOW communication between ESP devices does not require a conventional Wi-Fi access point.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q4. What is the role of the MAC address?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The MAC address identifies the ESP-NOW peer to which the data is transmitted.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q5. What is PMK?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
PMK stands for Primary Master Key. It is a 16-byte key used as part of the ESP-NOW security mechanism.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q6. What is LMK?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
LMK stands for Local Master Key. It is associated with an individual encrypted ESP-NOW peer.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q7. Which encryption algorithm is associated with ESP-NOW security?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
ESP-NOW security uses AES-128 as part of its PMK/LMK and CCMP-based protection mechanism.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q8. What is CCMP?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
CCMP stands for Counter Mode with Cipher Block Chaining Message Authentication Code Protocol. It is used to protect ESP-NOW communication frames.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q9. Why is `peerInfo.encrypt = true` used?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
It enables encrypted communication for the configured ESP-NOW peer.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q10. What happens if the LMK is not configured for an encrypted peer?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The peer&amp;#039;s ESP-NOW communication will not use the configured encrypted peer mechanism.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q11. Why are two ESP32 boards used?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
One ESP32 acts as the sensor transmitter and the other acts as the receiver, demonstrating direct IoT device-to-device communication.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q12. Why is DHT11 connected only to the transmitter?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The transmitter reads the sensor data and sends it to the receiver. Therefore, the receiver does not need its own DHT11 sensor.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q13. What is the advantage of ESP-NOW for IoT applications?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
It provides direct, low-overhead communication between ESP devices and is suitable for sensor and control applications.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q14. How is this experiment different from HTTPS communication?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HTTPS secures communication between a client and a server using TLS. This experiment demonstrates encrypted local device-to-device communication using ESP-NOW.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Q15. Is ESP-NOW itself an encryption algorithm?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
No. ESP-NOW is a communication protocol. Its security mechanism uses CCMP and AES-128-based key management to protect encrypted peer communication.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
This experiment demonstrates secure wireless sensor-data transmission between two ESP32 devices using ESP-NOW. The DHT11 sensor data is transmitted directly from the transmitter ESP32 to the receiver ESP32 without using the Internet or a cloud server. ESP-NOW peer encryption is configured using PMK and LMK keys, providing AES-128-based protection through CCMP. The experiment demonstrates how secure device-to-device communication can be implemented in an IoT system.&lt;/div&gt;</summary>
		<author><name>CogWikiEditor</name></author>
	</entry>
</feed>