This document lists errors discovered after the publication of the book. If you find an error that is not listed here, please open an issue in this repository.
Listing 3-15 does not match the https-get example. The listing leaves out the port property in the dictionary passed to the Request constructor; it should be as follows:
let request = new Request({
host: "www.example.com",
path: "/",
response: String,
Socket: SecureSocket,
port: 443
});Listing 3-21 returns String for the Server.status message instead of the Server.headersComplete message. The full corrected listing is as follows:
let server = new Server;
server.callback = function(msg, value, etc) {
switch (msg) {
case Server.status:
if ("PUT" !== etc)
this.close();
return;
case Server.headersComplete:
return String;
case Server.requestComplete:
this.json = {
error: "none",
when: (new Date).toString(),
request: JSON.parse(value)
};
break;
case Server.prepareResponse:
return {
headers: ["Content-Type", "application/json"],
body: JSON.stringify(this.json)
};
}
}
To ask the HTTP
Serverclass to deliver the request body in fragments, the callback returnstrueto theprepareRequestmessage.
This sentence is incorrect. The callback returns true to the headersComplete message, not the prepareRequest message.
In addition, Listing 3-22 does not match the https-server-streaming-put example. The listing uses quotation marks instead of backticks in the first trace statement and the prepareRequest message instead of the headersComplete message; it should be as follows:
let server = new Server;
server.callback = function(msg, value) {
switch (msg) {
case Server.status:
trace(`\n ** begin upload to ${value} **\n`);
break;
case Server.headersComplete: // prepare for request body
return true; // provide request body in fragments
case Server.requestFragment:
trace(this.read(String));
break;
case Server.requestComplete:
trace("\n ** end of file **\n");
break;
}
}The websocket-client example originally connected to the server at echo.websocket.org. This service is no longer available, so the example now connects to websockets.chilkat.io.
This code snippet on page 169 no longer matches the websocket-client example:
let ws = new Client({
host: "echo.websocket.org"
});It should be as follows:
let ws = new Client({
host: "websockets.chilkat.io",
path: "/wsChilkatEcho.ashx"
});In addition, the following sentence is no longer accurate:
This process repeats indefinitely, with count increasing each time.
The server at websockets.chilkat.io limits each connection to a maximum of 16 echoed messages. After the 16th message, it disconnects from the client.
The Creating Two-Way Communication section explains how to use the Bluefruit mobile app to create a peripheral. However, the Bluefruit mobile app no longer has the Peripheral Mode feature described in the text, so the instructions in this section are no longer valid.
The text-server example may be used as a replacement if you have a second ESP32 device. To use this example, follow these steps:
-
Connect one of your ESP32 devices to your computer with a USB cable.
-
Install the
text-serverexample on the ESP32 usingmcconfig.cd $EXAMPLES/ch4-ble/text-server mcconfig -m -p esp32 -
Disconnect the first ESP32 and connect the other ESP32.
-
Install the
text-clientexample as described in the book. -
Connect the first ESP32 to a power source.
The devices will automatically pair, and the text-client will subscribe to notifications from the text-server as described. However, instead of typing in messages and manually sending them from your phone, the text-server app will automatically sends a message every second.
In this example, the second parameter to slice is incorrect.
let r1 = new Resource("myData.dat");
let values = new Uint16Array(r1.slice(32, 10, false));
The second parameter is the end position of the slice, not the byte length of the slice. The correct code is:
let r1 = new Resource("myData.dat");
let values = new Uint16Array(r1.slice(32, 32 + 10, false));
The Monitoring for Changes section does not provide the import statement for the Monitor class used in Listing 6-5.
import Monitor from "pins/digital/monitor";Figure 8-8 shows the same circle mask drawn in blue (which appears gray in printed versions of this book).
The comment in parentheses is incorrect. The book is published in color, though it was planned to be published in grayscale.