Skip to content

Commit 78f66fa

Browse files
committed
chore: fix broken or outdated links
1 parent 6c94e56 commit 78f66fa

File tree

40 files changed

+115
-89
lines changed

40 files changed

+115
-89
lines changed

.lycheeignore

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ https://www.digikey.cn
2121
https://www.instagram.com
2222
https://espressif.us15.list-manage.com
2323
https://code.visualstudio.com
24+
https://www.sqfmi.com/
2425

2526
# Domains periodically returning 500
2627
https://www.analog.com
@@ -34,3 +35,25 @@ socket://localhost
3435

3536
# Local links
3637
http://4.3.2.1
38+
39+
# Sites where fragments (#…) are added by JavaScript, so lychee can’t verify them
40+
https://products.espressif.com/
41+
https://github.com/
42+
43+
# Ingore local links
44+
file://
45+
46+
# Links returning 403 (need periodic manual status checks)
47+
https://wiki.mozilla.org/CA/Included_Certificates
48+
https://www.nordicsemi.com/Products/Development-hardware/Power-Profiler-Kit-2
49+
https://digilent.com/reference/pmod/start
50+
https://robu.in/product/espressif-esp32-c5-devkitc-1-n8r4-development-board/
51+
https://news.samsung.com/global/samsung-smartthings-integrates-matter-into-ecosystem-bringing-matter-device-control-to-multiple-samsung-products
52+
https://pubs.aip.org/aip/rsi/article-abstract/90/10/105101/360620/apex-A-new-commercial-off-the-shelf-on-board
53+
54+
# Other issues
55+
# Presence of spaces in urls
56+
https://swaggerapis.rainmaker.espressif.com/
57+
https://csa-iot.org/certification/paa/#:~:text=trust%40dreamsecurity.com-,Espressif%20Systems
58+
https://en.wikipedia.org/wiki/Economics_of_coffee#:~:text=Over%202.25%20billion%20cups%20of,coffee%20for%20a%20living%20worldwide
59+
https://www.integrasources.com/blog/basics-of-pid-controllers-design-applications/#:~:text=In%20simple%20terms%2C%20the%20PID,variable%20into%20the%20acceptable%20range

content/blog/2024/12/zephyr-how-to-use-psram/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -867,7 +867,7 @@ In addition to these three strategies, it is also possible to leverage PSRAM to
867867
- [Getting Started Guide](https://docs.zephyrproject.org/latest/develop/getting_started/index.html)
868868
- Supported Boards and Shields
869869
- [Espressif](https://docs.zephyrproject.org/latest/boards/espressif/index.html)
870-
- [ESP32-DevKitC-WROVER](https://docs.zephyrproject.org/latest/boards/espressif/esp32_devkitc_wrover/doc/index.html)
870+
- [ESP32-DevKitC-WROVER](https://docs.zephyrproject.org/4.1.0/boards/espressif/esp32_devkitc_wrover/doc/index.html)
871871
- [ESP32-S2-DevKitC](https://docs.zephyrproject.org/latest/boards/espressif/esp32s2_devkitc/doc/index.html)
872872
- [ESP32-S3-DevKitC-1](https://docs.zephyrproject.org/latest/boards/espressif/esp32s3_devkitc/doc/index.html)
873873
- [Shared Multi Heap](https://docs.zephyrproject.org/latest/kernel/memory_management/shared_multi_heap.html)

content/blog/2025/02/rainmaker-over-thread/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Additional benefits of using ESP RainMaker over Thread devices are:
4242
- Direct point-to-point communication with the cloud, enabling direct remote control and device management such as cloud-based fleet management and OTA.
4343
- Easy and secure network configuration with local and remote device control using phone apps.
4444
- Compatibility with any Thread Border Routers that support NAT64, such as Apple HomePod and [Espressif's Thread Border Router solution](https://developer.espressif.com/blog/espressif-thread-border-router/).
45-
- Supports a wide range of [smart home device types](https://rainmaker.espressif.com/docs/standard-types/#devices), enabling rapid productization of Thread-based products.
45+
- Supports a wide range of [smart home device types](https://docs.rainmaker.espressif.com/docs/product_overview/concepts/terminologies#devices), enabling rapid productization of Thread-based products.
4646

4747
Thread device provisioning and control in the ESP RainMaker app:
4848

content/blog/2025/02/rust-esp-hal-beta/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ If you're a company using (or considering) Rust on our chips, please do contact
151151
[the tracking issue]: https://github.com/espressif/llvm-project/issues/4
152152
[espflash]: https://github.com/esp-rs/espflash
153153
[esp-hal]: https://github.com/esp-rs/esp-hal/tree/main/esp-hal
154-
[esp-wifi]: https://github.com/esp-rs/esp-hal/tree/main/esp-wifi
154+
[esp-wifi]: https://github.com/esp-rs/esp-hal/tree/main/esp-radio
155155
[ESP-NOW]: https://www.espressif.com/en/solutions/low-power-solutions/esp-now
156156
[xtensa-lx and xtensa-lx-rt]: https://github.com/esp-rs/esp-hal/tree/main/xtensa-lx-rt
157157
[esp-generate]: https://github.com/esp-rs/esp-generate

content/blog/2025/03/security-in-esp-rainmaker/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Secure storage refers to the application-specific data that can be stored in a s
3939

4040
ESP-IDF provides the NVS (Non-Volatile Storage) management component which allows encrypted data partitions. This feature is tied with the platform Flash Encryption feature described earlier.
4141

42-
Please refer to [NVS Encryption](hhttps://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/storage/nvs_flash.html#nvs-encryption) for detailed documentation on the working and instructions to enable this feature.
42+
Please refer to [NVS Encryption](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/storage/nvs_flash.html#nvs-encryption) for detailed documentation on the working and instructions to enable this feature.
4343

4444
In the ESP RainMaker context, each device has a unique key-certificate pair that helps the device identify itself to the ESP RainMaker cloud. We utilize the encrypted storage to store this information, to protect it from getting cloned across devices.
4545

@@ -75,7 +75,7 @@ Before finalizing the images on the device, the devices perform a signature veri
7575

7676
#### Secure Signing
7777

78-
As mentioned earlier in the section for [Secure Boot](#secure-boot), ESP RainMaker makes it easier to manage OTA for devices with secure boot enabled. You can select appropriate signing key while creating an OTA Job. With the "Auto select key" option as mentioned [here](https://rainmaker.espressif.com/docs/secure-signing#ota-upgrades), even selecting the key is not required as the cloud backend can automatically choose the correct key as per the information reported in the node config and send a signed image during OTA.
78+
As mentioned earlier in the section for [Secure Boot](#secure-boot), ESP RainMaker makes it easier to manage OTA for devices with secure boot enabled. You can select appropriate signing key while creating an OTA Job. With the "Auto select key" option as mentioned [here](https://docs.rainmaker.espressif.com/docs/dev/firmware/fw_usage_guides/secure-signing#ota-upgrades), even selecting the key is not required as the cloud backend can automatically choose the correct key as per the information reported in the node config and send a signed image during OTA.
7979

8080
#### Application Rollback
8181

content/blog/2025/04/soft-ap-tutorial/index.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ Before starting this tutorial, ensure that you
6363
- Can compile and flash the [`hello_world`](https://github.com/espressif/esp-idf/tree/master/examples/get-started/hello_world) example. Two main methods followed below are using `idf.py` directly (CLI approach) or using the VS Code ESP-IDF Extension. If required, you can follow the instructions in the [ESP-IDF Getting Started](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/get-started/index.html) guide.
6464
- Have an Espressif evaluation board or another compatible board for flashing the code. In this tutorial we will use the [ESP32-C3-DevkitM-1](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c3/esp32-c3-devkitm-1/user_guide.html) but any Espressif evaluation board will work just as well. If you built your own board, you might need an [ESP-PROG](https://docs.espressif.com/projects/esp-iot-solution/en/latest/hw-reference/ESP-Prog_guide.html) programmer.
6565
- Understand the difference between a Wi-Fi access point and a Wi-Fi station.
66-
- (Optional) Have a basic knowledge of the [logging system](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/log.html#how-to-use-logging-library) in Espressif.
66+
- (Optional) Have a basic knowledge of the [logging system](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/log.html#use-logging-library) in Espressif.
6767

68-
If you're not quite comfortable with any of the above steps yet, consider checking out the [ESP-IDF with ESP32-C6 Workshop](https://preview-developer.espressif.com/pr404/workshops/esp-idf-with-esp32-c6/). These resources can help you get hands-on experience with setup, flashing, and basic debugging before diving into this tutorial.
68+
If you're not quite comfortable with any of the above steps yet, consider checking out the [ESP-IDF with ESP32-C6 Workshop](../../../../workshops/esp-idf-with-esp32-c6/). These resources can help you get hands-on experience with setup, flashing, and basic debugging before diving into this tutorial.
6969

7070

7171
## Starting a new project from `hello_world`
@@ -323,7 +323,7 @@ void wifi_init_softap()
323323
}
324324
```
325325

326-
`ESP_LOGI` is a logging command which prints an information message on the terminal. If you're unsure about it, check the [logging library documentation](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/log.html#how-to-use-logging-library).
326+
`ESP_LOGI` is a logging command which prints an information message on the terminal. If you're unsure about it, check the [logging library documentation](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/log.html#use-logging-library).
327327

328328
### Handle Wi-Fi Events
329329

@@ -389,4 +389,4 @@ This serves as a foundation for building more advanced Wi-Fi applications, such
389389
390390
### Next step
391391
392-
> _Next Step_: Check the [basic http tutorial](/blog/2025/06/basic_http_server/)
392+
> _Next Step_: Check the [basic http tutorial](/blog/2025/06/basic_http_server/)

content/blog/2025/06/basic_http_server/index.md

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ date: "2025-06-26"
44
showAuthor: false
55
summary: "This article shows how to create a simple HTTP server. It explains the functions you need and the setup required. After reading this, you should be able to create your own HTTP server on Espressif devices."
66
authors:
7-
- "francesco-bez"
7+
- "francesco-bez"
88
tags: ["ESP32C3", "HTTP", "Connectivity"]
99
---
1010

11-
## Introduction
11+
## Introduction
1212

1313
This article is Part 2 of our [soft-AP tutorial](/blog/2025/04/soft-ap-tutorial/). If you're unfamiliar with what a soft-AP is or how to set one up, we recommend starting with the [Part 1](/blog/2025/04/soft-ap-tutorial/).
1414

15-
In this part, the main source file will be called `basic_http_server.c`. If you're starting here, you can use the same main filename, while if you're coming from Part 1, there is no need to change it. Just keep in mind that when you read `basic_http_server.c` we're talking about your `basic_soft_ap.c`.
16-
15+
In this part, the main source file will be called `basic_http_server.c`. If you're starting here, you can use the same main filename, while if you're coming from Part 1, there is no need to change it. Just keep in mind that when you read `basic_http_server.c` we're talking about your `basic_soft_ap.c`.
16+
1717
You can find the complete code in the `tutorial-http-server` folder in this [GitHub repository](https://github.com/FBEZ-docs-and-templates/devrel-tutorials-code/tree/main/tutorial-http-server).
1818

1919
In this tutorial, we'll walk through the following steps:
@@ -126,7 +126,7 @@ httpd_handle_t start_webserver() {
126126
}
127127
```
128128

129-
This makes your server setup more robust and easier to debug. If you're unsure about `ESP_LOGI` and `ESP_LOGE` macros, you can check Espressif's [loggin library documentation](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/log.html#how-to-use-logging-library).
129+
This makes your server setup more robust and easier to debug. If you're unsure about `ESP_LOGI` and `ESP_LOGE` macros, you can check Espressif's [loggin library documentation](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/log.html#use-logging-library).
130130

131131

132132
## HTTP URI Management
@@ -204,7 +204,7 @@ caption="Fig.2 - URI registration and management overview"
204204

205205
To register a route, we use the function:
206206

207-
```c
207+
```c
208208
esp_err_t httpd_register_uri_handler(httpd_handle_t server,
209209
const httpd_uri_t *hello_world_uri);
210210
```
@@ -213,15 +213,15 @@ This function requires the server handle (in our case the variable `server`) and
213213
214214
The `httpd_uri_t` structure defines the properties of the URI being registered.
215215
216-
For our example, the structure is defined as follows:
216+
For our example, the structure is defined as follows:
217217
```c
218218
219219
static const httpd_uri_t hello_world_uri= {
220220
.uri = "/", // the address at which the resource can be found
221221
.method = HTTP_GET, // The HTTP method (HTTP_GET, HTTP_POST, ...)
222222
.handler = hello_get_handler, // The function which process the request
223223
.user_ctx = NULL // Additional user data for context
224-
};
224+
};
225225
```
226226

227227
<!-- All fields are self explanatory except for the last one. User data can be useful to -->
@@ -230,7 +230,7 @@ The last piece we need is the request handler function, which must follow this s
230230
```c
231231
static esp_err_t processing_function (httpd_req_t)
232232
```
233-
In our simple example, the function looks like this.
233+
In our simple example, the function looks like this.
234234
235235
```c
236236
static esp_err_t hello_get_handler(httpd_req_t *req)
@@ -243,16 +243,16 @@ static esp_err_t hello_get_handler(httpd_req_t *req)
243243
```
244244
Note the embedded HTML in the response string.
245245
We use `httpd_resp_send` to send the response. This function takes the request object and the response string.
246-
<!--
246+
<!--
247247
{{< alert icon="lightbulb" iconColor="#179299" cardColor="#9cccce">}}
248248
Since the response is a string, you can return HTML, JSON, or plain text with no difference in usage.
249249
{{< /alert >}} -->
250250

251251
Your code should now resemble [this one](https://github.com/FBEZ-docs-and-templates/devrel-tutorials-code/blob/main/tutorial-http-server/main/basic_http_server.c).
252252

253-
## View the web page in the browser
253+
## View the web page in the browser
254254

255-
Open the web browser again on your connected device and enter the IP address in the address bar. As shown in Fig.3, you should now get the HTML page that we sent in the `hello_get_handler` function.
255+
Open the web browser again on your connected device and enter the IP address in the address bar. As shown in Fig.3, you should now get the HTML page that we sent in the `hello_get_handler` function.
256256

257257
{{< figure
258258
default=true
@@ -261,7 +261,7 @@ height=100
261261
caption="Fig. 3 – HTML page displayed"
262262
>}}
263263
264-
You can now change the HTML and add additional routes.
264+
You can now change the HTML and add additional routes.
265265

266266
## Conclusion
267267

@@ -270,5 +270,3 @@ You've now set up a basic HTTP server on your Espressif device in soft-AP mode.
270270
This forms a solid foundation for building more interactive web-based interfaces on your device. You can now easily expand by adding more routes, returning different data formats, or handling user input.
271271

272272
Check out the full example on [GitHub](https://github.com/FBEZ-docs-and-templates/devrel-tutorials-code/tree/main/tutorial-http-server), and keep experimenting!
273-
274-

content/blog/2025/07/faster-device-restoration/index.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@ In this post, we examine the ESP-IDF boot-up flow and highlight strategies to **
2828

2929
The ESP-IDF boot process consists of multiple stages that ensure secure and reliable startup:
3030

31-
1. **First-Stage Bootloader (ROM Bootloader):**
31+
1. **First-Stage Bootloader (ROM Bootloader):**
3232
- Initializes basic components and loads the second-stage bootloader from flash (basic read mode).
3333
- Performs SHA-256 hash validation of the bootloader image. If Secure Boot is enabled, digital signature verification (e.g., RSA or ECDSA) is also done.
3434

35-
2. **Second-Stage Bootloader:**
35+
2. **Second-Stage Bootloader:**
3636
- Stored in flash and performs more advanced tasks like clock and peripheral initialization (e.g., flash quad mode).
3737
- Verifies the application image’s integrity using a SHA-256 hash and, if Secure Boot is enabled, cryptographic signature checks.
3838

39-
3. **Application Execution:**
39+
3. **Application Execution:**
4040
- Once verified, control is passed to the application image.
4141

4242
This flow ensures system integrity and protection, but adds latency — particularly as the size of the application image increases.
@@ -73,8 +73,8 @@ Let's see how the default device restoration time looks like with 2MB applicatio
7373

7474
ESP-IDF also provides configuration options to **skip application image integrity checks** - only for Secure Boot disabled cases. These options include:
7575

76-
- [`CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS`](https://docs.espressif.com/projects/esp-idf/en/latest/kconfig.html#config-bootloader-skip-validate-always)
77-
- [`CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON`](https://docs.espressif.com/projects/esp-idf/en/latest/kconfig.html#config-bootloader-skip-validate-on-power-on)
76+
- [`CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS`](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/kconfig-reference.html#config-bootloader-skip-validate-always)
77+
- [`CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON`](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/kconfig-reference.html#config-bootloader-skip-validate-on-power-on)
7878

7979
These options can reduce boot time by avoiding application integrity step. However, **this approach is not recommended** in most production use-cases, as it could **mask potential flash corruption** and lead to the execution of tampered or damaged firmware. For safety and reliability, it is advisable to keep all integrity checks enabled.
8080

@@ -133,7 +133,7 @@ However, if you include additional device driver code, ensure the total size fit
133133

134134
## Practical Example and Benchmark
135135

136-
We created a demo application to test and validate the bootloader NVS restoration method. You can find the source code here:
136+
We created a demo application to test and validate the bootloader NVS restoration method. You can find the source code here:<br>
137137
👉 [Example: Faster Device State Restoration](https://github.com/Harshal5/esp-idf-faster-device-state-restoration-example)
138138

139139
The project simulates a lighting product where the last known state is restored during the bootloader stage.
@@ -171,4 +171,3 @@ To reduce device boot time:
171171
This method provides the best of both worlds — **faster restoration** without sacrificing **security or reliability**.
172172

173173
---
174-

content/blog/2025/08/adc-performance/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ As you can see from the graphs presented above, some SoCs do not support full-sc
235235

236236
## Noise Impact
237237

238-
Noise can affect ADC measurements, causing variations between readings of the same input voltage. The [documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc_calibration.html#minimize-noise) recommends connecting a bypass capacitor (e.g., a 100 nF ceramic capacitor) to the ADC input pad to minimize noise. In addition, the technique of multisampling can further reduce the impact of noise.
238+
Noise can affect ADC measurements, causing variations between readings of the same input voltage. The [documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc/adc_calibration.html#minimize-noise) recommends connecting a bypass capacitor (e.g., a 100 nF ceramic capacitor) to the ADC input pad to minimize noise. In addition, the technique of multisampling can further reduce the impact of noise.
239239

240240
## Temperature Drift
241241

0 commit comments

Comments
 (0)