Home / References / ESP32 Library / WiFiClientSecure
Description
The write
method in the WiFiClientSecure
library sends data to a server over a secure TLS connection. It is used to transmit bytes or strings, making it a fundamental tool for crafting HTTPS requests or other secure communications in IoT applications.
Syntax and Usage
The write
method offers the following distinct ways to send data, each suited to different scenarios. Here’s how you can use it:
– Writing a single byte:
client.write(data);
Send a single byte of data to the connected endpoint.
– Writing a buffer of bytes:
client.write(buf, size);
Send a sequence of bytes from a memory buffer, with a specified length.
– Writing PROGMEM data:
client.write_P(buf, size);
Send a buffer of bytes stored in PROGMEM (program memory), useful for conserving RAM.
For practical applications and examples of this method, please consult the “Example Code” section on this page. This section provides comprehensive guidance to help you better understand and apply the method effectively.
Argument(s)
The write
method’s arguments vary depending on the usage. Here’s a detailed list:
- data: An unsigned 8-bit integer (
uint8_t
) representing a single byte to send. Used for single-byte writes. - buf: A pointer to an array of bytes (
const uint8_t*
) in RAM containing the data to send. Used with buffer writes. - size: An integer (
size_t
) specifying the number of bytes to send from the buffer. Used with buffer and PROGMEM writes. - buf (PROGMEM): A pointer to a PROGMEM-stored buffer (
PGM_P
) containing the data to send. Used for PROGMEM writes.
Return Value
The write
method returns a size_t
value indicating the number of bytes successfully written to the connection. A return value of 0 typically means no data was sent, possibly due to a failed connection or empty input. Checking this value ensures your data transmission worked as intended.
Example Code
Below are example codes demonstrating how to use the write
method, adapted from the reference code provided.
Example 1: Writing a Single Byte
This example code is designed to establish a secure HTTPS connection from an ESP32 microcontroller to a web server, specifically “www.httpbin.org,” and send an HTTP POST request byte-by-byte using ESP32 WiFiClient Library’s write method..
ATTENTION: The Root CA certificate has an expiration date. If this code fails to execute, acquire the most up-to-date Root CA certificate. To find out more details about how to acquire the Root CA certificate, please check out this link below:
How to Acquire the Root CA Certificate
/*
* Author: Avant Maker
* Date: February 24, 2025
* Version: 1.0
*
* Description: This example connects to www.httpbin.org
* securely and send a HTTP POST request byte-by-byte using
* ESP32 WiFiClient Library's write method.
* The server’s response is printed to the Serial monitor,
* proving the data was received.
*
* ATTENTION: The Root CA certificate has an expiration date.
* If this code fails to execute, acquire the most up-to-date
* Root CA certificate.
* To find out more details about how to acquire the Root CA
* certificate of www.httpbin.org, please check out this link below:
*
* https://avantmaker.com/references/esp32-arduino-core-index/esp32-wificlientsecure-library/how-to-acquire-the-root-ca-certificate/
*
* License: MIT
*
* Code Source: This example code is sourced from the Comprehensive
* Guide to the ESP32 Arduino Core Library, accessible on
* AvantMaker.com. For additional code examples and in-depth
* documentation related to the ESP32 Arduino Core Library,
* please visit:
*
* https://avantmaker.com/references/esp32-arduino-core-index/
*
* AvantMaker.com, your premier destination for all things
* DIY, AI, IoT, Smart Home, and STEM projects. We are dedicated
* to empowering makers, learners, and enthusiasts with the resources
* they need to bring their innovative ideas to life.
*/
#include <WiFi.h>
#include <NetworkClientSecure.h>
const char* ssid = "your-SSID"; // Replace with your Wi-Fi SSID
const char* password = "your-PASSWORD"; // Replace with your Wi-Fi password
const char* host = "www.httpbin.org";
const int port = 443;
// Root CA certificate for www.httpbin.org (update with your server's CA if different)
const char* rootCACert = R"literal(
-----BEGIN CERTIFICATE-----
MIIEXjCCA0agAwIBAgITB3MSSkvL1E7HtTvq8ZSELToPoTANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTIyMDgyMzIyMjUzMFoXDTMwMDgyMzIyMjUzMFowPDEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEcMBoGA1UEAxMTQW1hem9uIFJT
QSAyMDQ4IE0wMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtDGMZa
qHneKei1by6+pUPPLljTB143Si6VpEWPc6mSkFhZb/6qrkZyoHlQLbDYnI2D7hD0
sdzEqfnuAjIsuXQLG3A8TvX6V3oFNBFVe8NlLJHvBseKY88saLwufxkZVwk74g4n
WlNMXzla9Y5F3wwRHwMVH443xGz6UtGSZSqQ94eFx5X7Tlqt8whi8qCaKdZ5rNak
+r9nUThOeClqFd4oXych//Rc7Y0eX1KNWHYSI1Nk31mYgiK3JvH063g+K9tHA63Z
eTgKgndlh+WI+zv7i44HepRZjA1FYwYZ9Vv/9UkC5Yz8/yU65fgjaE+wVHM4e/Yy
C2osrPWE7gJ+dXMCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYD
VR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNV
HQ4EFgQUwDFSzVpQw4J8dHHOy+mc+XrrguIwHwYDVR0jBBgwFoAUhBjMhTTsvAyU
lC4IWZzHshBOCggwewYIKwYBBQUHAQEEbzBtMC8GCCsGAQUFBzABhiNodHRwOi8v
b2NzcC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbTA6BggrBgEFBQcwAoYuaHR0cDov
L2NydC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbS9yb290Y2ExLmNlcjA/BgNVHR8E
ODA2MDSgMqAwhi5odHRwOi8vY3JsLnJvb3RjYTEuYW1hem9udHJ1c3QuY29tL3Jv
b3RjYTEuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMA0GCSqGSIb3DQEBCwUAA4IB
AQAtTi6Fs0Azfi+iwm7jrz+CSxHH+uHl7Law3MQSXVtR8RV53PtR6r/6gNpqlzdo
Zq4FKbADi1v9Bun8RY8D51uedRfjsbeodizeBB8nXmeyD33Ep7VATj4ozcd31YFV
fgRhvTSxNrrTlNpWkUk0m3BMPv8sg381HhA6uEYokE5q9uws/3YkKqRiEz3TsaWm
JqIRZhMbgAfp7O7FUwFIb7UIspogZSKxPIWJpxiPo3TcBambbVtQOcNRWz5qCQdD
slI2yayq0n2TXoHyNCLEH8rpsJRVILFsg0jc7BaFrMnF462+ajSehgj12IidNeRN
4zl+EoNaWdpnWndvSpAEkq2P
-----END CERTIFICATE-----
)literal";
// Optional: Add client certificate and key for mutual TLS if needed
// const char* clientCertKey = "";
// const char* clientCert = "";
NetworkClientSecure secureClient;
void setup() {
Serial.begin(115200);
// Connect Wifi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
// set ROOT CA Cert
secureClient.setCACert(rootCACert);
// Establish secure connection to server
if (secureClient.connect(host, port)) {
Serial.println("Connected to server");
// Define the POST request
const char* request = "POST /post HTTP/1.1\r\n"
"Host: www.httpbin.org\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 27\r\n"
"Connection: close\r\n"
"\r\n"
"AvantMaker=Hello from ESP32";
size_t bytesWritten = 0;
for (int i = 0; i < strlen(request); i++) {
bytesWritten += secureClient.write(request[i]);
}
Serial.print("Total bytes written: ");
Serial.println(bytesWritten);
// Wait for and display server response
delay(1000); // Give server time to respond
Serial.println("Server response:");
while (secureClient.available()) {
char c = secureClient.read();
Serial.write(c);
}
// Close connection
secureClient.stop();
Serial.println("\nConnection closed");
} else {
Serial.println("Connection failed. Check code description for solution.");
}
}
void loop() {
}
Example 2: Writing a Buffer of Bytes
This example is designed to establish a secure HTTPS connection from an ESP32 microcontroller to a web server, specifically “www.httpbin.org,” and send a full HTTP POST request to www.httpbin.org
using a buffer of bytes, showcasing how to use ESP32 WiFIClientSecure Library’s write method to transmit structured data.
ATTENTION: The Root CA certificate has an expiration date. If this code fails to execute, acquire the most up-to-date Root CA certificate. To find out more details about how to acquire the Root CA certificate of www.httpbin.org, please check out this link below:
How to Acquire the Root CA Certificate
/*
* Author: Avant Maker
* Date: February 24, 2025
* Version: 1.0
*
* Description: This example is designed to establish a
* secure HTTPS connection from an ESP32 microcontroller
* to a web server and send a full HTTP POST request to
* using a buffer of bytes, showcasing how to use
* ESP32 WiFIClientSecure Library's write method to
* transmit structured data.
*
* ATTENTION: The Root CA certificate has an expiration date.
* If this code fails to execute, acquire the most up-to-date
* Root CA certificate.
* To find out more details about how to acquire the Root CA
* certificate of www.httpbin.org, please check out this link below:
*
* https://avantmaker.com/references/esp32-arduino-core-index/esp32-wificlientsecure-library/how-to-acquire-the-root-ca-certificate/
*
* License: MIT
*
* Code Source: This example code is sourced from the Comprehensive
* Guide to the ESP32 Arduino Core Library, accessible on
* AvantMaker.com. For additional code examples and in-depth
* documentation related to the ESP32 Arduino Core Library,
* please visit:
*
* https://avantmaker.com/references/esp32-arduino-core-index/
*
* AvantMaker.com, your premier destination for all things
* DIY, AI, IoT, Smart Home, and STEM projects. We are dedicated
* to empowering makers, learners, and enthusiasts with the resources
* they need to bring their innovative ideas to life.
*/
#include <WiFi.h>
#include <NetworkClientSecure.h>
const char* ssid = "your-SSID"; // Replace with your Wi-Fi SSID
const char* password = "your-PASSWORD"; // Replace with your Wi-Fi password
const char* host = "www.httpbin.org";
const int port = 443;
// Root CA certificate for www.httpbin.org (update with your server's CA if different)
const char* rootCACert = R"literal(
-----BEGIN CERTIFICATE-----
MIIEXjCCA0agAwIBAgITB3MSSkvL1E7HtTvq8ZSELToPoTANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTIyMDgyMzIyMjUzMFoXDTMwMDgyMzIyMjUzMFowPDEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEcMBoGA1UEAxMTQW1hem9uIFJT
QSAyMDQ4IE0wMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtDGMZa
qHneKei1by6+pUPPLljTB143Si6VpEWPc6mSkFhZb/6qrkZyoHlQLbDYnI2D7hD0
sdzEqfnuAjIsuXQLG3A8TvX6V3oFNBFVe8NlLJHvBseKY88saLwufxkZVwk74g4n
WlNMXzla9Y5F3wwRHwMVH443xGz6UtGSZSqQ94eFx5X7Tlqt8whi8qCaKdZ5rNak
+r9nUThOeClqFd4oXych//Rc7Y0eX1KNWHYSI1Nk31mYgiK3JvH063g+K9tHA63Z
eTgKgndlh+WI+zv7i44HepRZjA1FYwYZ9Vv/9UkC5Yz8/yU65fgjaE+wVHM4e/Yy
C2osrPWE7gJ+dXMCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYD
VR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNV
HQ4EFgQUwDFSzVpQw4J8dHHOy+mc+XrrguIwHwYDVR0jBBgwFoAUhBjMhTTsvAyU
lC4IWZzHshBOCggwewYIKwYBBQUHAQEEbzBtMC8GCCsGAQUFBzABhiNodHRwOi8v
b2NzcC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbTA6BggrBgEFBQcwAoYuaHR0cDov
L2NydC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbS9yb290Y2ExLmNlcjA/BgNVHR8E
ODA2MDSgMqAwhi5odHRwOi8vY3JsLnJvb3RjYTEuYW1hem9udHJ1c3QuY29tL3Jv
b3RjYTEuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMA0GCSqGSIb3DQEBCwUAA4IB
AQAtTi6Fs0Azfi+iwm7jrz+CSxHH+uHl7Law3MQSXVtR8RV53PtR6r/6gNpqlzdo
Zq4FKbADi1v9Bun8RY8D51uedRfjsbeodizeBB8nXmeyD33Ep7VATj4ozcd31YFV
fgRhvTSxNrrTlNpWkUk0m3BMPv8sg381HhA6uEYokE5q9uws/3YkKqRiEz3TsaWm
JqIRZhMbgAfp7O7FUwFIb7UIspogZSKxPIWJpxiPo3TcBambbVtQOcNRWz5qCQdD
slI2yayq0n2TXoHyNCLEH8rpsJRVILFsg0jc7BaFrMnF462+ajSehgj12IidNeRN
4zl+EoNaWdpnWndvSpAEkq2P
-----END CERTIFICATE-----
)literal";
// Optional: Add client certificate and key for mutual TLS if needed
// const char* clientCertKey = "";
// const char* clientCert = "";
NetworkClientSecure secureClient;
void setup() {
Serial.begin(115200);
// Connect Wifi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
// set ROOT CA Cert
secureClient.setCACert(rootCACert);
// Establish secure connection to server
if (secureClient.connect(host, port)) {
Serial.println("Connected to server");
// Define the POST request
const char* request = "POST /post HTTP/1.1\r\n"
"Host: www.httpbin.org\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 27\r\n"
"Connection: close\r\n"
"\r\n"
"AvantMaker=Hello from ESP32";
// Send POST request
secureClient.write((const uint8_t*)request, strlen(request));
// Wait for and display server response
delay(1000); // Give server time to respond
Serial.println("Server response:");
while (secureClient.available()) {
char c = secureClient.read();
Serial.write(c);
}
// Close connection
secureClient.stop();
Serial.println("\nConnection closed");
} else {
Serial.println("Connection failed. Check code description for solution.");
}
}
void loop() {
}
Example 3: Writing PROGMEM Data
This example stores an POST request in PROGMEM and sends it to www.httpbin.org
, demonstrating secure and RAM-efficient data transmission with ESP32 WiFIClientSecure Library’s write method.
This example is designed to establish a secure HTTPS connection from an ESP32 microcontroller to a web server, specifically “www.httpbin.org,” and send a full HTTP POST request to www.httpbin.org
using a buffer of bytes, showcasing how to use ESP32 WiFIClientSecure Library’s write method to transmit structured data.
ATTENTION: The Root CA certificate has an expiration date. If this code fails to execute, acquire the most up-to-date Root CA certificate. To find out more details about how to acquire the Root CA certificate of www.httpbin.org, please check out this link below:
How to Acquire the Root CA Certificate
/*
* Author: Avant Maker
* Date: February 24, 2025
* Version: 1.0
*
* Description: This example stores an POST request in
* PROGMEM and sends it to www.httpbin.org, demonstrating
* secure and RAM-efficient data transmission with
* ESP32 WiFIClientSecure Library's write method.
*
* ATTENTION: The Root CA certificate has an expiration date.
* If this code fails to execute, acquire the most up-to-date
* Root CA certificate.
* To find out more details about how to acquire the Root CA
* certificate of www.httpbin.org, please check out this link below:
*
* https://avantmaker.com/references/esp32-arduino-core-index/esp32-wificlientsecure-library/how-to-acquire-the-root-ca-certificate/
*
* License: MIT
*
* Code Source: This example code is sourced from the Comprehensive
* Guide to the ESP32 Arduino Core Library, accessible on
* AvantMaker.com. For additional code examples and in-depth
* documentation related to the ESP32 Arduino Core Library,
* please visit:
*
* https://avantmaker.com/references/esp32-arduino-core-index/
*
* AvantMaker.com, your premier destination for all things
* DIY, AI, IoT, Smart Home, and STEM projects. We are dedicated
* to empowering makers, learners, and enthusiasts with the resources
* they need to bring their innovative ideas to life.
*/
#include <WiFi.h>
#include <NetworkClientSecure.h>
const char* ssid = "your-SSID"; // Replace with your Wi-Fi SSID
const char* password = "your-PASSWORD"; // Replace with your Wi-Fi password
const char* host = "www.httpbin.org";
const int port = 443;
// Root CA certificate for www.httpbin.org (update with your server's CA if different)
const char* rootCACert = R"literal(
-----BEGIN CERTIFICATE-----
MIIEXjCCA0agAwIBAgITB3MSSkvL1E7HtTvq8ZSELToPoTANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTIyMDgyMzIyMjUzMFoXDTMwMDgyMzIyMjUzMFowPDEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEcMBoGA1UEAxMTQW1hem9uIFJT
QSAyMDQ4IE0wMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtDGMZa
qHneKei1by6+pUPPLljTB143Si6VpEWPc6mSkFhZb/6qrkZyoHlQLbDYnI2D7hD0
sdzEqfnuAjIsuXQLG3A8TvX6V3oFNBFVe8NlLJHvBseKY88saLwufxkZVwk74g4n
WlNMXzla9Y5F3wwRHwMVH443xGz6UtGSZSqQ94eFx5X7Tlqt8whi8qCaKdZ5rNak
+r9nUThOeClqFd4oXych//Rc7Y0eX1KNWHYSI1Nk31mYgiK3JvH063g+K9tHA63Z
eTgKgndlh+WI+zv7i44HepRZjA1FYwYZ9Vv/9UkC5Yz8/yU65fgjaE+wVHM4e/Yy
C2osrPWE7gJ+dXMCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYD
VR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNV
HQ4EFgQUwDFSzVpQw4J8dHHOy+mc+XrrguIwHwYDVR0jBBgwFoAUhBjMhTTsvAyU
lC4IWZzHshBOCggwewYIKwYBBQUHAQEEbzBtMC8GCCsGAQUFBzABhiNodHRwOi8v
b2NzcC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbTA6BggrBgEFBQcwAoYuaHR0cDov
L2NydC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbS9yb290Y2ExLmNlcjA/BgNVHR8E
ODA2MDSgMqAwhi5odHRwOi8vY3JsLnJvb3RjYTEuYW1hem9udHJ1c3QuY29tL3Jv
b3RjYTEuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMA0GCSqGSIb3DQEBCwUAA4IB
AQAtTi6Fs0Azfi+iwm7jrz+CSxHH+uHl7Law3MQSXVtR8RV53PtR6r/6gNpqlzdo
Zq4FKbADi1v9Bun8RY8D51uedRfjsbeodizeBB8nXmeyD33Ep7VATj4ozcd31YFV
fgRhvTSxNrrTlNpWkUk0m3BMPv8sg381HhA6uEYokE5q9uws/3YkKqRiEz3TsaWm
JqIRZhMbgAfp7O7FUwFIb7UIspogZSKxPIWJpxiPo3TcBambbVtQOcNRWz5qCQdD
slI2yayq0n2TXoHyNCLEH8rpsJRVILFsg0jc7BaFrMnF462+ajSehgj12IidNeRN
4zl+EoNaWdpnWndvSpAEkq2P
-----END CERTIFICATE-----
)literal";
// Optional: Add client certificate and key for mutual TLS if needed
// const char* clientCertKey = "";
// const char* clientCert = "";
// Store request in PROGMEM
const char request[] PROGMEM = "POST /post HTTP/1.1\r\n"
"Host: www.httpbin.org\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 27\r\n"
"Connection: close\r\n"
"\r\n"
"AvantMaker=Hello from ESP32";
NetworkClientSecure secureClient;
void setup() {
Serial.begin(115200);
// Connect Wifi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
// set ROOT CA Cert
secureClient.setCACert(rootCACert);
// Establish secure connection to server
if (secureClient.connect(host, port)) {
Serial.println("Connected to server");
// Send PROGMEM request data
size_t bytesWritten = secureClient.write_P(request, strlen_P(request));
Serial.print("Bytes written: ");
Serial.println(bytesWritten);
// Wait for and display server response
delay(1000); // Wait for response
while (secureClient.available()) {
Serial.write(secureClient.read());
}
// Close connection
secureClient.stop();
Serial.println("\nConnection closed");
} else {
Serial.println("Connection failed. Check code description for solution.");
}
}
void loop() {
}
ESP32 Library Index
- ESP32 WiFi Library
- ESP32 WiFiClient Library
- ESP32 HTTPClient Library
- ESP32 WebServer Library
- ESP32 AsyncUDP Librarry
- ESP32 WiFiClientSecure Library
- Connection
- Data Sending
- Data Receiving
- Which ESP32 Boards are Recommended for Learners
- How to Copy Codes from AvantMaker.com
- What is SPIFFS and how to upload files to it?
- What is LIttleFS and how to upload files to it?
Ready to experiment and explore more about ESP32? Visit our website’s All About ESP32 Resources Hub, packed with tutorials, guides, and tools to inspire your maker journey. Experiment, explore, and elevate your skills with everything you need to master this powerful microcontroller platform!