Cuộc phiêu lưu không dây ESP32-C3
Cuộc phiêu lưu không dây ESP32-C3
Hướng dẫn toàn diện về IoT
Hệ thống Espressif ngày 12 tháng 2023 năm XNUMX
Thông số kỹ thuật
- Sản phẩm: Cuộc phiêu lưu không dây ESP32-C3
- Nhà sản xuất: Espressif Systems
- Ngày: 12 tháng 2023 năm XNUMX
Hướng dẫn sử dụng sản phẩm
Sự chuẩn bị
Trước khi sử dụng ESP32-C3 Wireless Adventure, hãy đảm bảo bạn đã
quen thuộc với các khái niệm và kiến trúc của IoT. Điều này sẽ giúp
bạn hiểu cách thiết bị phù hợp với hệ sinh thái IoT lớn hơn
và các ứng dụng tiềm năng của nó trong nhà thông minh.
Giới thiệu và thực hành các dự án IoT
Trong phần này, bạn sẽ tìm hiểu về các dự án IoT điển hình,
bao gồm các module cơ bản dành cho các thiết bị IoT thông dụng, các module cơ bản
của các ứng dụng khách và nền tảng đám mây IoT phổ biến. Điều này sẽ
cung cấp cho bạn nền tảng để hiểu và sáng tạo
dự án IoT của riêng mình.
Thực hành: Dự án đèn thông minh
Trong dự án thực hành này, bạn sẽ học cách tạo ra một hệ thống thông minh
ánh sáng bằng cách sử dụng Cuộc phiêu lưu không dây ESP32-C3. Cấu trúc dự án,
chức năng, chuẩn bị phần cứng và quá trình phát triển sẽ được
được giải thích chi tiết.
Cấu trúc dự án
Dự án bao gồm một số hợp phần, trong đó có
Cuộc phiêu lưu không dây ESP32-C3, đèn LED, cảm biến và đám mây
phần sau.
Chức năng dự án
Dự án đèn thông minh cho phép bạn kiểm soát độ sáng và
màu sắc của đèn LED từ xa thông qua ứng dụng di động hoặc web
giao diện.
Chuẩn bị phần cứng
Để chuẩn bị cho dự án, bạn sẽ cần thu thập
các thành phần phần cứng cần thiết, chẳng hạn như ESP32-C3 Wireless
Bảng phiêu lưu, đèn LED, điện trở và nguồn điện.
Quá trình phát triển
Quá trình phát triển bao gồm việc thiết lập sự phát triển
môi trường, viết mã điều khiển đèn LED, kết nối với
phụ trợ đám mây và kiểm tra chức năng của thông minh
ánh sáng.
Giới thiệu về ESP RainMaker
ESP RainMaker là một framework mạnh mẽ để phát triển IoT
thiết bị. Trong phần này, bạn sẽ tìm hiểu ESP RainMaker là gì và
làm thế nào nó có thể được thực hiện trong các dự án của bạn.
ESP RainMaker là gì?
ESP RainMaker là một nền tảng dựa trên đám mây cung cấp một bộ
các công cụ và dịch vụ để xây dựng và quản lý các thiết bị IoT.
Triển khai ESP RainMaker
Phần này giải thích các thành phần khác nhau liên quan đến
triển khai ESP RainMaker, bao gồm cả dịch vụ yêu cầu bồi thường,
Đại lý RainMaker, chương trình phụ trợ đám mây và Ứng dụng khách RainMaker.
Thực hành: Những điểm chính để phát triển với ESP RainMaker
Trong phần thực hành này, bạn sẽ tìm hiểu về những điểm chính để
cân nhắc khi phát triển với ESP RainMaker. Điều này bao gồm thiết bị
xác nhận quyền sở hữu, đồng bộ hóa dữ liệu và quản lý người dùng.
Tính năng của ESP RainMaker
ESP RainMaker cung cấp nhiều tính năng khác nhau để quản lý người dùng, kết thúc
người dùng và quản trị viên. Những tính năng này cho phép thiết bị dễ dàng
thiết lập, điều khiển từ xa và giám sát.
Thiết lập môi trường phát triển
Phần này cung cấp một hơnview của ESP-IDF (Espressif IoT
Khung phát triển), là khung phát triển chính thức
cho các thiết bị dựa trên ESP32. Nó giải thích các phiên bản khác nhau của
ESP-IDF và cách thiết lập môi trường phát triển.
Phát triển phần cứng và trình điều khiển
Thiết kế phần cứng của sản phẩm đèn thông minh dựa trên ESP32-C3
Phần này tập trung vào thiết kế phần cứng của đèn thông minh
các sản phẩm dựa trên Cuộc phiêu lưu không dây ESP32-C3. Nó bao gồm
tính năng và thành phần của các sản phẩm đèn thông minh, cũng như
thiết kế phần cứng của hệ thống lõi ESP32-C3.
Tính năng và thành phần của sản phẩm đèn thông minh
Tiểu mục này giải thích các tính năng và thành phần tạo nên
sản phẩm đèn thông minh. Nó thảo luận về các chức năng khác nhau
và cân nhắc về thiết kế để tạo ra đèn thông minh.
Thiết kế phần cứng của hệ thống lõi ESP32-C3
Thiết kế phần cứng của hệ thống lõi ESP32-C3 bao gồm nguồn điện
nguồn điện, trình tự bật nguồn, thiết lập lại hệ thống, flash SPI, nguồn xung nhịp,
và cân nhắc về RF và ăng-ten. Tiểu mục này cung cấp
thông tin chi tiết về các khía cạnh này.
Câu hỏi thường gặp
Hỏi: ESP RainMaker là gì?
Trả lời: ESP RainMaker là nền tảng dựa trên đám mây cung cấp các công cụ
và các dịch vụ để xây dựng và quản lý các thiết bị IoT. Nó đơn giản hóa
quá trình phát triển và cho phép thiết lập thiết bị dễ dàng, điều khiển từ xa
kiểm soát, giám sát.
Hỏi: Làm cách nào tôi có thể thiết lập môi trường phát triển cho
ESP32-C3?
Trả lời: Để thiết lập môi trường phát triển cho ESP32-C3, bạn cần
để cài đặt ESP-IDF (Khung phát triển IoT của Espressif) và
cấu hình nó theo hướng dẫn được cung cấp. ESP-IDF là
khung phát triển chính thức cho các thiết bị dựa trên ESP32.
Hỏi: Các tính năng của ESP RainMaker là gì?
Trả lời: ESP RainMaker cung cấp nhiều tính năng khác nhau, bao gồm cả tính năng dành cho người dùng
quản lý, tính năng người dùng cuối và tính năng quản trị viên. Quản lý người dùng
cho phép xác nhận quyền sở hữu thiết bị và đồng bộ hóa dữ liệu dễ dàng. Người dùng cuối
các tính năng cho phép điều khiển thiết bị từ xa thông qua ứng dụng di động hoặc
web giao diện. Tính năng quản trị cung cấp công cụ giám sát thiết bị
và quản lý.
Cuộc phiêu lưu không dây ESP32-C3
Hướng dẫn toàn diện về IoT
Hệ thống Espressif ngày 12 tháng 2023 năm XNUMX
Nội dung
tôi chuẩn bị
1
1 Giới thiệu về IoT
3
1.1 Kiến trúc của IoT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Ứng dụng IoT trong Nhà thông minh. . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Giới thiệu và thực hành các dự án IoT
9
2.1 Giới thiệu các dự án IoT điển hình. . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1 Các mô-đun cơ bản cho các thiết bị IoT thông dụng. . . . . . . . . . . . . . . . . 9
2.1.2 Các mô-đun cơ bản của ứng dụng khách. . . . . . . . . . . . . . . . . . . 10
2.1.3 Giới thiệu về Nền tảng đám mây IoT phổ biến. . . . . . . . . . . . . . 11
2.2 Thực hành: Dự án đèn thông minh. . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.1 Cấu trúc dự án. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.2 Chức năng của dự án. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.3 Chuẩn bị phần cứng. . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.4 Quá trình phát triển. . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3 Giới thiệu về ESP RainMaker
19
3.1 ESP RainMaker là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 Triển khai ESP RainMaker. . . . . . . . . . . . . . . . . . . . . . 21
3.2.1 Dịch vụ yêu cầu bồi thường. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.2 Đại lý RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.3 Phần cuối của đám mây . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.4 Máy khách RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3 Thực hành: Những điểm chính để phát triển với ESP RainMaker. . . . . . . . . . . . 25
3.4 Tính năng của ESP RainMaker. . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4.1 Quản lý người dùng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4.2 Tính năng của người dùng cuối. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4.3 Tính năng quản trị . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.5 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4 Thiết lập môi trường phát triển
31
4.1 Kết thúc ESP-IDFview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1.1 Phiên bản ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3
4.1.2 Quy trình làm việc của ESP-IDF Git . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1.3 Chọn phiên bản phù hợp . . . . . . . . . . . . . . . . . . . . . . . . 34 4.1.4 Kết thúcview của Thư mục SDK ESP-IDF . . . . . . . . . . . . . . . . . . . . 34 4.2 Thiết lập môi trường phát triển ESP-IDF . . . . . . . . . . . . . . . . . 38 4.2.1 Thiết lập môi trường phát triển ESP-IDF trên Linux . . . . . . . . 38 4.2.2 Thiết lập Môi trường phát triển ESP-IDF trên Windows . . . . . . 40 4.2.3 Thiết lập môi trường phát triển ESP-IDF trên máy Mac . . . . . . . . . 45 4.2.4 Cài đặt Mã VS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.2.5 Giới thiệu về Môi trường phát triển của bên thứ ba . . . . . . . . 46 4.3 Hệ thống biên dịch ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.1 Các khái niệm cơ bản về hệ thống biên dịch. . . . . . . . . . . . . . . . . . 47 4.3.2 Dự án File Kết cấu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.3 Quy tắc xây dựng mặc định của hệ thống biên dịch . . . . . . . . . . . . . 50 4.3.4 Giới thiệu về Tập lệnh biên dịch . . . . . . . . . . . . . . . . . . 51 4.3.5 Giới thiệu các lệnh chung . . . . . . . . . . . . . . . . . . . 52 4.4 Thực hành: Biên dịch Example Chương trình “Blink” . . . . . . . . . . . . . . . . . . 53 4.4.1 Ví dụample Phân tích . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.4.2 Biên dịch chương trình Blink . . . . . . . . . . . . . . . . . . . . . . . 56 4.4.3 Nhấp nháy chương trình nhấp nháy . . . . . . . . . . . . . . . . . . . . . . . . 59 4.4.4 Phân tích nhật ký cổng nối tiếp của chương trình Blink. . . . . . . . . . . . . . 60 4.5 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
II Phát triển phần cứng và trình điều khiển
65
5 Thiết kế phần cứng của sản phẩm đèn thông minh dựa trên ESP32-C3
67
5.1 Tính năng và thành phần của sản phẩm đèn thông minh. . . . . . . . . . . . . . . 67
5.2 Thiết kế phần cứng của hệ thống lõi ESP32-C3. . . . . . . . . . . . . . . . . . . 70
5.2.1 Nguồn điện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.2.2 Trình tự bật nguồn và thiết lập lại hệ thống. . . . . . . . . . . . . . . . . . 74
5.2.3 SPI Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2.4 Nguồn đồng hồ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2.5 RF và Anten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.2.6 Chốt đóng đai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.2.7 Bộ điều khiển GPIO vàPWM. . . . . . . . . . . . . . . . . . . . . . . . . 79
5.3 Thực hành: Xây dựng hệ thống đèn thông minh với ESP32-C3 . . . . . . . . . . . . . 80
5.3.1 Chọn mô-đun. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.3.2 Định cấu hình GPIO của Tín hiệuPWM. . . . . . . . . . . . . . . . . . . . 82
5.3.3 Tải xuống chương trình cơ sở và giao diện gỡ lỗi. . . . . . . . . . . . 82
5.3.4 Hướng dẫn thiết kế RF. . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.3.5 Hướng dẫn thiết kế nguồn điện . . . . . . . . . . . . . . . . . . . 86 5.4 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6 Phát triển trình điều khiển
87
6.1 Quá trình phát triển trình điều khiển. . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.2 Ứng dụng ngoại vi ESP32-C3 . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.3 Thông tin cơ bản về trình điều khiển đèn LED. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.3.1 Không gian màu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.3.2 Trình điều khiển LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.3.3 Đèn LED mờ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.3.4 Giới thiệu vềPWM. . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.4 Phát triển trình điều khiển đèn LED mờ . . . . . . . . . . . . . . . . . . . . . . . . 96
6.4.1 Lưu trữ không thay đổi (NVS) . . . . . . . . . . . . . . . . . . . . . . . . 97
6.4.2 Bộ điều khiển xung LED LED (LEDC) . . . . . . . . . . . . . . . . . . . . . . . 98
6.4.3 Lập trình LED LED. . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.5 Thực hành: Thêm trình điều khiển vào Dự án đèn thông minh. . . . . . . . . . . . . . . . . 103
6.5.1 Trình điều khiển nút . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.5.2 Trình điều khiển độ mờ đèn LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.6 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
III Truyền thông và điều khiển không dây
109
7 Cấu hình và kết nối Wi-Fi
111
7.1 Khái niệm cơ bản về Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.1.1 Giới thiệu về Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.1.2 Sự phát triển của IEEE 802.11 . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.1.3 Khái niệm Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.1.4 Kết nối Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.2 Khái niệm cơ bản về Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
7.2.1 Giới thiệu về Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . 123
7.2.2 Khái niệm Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
7.2.3 Kết nối Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
7.3 Cấu hình mạng Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
7.3.1 Hướng dẫn cấu hình mạng Wi-Fi . . . . . . . . . . . . . . . . . . . . 131
7.3.2 SoftAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7.3.3 Cấu hình thông minh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7.3.4 Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
7.3.5 Các phương pháp khác . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
7.4 Lập trình Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.4.1 Các thành phần Wi-Fi trong ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . 139 7.4.2 Bài tập: Kết nối Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . 141 7.4.3 Bài tập: Kết nối Wi-Fi thông minh . . . . . . . . . . . . . . . . . . . . . 145
7.5 Thực hành: Cấu hình Wi-Fi trong Dự án đèn thông minh. . . . . . . . . . . . . . . 156 7.5.1 Kết nối Wi-Fi trong Dự án đèn thông minh . . . . . . . . . . . . . . . . . 156 7.5.2 Cấu hình Wi-Fi thông minh . . . . . . . . . . . . . . . . . . . . . . . . . 157
7.6 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
8 Kiểm soát cục bộ
159
8.1 Giới thiệu về Kiểm soát cục bộ . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
8.1.1 Ứng dụng điều khiển cục bộ . . . . . . . . . . . . . . . . . . . . . . . . 161
Advan 8.1.2tages của Kiểm soát cục bộ. . . . . . . . . . . . . . . . . . . . . . . . 161
8.1.3 Khám phá các thiết bị được điều khiển thông qua điện thoại thông minh. . . . . . . . . . 161
8.1.4 Truyền dữ liệu giữa điện thoại thông minh và thiết bị . . . . . . . . 162
8.2 Các phương pháp khám phá cục bộ phổ biến . . . . . . . . . . . . . . . . . . . . . . . . 162
8.2.1 Phát sóng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
8.2.2 Đa phương tiện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
8.2.3 So sánh giữa phát sóng và đa phương tiện. . . . . . . . . . . . . . 176
8.2.4 Giao thức ứng dụng đa hướng mDNS để khám phá cục bộ . . . . . . . . 176
8.3 Giao thức truyền thông chung cho dữ liệu cục bộ . . . . . . . . . . . . . . . 179
8.3.1 Giao thức điều khiển truyền dẫn (TCP) . . . . . . . . . . . . . . . . . . . 179
8.3.2 Giao thức truyền siêu văn bản (HTTP) . . . . . . . . . . . . . . . . . . . 185
8.3.3 Người dùng DatagGiao thức ram (UDP). . . . . . . . . . . . . . . . . . . . . . 189
8.3.4 Giao thức ứng dụng ràng buộc (CoAP) . . . . . . . . . . . . . . . . 192
8.3.5 Giao thức Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
8.3.6 Tóm tắt các giao thức truyền thông dữ liệu. . . . . . . . . . . . . . . 203
8.4 Đảm bảo an toàn dữ liệu. . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
8.4.1 Giới thiệu về Bảo mật lớp vận chuyển (TLS). . . . . . . . . . . . . 207
8.4.2 Giới thiệu về Đátagram Bảo mật lớp vận chuyển (DTLS) . . . . . . . 213
8.5 Thực hành: Điều khiển cục bộ trong Dự án đèn thông minh. . . . . . . . . . . . . . . . . . 217
8.5.1 Tạo Máy chủ điều khiển cục bộ dựa trên Wi-Fi. . . . . . . . . . . . . . . 217
8.5.2 Xác minh chức năng điều khiển cục bộ bằng tập lệnh . . . . . . . . . . . 221
8.5.3 Tạo Máy chủ điều khiển cục bộ dựa trên Bluetooth. . . . . . . . . . . . 222
8.6 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
9 điều khiển đám mây
225
9.1 Giới thiệu về Điều khiển từ xa . . . . . . . . . . . . . . . . . . . . . . . . . . 225
9.2 Giao thức truyền thông dữ liệu đám mây . . . . . . . . . . . . . . . . . . . . . . 226
9.2.1 Giới thiệu MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.2.2 Nguyên tắc MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 9.2.3 Định dạng tin nhắn MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . 228 9.2.4 So sánh giao thức . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 9.2.5 Thiết lập MQTT Broker trên Linux và Windows . . . . . . . . . . . . 233 9.2.6 Thiết lập ứng dụng khách MQTT dựa trên ESP-IDF . . . . . . . . . . . . . . . . 235 9.3 Đảm bảo bảo mật dữ liệu MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 9.3.1 Ý nghĩa và chức năng của Giấy chứng nhận . . . . . . . . . . . . . . . . . . . 237 9.3.2 Tạo chứng chỉ cục bộ . . . . . . . . . . . . . . . . . . . . . . 239 9.3.3 Định cấu hình Nhà môi giới MQTT . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.3.4 Định cấu hình Máy khách MQTT . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.4 Thực hành: Điều khiển từ xa thông qua ESP RainMaker . . . . . . . . . . . . . . . . 243 9.4.1 Thông tin cơ bản về ESP RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 9.4.2 Giao thức truyền thông phụ trợ nút và đám mây . . . . . . . . . . . 244 9.4.3 Giao tiếp giữa Máy khách và Cloud Backend . . . . . . . . . . . 249 9.4.4 Vai trò của Người dùng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 9.4.5 Dịch vụ cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 9.4.6 Đèn thông minh Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 9.4.7 Ứng dụng RainMaker và sự tích hợp của bên thứ ba . . . . . . . . . . . . . . . 262 9.5 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
10 Phát triển ứng dụng điện thoại thông minh
269
10.1 Giới thiệu về Phát triển ứng dụng điện thoại thông minh. . . . . . . . . . . . . . . . . . 269
10.1.1 Trênview của Phát triển ứng dụng điện thoại thông minh. . . . . . . . . . . . . . . 270
10.1.2 Cấu trúc của Dự án Android . . . . . . . . . . . . . . . . . . . . . . 270
10.1.3 Cấu trúc của Dự án iOS . . . . . . . . . . . . . . . . . . . . . . . . 271
10.1.4 Vòng đời của một Hoạt động trên Android. . . . . . . . . . . . . . . . . . . . . . 272
10.1.5 Vòng đời của iOS ViewBộ điều khiển . . . . . . . . . . . . . . . . . . . . . . 273
10.2 Tạo dự án ứng dụng điện thoại thông minh mới. . . . . . . . . . . . . . . . . . . . . 275
10.2.1 Chuẩn bị phát triển Android . . . . . . . . . . . . . . . . . . . 275
10.2.2 Tạo một dự án Android mới . . . . . . . . . . . . . . . . . . . . . . 275
10.2.3 Thêm phần phụ thuộc cho MyRainmaker . . . . . . . . . . . . . . . . . 276
10.2.4 Yêu cầu cấp phép trong Android . . . . . . . . . . . . . . . . . . . . . . 277
10.2.5 Chuẩn bị phát triển iOS . . . . . . . . . . . . . . . . . . . . . . 277
10.2.6 Tạo dự án iOS mới . . . . . . . . . . . . . . . . . . . . . . . . 278
10.2.7 Thêm phần phụ thuộc cho MyRainmaker . . . . . . . . . . . . . . . . . 279
10.2.8 Yêu cầu cấp phép trong iOS . . . . . . . . . . . . . . . . . . . . . . . . . 280
10.3 Phân tích các yêu cầu chức năng của ứng dụng. . . . . . . . . . . . . . . . . . 281
10.3.1 Phân tích các yêu cầu chức năng của Dự án. . . . . . . . . . . . 282
10.3.2 Phân tích các yêu cầu quản lý người dùng. . . . . . . . . . . . . . . 282 10.3.3 Phân tích các yêu cầu liên kết và cung cấp thiết bị . . . . . . . 283 10.3.4 Phân tích các yêu cầu về điều khiển từ xa . . . . . . . . . . . . . . . . 283 10.3.5 Phân tích các yêu cầu lập kế hoạch . . . . . . . . . . . . . . . . . . . 284 10.3.6 Phân tích các yêu cầu của Trung tâm Người dùng . . . . . . . . . . . . . . . . . . 285 10.4 Phát triển quản lý người dùng . . . . . . . . . . . . . . . . . . . . . . . . 285 10.4.1 Giới thiệu về API RainMaker . . . . . . . . . . . . . . . . . . . . . . 285 10.4.2 Bắt đầu liên lạc qua điện thoại thông minh . . . . . . . . . . . . . . . . 286 10.4.3 Đăng ký tài khoản . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 10.4.4 Đăng nhập tài khoản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 10.5 Phát triển cung cấp thiết bị . . . . . . . . . . . . . . . . . . . . . . . 292 10.5.1 Thiết bị quét . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 10.5.2 Kết nối thiết bị . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 10.5.3 Tạo khóa bí mật . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.5.4 Lấy ID nút . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.5.5 Thiết bị cung cấp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 10.6 Phát triển điều khiển thiết bị . . . . . . . . . . . . . . . . . . . . . . . . . . 302 10.6.1 Liên kết thiết bị với tài khoản đám mây . . . . . . . . . . . . . . . . . . . . 303 10.6.2 Lấy danh sách thiết bị . . . . . . . . . . . . . . . . . . . . . . . . . . 305 10.6.3 Lấy trạng thái thiết bị . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 10.6.4 Thay đổi trạng thái thiết bị . . . . . . . . . . . . . . . . . . . . . . . . . . 310 10.7 Phát triển Trung tâm Lập kế hoạch và Người dùng . . . . . . . . . . . . . . . . . . . 313 10.7.1 Thực hiện chức năng lập kế hoạch . . . . . . . . . . . . . . . . . . . . 313 10.7.2 Triển khai Trung tâm người dùng . . . . . . . . . . . . . . . . . . . . . . . . . 315 10.7.3 Thêm API đám mây . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 10.8 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
11 Nâng cấp chương trình cơ sở và quản lý phiên bản
321
11.1 Nâng cấp chương trình cơ sở . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
11.1.1 Trênview của Bảng phân vùng. . . . . . . . . . . . . . . . . . . . . . . . 322
11.1.2 Quá trình khởi động chương trình cơ sở . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
11.1.3 Trênview của Cơ chế OTA. . . . . . . . . . . . . . . . . . . . . 326
11.2 Quản lý phiên bản phần sụn . . . . . . . . . . . . . . . . . . . . . . . . . . 329
11.2.1 Đánh dấu phần sụn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
11.2.2 Khôi phục và chống khôi phục . . . . . . . . . . . . . . . . . . . . . . . . 331
11.3 Thực hành: Qua mạng (OTA) Example . . . . . . . . . . . . . . . . . . . . . . . 332
11.3.1 Nâng cấp chương trình cơ sở thông qua máy chủ cục bộ. . . . . . . . . . . . . . . . . 332
11.3.2 Nâng cấp Firmware thông qua ESP RainMaker . . . . . . . . . . . . . . . 335
11.4 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Tối ưu hóa IV và sản xuất hàng loạt
343
12 Quản lý năng lượng và tối ưu hóa năng lượng thấp
345
12.1 Quản lý năng lượng ESP32-C3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
12.1.1 Thang đo tần số động . . . . . . . . . . . . . . . . . . . . . . . . 346
12.1.2 Cấu hình quản lý nguồn . . . . . . . . . . . . . . . . . . . . 348
12.2 Chế độ năng lượng thấp ESP32-C3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
12.2.1 Chế độ ngủ của modem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
12.2.2 Chế độ ngủ nhẹ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
12.2.3 Chế độ ngủ sâu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
12.2.4 Mức tiêu thụ hiện tại ở các chế độ nguồn khác nhau. . . . . . . . . . . . . 358
12.3 Quản lý năng lượng và gỡ lỗi năng lượng thấp . . . . . . . . . . . . . . . . . 359
12.3.1 Gỡ lỗi nhật ký . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
12.3.2 Gỡ lỗi GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
12.4 Thực hành: Quản lý năng lượng trong Dự án đèn thông minh. . . . . . . . . . . . . . . 363
12.4.1 Cấu hình tính năng quản lý nguồn . . . . . . . . . . . . . . . . . 364
12.4.2 Sử dụng Khóa quản lý nguồn . . . . . . . . . . . . . . . . . . . . . . 365
12.4.3 Xác minh mức tiêu thụ điện năng. . . . . . . . . . . . . . . . . . . . . . . 366
12.5 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
13 tính năng bảo mật thiết bị nâng cao
369
13.1 Trênview về bảo mật dữ liệu thiết bị IoT. . . . . . . . . . . . . . . . . . . . . . . 369
13.1.1 Tại sao phải bảo mật dữ liệu thiết bị IoT? . . . . . . . . . . . . . . . . . . . . . . 370
13.1.2 Yêu cầu cơ bản về bảo mật dữ liệu thiết bị IoT. . . . . . . . . . . . 371
13.2 Bảo vệ tính toàn vẹn dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
13.2.1 Giới thiệu phương pháp xác minh tính toàn vẹn. . . . . . . . . . . . . . 372
13.2.2 Xác minh tính toàn vẹn của dữ liệu phần sụn. . . . . . . . . . . . . . . . . . 373
13.2.3 Ví dụample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
13.3 Bảo vệ bí mật dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . 374
13.3.1 Giới thiệu về Mã hóa dữ liệu . . . . . . . . . . . . . . . . . . . . . . 374
13.3.2 Giới thiệu sơ đồ mã hóa Flash . . . . . . . . . . . . . . . . . 376
13.3.3 Lưu trữ khóa mã hóa Flash . . . . . . . . . . . . . . . . . . . . . . . 379
13.3.4 Chế độ làm việc của mã hóa Flash . . . . . . . . . . . . . . . . . . . . 380
13.3.5 Quá trình mã hóa Flash . . . . . . . . . . . . . . . . . . . . . . . . . . 381
13.3.6 Giới thiệu về Mã hóa NVS . . . . . . . . . . . . . . . . . . . . . . 383
13.3.7 Ví dụampcác tập tin Mã hóa Flash và Mã hóa NVS . . . . . . . . . . . 384
13.4 Bảo vệ tính hợp pháp của dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
13.4.1 Giới thiệu về Chữ ký số. . . . . . . . . . . . . . . . . . . . . 386
13.4.2 Trênview của Lược đồ khởi động an toàn. . . . . . . . . . . . . . . . . . . . . 388
13.4.3 Giới thiệu về Phần mềm Khởi động an toàn. . . . . . . . . . . . . . . . . . . 388 13.4.4 Giới thiệu về Khởi động an toàn phần cứng . . . . . . . . . . . . . . . . . . 390 13.4.5 Ví dụamples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 13.5 Thực hành: Tính năng bảo mật trong sản xuất hàng loạt . . . . . . . . . . . . . . . . . . 396 13.5.1 Mã hóa Flash và Khởi động an toàn . . . . . . . . . . . . . . . . . . . . . 396 13.5.2 Kích hoạt mã hóa Flash và khởi động an toàn bằng công cụ Batch Flash . . 397 13.5.3 Kích hoạt mã hóa Flash và khởi động an toàn trong Dự án đèn thông minh . . . 398 13.6 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
14 Ghi và thử nghiệm chương trình cơ sở cho sản xuất hàng loạt
399
14.1 Ghi phần sụn trong sản xuất hàng loạt . . . . . . . . . . . . . . . . . . . . . . 399
14.1.1 Xác định phân vùng dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . 399
14.1.2 Ghi chương trình cơ sở . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
14.2 Thử nghiệm sản xuất hàng loạt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
14.3 Thực hành: Dữ liệu sản xuất hàng loạt trong Dự án đèn thông minh. . . . . . . . . . . . . 404
14.4 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
15 thông tin chi tiết về ESP: Nền tảng giám sát từ xa
405
15.1 Giới thiệu về Thông tin chi tiết về ESP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
15.2 Bắt đầu với Thông tin chi tiết về ESP . . . . . . . . . . . . . . . . . . . . . . . . . 409
15.2.1 Bắt đầu với ESP Insights trong Dự án Esp-insights. . . . . . 409
15.2.2 Chạy Examptập tin trong Dự án Esp-Insights. . . . . . . . . . . . . . . 411
15.2.3 Báo cáo thông tin Coredump . . . . . . . . . . . . . . . . . . . . . 411
15.2.4 Tùy chỉnh nhật ký quan tâm . . . . . . . . . . . . . . . . . . . . . . . . 412
15.2.5 Báo cáo lý do khởi động lại . . . . . . . . . . . . . . . . . . . . . . . . . 413
15.2.6 Báo cáo số liệu tùy chỉnh . . . . . . . . . . . . . . . . . . . . . . . . . 413
15.3 Thực hành: Sử dụng ESP Insights trong Dự án Ánh sáng Thông minh. . . . . . . . . . . . . . . 416
15.4 Tóm tắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Giới thiệu
ESP32-C3 là SoC vi điều khiển Wi-Fi và Bluetooth 5 (LE) lõi đơn, dựa trên kiến trúc RISC-V nguồn mở. Nó đạt được sự cân bằng hợp lý về năng lượng, khả năng I/O và bảo mật, từ đó cung cấp giải pháp tiết kiệm chi phí tối ưu cho các thiết bị được kết nối. Để trình bày các ứng dụng khác nhau của dòng ESP32-C3, cuốn sách này của Espressif sẽ đưa bạn vào một hành trình thú vị thông qua AIoT, bắt đầu từ những kiến thức cơ bản về phát triển dự án IoT và thiết lập môi trường cho đến các ví dụ thực tế.amples. Bốn chương đầu tiên nói về IoT, ESP RainMaker và ESP-IDF. Chương 5 và 6 tóm tắt về thiết kế phần cứng và phát triển trình điều khiển. Khi tiến bộ, bạn sẽ khám phá cách định cấu hình dự án của mình thông qua mạng Wi-Fi và Ứng dụng di động. Cuối cùng, bạn sẽ học cách tối ưu hóa dự án của mình và đưa nó vào sản xuất hàng loạt.
Nếu bạn là kỹ sư trong các lĩnh vực liên quan, kiến trúc sư phần mềm, giáo viên, sinh viên hoặc bất kỳ ai quan tâm đến IoT thì cuốn sách này là dành cho bạn.
Bạn có thể tải xuống mã cũamptập tin được sử dụng trong cuốn sách này từ trang web của Espressif trên GitHub. Để biết thông tin mới nhất về phát triển IoT, vui lòng theo dõi tài khoản chính thức của chúng tôi.
Lời nói đầu
Một thế giới thông tin hóa
Thúc đẩy làn sóng Internet, Internet of Things (IoT) ra mắt hoành tráng để trở thành một loại cơ sở hạ tầng mới trong nền kinh tế số. Để đưa công nghệ đến gần hơn với công chúng, Espressif Systems hoạt động vì tầm nhìn rằng các nhà phát triển thuộc mọi tầng lớp xã hội có thể sử dụng IoT để giải quyết một số vấn đề cấp bách nhất của thời đại chúng ta. Một thế giới “Mạng lưới vạn vật thông minh” là điều chúng ta đang mong đợi ở tương lai.
Việc thiết kế chip của riêng chúng tôi là một phần quan trọng của tầm nhìn đó. Đó là một cuộc chạy marathon, đòi hỏi những đột phá liên tục trước những ranh giới công nghệ. Từ “Game Changer” ESP8266 đến dòng ESP32 tích hợp kết nối Wi-Fi và Bluetoothr (LE), tiếp theo là ESP32-S3 được trang bị khả năng tăng tốc AI, Espressif không ngừng nghiên cứu và phát triển sản phẩm cho giải pháp AIoT. Với phần mềm nguồn mở của chúng tôi, chẳng hạn như Khung phát triển IoT ESP-IDF, Khung phát triển lưới ESP-MDF và Nền tảng kết nối thiết bị ESP RainMaker, chúng tôi đã tạo một khung độc lập để xây dựng các ứng dụng AIoT.
Tính đến tháng 2022 năm 800, tổng số lô hàng chipset IoT của Espressif đã vượt quá 32 triệu, dẫn đầu thị trường Wi-Fi MCU và cung cấp năng lượng cho một số lượng lớn thiết bị được kết nối trên toàn thế giới. Việc theo đuổi sự xuất sắc khiến mỗi sản phẩm của Espressif trở thành một thành công lớn nhờ mức độ tích hợp cao và hiệu quả chi phí. Việc phát hành ESP3-C32 đánh dấu một cột mốc quan trọng trong công nghệ tự phát triển của Espressif. Đây là MCU lõi đơn, 400 bit, dựa trên RISC-V với 160KB SRAM, có thể chạy ở tốc độ 2.4 MHz. Nó được tích hợp Wi-Fi 5 GHz và Bluetooth 32 (LE) với khả năng hỗ trợ tầm xa. Nó đạt được sự cân bằng tốt về sức mạnh, khả năng I/O và bảo mật, từ đó cung cấp giải pháp tiết kiệm chi phí tối ưu cho các thiết bị được kết nối. Dựa trên ESP3-CXNUMX mạnh mẽ như vậy, cuốn sách này nhằm giúp người đọc hiểu các kiến thức liên quan đến IoT bằng hình ảnh minh họa chi tiết và ví dụ thực tế.ampđồng nghiệp.
Tại sao chúng tôi viết cuốn sách này?
Espressif Systems không chỉ là một công ty bán dẫn. Đây cũng là công ty nền tảng IoT, luôn nỗ lực tạo ra những đột phá, đổi mới trong lĩnh vực công nghệ. Đồng thời, Espressif đã mã nguồn mở và chia sẻ hệ điều hành và khung phần mềm tự phát triển của mình với cộng đồng, tạo thành một hệ sinh thái độc đáo. Các kỹ sư, nhà sản xuất và những người đam mê công nghệ tích cực phát triển các ứng dụng phần mềm mới dựa trên các sản phẩm của Espressif, tự do giao tiếp và chia sẻ kinh nghiệm của họ. Bạn có thể thấy những ý tưởng hấp dẫn của nhà phát triển trên nhiều nền tảng khác nhau mọi lúc, chẳng hạn như YouTube và GitHub. Sự phổ biến của các sản phẩm của Espressif đã kích thích ngày càng nhiều tác giả đã xuất bản hơn 100 cuốn sách dựa trên chipset Espressif, bằng hơn mười ngôn ngữ, bao gồm tiếng Anh, tiếng Trung, tiếng Đức, tiếng Pháp và tiếng Nhật.
Chính sự hỗ trợ và tin tưởng của các đối tác cộng đồng đã khuyến khích sự đổi mới không ngừng của Espressif. “Chúng tôi nỗ lực làm cho chip, hệ điều hành, khuôn khổ, giải pháp, Đám mây, phương thức kinh doanh, công cụ, tài liệu, bài viết, ý tưởng, v.v. của mình trở nên phù hợp hơn bao giờ hết với câu trả lời mà mọi người cần trong những vấn đề cấp bách nhất của cuộc sống đương đại. Đây là tham vọng và la bàn đạo đức cao nhất của Espressif.” Ông Teo Swee Ann, Người sáng lập và Giám đốc điều hành của Espressif cho biết.
Espressif coi trọng việc đọc và ý tưởng. Khi công nghệ IoT liên tục nâng cấp đặt ra yêu cầu cao hơn đối với các kỹ sư, làm cách nào chúng tôi có thể giúp nhiều người hơn nhanh chóng làm chủ chip IoT, hệ điều hành, khung phần mềm, sơ đồ ứng dụng và sản phẩm dịch vụ đám mây? Như người ta thường nói, thà dạy một người cách câu cá còn hơn là cho anh ta con cá. Trong một buổi động não, chúng tôi chợt nhận ra rằng mình có thể viết một cuốn sách để sắp xếp một cách có hệ thống những kiến thức chính về phát triển IoT. Chúng tôi đã thành công, nhanh chóng tập hợp một nhóm kỹ sư cao cấp và kết hợp kinh nghiệm của nhóm kỹ thuật trong lập trình nhúng, phát triển phần cứng và phần mềm IoT, tất cả đều góp phần xuất bản cuốn sách này. Trong quá trình viết, chúng tôi đã cố gắng hết sức để khách quan và công bằng, loại bỏ cái kén và sử dụng những cách diễn đạt ngắn gọn để nói lên sự phức tạp và hấp dẫn của Internet of Things. Chúng tôi đã tổng hợp cẩn thận các câu hỏi thường gặp, tham khảo các phản hồi và đề xuất của cộng đồng để giải đáp rõ ràng các câu hỏi gặp phải trong quá trình phát triển, đồng thời đưa ra các hướng dẫn phát triển IoT thiết thực cho các kỹ thuật viên và người ra quyết định liên quan.
Cấu trúc sách
Cuốn sách này lấy quan điểm lấy kỹ sư làm trung tâm và trình bày từng bước kiến thức cần thiết để phát triển dự án IoT. Nó bao gồm bốn phần, như sau:
· Chuẩn bị (Chương 1): Phần này giới thiệu kiến trúc của IoT, khung dự án IoT điển hình, nền tảng đám mây ESP RainMakerr và môi trường phát triển ESP-IDF, nhằm tạo nền tảng vững chắc cho việc phát triển dự án IoT.
· Phát triển phần cứng và trình điều khiển (Chương 5): Dựa trên chipset ESP6-C32, phần này trình bày chi tiết về hệ thống phần cứng và phát triển trình điều khiển tối thiểu, đồng thời thực hiện kiểm soát độ mờ, phân loại màu và giao tiếp không dây.
· Điều khiển và Truyền thông Không dây (Chương 7): Phần này giải thích sơ đồ cấu hình Wi-Fi thông minh dựa trên chip ESP11-C32, các giao thức điều khiển cục bộ & đám mây cũng như điều khiển cục bộ & từ xa của thiết bị. Nó cũng cung cấp các kế hoạch phát triển ứng dụng điện thoại thông minh, nâng cấp chương trình cơ sở và quản lý phiên bản.
· Tối ưu hóa và sản xuất hàng loạt (Chương 12-15): Phần này dành cho các ứng dụng IoT nâng cao, tập trung vào việc tối ưu hóa sản phẩm trong quản lý năng lượng, tối ưu hóa năng lượng thấp và tăng cường bảo mật. Nó cũng giới thiệu việc ghi và kiểm tra chương trình cơ sở trong sản xuất hàng loạt cũng như cách chẩn đoán trạng thái hoạt động và nhật ký của chương trình cơ sở của thiết bị thông qua nền tảng giám sát từ xa ESP Insights.
Giới thiệu về mã nguồn
Người đọc có thể chạy exampcác chương trình trong cuốn sách này, bằng cách nhập mã theo cách thủ công hoặc bằng cách sử dụng mã nguồn đi kèm với cuốn sách. Chúng tôi nhấn mạnh sự kết hợp giữa lý thuyết và thực hành, do đó đặt ra phần Thực hành dựa trên dự án Ánh sáng thông minh trong hầu hết các chương. Tất cả các mã đều có nguồn mở. Độc giả có thể tải xuống mã nguồn và thảo luận về nó trong các phần liên quan đến cuốn sách này trên GitHub và diễn đàn chính thức của chúng tôi Esp32.com. Mã nguồn mở của cuốn sách này tuân theo các điều khoản của Giấy phép Apache 2.0.
Ghi chú của tác giả
Cuốn sách này được Espressif Systems chính thức sản xuất và được viết bởi các kỹ sư cấp cao của công ty. Nó phù hợp cho các nhà quản lý và nhân viên R&D trong các ngành liên quan đến IoT, giáo viên và sinh viên các chuyên ngành liên quan và những người đam mê lĩnh vực Internet of Things. Chúng tôi hy vọng rằng cuốn sách này có thể dùng như một cẩm nang công việc, một tài liệu tham khảo, một cuốn sách đầu giường, giống như một người gia sư và một người bạn tốt.
Trong khi biên soạn cuốn sách này, chúng tôi đã tham khảo một số kết quả nghiên cứu có liên quan của các chuyên gia, học giả, kỹ thuật viên trong và ngoài nước và đã cố gắng trích dẫn theo chuẩn mực học thuật. Tuy nhiên, không thể tránh khỏi một số thiếu sót nên ở đây chúng tôi xin bày tỏ sự kính trọng và biết ơn sâu sắc tới tất cả các tác giả có liên quan. Ngoài ra, chúng tôi đã trích dẫn thông tin từ Internet nên xin cảm ơn các tác giả, nhà xuất bản gốc và xin lỗi vì chúng tôi không thể chỉ rõ nguồn gốc của từng thông tin.
Để cho ra đời một cuốn sách có chất lượng cao, chúng tôi đã tổ chức các vòng thảo luận nội bộ, rút kinh nghiệm từ những góp ý, phản hồi của độc giả dùng thử và biên tập viên của nhà xuất bản. Sau đây, chúng tôi xin cảm ơn một lần nữa vì sự giúp đỡ của các bạn, tất cả đã góp phần tạo nên thành công cho công việc này.
Cuối cùng nhưng quan trọng nhất, xin cảm ơn tất cả mọi người tại Espressif, những người đã làm việc rất chăm chỉ cho sự ra đời và phổ biến sản phẩm của chúng tôi.
Việc phát triển các dự án IoT liên quan đến nhiều kiến thức. Giới hạn về độ dài của cuốn sách cũng như trình độ và kinh nghiệm của tác giả thì không thể tránh khỏi những thiếu sót. Vì vậy, chúng tôi kính mong các chuyên gia và độc giả phê bình và sửa chữa những sai sót của chúng tôi. Nếu bạn có bất kỳ đề xuất nào cho cuốn sách này, vui lòng liên hệ với chúng tôi theo địa chỉ book@espressif.com. Chúng tôi mong chờ ý kiến phản hồi của bạn.
Làm thế nào để sử dụng cuốn sách này?
Mã của các dự án trong cuốn sách này là mã nguồn mở. Bạn có thể tải xuống từ kho GitHub của chúng tôi và chia sẻ suy nghĩ cũng như câu hỏi của bạn trên diễn đàn chính thức của chúng tôi. GitHub: https://github.com/espressif/book-esp32c3-iot-projects Diễn đàn: https://www.esp32.com/bookc3 Xuyên suốt cuốn sách sẽ có những phần được highlight như hình bên dưới.
Mã nguồn Trong cuốn sách này, chúng tôi nhấn mạnh sự kết hợp giữa lý thuyết và thực hành, do đó đặt phần Thực hành về dự án Ánh sáng thông minh trong hầu hết các chương. Các bước tương ứng và trang nguồn sẽ được đánh dấu giữa hai dòng bắt đầu bằng tag Mã nguồn.
LƯU Ý/MẸO Đây là nơi bạn có thể tìm thấy một số thông tin quan trọng và lời nhắc để gỡ lỗi thành công chương trình của mình. Chúng sẽ được đánh dấu giữa hai dòng dày bắt đầu bằng tag LƯU Ý hoặc LỜI KHUYÊN.
Hầu hết các lệnh trong cuốn sách này đều được thực thi trong Linux, được nhắc bởi ký tự “$”. Nếu lệnh yêu cầu đặc quyền siêu người dùng để thực thi, dấu nhắc sẽ được thay thế bằng “#”. Dấu nhắc lệnh trên hệ thống Mac là “%”, như được sử dụng trong Phần 4.2.3 Cài đặt ESP-IDF trên Mac.
Nội dung trong cuốn sách này sẽ được in dưới dạng Charter, trong khi mã cũamptập tin, thành phần, hàm, biến, mã file tên, thư mục mã và chuỗi sẽ có trong Courier New.
Các lệnh hoặc văn bản mà người dùng cần nhập và các lệnh có thể nhập bằng cách nhấn phím “Enter” sẽ được in đậm ở Courier New. Nhật ký và khối mã sẽ được trình bày trong các hộp màu xanh nhạt.
Examplê:
Thứ hai, sử dụng Esp-idf/thành phần/nvs flash/nvs trình tạo phân vùng/nvs phân vùng gen.py để tạo nhị phân phân vùng NVS file trên máy chủ phát triển bằng lệnh sau:
$ python $IDF PATH/thành phần/nvs flash/nvs trình tạo phân vùng/nvs phân vùng gen.py –input mass prod.csv –output mass prod.bin –size NVS PARTITION KÍCH THƯỚC
Chương 1
Giới thiệu
ĐẾN
Internet vạn vật
Vào cuối thế kỷ 20, với sự phát triển của mạng máy tính và công nghệ truyền thông, Internet nhanh chóng hòa nhập vào cuộc sống con người. Khi công nghệ Internet tiếp tục phát triển, ý tưởng về Internet of Things (IoT) đã ra đời. Theo nghĩa đen, IoT có nghĩa là Internet nơi mọi thứ được kết nối. Trong khi Internet ban đầu phá vỡ các giới hạn về không gian, thời gian và thu hẹp khoảng cách giữa “con người và con người”, thì IoT khiến “vật” trở thành một thành phần tham gia quan trọng, đưa “con người” và “vật” lại gần nhau hơn. Trong tương lai gần, IoT được thiết lập để trở thành động lực của ngành công nghiệp thông tin.
Vậy Internet vạn vật là gì?
Thật khó để định nghĩa chính xác Internet of Things, vì ý nghĩa và phạm vi của nó không ngừng phát triển. Năm 1995, Bill Gates lần đầu tiên đưa ra ý tưởng về IoT trong cuốn sách Con đường phía trước. Nói một cách đơn giản, IoT cho phép các đối tượng trao đổi thông tin với nhau thông qua Internet. Mục tiêu cuối cùng của nó là thiết lập một “Internet của mọi thứ”. Đây là cách giải thích ban đầu về IoT, cũng như sự tưởng tượng về công nghệ tương lai. Ba mươi năm sau, với sự phát triển nhanh chóng của kinh tế và công nghệ, điều tưởng tượng đó đang dần trở thành hiện thực. Từ thiết bị thông minh, nhà thông minh, thành phố thông minh, Internet phương tiện và thiết bị đeo được, cho đến “siêu vũ trụ” được hỗ trợ bởi công nghệ IoT, các khái niệm mới không ngừng xuất hiện. Trong chương này, chúng tôi sẽ bắt đầu bằng việc giải thích về kiến trúc của Internet of Things, sau đó giới thiệu ứng dụng IoT phổ biến nhất, ngôi nhà thông minh, để giúp bạn hiểu rõ hơn về IoT.
1.1 Kiến trúc của IoT
Internet of Things liên quan đến nhiều công nghệ có nhu cầu và hình thức ứng dụng khác nhau trong các ngành khác nhau. Để xác định được cấu trúc, các công nghệ chủ chốt và đặc điểm ứng dụng của IoT, cần thiết lập một kiến trúc thống nhất và một hệ thống kỹ thuật tiêu chuẩn. Trong cuốn sách này, kiến trúc của IoT được chia đơn giản thành bốn lớp: lớp nhận thức và kiểm soát, lớp mạng, lớp nền tảng và lớp ứng dụng.
Lớp nhận thức & điều khiển Là thành phần cơ bản nhất của kiến trúc IoT, lớp nhận thức & kiểm soát là cốt lõi để hiện thực hóa cảm biến toàn diện về IoT. Chức năng chính của nó là thu thập, xác định và kiểm soát thông tin. Nó bao gồm nhiều loại thiết bị có khả năng nhận thức,
3
xác định, kiểm soát và thực thi, đồng thời chịu trách nhiệm truy xuất và phân tích dữ liệu như đặc tính vật liệu, xu hướng hành vi và trạng thái thiết bị. Bằng cách này, IoT có thể nhận ra thế giới vật chất thực. Ngoài ra, lớp còn có khả năng kiểm soát trạng thái của thiết bị.
Các thiết bị phổ biến nhất của lớp này là các cảm biến khác nhau, đóng vai trò quan trọng trong việc thu thập và nhận dạng thông tin. Các cảm biến giống như các cơ quan cảm giác của con người, chẳng hạn như cảm biến quang tương đương với thị giác, cảm biến âm thanh đối với thính giác, cảm biến khí đối với khứu giác và cảm biến nhạy cảm với áp suất và nhiệt độ đối với xúc giác. Với tất cả những “cơ quan cảm giác” này, các vật thể trở nên “sống động” và có khả năng nhận thức, nhận biết và thao tác thông minh về thế giới vật chất.
Lớp mạng Chức năng chính của lớp mạng là truyền thông tin, bao gồm dữ liệu thu được từ lớp nhận thức & kiểm soát đến mục tiêu được chỉ định, cũng như các lệnh được đưa ra từ lớp ứng dụng trở lại lớp nhận thức & kiểm soát. Nó đóng vai trò là cầu nối liên lạc quan trọng kết nối các lớp khác nhau của hệ thống IoT. Để thiết lập mô hình cơ bản của Internet of Things, bao gồm hai bước để tích hợp các đối tượng vào mạng: truy cập Internet và truyền qua Internet.
Truy cập Internet Internet cho phép kết nối giữa người với người, nhưng không đưa mọi thứ vào đại gia đình. Trước sự ra đời của IoT, hầu hết mọi thứ đều không thể kết nối mạng được. Nhờ sự phát triển không ngừng của công nghệ, IoT có thể kết nối mọi thứ với Internet, từ đó hiện thực hóa sự kết nối giữa “con người và sự vật” và “sự vật và sự vật”. Có hai cách phổ biến để thực hiện kết nối Internet: truy cập mạng có dây và truy cập mạng không dây.
Các phương thức truy cập mạng có dây bao gồm Ethernet, giao tiếp nối tiếp (ví dụ: RS-232, RS-485) và USB, trong khi truy cập mạng không dây phụ thuộc vào giao tiếp không dây, có thể được chia thành giao tiếp không dây tầm ngắn và giao tiếp không dây tầm xa.
Giao tiếp không dây tầm ngắn bao gồm ZigBee, Bluetoothr, Wi-Fi, Giao tiếp trường gần (NFC) và Nhận dạng tần số vô tuyến (RFID). Giao tiếp không dây tầm xa bao gồm Giao tiếp loại máy nâng cao (eMTC), LoRa, Internet vạn vật băng thông hẹp (NB-IoT), 2G, 3G, 4G, 5G, v.v.
Truyền qua Internet Các phương pháp truy cập Internet khác nhau dẫn đến liên kết truyền dữ liệu vật lý tương ứng. Điều tiếp theo là quyết định sử dụng giao thức truyền thông nào để truyền dữ liệu. So với các thiết bị đầu cuối Internet, hầu hết các thiết bị đầu cuối IoT hiện nay có ít hơn
4 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
các tài nguyên sẵn có như hiệu suất xử lý, dung lượng lưu trữ, tốc độ mạng, v.v., do đó cần chọn giao thức truyền thông chiếm ít tài nguyên hơn trong các ứng dụng IoT. Có hai giao thức truyền thông được sử dụng rộng rãi hiện nay: Truyền tải từ xa xếp hàng tin nhắn (MQTT) và Giao thức ứng dụng ràng buộc (CoAP).
Lớp nền tảng Lớp nền tảng chủ yếu đề cập đến nền tảng đám mây IoT. Khi tất cả các thiết bị đầu cuối IoT được nối mạng, dữ liệu của chúng cần được tổng hợp trên nền tảng đám mây IoT để được tính toán và lưu trữ. Lớp nền tảng chủ yếu hỗ trợ các ứng dụng IoT trong việc hỗ trợ truy cập và quản lý các thiết bị lớn. Nó kết nối các thiết bị đầu cuối IoT với nền tảng đám mây, thu thập dữ liệu thiết bị đầu cuối và đưa ra lệnh cho các thiết bị đầu cuối để thực hiện điều khiển từ xa. Là một dịch vụ trung gian để gán thiết bị cho các ứng dụng công nghiệp, lớp nền tảng đóng vai trò kết nối trong toàn bộ kiến trúc IoT, mang logic kinh doanh trừu tượng và mô hình dữ liệu lõi được tiêu chuẩn hóa, không chỉ có thể nhận ra khả năng truy cập nhanh chóng của thiết bị mà còn cung cấp khả năng mô-đun mạnh mẽ để đáp ứng các nhu cầu khác nhau trong các kịch bản ứng dụng công nghiệp. Lớp nền tảng chủ yếu bao gồm các mô-đun chức năng như truy cập thiết bị, quản lý thiết bị, quản lý bảo mật, liên lạc bằng tin nhắn, giám sát vận hành và bảo trì cũng như các ứng dụng dữ liệu.
· Truy cập thiết bị, hiện thực hóa kết nối và truyền thông giữa thiết bị đầu cuối và nền tảng đám mây IoT.
· Quản lý thiết bị, bao gồm các chức năng như tạo thiết bị, bảo trì thiết bị, chuyển đổi dữ liệu, đồng bộ hóa dữ liệu và phân phối thiết bị.
· Quản lý bảo mật, đảm bảo an toàn cho việc truyền dữ liệu IoT từ góc độ xác thực bảo mật và bảo mật truyền thông.
· Truyền tin nhắn, bao gồm ba hướng truyền, nghĩa là thiết bị đầu cuối gửi dữ liệu đến nền tảng đám mây IoT, nền tảng đám mây IoT gửi dữ liệu đến phía máy chủ hoặc các nền tảng đám mây IoT khác và phía máy chủ điều khiển từ xa các thiết bị IoT.
· Giám sát O&M, bao gồm giám sát và chẩn đoán, nâng cấp chương trình cơ sở, gỡ lỗi trực tuyến, dịch vụ nhật ký, v.v.
· Ứng dụng dữ liệu, liên quan đến việc lưu trữ, phân tích và ứng dụng dữ liệu.
Lớp ứng dụng Lớp ứng dụng sử dụng dữ liệu từ lớp nền tảng để quản lý ứng dụng, lọc và xử lý chúng bằng các công cụ như cơ sở dữ liệu và phần mềm phân tích. Dữ liệu thu được có thể được sử dụng cho các ứng dụng IoT trong thế giới thực như chăm sóc sức khỏe thông minh, nông nghiệp thông minh, nhà thông minh và thành phố thông minh.
Tất nhiên, kiến trúc của IoT có thể được chia thành nhiều lớp hơn, nhưng cho dù nó bao gồm bao nhiêu lớp thì nguyên tắc cơ bản về cơ bản vẫn giống nhau. Học hỏi
Chương 1. Giới thiệu về IoT 5
về kiến trúc của IoT giúp chúng ta hiểu sâu hơn về công nghệ IoT và xây dựng các dự án IoT đầy đủ chức năng.
1.2 Ứng dụng IoT trong Nhà thông minh
IoT đã thâm nhập vào mọi tầng lớp xã hội và ứng dụng IoT có liên quan chặt chẽ nhất với chúng ta chính là ngôi nhà thông minh. Nhiều thiết bị truyền thống hiện nay được trang bị một hoặc nhiều thiết bị IoT và nhiều ngôi nhà mới xây được thiết kế với công nghệ IoT ngay từ đầu. Hình 1.1 minh họa một số thiết bị nhà thông minh thông dụng.
Hình 1.1. Các thiết bị nhà thông minh phổ biến Sự phát triển của nhà thông minh có thể được chia đơn giản thành các sản phẩm thông minhtage, kết nối cảnh stage và thông minh stage, như thể hiện trong Hình 1.2.
Hình 1.2. Phát triểntage của nhà thông minh 6 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
S đầu tiêntage là về các sản phẩm thông minh. Khác với những ngôi nhà truyền thống, trong ngôi nhà thông minh, các thiết bị IoT nhận tín hiệu bằng cảm biến và được kết nối mạng thông qua các công nghệ truyền thông không dây như Wi-Fi, Bluetooth LE và ZigBee. Người dùng có thể điều khiển các sản phẩm thông minh theo nhiều cách khác nhau, chẳng hạn như ứng dụng trên điện thoại thông minh, trợ lý giọng nói, điều khiển loa thông minh, v.v.tage tập trung vào kết nối cảnh. Trong nàytage, các nhà phát triển không còn xem xét việc kiểm soát một sản phẩm thông minh duy nhất mà kết nối hai hoặc nhiều sản phẩm thông minh, tự động hóa ở một mức độ nhất định và cuối cùng hình thành chế độ cảnh tùy chỉnh. Dành cho người yêu cũampNgoài ra, khi người dùng nhấn bất kỳ nút chế độ cảnh nào, đèn, rèm và điều hòa sẽ tự động điều chỉnh theo cài đặt trước. Tất nhiên, điều kiện tiên quyết là logic liên kết phải được thiết lập dễ dàng, bao gồm các điều kiện kích hoạt và hành động thực thi. Hãy tưởng tượng chế độ sưởi ấm của điều hòa được kích hoạt khi nhiệt độ trong nhà giảm xuống dưới 10°C; vào lúc 7 giờ sáng, âm nhạc được phát để đánh thức người dùng, rèm cửa thông minh được mở ra và nồi cơm điện hoặc máy nướng bánh mì khởi động thông qua ổ cắm thông minh; Khi người dùng thức dậy và tắm rửa xong, bữa sáng đã được phục vụ nên việc đi làm sẽ không bị chậm trễ. Cuộc sống của chúng ta đã trở nên thuận tiện biết bao! Thứ batage đi đến trí thông minh stagđ. Khi càng có nhiều thiết bị nhà thông minh được truy cập thì các loại dữ liệu được tạo ra cũng vậy. Với sự trợ giúp của điện toán đám mây, dữ liệu lớn và trí tuệ nhân tạo, nó giống như một “bộ não thông minh hơn” đã được đưa vào những ngôi nhà thông minh, không còn cần đến những mệnh lệnh thường xuyên từ người dùng. Họ thu thập dữ liệu từ các tương tác trước đó và tìm hiểu các kiểu hành vi cũng như sở thích của người dùng để tự động hóa các hoạt động, bao gồm cả việc đưa ra các đề xuất cho việc ra quyết định. Hiện nay, hầu hết các ngôi nhà thông minh đều có mặt ở hiện trường kết nốitagđ. Khi tỷ lệ thâm nhập và trí thông minh của các sản phẩm thông minh tăng lên, các rào cản giữa các giao thức truyền thông đang được xóa bỏ. Trong tương lai, nhà thông minh chắc chắn sẽ trở nên thực sự “thông minh”, giống như hệ thống AI Jarvis trong Iron Man, không chỉ giúp người dùng điều khiển các thiết bị khác nhau, xử lý các công việc hàng ngày mà còn có khả năng tính toán và tư duy siêu phàm. Trong thế giới thông minhtage, con người sẽ nhận được những dịch vụ tốt hơn cả về số lượng và chất lượng.
Chương 1. Giới thiệu về IoT 7
8 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
Chương Giới thiệu và thực hành 2 dự án IoT
Trong Chương 1, chúng tôi đã giới thiệu kiến trúc của IoT cũng như vai trò và mối quan hệ qua lại của lớp nhận thức và kiểm soát, lớp mạng, lớp nền tảng và lớp ứng dụng, cũng như sự phát triển của ngôi nhà thông minh. Tuy nhiên, cũng giống như khi chúng ta học vẽ, chỉ biết kiến thức lý thuyết thôi là chưa đủ. Chúng ta phải “bắt tay” đưa các dự án IoT vào thực tế để thực sự làm chủ được công nghệ. Ngoài ra, khi một dự án chuyển sang sản xuất hàng loạttage, cần xem xét nhiều yếu tố hơn như kết nối mạng, cấu hình, tương tác nền tảng đám mây IoT, quản lý và cập nhật chương trình cơ sở, quản lý sản xuất hàng loạt và cấu hình bảo mật. Vậy chúng ta cần chú ý điều gì khi phát triển một dự án IoT hoàn chỉnh? Trong Chương 1, chúng tôi đã đề cập rằng nhà thông minh là một trong những kịch bản ứng dụng IoT phổ biến nhất và đèn thông minh là một trong những thiết bị cơ bản và thiết thực nhất, có thể được sử dụng trong gia đình, khách sạn, phòng tập thể dục, bệnh viện, v.v. Trong cuốn sách này, chúng tôi sẽ lấy việc xây dựng một dự án chiếu sáng thông minh làm điểm khởi đầu, giải thích các thành phần và tính năng của nó, đồng thời đưa ra hướng dẫn về phát triển dự án. Chúng tôi hy vọng rằng bạn có thể rút ra kết luận từ trường hợp này để tạo ra nhiều ứng dụng IoT hơn.
2.1 Giới thiệu các dự án IoT tiêu biểu
Về mặt phát triển, các mô-đun chức năng cơ bản của dự án IoT có thể được phân loại thành phát triển phần mềm và phần cứng của thiết bị IoT, phát triển ứng dụng khách và phát triển nền tảng đám mây IoT. Điều quan trọng là phải làm rõ các mô-đun chức năng cơ bản sẽ được mô tả thêm trong phần này.
2.1.1 Mô-đun cơ bản cho các thiết bị IoT thông dụng
Phát triển phần mềm và phần cứng của thiết bị IoT bao gồm các phân hệ cơ bản sau: Thu thập dữ liệu
Là lớp dưới cùng của kiến trúc IoT, các thiết bị IoT của lớp nhận thức và kiểm soát kết nối các cảm biến và thiết bị thông qua chip và thiết bị ngoại vi của chúng để đạt được khả năng kiểm soát vận hành và thu thập dữ liệu.
9
Liên kết tài khoản và cấu hình ban đầu Đối với hầu hết các thiết bị IoT, liên kết tài khoản và cấu hình ban đầu được hoàn thành trong một quy trình vận hành, ví dụ:ample, kết nối thiết bị với người dùng bằng cách định cấu hình mạng Wi-Fi.
Tương tác với nền tảng đám mây IoT Để giám sát và điều khiển các thiết bị IoT, cũng cần kết nối chúng với nền tảng đám mây IoT, để đưa ra lệnh và báo cáo trạng thái thông qua tương tác với nhau.
Kiểm soát thiết bị Khi được kết nối với nền tảng đám mây IoT, các thiết bị có thể giao tiếp với đám mây và được đăng ký, ràng buộc hoặc kiểm soát. Người dùng có thể truy vấn trạng thái sản phẩm và thực hiện các hoạt động khác trên ứng dụng điện thoại thông minh thông qua nền tảng đám mây IoT hoặc giao thức liên lạc cục bộ.
Nâng cấp chương trình cơ sở Các thiết bị IoT cũng có thể nâng cấp chương trình cơ sở dựa trên nhu cầu của nhà sản xuất. Bằng cách nhận lệnh được gửi từ đám mây, việc nâng cấp chương trình cơ sở và quản lý phiên bản sẽ được thực hiện. Với tính năng nâng cấp chương trình cơ sở này, bạn có thể liên tục nâng cao chức năng của thiết bị IoT, sửa lỗi và cải thiện trải nghiệm người dùng.
2.1.2 Các mô-đun cơ bản của ứng dụng khách
Các ứng dụng khách (ví dụ: ứng dụng điện thoại thông minh) chủ yếu bao gồm các mô-đun cơ bản sau:
Hệ thống tài khoản và ủy quyền Nó hỗ trợ ủy quyền tài khoản và thiết bị.
Điều khiển thiết bị Các ứng dụng trên điện thoại thông minh thường được trang bị chức năng điều khiển. Người dùng có thể dễ dàng kết nối với các thiết bị IoT và quản lý chúng mọi lúc, mọi nơi thông qua ứng dụng trên điện thoại thông minh. Trong một ngôi nhà thông minh trong thế giới thực, các thiết bị hầu hết được điều khiển thông qua các ứng dụng trên điện thoại thông minh, điều này không chỉ cho phép quản lý thiết bị thông minh mà còn tiết kiệm chi phí nhân lực. Do đó, điều khiển thiết bị là điều bắt buộc đối với các ứng dụng khách, chẳng hạn như điều khiển thuộc tính chức năng thiết bị, điều khiển cảnh, lập lịch, điều khiển từ xa, liên kết thiết bị, v.v. Người dùng nhà thông minh cũng có thể tùy chỉnh cảnh theo nhu cầu cá nhân, điều khiển ánh sáng, thiết bị gia dụng, lối vào , v.v., để cuộc sống gia đình trở nên thoải mái và thuận tiện hơn. Họ có thể hẹn giờ điều hòa, tắt điều hòa từ xa, tự động bật đèn hành lang khi cửa được mở khóa hoặc chuyển sang chế độ “rạp hát” chỉ bằng một nút bấm.
Ứng dụng khách thông báo cập nhật trạng thái thời gian thực của thiết bị IoT và gửi cảnh báo khi thiết bị gặp sự cố bất thường.
10 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
Dịch vụ khách hàng sau bán hàng Ứng dụng điện thoại thông minh có thể cung cấp dịch vụ sau bán hàng cho sản phẩm, nhằm giải quyết kịp thời các vấn đề liên quan đến lỗi thiết bị IoT và vận hành kỹ thuật.
Các chức năng nổi bật Để đáp ứng nhu cầu của những người dùng khác nhau, các chức năng khác có thể được thêm vào, chẳng hạn như Lắc, NFC, GPS, v.v. GPS có thể giúp đặt độ chính xác của các thao tác cảnh theo vị trí và khoảng cách, trong khi chức năng Lắc cho phép người dùng đặt các lệnh được thực thi cho thiết bị hoặc cảnh cụ thể bằng cách lắc.
2.1.3 Giới thiệu về Nền tảng đám mây IoT phổ biến
Nền tảng đám mây IoT là nền tảng tất cả trong một, tích hợp các chức năng như quản lý thiết bị, liên lạc bảo mật dữ liệu và quản lý thông báo. Theo nhóm mục tiêu và khả năng tiếp cận, nền tảng đám mây IoT có thể được chia thành nền tảng đám mây IoT công cộng (sau đây gọi là “đám mây công cộng”) và nền tảng đám mây IoT riêng tư (sau đây gọi là “đám mây riêng”).
Đám mây công cộng thường biểu thị các nền tảng đám mây IoT dùng chung cho doanh nghiệp hoặc cá nhân, được vận hành và duy trì bởi các nhà cung cấp nền tảng và được chia sẻ qua Internet. Nó có thể miễn phí hoặc chi phí thấp và cung cấp các dịch vụ trên toàn mạng công cộng mở, chẳng hạn như Alibaba Cloud, Tencent Cloud, Baidu Cloud, AWS IoT, Google IoT, v.v. Là một nền tảng hỗ trợ, đám mây công cộng có thể tích hợp các nhà cung cấp dịch vụ ngược dòng và người dùng cuối ở hạ lưu để tạo ra chuỗi giá trị và hệ sinh thái mới.
Đám mây riêng được xây dựng chỉ dành cho doanh nghiệp, do đó đảm bảo khả năng kiểm soát tốt nhất đối với dữ liệu, bảo mật và chất lượng dịch vụ. Các dịch vụ và cơ sở hạ tầng của nó được các doanh nghiệp duy trì riêng biệt và phần cứng và phần mềm hỗ trợ cũng được dành riêng cho những người dùng cụ thể. Doanh nghiệp có thể tùy chỉnh các dịch vụ đám mây để đáp ứng nhu cầu kinh doanh của mình. Hiện tại, một số nhà sản xuất nhà thông minh đã có nền tảng đám mây IoT riêng và phát triển các ứng dụng nhà thông minh dựa trên chúng.
Đám mây công cộng và đám mây riêng có ưu điểm riêngtages, điều này sẽ được giải thích sau.
Để đạt được kết nối liên lạc, ít nhất cần phải hoàn thành quá trình phát triển nhúng ở phía thiết bị, cùng với các máy chủ doanh nghiệp, nền tảng đám mây IoT và ứng dụng điện thoại thông minh. Đối mặt với một dự án lớn như vậy, đám mây công cộng thường cung cấp bộ công cụ phát triển phần mềm cho các ứng dụng trên thiết bị và điện thoại thông minh để tăng tốc quá trình. Cả đám mây công cộng và riêng tư đều cung cấp các dịch vụ bao gồm truy cập thiết bị, quản lý thiết bị, theo dõi thiết bị cũng như vận hành và bảo trì.
Truy cập thiết bị Nền tảng đám mây IoT không chỉ cần cung cấp giao diện để truy cập thiết bị bằng giao thức
Chương 2. Giới thiệu và thực hành các dự án IoT 11
chẳng hạn như MQTT, CoAP, HTTPS và WebỔ cắm cũng có chức năng xác thực bảo mật thiết bị để chặn các thiết bị giả mạo và bất hợp pháp, giảm nguy cơ bị xâm phạm một cách hiệu quả. Việc xác thực như vậy thường hỗ trợ các cơ chế khác nhau nên khi thiết bị được sản xuất hàng loạt cần gán trước chứng chỉ thiết bị theo cơ chế xác thực đã chọn và ghi vào thiết bị.
Quản lý thiết bị Chức năng quản lý thiết bị được cung cấp bởi nền tảng đám mây IoT không chỉ có thể giúp nhà sản xuất theo dõi trạng thái kích hoạt và trạng thái trực tuyến của thiết bị của họ theo thời gian thực mà còn cho phép các tùy chọn như thêm/xóa thiết bị, truy xuất, thêm/xóa nhóm, nâng cấp firmware và quản lý phiên bản.
Bóng thiết bị Nền tảng đám mây IoT có thể tạo một phiên bản ảo liên tục (bóng thiết bị) cho từng thiết bị và trạng thái của bóng thiết bị có thể được đồng bộ hóa và thu được bởi ứng dụng điện thoại thông minh hoặc các thiết bị khác thông qua giao thức truyền Internet. Bóng thiết bị lưu trữ trạng thái được báo cáo mới nhất và trạng thái dự kiến của từng thiết bị và ngay cả khi thiết bị ngoại tuyến, nó vẫn có thể lấy trạng thái bằng cách gọi API. Bóng thiết bị cung cấp các API luôn bật, giúp xây dựng các ứng dụng điện thoại thông minh tương tác với thiết bị dễ dàng hơn.
Vận hành và bảo trì Chức năng O&M bao gồm ba khía cạnh: · Thể hiện thông tin thống kê về các thiết bị IoT và thông báo. · Quản lý nhật ký cho phép truy xuất thông tin về hoạt động của thiết bị, luồng tin nhắn lên/xuống và nội dung tin nhắn. · Gỡ lỗi thiết bị hỗ trợ gửi lệnh, cập nhật cấu hình và kiểm tra sự tương tác giữa nền tảng đám mây IoT và tin nhắn thiết bị.
2.2 Thực hành: Dự án đèn thông minh
Sau phần giới thiệu lý thuyết ở mỗi chương, bạn sẽ tìm thấy phần thực hành liên quan đến dự án Smart Light để giúp bạn có được trải nghiệm thực tế. Dự án dựa trên chip ESP32-C3 của Espressif và Nền tảng đám mây ESP RainMaker IoT, đồng thời bao gồm phần cứng mô-đun không dây trong các sản phẩm đèn thông minh, phần mềm nhúng cho thiết bị thông minh dựa trên ESP32C3, ứng dụng điện thoại thông minh và tương tác ESP RainMaker.
Mã nguồn Để có trải nghiệm học tập và phát triển tốt hơn, dự án trong cuốn sách này đã được mã nguồn mở. Bạn có thể tải xuống mã nguồn từ kho lưu trữ GitHub của chúng tôi tại https://github. com/espressif/book-esp32c3-iot-projects.
12 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
2.2.1 Cấu trúc dự án
Dự án Smart Light bao gồm ba phần: i. Thiết bị đèn thông minh dựa trên ESP32-C3, chịu trách nhiệm tương tác với nền tảng đám mây IoT và điều khiển công tắc, độ sáng và nhiệt độ màu của đèn LED lamp hạt. ii. Ứng dụng dành cho điện thoại thông minh (bao gồm cả ứng dụng máy tính bảng chạy trên Android và iOS), chịu trách nhiệm cấu hình mạng của các sản phẩm đèn thông minh, cũng như truy vấn và kiểm soát trạng thái của chúng.
iii. Nền tảng đám mây IoT dựa trên ESP RainMaker. Để đơn giản hóa, chúng tôi xem xét toàn bộ nền tảng đám mây IoT và máy chủ doanh nghiệp trong cuốn sách này. Thông tin chi tiết về ESP RainMaker sẽ được cung cấp trong Chương 3.
Sự tương ứng giữa cấu trúc dự án Smart Light và kiến trúc IoT được thể hiện trong Hình 2.1.
Hình 2.1. Cấu trúc dự án đèn thông minh
2.2.2 Chức năng của dự án
Chia theo cấu trúc, chức năng của từng bộ phận như sau. Thiết bị đèn thông minh
· Cấu hình và kết nối mạng. · Điều khiển LED LED, chẳng hạn như công tắc, độ sáng, nhiệt độ màu, v.v. · Tự động hóa hoặc điều khiển cảnh, ví dụ: chuyển đổi thời gian. · Mã hóa và khởi động an toàn của Flash. · Nâng cấp firmware và quản lý phiên bản.
Chương 2. Giới thiệu và thực hành các dự án IoT 13
Ứng dụng điện thoại thông minh · Cấu hình mạng và liên kết thiết bị. · Điều khiển sản phẩm đèn thông minh, chẳng hạn như công tắc, độ sáng, nhiệt độ màu, v.v. · Tự động hóa hoặc cài đặt cảnh, ví dụ: công tắc thời gian. · Điều khiển cục bộ/từ xa. · Đăng ký người dùng, đăng nhập, v.v.
Nền tảng đám mây ESP RainMaker IoT · Cho phép truy cập thiết bị IoT. · Cung cấp API vận hành thiết bị có thể truy cập được vào các ứng dụng trên điện thoại thông minh. · Nâng cấp firmware và quản lý phiên bản.
2.2.3 Chuẩn bị phần cứng
Nếu quan tâm đến việc đưa dự án vào thực tế, bạn cũng sẽ cần phần cứng sau: đèn thông minh, điện thoại thông minh, bộ định tuyến Wi-Fi và máy tính đáp ứng các yêu cầu cài đặt của môi trường phát triển. Đèn thông minh
Đèn thông minh là một loại bóng đèn mới, có hình dáng giống với bóng đèn sợi đốt thông thường. Đèn thông minh bao gồm nguồn điện được điều chỉnh giảm dần bằng tụ điện, mô-đun không dây (có tích hợp ESP32-C3), bộ điều khiển LED và ma trận LED RGB. Khi kết nối với nguồn điện, điện áp 15 V DCtage sau khi hạ tụ điện, chỉnh lưu đi-ốt và điều chỉnh sẽ cung cấp năng lượng cho bộ điều khiển LED và ma trận LED. Bộ điều khiển LED có thể tự động gửi các mức cao và thấp trong các khoảng thời gian nhất định, chuyển đổi ma trận LED RGB giữa đóng (bật đèn) và mở (tắt đèn), để nó có thể phát ra màu lục lam, vàng, lục, tím, xanh lam, đỏ và ánh sáng trắng. Mô-đun không dây có nhiệm vụ kết nối với bộ định tuyến Wi-Fi, nhận và báo cáo trạng thái của đèn thông minh và gửi lệnh điều khiển đèn LED.
Hình 2.2. Đèn thông minh mô phỏng
Trong giai đoạn đầu phát triểntage, bạn có thể mô phỏng đèn thông minh bằng bảng ESP32-C3DevKitM-1 được kết nối với đèn LED RGB lamp hạt (xem Hình 2.2). Nhưng bạn nên
14 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
lưu ý rằng đây không phải là cách duy nhất để lắp ráp đèn thông minh. Thiết kế phần cứng của dự án trong cuốn sách này chỉ chứa một mô-đun không dây (có tích hợp ESP32-C3), chứ không phải là một thiết kế phần cứng đèn thông minh hoàn chỉnh. Ngoài ra, Espressif còn sản xuất bo mạch phát triển âm thanh dựa trên ESP32-C3 ESP32C3-Lyra để điều khiển đèn bằng âm thanh. Bảng mạch có giao diện cho micro và loa và có thể điều khiển dải đèn LED. Nó có thể được sử dụng để phát triển các đài phát âm thanh và dải ánh sáng nhịp điệu với chi phí cực thấp, hiệu suất cao. Hình 2.3 cho thấy một bảng ESP32-C3Lyra được liên kết với một dải gồm 40 đèn LED.
Hình 2.3. ESP32-C3-Lyra liên kết với dải 40 đèn LED
Điện thoại thông minh (Android/iOS) Dự án Ánh sáng thông minh liên quan đến việc phát triển một ứng dụng điện thoại thông minh để thiết lập và điều khiển các sản phẩm đèn thông minh.
Bộ định tuyến Wi-Fi Bộ định tuyến Wi-Fi chuyển đổi tín hiệu mạng có dây và tín hiệu mạng di động thành tín hiệu mạng không dây để máy tính, điện thoại thông minh, máy tính bảng và các thiết bị không dây khác kết nối với mạng. Dành cho người yêu cũample, băng thông rộng trong nhà chỉ cần được kết nối với bộ định tuyến Wi-Fi để đạt được kết nối mạng không dây của các thiết bị Wi-Fi. Chuẩn giao thức chính được bộ định tuyến Wi-Fi hỗ trợ là IEEE 802.11n, với tốc độ TxRate trung bình là 300 Mbps hoặc tối đa là 600 Mbps. Chúng tương thích ngược với IEEE 802.11b và IEEE 802.11g. Chip ESP32-C3 của Espressif hỗ trợ IEEE 802.11b/g/n, vì vậy bạn có thể chọn bộ định tuyến Wi-Fi băng tần đơn (2.4 GHz) hoặc băng tần kép (2.4 GHz và 5 GHz).
Môi trường phát triển máy tính (Linux/macOS/Windows) sẽ được giới thiệu ở Chương 4. Chương 2. Giới thiệu và thực hành các dự án IoT 15
2.2.4 Quá trình phát triển
Hình 2.4. Các bước phát triển dự án Smart Light
Thiết kế phần cứng Thiết kế phần cứng của thiết bị IoT là điều cần thiết cho một dự án IoT. Một dự án đèn thông minh hoàn chỉnh nhằm mục đích tạo ra mộtamp làm việc dưới nguồn điện lưới. Các nhà sản xuất khác nhau sản xuất lampcó nhiều kiểu dáng và loại trình điều khiển khác nhau, nhưng các mô-đun không dây của chúng thường có cùng chức năng. Để đơn giản hóa quá trình phát triển của dự án Smart Ligh, cuốn sách này chỉ đề cập đến thiết kế phần cứng và phát triển phần mềm của các mô-đun không dây.
Cấu hình nền tảng đám mây IoT Để sử dụng nền tảng đám mây IoT, bạn cần định cấu hình các dự án ở phần phụ trợ, chẳng hạn như tạo sản phẩm, tạo thiết bị, cài đặt thuộc tính thiết bị, v.v.
Phát triển phần mềm nhúng cho thiết bị IoT Triển khai các chức năng mong đợi với ESP-IDF, SDK phía thiết bị của Espressif, bao gồm kết nối với nền tảng đám mây IoT, phát triển trình điều khiển LED và nâng cấp chương trình cơ sở.
Phát triển ứng dụng điện thoại thông minh Phát triển ứng dụng điện thoại thông minh cho hệ thống Android và iOS để thực hiện đăng ký và đăng nhập người dùng, kiểm soát thiết bị và các chức năng khác.
Tối ưu hóa thiết bị IoT Sau khi hoàn thành quá trình phát triển cơ bản các chức năng của thiết bị IoT, bạn có thể chuyển sang các tác vụ tối ưu hóa, chẳng hạn như tối ưu hóa năng lượng.
Thử nghiệm sản xuất hàng loạt Thực hiện các thử nghiệm sản xuất hàng loạt theo các tiêu chuẩn liên quan, chẳng hạn như kiểm tra chức năng thiết bị, kiểm tra lão hóa, kiểm tra RF, v.v.
Bất chấp các bước được liệt kê ở trên, dự án Smart Light không nhất thiết phải tuân theo quy trình đó vì các nhiệm vụ khác nhau cũng có thể được thực hiện cùng một lúc. Dành cho người yêu cũample, phần mềm nhúng và ứng dụng điện thoại thông minh có thể được phát triển song song. Một số bước cũng có thể cần phải được lặp lại, chẳng hạn như tối ưu hóa thiết bị IoT và thử nghiệm sản xuất hàng loạt.
16 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
2.3 Tóm tắt
Trong chương này, trước tiên chúng tôi trình bày chi tiết về các thành phần cơ bản và mô-đun chức năng của một dự án IoT, sau đó giới thiệu trường hợp Smart Light để thực hành, đề cập đến cấu trúc, chức năng, chuẩn bị phần cứng và quy trình phát triển của nó. Người đọc có thể rút ra những suy luận từ thực tiễn và tự tin thực hiện các dự án IoT với ít sai sót nhất trong tương lai.
Chương 2. Giới thiệu và thực hành các dự án IoT 17
18 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
Chương 3
Giới thiệu
ĐẾN
Tiếng Việt
Người tạo mưa
Internet of Things (IoT) mang đến những khả năng vô tận để thay đổi cách sống của mọi người, tuy nhiên sự phát triển của kỹ thuật IoT còn đầy thách thức. Với đám mây công cộng, nhà sản xuất thiết bị đầu cuối có thể triển khai chức năng sản phẩm thông qua các giải pháp sau:
Dựa trên nền tảng đám mây của nhà cung cấp giải pháp. Bằng cách này, nhà sản xuất thiết bị đầu cuối chỉ cần thiết kế phần cứng sản phẩm, sau đó kết nối phần cứng với đám mây bằng mô-đun giao tiếp được cung cấp và định cấu hình các chức năng của sản phẩm theo hướng dẫn. Đây là một cách tiếp cận hiệu quả vì nó loại bỏ nhu cầu phát triển cũng như vận hành và bảo trì (O&M) phía máy chủ và phía ứng dụng. Nó cho phép các nhà sản xuất thiết bị đầu cuối tập trung vào thiết kế phần cứng mà không cần phải xem xét việc triển khai đám mây. Tuy nhiên, các giải pháp như vậy (ví dụ: chương trình cơ sở thiết bị và Ứng dụng) thường không phải là nguồn mở, do đó, các chức năng của sản phẩm sẽ bị giới hạn bởi nền tảng đám mây của nhà cung cấp và không thể tùy chỉnh. Trong khi đó, dữ liệu người dùng và thiết bị cũng thuộc nền tảng đám mây.
Dựa trên các sản phẩm đám mây Trong giải pháp này, sau khi hoàn thành thiết kế phần cứng, các nhà sản xuất thiết bị đầu cuối không chỉ cần triển khai các chức năng đám mây bằng cách sử dụng một hoặc nhiều sản phẩm đám mây do đám mây công cộng cung cấp mà còn cần liên kết phần cứng với đám mây. Dành cho người yêu cũample, để kết nối với Amazon Web Dịch vụ (AWS), nhà sản xuất thiết bị đầu cuối cần sử dụng các sản phẩm AWS như Amazon API Gateway, AWS IoT Core và AWS Lambda để cho phép truy cập thiết bị, điều khiển từ xa, lưu trữ dữ liệu, quản lý người dùng và các chức năng cơ bản khác. Nó không chỉ yêu cầu các nhà sản xuất thiết bị đầu cuối sử dụng và cấu hình linh hoạt các sản phẩm đám mây với sự hiểu biết sâu sắc và kinh nghiệm phong phú mà còn yêu cầu họ phải cân nhắc chi phí xây dựng và bảo trì cho những năm đầu và sau này.tages Điều này đặt ra những thách thức lớn đối với năng lượng và nguồn lực của công ty.
So với đám mây công cộng, đám mây riêng thường được xây dựng cho các dự án, sản phẩm cụ thể. Các nhà phát triển đám mây riêng được cấp quyền tự do cao nhất trong việc thiết kế giao thức và triển khai logic nghiệp vụ. Các nhà sản xuất thiết bị đầu cuối có thể tạo ra các sản phẩm và sơ đồ thiết kế theo ý muốn, đồng thời dễ dàng tích hợp và trao quyền cho dữ liệu người dùng. Kết hợp tính bảo mật cao, khả năng mở rộng và độ tin cậy của đám mây công cộng với advantagcủa đám mây riêng, Espressif đã ra mắt ESP
19
RainMaker, giải pháp đám mây riêng tích hợp sâu dựa trên đám mây Amazon. Người dùng có thể triển khai ESP RainMaker và xây dựng đám mây riêng chỉ bằng tài khoản AWS.
3.1 ESP RainMaker là gì?
ESP RainMaker là nền tảng AIoT hoàn chỉnh được xây dựng từ nhiều sản phẩm AWS hoàn thiện. Nó cung cấp nhiều dịch vụ khác nhau cần thiết cho sản xuất hàng loạt như truy cập đám mây thiết bị, nâng cấp thiết bị, quản lý phụ trợ, đăng nhập bên thứ ba, tích hợp giọng nói và quản lý người dùng. Bằng cách sử dụng Kho lưu trữ ứng dụng phi máy chủ (SAR) do AWS cung cấp, các nhà sản xuất thiết bị đầu cuối có thể nhanh chóng triển khai ESP RainMaker vào tài khoản AWS của họ, điều này tiết kiệm thời gian và dễ vận hành. Được quản lý và duy trì bởi Espressif, SAR được ESP RainMaker sử dụng giúp các nhà phát triển giảm chi phí bảo trì đám mây và đẩy nhanh quá trình phát triển các sản phẩm AIoT, từ đó xây dựng các giải pháp AIoT an toàn, ổn định và có thể tùy chỉnh. Hình 3.1 thể hiện kiến trúc của ESP RainMaker.
Hình 3.1. Kiến trúc của ESP RainMaker
Máy chủ công cộng ESP RainMaker của Espressif miễn phí dành cho tất cả những người đam mê, nhà sản xuất và nhà giáo dục ESP để đánh giá giải pháp. Các nhà phát triển có thể đăng nhập bằng tài khoản Apple, Google hoặc GitHub và nhanh chóng xây dựng các nguyên mẫu ứng dụng IoT của riêng họ. Máy chủ công cộng tích hợp Alexa và Google Home, đồng thời cung cấp các dịch vụ điều khiển bằng giọng nói được hỗ trợ bởi Alexa Skill và Google Actions. Chức năng nhận dạng ngữ nghĩa của nó cũng được cung cấp bởi các bên thứ ba. Các thiết bị RainMaker IoT chỉ phản hồi các hành động cụ thể. Để biết danh sách đầy đủ các lệnh thoại được hỗ trợ, vui lòng kiểm tra nền tảng của bên thứ ba. Ngoài ra, Espressif còn cung cấp Ứng dụng RainMaker công khai để người dùng kiểm soát sản phẩm thông qua điện thoại thông minh. 20 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
3.2 Triển khai ESP RainMaker
Như được hiển thị trong Hình 3.2, ESP RainMaker bao gồm bốn phần: · Dịch vụ yêu cầu, cho phép các thiết bị RainMaker tự động lấy chứng chỉ. · RainMaker Cloud (còn được gọi là phụ trợ đám mây), cung cấp các dịch vụ như lọc tin nhắn, quản lý người dùng, lưu trữ dữ liệu và tích hợp bên thứ ba. · RainMaker Agent, cho phép các thiết bị RainMaker kết nối với RainMaker Cloud. · Ứng dụng khách RainMaker (Ứng dụng RainMaker hoặc tập lệnh CLI), để cung cấp, tạo người dùng, liên kết và kiểm soát thiết bị, v.v.
Hình 3.2. Cấu trúc của ESP RainMaker
ESP RainMaker cung cấp bộ công cụ hoàn chỉnh để phát triển sản phẩm và sản xuất hàng loạt, bao gồm: RainMaker SDK
RainMaker SDK dựa trên ESP-IDF và cung cấp mã nguồn của tác nhân phía thiết bị cũng như các API C liên quan để phát triển chương trình cơ sở. Các nhà phát triển chỉ cần viết logic ứng dụng và để phần còn lại cho RainMaker framework. Để biết thêm thông tin về API C, vui lòng truy cập https://bookc3.espressif.com/rm/c-api-reference. Ứng dụng RainMaker Phiên bản công khai của Ứng dụng RainMaker cho phép các nhà phát triển hoàn tất việc cung cấp thiết bị, đồng thời kiểm soát và truy vấn trạng thái của thiết bị (ví dụ: các sản phẩm chiếu sáng thông minh). Nó có sẵn trên cả cửa hàng ứng dụng iOS và Android. Để biết thêm chi tiết, vui lòng tham khảo Chương 10. API REST API REST giúp người dùng xây dựng các ứng dụng của riêng họ tương tự như Ứng dụng RainMaker. Để biết thêm thông tin, vui lòng truy cập https://swaggerapis.rainmaker.espressif.com/.
Chương 3. Giới thiệu về ESP RainMaker 21
API Python CLI dựa trên Python, đi kèm với RainMaker SDK, được cung cấp để triển khai tất cả các chức năng tương tự như các tính năng của điện thoại thông minh. Để biết thêm thông tin về API Python, vui lòng truy cập https://bookc3.espressif.com/rm/python-api-reference.
Quản trị viên CLI Quản trị viên CLI, với cấp độ truy cập cao hơn, được cung cấp cho quá trình triển khai riêng tư ESP RainMaker để tạo hàng loạt chứng chỉ thiết bị.
3.2.1 Dịch vụ yêu cầu bồi thường
Tất cả giao tiếp giữa các thiết bị RainMaker và chương trình phụ trợ đám mây được thực hiện thông qua MQTT+TLS. Trong ngữ cảnh của ESP RainMaker, “Xác nhận quyền sở hữu” là quá trình trong đó các thiết bị lấy chứng chỉ từ Dịch vụ xác nhận quyền sở hữu để kết nối với phần phụ trợ đám mây. Lưu ý rằng Dịch vụ xác nhận quyền sở hữu chỉ áp dụng cho dịch vụ RainMaker công cộng, trong khi để triển khai riêng tư, chứng chỉ thiết bị cần được tạo hàng loạt thông qua Quản trị viên CLI. ESP RainMaker hỗ trợ ba loại Dịch vụ xác nhận quyền sở hữu: Tự xác nhận quyền sở hữu
Thiết bị tự lấy chứng chỉ thông qua khóa bí mật được lập trình sẵn trong eFuse sau khi kết nối với Internet. Xác nhận quyền sở hữu theo hướng máy chủ Các chứng chỉ được lấy từ máy chủ phát triển có tài khoản RainMaker. Hỗ trợ xác nhận quyền sở hữu Các chứng chỉ được lấy thông qua ứng dụng điện thoại thông minh trong quá trình cung cấp.
3.2.2 Đại lý RainMaker
Hình 3.3. Cấu trúc của RainMaker SDK Chức năng chính của RainMaker Agent là cung cấp kết nối và hỗ trợ lớp ứng dụng xử lý dữ liệu đám mây đường lên/đường xuống. Nó được xây dựng thông qua Cuộc phiêu lưu không dây RainMaker SDK 22 ESP32-C3: Hướng dẫn toàn diện về IoT
và được phát triển dựa trên khung ESP-IDF đã được chứng minh, sử dụng các thành phần ESP-IDF như RTOS, NVS và MQTT. Hình 3.3 cho thấy cấu trúc của RainMaker SDK.
SDK RainMaker bao gồm hai tính năng chính.
Sự liên quan
Tôi. Hợp tác với Dịch vụ yêu cầu bồi thường để lấy chứng chỉ thiết bị.
ii. Kết nối với phần phụ trợ đám mây bằng giao thức MQTT an toàn để cung cấp kết nối từ xa và triển khai điều khiển từ xa, báo cáo tin nhắn, quản lý người dùng, quản lý thiết bị, v.v. Nó sử dụng thành phần MQTT trong ESP-IDF theo mặc định và cung cấp một lớp trừu tượng để giao tiếp với các thiết bị khác ngăn xếp giao thức.
iii. Cung cấp thành phần cung cấp wifi để kết nối và cung cấp Wi-Fi, thành phần đặc biệt https ota để nâng cấp OTA và thành phần ctrl cục bộ đặc biệt để khám phá và kết nối thiết bị cục bộ. Tất cả những mục tiêu này có thể đạt được thông qua cấu hình đơn giản.
Xử lý dữ liệu
Tôi. Lưu trữ chứng chỉ thiết bị do Dịch vụ xác nhận quyền sở hữu cấp và dữ liệu cần thiết khi chạy RainMaker, theo mặc định bằng giao diện do thành phần flash nvs cung cấp và cung cấp API cho nhà phát triển để sử dụng trực tiếp.
ii. Sử dụng cơ chế gọi lại để xử lý dữ liệu đám mây đường lên/đường xuống và tự động bỏ chặn dữ liệu đến lớp ứng dụng để nhà phát triển dễ dàng xử lý. Dành cho người yêu cũample, SDK RainMaker cung cấp các giao diện phong phú để thiết lập dữ liệu TSL (Ngôn ngữ đặc tả thứ), cần thiết để xác định mô hình TSL nhằm mô tả các thiết bị IoT và triển khai các chức năng như thời gian, đếm ngược và điều khiển bằng giọng nói. Đối với các tính năng tương tác cơ bản như thời gian, RainMaker SDK cung cấp giải pháp không cần phát triển và có thể được kích hoạt một cách đơn giản khi cần. Sau đó, Tác nhân RainMaker sẽ trực tiếp xử lý dữ liệu, gửi dữ liệu lên đám mây thông qua chủ đề MQTT được liên kết và phản hồi lại các thay đổi dữ liệu trong phần phụ trợ của đám mây thông qua cơ chế gọi lại.
3.2.3 Phần cuối đám mây
Phần phụ trợ đám mây được xây dựng trên AWS Serverless Computing và đạt được thông qua AWS Cognito (hệ thống quản lý danh tính), Amazon API Gateway, AWS Lambda (dịch vụ điện toán serverless), Amazon DynamoDB (cơ sở dữ liệu NoSQL), AWS IoT Core (lõi truy cập IoT cung cấp quyền truy cập MQTT và lọc quy tắc), Amazon Simple Email Service (dịch vụ thư đơn giản SES), Amazon CloudFront (mạng phân phối nhanh), Amazon Simple Queue Service (xếp hàng tin nhắn SQS) và Amazon S3 (dịch vụ lưu trữ nhóm). Nó nhằm mục đích tối ưu hóa khả năng mở rộng và bảo mật. Với ESP RainMaker, nhà phát triển có thể quản lý thiết bị mà không cần phải viết mã trên đám mây. Tin nhắn do thiết bị báo cáo được truyền tải một cách minh bạch tới
Chương 3. Giới thiệu về ESP RainMaker 23
ứng dụng khách hoặc các dịch vụ của bên thứ ba khác. Bảng 3.1 cho thấy các sản phẩm và chức năng đám mây AWS được sử dụng trong phần phụ trợ đám mây, cùng với nhiều sản phẩm và tính năng khác đang được phát triển.
Bảng 3.1. Các sản phẩm và chức năng đám mây AWS được phần phụ trợ đám mây sử dụng
Sản phẩm đám mây AWS được RainMaker sử dụng
Chức năng
AWS Cognito
Quản lý thông tin đăng nhập của người dùng và hỗ trợ đăng nhập của bên thứ ba
AWS Lambda
Triển khai logic nghiệp vụ cốt lõi của chương trình phụ trợ đám mây
Amazon Timestream Lưu trữ dữ liệu chuỗi thời gian
Amazon DynamoDB Lưu trữ thông tin cá nhân của khách hàng
Lõi IoT của AWS
Hỗ trợ giao tiếp MQTT
Amazon SES
Cung cấp dịch vụ gửi email
Amazon CloudFront Tăng tốc quản lý phụ trợ webTruy cập trang web
Amazon SQS
Chuyển tiếp tin nhắn từ AWS IoT Core
3.2.4 Máy khách RainMaker
Các ứng dụng khách của RainMaker, chẳng hạn như App và CLI, giao tiếp với phần phụ trợ đám mây thông qua API REST. Thông tin chi tiết và hướng dẫn về API REST có thể được tìm thấy trong tài liệu Swagger do Espressif cung cấp. Ứng dụng khách ứng dụng di động của RainMaker có sẵn cho cả hệ thống iOS và Android. Nó cho phép cung cấp, kiểm soát và chia sẻ thiết bị, cũng như tạo và kích hoạt các tác vụ đếm ngược cũng như kết nối với nền tảng của bên thứ ba. Nó có thể tự động tải giao diện người dùng và biểu tượng theo cấu hình được thiết bị báo cáo và hiển thị đầy đủ TSL của thiết bị.
Ví dụample, nếu đèn thông minh được xây dựng trên phiên bản cũ do RainMaker SDK cung cấpamples, biểu tượng và giao diện người dùng của bóng đèn sẽ được tải tự động khi quá trình cung cấp hoàn tất. Người dùng có thể thay đổi màu sắc và độ sáng của đèn thông qua giao diện và đạt được sự kiểm soát của bên thứ ba bằng cách liên kết Alexa Smart Home Skill hoặc Google Smart Home Actions với tài khoản ESP RainMaker của họ. Hình 3.4 hiển thị biểu tượng và giao diện người dùng cũampcác tập tin bóng đèn tương ứng trên Alexa, Google Home và Ứng dụng ESP RainMaker.
24 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
(a) Ví dụample – Alexa
(b) Ví dụample – Trang chủ Google
(c) Ví dụample – ESP RainMaker
Hình 3.4. Ví dụamptập tin biểu tượng và giao diện người dùng của bóng đèn trên ứng dụng Alexa, Google Home và ESP RainMaker
3.3 Thực hành: Những điểm chính để phát triển với ESP RainMaker
Sau khi lớp trình điều khiển thiết bị đã được hoàn thành, các nhà phát triển có thể bắt đầu tạo mô hình TSL và xử lý dữ liệu đường xuống bằng cách sử dụng các API do RainMaker SDK cung cấp, đồng thời kích hoạt các dịch vụ cơ bản của ESP RainMaker dựa trên định nghĩa và yêu cầu của sản phẩm.
Chương 3. Giới thiệu về ESP RainMaker 25
Phần 9.4 của cuốn sách này sẽ giải thích cách triển khai đèn thông minh LED trong RainMaker. Trong quá trình gỡ lỗi, nhà phát triển có thể sử dụng các công cụ CLI trong RainMaker SDK để giao tiếp với đèn thông minh (hoặc gọi API REST từ Swagger).
Chương 10 sẽ trình bày chi tiết cách sử dụng API REST trong việc phát triển ứng dụng điện thoại thông minh. Việc nâng cấp OTA của đèn thông minh LED sẽ được đề cập trong Chương 11. Nếu các nhà phát triển đã bật tính năng giám sát từ xa của ESP Insights, phần phụ trợ quản lý ESP RainMaker sẽ hiển thị dữ liệu của ESP Insights. Chi tiết sẽ được trình bày ở Chương 15.
ESP RainMaker hỗ trợ triển khai riêng tư, khác với máy chủ RainMaker công cộng ở những điểm sau:
Dịch vụ yêu cầu Để tạo chứng chỉ trong các triển khai riêng tư, bắt buộc phải sử dụng CLI quản trị RainMaker thay vì Yêu cầu. Với máy chủ công cộng, các nhà phát triển phải được cấp quyền quản trị viên để thực hiện nâng cấp chương trình cơ sở, nhưng điều đó là không mong muốn trong quá trình triển khai thương mại. Do đó, không thể cung cấp dịch vụ xác thực riêng biệt để tự xác nhận cũng như quyền quản trị đối với yêu cầu xác nhận do máy chủ điều khiển hoặc hỗ trợ.
Ứng dụng điện thoại Trong quá trình triển khai riêng tư, các ứng dụng cần được cấu hình và biên dịch riêng biệt để đảm bảo rằng hệ thống tài khoản không thể tương tác được.
Đăng nhập bên thứ 3 và tích hợp giọng nói Nhà phát triển phải định cấu hình riêng thông qua tài khoản Nhà phát triển Google và Apple để cho phép đăng nhập bên thứ 3, cũng như tích hợp Alexa Skill và Google Voice Assistant.
MẸO Để biết chi tiết về triển khai đám mây, vui lòng truy cập https://customer.rainmaker.espressif. com. Về phần sụn, việc di chuyển từ máy chủ công cộng sang máy chủ riêng chỉ yêu cầu thay thế chứng chỉ thiết bị, điều này giúp cải thiện đáng kể hiệu quả di chuyển và giảm chi phí di chuyển cũng như gỡ lỗi thứ cấp.
3.4 Tính năng của ESP RainMaker
Các tính năng của ESP RainMaker chủ yếu nhắm vào ba khía cạnh – quản lý người dùng, người dùng cuối và quản trị viên. Tất cả các tính năng đều được hỗ trợ ở cả máy chủ công cộng và máy chủ riêng trừ khi có quy định khác.
3.4.1 Quản lý người dùng
Các tính năng quản lý người dùng cho phép người dùng cuối đăng ký, đăng nhập, thay đổi mật khẩu, lấy lại mật khẩu, v.v.
26 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
Đăng ký và đăng nhập Các phương thức đăng ký và đăng nhập được RainMaker hỗ trợ bao gồm: · ID email + Mật khẩu · Số điện thoại + Mật khẩu · Tài khoản Google · Tài khoản Apple · Tài khoản GitHub (chỉ máy chủ công cộng) · Tài khoản Amazon (chỉ máy chủ riêng)
LƯU Ý Đăng ký bằng Google/Amazon chia sẻ địa chỉ email của người dùng với RainMaker. Đăng ký bằng cách sử dụng Apple chia sẻ một địa chỉ giả mà Apple chỉ định cho người dùng dành riêng cho dịch vụ RainMaker. Tài khoản RainMaker sẽ được tạo tự động cho người dùng đăng nhập bằng tài khoản Google, Apple hoặc Amazon lần đầu tiên.
Thay đổi mật khẩu Chỉ hợp lệ cho thông tin đăng nhập dựa trên id email/số điện thoại. Tất cả các phiên hoạt động khác sẽ bị đăng xuất sau khi thay đổi mật khẩu. Theo hành vi của AWS Cognito, các phiên đăng xuất có thể duy trì hoạt động tối đa 1 giờ.
Lấy lại mật khẩu Chỉ hợp lệ cho thông tin đăng nhập dựa trên id email/số điện thoại.
3.4.2 Tính năng của người dùng cuối
Các tính năng dành cho người dùng cuối bao gồm điều khiển và giám sát cục bộ và từ xa, lập lịch, nhóm thiết bị, chia sẻ thiết bị, thông báo đẩy và tích hợp bên thứ ba.
Điều khiển và giám sát từ xa · Truy vấn cấu hình, giá trị tham số và trạng thái kết nối cho một hoặc tất cả các thiết bị. · Đặt thông số cho một hoặc nhiều thiết bị.
Kiểm soát và giám sát cục bộ Điện thoại di động và thiết bị cần được kết nối với cùng một mạng để kiểm soát cục bộ.
Lập kế hoạch · Người dùng đặt trước một số hành động nhất định tại một thời điểm cụ thể. · Không cần kết nối Internet cho thiết bị khi thực hiện lịch trình. · Một lần hoặc lặp lại (bằng cách chỉ định ngày) cho một hoặc nhiều thiết bị.
Nhóm thiết bị Hỗ trợ nhóm trừu tượng đa cấp Siêu dữ liệu nhóm có thể được sử dụng để tạo cấu trúc Phòng chính.
Chương 3. Giới thiệu về ESP RainMaker 27
Chia sẻ thiết bị Một hoặc nhiều thiết bị có thể được chia sẻ với một hoặc nhiều người dùng.
Thông báo đẩy Người dùng cuối sẽ nhận được thông báo đẩy cho các sự kiện như · Đã thêm/xóa (các) thiết bị mới · Thiết bị được kết nối với đám mây · Thiết bị bị ngắt kết nối khỏi đám mây · Yêu cầu chia sẻ thiết bị được tạo/chấp nhận/từ chối · Thông báo cảnh báo do thiết bị báo cáo
Tích hợp của bên thứ ba Alexa và Google Voice Assistant được hỗ trợ để điều khiển các thiết bị RainMaker, bao gồm đèn, công tắc, ổ cắm, quạt và cảm biến nhiệt độ.
3.4.3 Tính năng quản trị
Các tính năng quản trị viên cho phép quản trị viên triển khai đăng ký thiết bị, nhóm thiết bị và nâng cấp OTA cũng như view số liệu thống kê và dữ liệu ESP Insights.
Đăng ký thiết bị Tạo chứng chỉ thiết bị và đăng ký với Quản trị viên CLI (chỉ máy chủ riêng).
Nhóm thiết bị Tạo các nhóm trừu tượng hoặc có cấu trúc dựa trên thông tin thiết bị (chỉ máy chủ riêng).
Nâng cấp qua mạng (OTA) Tải chương trình cơ sở dựa trên phiên bản và kiểu máy lên một hoặc nhiều thiết bị hoặc một nhóm Giám sát, hủy hoặc lưu trữ các công việc OTA.
View thống kê Viewsố liệu thống kê có thể bao gồm: · Đăng ký thiết bị (chứng chỉ do quản trị viên đăng ký) · Kích hoạt thiết bị (thiết bị được kết nối lần đầu) · Tài khoản người dùng · Liên kết người dùng-thiết bị
View Dữ liệu thông tin chi tiết về ESP ViewDữ liệu ESP Insights có thể bao gồm: · Lỗi, cảnh báo và nhật ký tùy chỉnh · Báo cáo và phân tích sự cố · Lý do khởi động lại · Các số liệu như mức sử dụng bộ nhớ, RSSI, v.v. · Các số liệu và biến tùy chỉnh
28 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
3.5 Tóm tắt
Trong chương này, chúng tôi đã giới thiệu một số điểm khác biệt chính giữa triển khai RainMaker công khai và triển khai riêng tư. Giải pháp ESP RainMaker riêng do Espressif đưa ra có độ tin cậy cao và có khả năng mở rộng. Tất cả các chip dòng ESP32 đều đã được kết nối và điều chỉnh phù hợp với AWS, giúp giảm đáng kể chi phí. Nhà phát triển có thể tập trung vào việc xác minh nguyên mẫu mà không cần phải tìm hiểu về các sản phẩm đám mây AWS. Chúng tôi cũng đã giải thích cách triển khai và các tính năng của ESP RainMaker cũng như một số điểm chính để phát triển bằng cách sử dụng nền tảng này.
Quét để tải xuống ESP RainMaker cho Android Quét để tải xuống ESP RainMaker cho iOS
Chương 3. Giới thiệu về ESP RainMaker 29
30 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
Chương Thiết lập 4 Môi trường phát triển
Chương này tập trung vào ESP-IDF, khung phát triển phần mềm chính thức cho ESP32-C3. Chúng tôi sẽ giải thích cách thiết lập môi trường trên các hệ điều hành khác nhau, đồng thời giới thiệu cấu trúc dự án và hệ thống xây dựng của ESP-IDF cũng như cách sử dụng các công cụ phát triển liên quan. Sau đó chúng tôi sẽ trình bày quá trình biên dịch và chạy của một exampdự án, đồng thời đưa ra lời giải thích chi tiết về nhật ký đầu ra ở mỗi giâytage.
4.1 Kết thúc ESP-IDFview
ESP-IDF (Khung phát triển IoT của Espressif) là khung phát triển IoT toàn diện do Espressif Technology cung cấp. Nó sử dụng C/C++ làm ngôn ngữ phát triển chính và hỗ trợ biên dịch chéo trong các hệ điều hành chính thống như Linux, Mac và Windows. Người cũampCác chương trình trong cuốn sách này được phát triển bằng ESP-IDF, cung cấp các tính năng sau: · Trình điều khiển cấp hệ thống SoC. ESP-IDF bao gồm trình điều khiển cho ESP32, ESP32-S2, ESP32-C3,
và các loại chip khác. Các trình điều khiển này bao gồm thư viện ngoại vi mức thấp (LL), thư viện lớp trừu tượng phần cứng (HAL), hỗ trợ RTOS và phần mềm trình điều khiển lớp trên, v.v. · Các thành phần thiết yếu. ESP-IDF kết hợp các thành phần cơ bản cần thiết để phát triển IoT. Điều này bao gồm nhiều ngăn xếp giao thức mạng như HTTP và MQTT, khung quản lý nguồn với điều chế tần số động và các tính năng như Mã hóa Flash và Khởi động an toàn, v.v. · Các công cụ phát triển và sản xuất. ESP-IDF cung cấp các công cụ thường được sử dụng để xây dựng, flash và gỡ lỗi trong quá trình phát triển và sản xuất hàng loạt (xem Hình 4.1), chẳng hạn như hệ thống xây dựng dựa trên CMake, chuỗi công cụ biên dịch chéo dựa trên GCC và JTAG công cụ gỡ lỗi dựa trên OpenOCD, v.v. Điều đáng chú ý là mã ESP-IDF chủ yếu tuân thủ giấy phép nguồn mở Apache 2.0. Người dùng có thể phát triển phần mềm cá nhân hoặc thương mại mà không bị hạn chế trong khi tuân thủ các điều khoản của giấy phép nguồn mở. Ngoài ra, người dùng được cấp giấy phép bằng sáng chế vĩnh viễn miễn phí mà không có nghĩa vụ phải cung cấp nguồn mở cho bất kỳ sửa đổi nào được thực hiện đối với mã nguồn.
31
Hình 4.1.
Xây dựng, nhấp nháy và gỡ lỗi-
công cụ ging để phát triển và sản xuất hàng loạt
4.1.1 Phiên bản ESP-IDF
Mã ESP-IDF được lưu trữ trên GitHub dưới dạng một dự án nguồn mở. Hiện tại, có ba phiên bản chính: v3, v4 và v5. Mỗi phiên bản chính thường chứa nhiều phiên bản lật đổ khác nhau, chẳng hạn như v4.2, v4.3, v.v. Espressif Systems đảm bảo hỗ trợ sửa lỗi và vá bảo mật trong 30 tháng cho mỗi phiên bản phụ được phát hành. Do đó, các phiên bản sửa đổi của phiên bản lật đổ cũng được phát hành thường xuyên, chẳng hạn như v4.3.1, v4.2.2, v.v. Bảng 4.1 cho thấy trạng thái hỗ trợ của các phiên bản ESP-IDF khác nhau dành cho chip Espressif, cho biết chúng có ở trạng thái trước hay không.view stage (cung cấp hỗ trợ choview phiên bản có thể thiếu một số tính năng hoặc tài liệu nhất định) hoặc được hỗ trợ chính thức.
Bảng 4.1. Trạng thái hỗ trợ các phiên bản ESP-IDF khác nhau cho chip Espressif
Dòng ESP32 ESP32-S2 ESP32-C3 ESP32-S3 ESP32-C2 ESP32-H2
hỗ trợ v4.1
hỗ trợ v4.2 được hỗ trợ
hỗ trợ v4.3 được hỗ trợ được hỗ trợ
hỗ trợ v4.4 được hỗ trợ được hỗ trợ được hỗ trợ
trướcview
hỗ trợ v5.0 được hỗ trợ được hỗ trợ được hỗ trợ được hỗ trợ trướcview
32 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
Việc lặp lại các phiên bản chính thường liên quan đến việc điều chỉnh cấu trúc khung và cập nhật hệ thống biên dịch. Dành cho người yêu cũampTuy nhiên, thay đổi lớn từ v3.* sang v4.* là sự di chuyển dần dần của hệ thống xây dựng từ Make sang CMake. Mặt khác, việc lặp lại các phiên bản nhỏ thường đòi hỏi phải bổ sung các tính năng mới hoặc hỗ trợ các chip mới.
Điều quan trọng là phải phân biệt và hiểu mối quan hệ giữa các phiên bản ổn định và các nhánh GitHub. Các phiên bản được gắn nhãn là v*.* hoặc v*.*.* đại diện cho các phiên bản ổn định đã vượt qua thử nghiệm nội bộ hoàn chỉnh của Espressif. Sau khi sửa, mã, chuỗi công cụ và tài liệu phát hành cho cùng một phiên bản không thay đổi. Tuy nhiên, các nhánh GitHub (ví dụ: nhánh phát hành/v4.3) trải qua quá trình cam kết mã thường xuyên, thường là hàng ngày. Do đó, hai đoạn mã trong cùng một nhánh có thể khác nhau, đòi hỏi các nhà phát triển phải kịp thời cập nhật mã của mình cho phù hợp.
4.1.2 Quy trình làm việc của ESP-IDF Git
Espressif tuân theo quy trình làm việc Git cụ thể cho ESP-IDF, được nêu như sau:
· Những thay đổi mới được thực hiện trên nhánh chính, nhánh này đóng vai trò là nhánh phát triển chính. Phiên bản ESP-IDF trên nhánh chính luôn mang -dev tag để chỉ ra rằng nó hiện đang được phát triển, chẳng hạn như v4.3-dev. Những thay đổi trên nhánh chính trước tiên sẽ được thực hiện lạiviewđược chỉnh sửa và thử nghiệm trong kho lưu trữ nội bộ của Espressif, sau đó được đẩy lên GitHub sau khi quá trình thử nghiệm tự động hoàn tất.
· Khi một phiên bản mới đã hoàn thành việc phát triển tính năng trên nhánh chính và đáp ứng các tiêu chí để tham gia thử nghiệm beta, phiên bản đó sẽ chuyển sang nhánh mới, chẳng hạn như bản phát hành/v4.3. Ngoài ra, chi nhánh mới này còn tagđược coi là phiên bản tiền phát hành, như v4.3-beta1. Các nhà phát triển có thể tham khảo nền tảng GitHub để truy cập danh sách đầy đủ các chi nhánh và tags cho ESP-IDF. Điều quan trọng cần lưu ý là phiên bản beta (phiên bản tiền phát hành) vẫn có thể có một số vấn đề đã biết đáng kể. Khi phiên bản beta trải qua quá trình thử nghiệm liên tục, các bản sửa lỗi sẽ được thêm vào cả phiên bản này và nhánh chính cùng một lúc. Trong khi đó, nhánh chính có thể đã bắt đầu phát triển các tính năng mới cho phiên bản tiếp theo. Khi quá trình thử nghiệm gần hoàn tất, nhãn ứng cử viên phát hành (rc) sẽ được thêm vào nhánh, cho biết rằng đó là ứng cử viên tiềm năng cho bản phát hành chính thức, chẳng hạn như v4.3-rc1. Tại thời điểm nàytage, nhánh vẫn là phiên bản tiền phát hành.
· Nếu không có lỗi lớn nào được phát hiện hoặc báo cáo, phiên bản tiền phát hành cuối cùng sẽ nhận được nhãn phiên bản chính (ví dụ: v5.0) hoặc nhãn phiên bản phụ (ví dụ: v4.3) và trở thành phiên bản phát hành chính thức, được ghi lại trong trang ghi chú phát hành. Sau đó, mọi lỗi được xác định trong phiên bản này đều được sửa trên nhánh phát hành. Sau khi hoàn tất kiểm tra thủ công, nhánh sẽ được gán nhãn phiên bản sửa lỗi (ví dụ: v4.3.2), nhãn này cũng được phản ánh trên trang ghi chú phát hành.
Chương 4. Thiết lập môi trường phát triển 33
4.1.3 Chọn phiên bản phù hợp
Do ESP-IDF chính thức bắt đầu hỗ trợ ESP32-C3 từ phiên bản v4.3 và v4.4 vẫn chưa được phát hành chính thức tại thời điểm viết cuốn sách này nên phiên bản được sử dụng trong cuốn sách này là v4.3.2, đây là phiên bản sửa đổi của v4.3. Tuy nhiên, điều quan trọng cần lưu ý là vào thời điểm bạn đọc cuốn sách này, phiên bản v4.4 hoặc mới hơn có thể đã có sẵn. Khi chọn phiên bản, chúng tôi khuyên bạn nên làm như sau:
· Đối với các nhà phát triển mới bắt đầu, nên chọn phiên bản v4.3 ổn định hoặc phiên bản sửa đổi phù hợp với phiên bản cũampphiên bản được sử dụng trong cuốn sách này.
· Đối với mục đích sản xuất hàng loạt, nên sử dụng phiên bản ổn định mới nhất để được hưởng lợi từ hỗ trợ kỹ thuật cập nhật nhất.
· Nếu bạn có ý định thử nghiệm chip mới hoặc khám phá các tính năng sản phẩm mới, vui lòng sử dụng nhánh chính. Phiên bản mới nhất chứa tất cả các tính năng mới nhất, nhưng hãy nhớ rằng có thể có những lỗi đã biết hoặc chưa biết.
· Nếu phiên bản ổn định đang được sử dụng không bao gồm các tính năng mới mong muốn và bạn muốn giảm thiểu rủi ro liên quan đến nhánh chính, hãy cân nhắc sử dụng nhánh phát hành tương ứng, chẳng hạn như nhánh phát hành/v4.4. Kho lưu trữ GitHub của Espressif trước tiên sẽ tạo nhánh phát hành/v4.4 và sau đó phát hành phiên bản v4.4 ổn định dựa trên ảnh chụp nhanh lịch sử cụ thể của nhánh này, sau khi hoàn thành tất cả quá trình phát triển và thử nghiệm tính năng.
4.1.4 Trênview của Thư mục SDK ESP-IDF
SDK ESP-IDF bao gồm hai thư mục chính: Esp-idf và .espressif. Cái trước chứa mã nguồn của kho lưu trữ ESP-IDF files và tập lệnh biên dịch, trong khi tập lệnh biên dịch chủ yếu lưu trữ chuỗi công cụ biên dịch và phần mềm khác. Việc làm quen với hai thư mục này sẽ giúp các nhà phát triển tận dụng tốt hơn các tài nguyên sẵn có và đẩy nhanh quá trình phát triển. Cấu trúc thư mục của ESP-IDF được mô tả dưới đây:
(1) Thư mục mã kho lưu trữ ESP-IDF (/esp/esp-idf), như trong Hình 4.2.
Một. Thành phần thư mục thành phần
Thư mục cốt lõi này tích hợp nhiều thành phần phần mềm thiết yếu của ESP-IDF. Không có mã dự án nào có thể được biên dịch mà không dựa vào các thành phần trong thư mục này. Nó bao gồm hỗ trợ trình điều khiển cho nhiều loại chip Espressif khác nhau. Từ thư viện LL và giao diện thư viện HAL cho các thiết bị ngoại vi đến Trình điều khiển và Ảo cấp cao hơn File Hỗ trợ lớp hệ thống (VFS), nhà phát triển có thể chọn các thành phần thích hợp ở các cấp độ khác nhau cho nhu cầu phát triển của mình. ESP-IDF cũng hỗ trợ nhiều ngăn xếp giao thức mạng tiêu chuẩn như TCP/IP, HTTP, MQTT, WebỔ cắm, v.v. Nhà phát triển có thể sử dụng các giao diện quen thuộc như Ổ cắm để xây dựng các ứng dụng mạng. Các thành phần cung cấp sự hiểu biết
34 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
Hình 4.2. Thư mục mã kho lưu trữ ESP-IDF
nhiều chức năng và có thể dễ dàng tích hợp vào các ứng dụng, cho phép các nhà phát triển chỉ tập trung vào logic nghiệp vụ. Một số thành phần phổ biến bao gồm: · driver: Thành phần này chứa các chương trình driver ngoại vi cho nhiều loại Espressif
loạt chip, chẳng hạn như GPIO, I2C, SPI, UART, LEDC (PWM), v.v. Các chương trình trình điều khiển ngoại vi trong thành phần này cung cấp các giao diện trừu tượng độc lập với chip. Mỗi thiết bị ngoại vi có một tiêu đề chung file (chẳng hạn như gpio.h), loại bỏ nhu cầu giải quyết các câu hỏi hỗ trợ dành riêng cho chip khác nhau. · Esp_wifi: Wi-Fi, như một thiết bị ngoại vi đặc biệt, được coi như một thành phần riêng biệt. Nó bao gồm nhiều API như khởi tạo các chế độ trình điều khiển Wi-Fi khác nhau, cấu hình tham số và xử lý sự kiện. Một số chức năng nhất định của thành phần này được cung cấp dưới dạng thư viện liên kết tĩnh. ESP-IDF cũng cung cấp tài liệu trình điều khiển toàn diện để dễ sử dụng.
Chương 4. Thiết lập môi trường phát triển 35
· freertos: Thành phần này chứa mã FreeRTOS hoàn chỉnh. Ngoài việc cung cấp hỗ trợ toàn diện cho hệ điều hành này, Espressif còn mở rộng hỗ trợ cho các chip lõi kép. Đối với các chip lõi kép như ESP32 và ESP32-S3, người dùng có thể tạo tác vụ trên các lõi cụ thể.
b. Tài liệu thư mục tài liệu
Thư mục này chứa các tài liệu phát triển liên quan đến ESP-IDF, bao gồm Hướng dẫn bắt đầu, Hướng dẫn tham khảo API, Hướng dẫn phát triển, v.v.
LƯU Ý Sau khi được biên soạn bằng các công cụ tự động, nội dung của thư mục này được triển khai tại https://docs.espressif.com/projects/esp-idf. Hãy đảm bảo chuyển mục tiêu tài liệu sang ESP32-C3 và chọn phiên bản ESP-IDF được chỉ định.
c. Công cụ công cụ tập lệnh
Thư mục này chứa các công cụ giao diện người dùng biên dịch thường được sử dụng như idf.py và công cụ thiết bị đầu cuối màn hình idf_monitor.py, v.v. Thư mục con cmake cũng chứa tập lệnh lõi files của hệ thống biên dịch, làm nền tảng cho việc triển khai các quy tắc biên dịch ESP-IDF. Khi thêm các biến môi trường, nội dung trong thư mục công cụ sẽ được thêm vào biến môi trường hệ thống, cho phép idf.py được thực thi trực tiếp trong đường dẫn dự án.
d. Bán tạiamptập tin chương trình cũamptập
Thư mục này bao gồm một bộ sưu tập lớn các ESP-IDF cũampcác chương trình thể hiện việc sử dụng các API thành phần. Người cũampcác tập tin được tổ chức thành nhiều thư mục con khác nhau dựa trên danh mục của chúng:
· bắt đầu: Thư mục con này bao gồm các ví dụ cấp đầu vàoamples như “hello world” và “blink” để giúp người dùng nắm bắt những điều cơ bản.
· Bluetooth: Bạn có thể tìm thấy Bluetooth liên quan đếnamples tại đây, bao gồm Bluetooth LE Mesh, Bluetooth LE HID, BluFi, v.v.
· wifi: Thư mục con này tập trung vào Wi-Fi exampcác tập tin, bao gồm các chương trình cơ bản như Wi-Fi SoftAP, Wi-Fi Station, Espnow, cũng như giao thức truyền thông độc quyền, ví dụ:amples từ Espressif. Nó cũng bao gồm nhiều lớp ứng dụng cũampcác tập tin dựa trên Wi-Fi, chẳng hạn như Iperf, Sniffer và Smart Config.
· thiết bị ngoại vi: Thư mục con mở rộng này còn được chia thành nhiều thư mục con dựa trên tên thiết bị ngoại vi. Nó chủ yếu chứa trình điều khiển ngoại vi cũamptập tin dành cho chip Espressif, với mỗi tập tin cũamptập tin có một số ví dụ phụamples. Ví dụ: thư mục con gpio bao gồm hai examples: Bàn phím ma trận GPIO và GPIO. Điều quan trọng cần lưu ý là không phải tất cả người yêu cũampcác tập tin trong thư mục này có thể áp dụng cho ESP32-C3.
36 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
Ví dụample, người yêu cũampcác tập tin trong usb/host chỉ áp dụng được cho các thiết bị ngoại vi có phần cứng USB Host (chẳng hạn như ESP32-S3) và ESP32-C3 không có thiết bị ngoại vi này. Hệ thống biên dịch thường cung cấp lời nhắc khi đặt mục tiêu. README file của mỗi người yêu cũample liệt kê các chip được hỗ trợ. · giao thức: Thư mục con này chứa exampcác tập tin dành cho nhiều giao thức truyền thông khác nhau, bao gồm MQTT, HTTP, HTTP Server, PPPoS, Modbus, mDNS, SNTP, bao gồm nhiều loại giao thức truyền thông nhưampcác tập tin cần thiết để phát triển IoT. · cung cấp: Tại đây, bạn sẽ tìm thấy việc cung cấpamptập tin dành cho các phương pháp khác nhau, chẳng hạn như cấp phép Wi-Fi và cấp phép Bluetooth LE. · hệ thống: Thư mục con này bao gồm hệ thống gỡ lỗi cũampcác tập tin (ví dụ: theo dõi ngăn xếp, theo dõi thời gian chạy, giám sát tác vụ), quản lý nguồn điện cũamptập tin (ví dụ: các chế độ ngủ khác nhau, bộ đồng xử lý) và ví dụampcác tập tin liên quan đến các thành phần hệ thống phổ biến như thiết bị đầu cuối bảng điều khiển, vòng lặp sự kiện và bộ hẹn giờ hệ thống. · lưu trữ: Trong thư mục con này, bạn sẽ khám phá raampít hơn tất cả file các hệ thống và cơ chế lưu trữ được hỗ trợ bởi ESP-IDF (chẳng hạn như đọc và ghi Flash, thẻ SD và các phương tiện lưu trữ khác), cũng nhưampcác tập tin lưu trữ cố định (NVS), FatFS, SPIFFS và các tập tin khác file các hoạt động của hệ thống. · bảo mật: Thư mục con này chứa exampcác tập tin liên quan đến mã hóa flash. (2) Thư mục chuỗi công cụ biên dịch ESP-IDF (/.espressif), như trong Hình 4.3.
Hình 4.3. Thư mục chuỗi công cụ biên dịch ESP-IDF
Chương 4. Thiết lập môi trường phát triển 37
Một. thư mục phân phối phần mềm dist
Chuỗi công cụ ESP-IDF và phần mềm khác được phân phối dưới dạng gói nén. Trong quá trình cài đặt, trước tiên, công cụ cài đặt sẽ tải gói nén xuống thư mục dist, sau đó giải nén nó vào thư mục đã chỉ định. Sau khi quá trình cài đặt hoàn tất, nội dung trong thư mục này có thể được xóa một cách an toàn.
b. Thư mục môi trường ảo Python python env
Các phiên bản khác nhau của ESP-IDF dựa trên các phiên bản cụ thể của gói Python. Việc cài đặt các gói này trực tiếp trên cùng một máy chủ có thể dẫn đến xung đột giữa các phiên bản gói. Để giải quyết vấn đề này, ESP-IDF sử dụng môi trường ảo Python để tách biệt các phiên bản gói khác nhau. Với cơ chế này, nhà phát triển có thể cài đặt nhiều phiên bản ESP-IDF trên cùng một máy chủ và dễ dàng chuyển đổi giữa chúng bằng cách nhập các biến môi trường khác nhau.
c. Công cụ thư mục chuỗi công cụ biên dịch ESP-IDF
Thư mục này chủ yếu chứa các công cụ biên dịch chéo cần thiết để biên dịch các dự án ESP-IDF, chẳng hạn như công cụ CMake, công cụ xây dựng Ninja và chuỗi công cụ gcc tạo ra chương trình thực thi cuối cùng. Ngoài ra, thư mục này chứa thư viện chuẩn của ngôn ngữ C/C++ cùng với tiêu đề tương ứng fileS. Nếu một chương trình tham chiếu đến tiêu đề hệ thống file Giống như #include , chuỗi công cụ biên dịch sẽ định vị stdio.h file trong thư mục này.
4.2 Thiết lập môi trường phát triển ESP-IDF
Môi trường phát triển ESP-IDF hỗ trợ các hệ điều hành phổ thông như Windows, Linux và macOS. Phần này sẽ giới thiệu cách thiết lập môi trường phát triển trên mỗi hệ thống. Nên phát triển ESP32-C3 trên hệ thống Linux, sẽ được giới thiệu chi tiết tại đây. Nhiều hướng dẫn có thể áp dụng trên nhiều nền tảng do sự giống nhau của các công cụ phát triển. Vì vậy, nên đọc kỹ nội dung của phần này.
LƯU Ý Bạn có thể tham khảo các tài liệu trực tuyến có sẵn tại https://bookc3.espressif.com/esp32c3, trong đó cung cấp các lệnh được đề cập trong phần này.
4.2.1 Thiết lập môi trường phát triển ESP-IDF trên Linux
Các công cụ phát triển và gỡ lỗi GNU cần thiết cho môi trường phát triển ESP-IDF có nguồn gốc từ hệ thống Linux. Ngoài ra, thiết bị đầu cuối dòng lệnh trong Linux rất mạnh mẽ và thân thiện với người dùng, khiến nó trở thành lựa chọn lý tưởng để phát triển ESP32-C3. Bạn có thể
38 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
hãy chọn bản phân phối Linux ưa thích của bạn, nhưng chúng tôi khuyên bạn nên sử dụng Ubuntu hoặc các hệ thống dựa trên Debian khác. Phần này cung cấp hướng dẫn thiết lập môi trường phát triển ESP-IDF trên Ubuntu 20.04.
1. Cài đặt các gói cần thiết
Mở một thiết bị đầu cuối mới và thực hiện lệnh sau để cài đặt tất cả các gói cần thiết. Lệnh sẽ tự động bỏ qua các gói đã được cài đặt.
$ sudo apt-get cài đặt git wget flex bison gperf python3 python3-pip python3setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
MẸO Bạn cần sử dụng tài khoản và mật khẩu quản trị viên cho lệnh trên. Theo mặc định, sẽ không có thông tin nào được hiển thị khi nhập mật khẩu. Chỉ cần nhấn phím “Enter” để tiếp tục quy trình.
Git là một công cụ quản lý mã khóa trong ESP-IDF. Sau khi thiết lập thành công môi trường phát triển, bạn có thể sử dụng lệnh git log để view tất cả các thay đổi mã được thực hiện kể từ khi tạo ESP-IDF. Ngoài ra, Git còn được sử dụng trong ESP-IDF để xác nhận thông tin phiên bản, cần thiết để cài đặt đúng chuỗi công cụ tương ứng với các phiên bản cụ thể. Cùng với Git, các công cụ hệ thống quan trọng khác bao gồm Python. ESP-IDF kết hợp nhiều tập lệnh tự động hóa được viết bằng Python. Các công cụ như CMake, Ninja-build và Ccache được sử dụng rộng rãi trong các dự án C/C++ và đóng vai trò là công cụ xây dựng và biên dịch mã mặc định trong ESP-IDF. libusb-1.0-0 và dfu-util là các trình điều khiển chính được sử dụng cho giao tiếp nối tiếp USB và ghi chương trình cơ sở. Sau khi cài đặt các gói phần mềm, bạn có thể sử dụng lệnh apt show để nhận mô tả chi tiết về từng gói. Dành cho người yêu cũamptập tin, sử dụng apt show git để in thông tin mô tả cho công cụ Git.
Hỏi: Phải làm gì nếu phiên bản Python không được hỗ trợ? Trả lời: ESP-IDF v4.3 yêu cầu phiên bản Python không thấp hơn v3.6. Đối với các phiên bản Ubuntu cũ hơn, vui lòng tải xuống và cài đặt thủ công phiên bản Python cao hơn và đặt Python3 làm môi trường Python mặc định. Bạn có thể tìm hướng dẫn chi tiết bằng cách tìm kiếm với từ khóa update-alternatives python.
2. Tải mã kho lưu trữ ESP-IDF
Mở một thiết bị đầu cuối và tạo một thư mục có tên đặc biệt trong thư mục chính của bạn bằng lệnh mkdir. Bạn có thể chọn tên khác cho thư mục nếu muốn. Sử dụng lệnh cd để vào thư mục.
Chương 4. Thiết lập môi trường phát triển 39
$ mkdir -p /esp $ cd /esp
Sử dụng lệnh git clone để tải xuống mã kho lưu trữ ESP-IDF, như hiển thị bên dưới:
$ git clone -b v4.3.2 –recursive https://github.com/espressif/esp-idf.git
Trong lệnh trên, tham số -b v4.3.2 chỉ định phiên bản cần tải xuống (trong trường hợp này là phiên bản 4.3.2). Tham số –recursive đảm bảo rằng tất cả các kho lưu trữ phụ của ESP-IDF đều được tải xuống đệ quy. Thông tin về các kho lưu trữ phụ có thể được tìm thấy trong .gitmodules file.
3. Cài đặt chuỗi công cụ phát triển ESP-IDF
Espressif cung cấp tập lệnh install.sh tự động để tải xuống và cài đặt chuỗi công cụ. Tập lệnh này kiểm tra phiên bản ESP-IDF hiện tại và môi trường hệ điều hành, sau đó tải xuống và cài đặt phiên bản thích hợp của gói công cụ Python và chuỗi công cụ biên dịch. Đường dẫn cài đặt mặc định cho chuỗi công cụ là /.espressif. Tất cả những gì bạn cần làm là điều hướng đến thư mục Esp-idf và chạy install.sh.
$ cd /esp/esp-idf $ ./install.sh
Nếu bạn cài đặt tool chain thành công, terminal sẽ hiển thị:
Xong rồi!
Tại thời điểm này, bạn đã thiết lập thành công môi trường phát triển ESP-IDF.
4.2.2 Thiết lập môi trường phát triển ESP-IDF trên Windows
1. Tải xuống trình cài đặt công cụ ESP-IDF
MẸO Bạn nên thiết lập môi trường phát triển ESP-IDF trên Windows 10 trở lên. Bạn có thể tải xuống trình cài đặt từ https://dl.espressif.com/dl/esp-idf/. Trình cài đặt cũng là một phần mềm nguồn mở và mã nguồn của nó có thể được viewđược chỉnh sửa tại https: //github.com/espressif/idf-installer.
· Trình cài đặt công cụ ESP-IDF trực tuyến
Trình cài đặt này tương đối nhỏ, kích thước khoảng 4 MB, các gói và mã khác sẽ được tải xuống trong quá trình cài đặt. sự tiến bộtage của trình cài đặt trực tuyến là không chỉ có thể tải xuống các gói phần mềm và mã theo yêu cầu trong quá trình cài đặt mà còn cho phép cài đặt tất cả các bản phát hành có sẵn của ESP-IDF và nhánh mới nhất của mã GitHub (chẳng hạn như nhánh chính) . người thất vọngtage là nó yêu cầu kết nối mạng trong quá trình cài đặt, điều này có thể gây ra lỗi cài đặt do mạng có vấn đề.
40 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
· Trình cài đặt công cụ ESP-IDF ngoại tuyến Trình cài đặt này lớn hơn, kích thước khoảng 1 GB và chứa tất cả các gói phần mềm và mã cần thiết để thiết lập môi trường. Ưu điểm chínhtage của trình cài đặt ngoại tuyến là nó có thể được sử dụng trên các máy tính không có quyền truy cập Internet và thường có tỷ lệ cài đặt thành công cao hơn. Cần lưu ý rằng trình cài đặt ngoại tuyến chỉ có thể cài đặt các bản phát hành ổn định của ESP-IDF được xác định bởi v*.* hoặc v*.*.*.
2. Chạy trình cài đặt công cụ ESP-IDF Sau khi tải xuống phiên bản phù hợp của trình cài đặt (ví dụ: lấy Công cụ ESP-IDF ngoại tuyến 4.3.2ample ở đây), bấm đúp vào exe file để khởi chạy giao diện cài đặt ESP-IDF. Phần sau đây trình bày cách cài đặt ESP-IDF phiên bản ổn định v4.3.2 bằng trình cài đặt ngoại tuyến.
(1) Trong giao diện “Chọn ngôn ngữ cài đặt” như trong Hình 4.4, chọn ngôn ngữ sẽ sử dụng từ danh sách thả xuống.
Hình 4.4. Giao diện “Chọn ngôn ngữ cài đặt” (2) Sau khi chọn ngôn ngữ nhấn “OK” sẽ hiện ra giao diện “Thỏa thuận cấp phép”
(xem Hình 4.5). Sau khi đọc kỹ thỏa thuận cấp phép cài đặt, hãy chọn “Tôi chấp nhận thỏa thuận” và nhấp vào “Tiếp theo”.
Hình 4.5. Giao diện “Thỏa thuận cấp phép” Chương 4. Thiết lập môi trường phát triển 41
(3) Táiview cấu hình hệ thống trong giao diện “Kiểm tra hệ thống cài đặt trước” (xem Hình 4.6). Kiểm tra phiên bản Windows và thông tin phần mềm chống vi-rút đã cài đặt. Nhấp vào “Tiếp theo” nếu tất cả các mục cấu hình đều bình thường. Nếu không, bạn có thể nhấp vào “Nhật ký đầy đủ” để biết các giải pháp dựa trên các mục chính.
Hình 4.6. Giao diện “Kiểm tra hệ thống trước khi cài đặt” TIPS
Bạn có thể gửi nhật ký tới https://github.com/espressif/idf-installer/issues để được trợ giúp. (4) Chọn thư mục cài đặt ESP-IDF. Ở đây, chọn D:/.espressif, như minh họa trong
Hình 4.7 và nhấp vào “Tiếp theo”. Xin lưu ý rằng .espressif ở đây là một thư mục ẩn. Sau khi cài đặt hoàn tất, bạn có thể view nội dung cụ thể của thư mục này bằng cách mở file quản lý và hiển thị các mục ẩn.
Hình 4.7. Chọn thư mục cài đặt ESP-IDF 42 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
(5) Kiểm tra các thành phần cần cài đặt, như trong Hình 4.8. Bạn nên sử dụng tùy chọn mặc định, nghĩa là hoàn tất cài đặt, sau đó nhấp vào “Tiếp theo”.
Hình 4.8. Chọn các thành phần cần cài đặt (6) Xác nhận các thành phần sẽ được cài đặt và nhấp vào “Cài đặt” để bắt đầu quá trình cài đặt tự động
quá trình đình trệ, như thể hiện trong hình 4.9. Quá trình cài đặt có thể kéo dài hàng chục phút và thanh tiến trình của quá trình cài đặt được hiển thị trong Hình 4.10. Xin hãy kiên nhẫn chờ đợi.
Hình 4.9. Chuẩn bị cài đặt (7) Sau khi cài đặt hoàn tất, nên tích vào ô “Đăng ký ESP-IDF
Công cụ thực thi dưới dạng loại trừ Windows Defender…” để ngăn phần mềm chống vi-rút xóa fileS. Việc thêm các mục loại trừ cũng có thể bỏ qua quá trình quét thường xuyên bằng phần mềm chống vi-rút
Chương 4. Thiết lập môi trường phát triển 43
Hình 4.10. Phần mềm thanh tiến trình cài đặt, cải thiện đáng kể hiệu quả biên dịch mã của hệ thống Windows. Nhấp vào “Hoàn tất” để hoàn tất quá trình cài đặt môi trường phát triển, như trong Hình 4.11. Bạn có thể chọn kiểm tra “Chạy môi trường ESP-IDF PowerShell” hoặc “Chạy dấu nhắc lệnh ESP-IDF”. Chạy cửa sổ biên dịch trực tiếp sau khi cài đặt để đảm bảo môi trường phát triển hoạt động bình thường.
Hình 4.11. Quá trình cài đặt hoàn tất (8) Mở môi trường phát triển đã cài đặt trong danh sách chương trình (ESP-IDF 4.3
CMD hoặc ESP-IDF 4.3 PowerShell, như trong Hình 4.12) và biến môi trường ESP-IDF sẽ tự động được thêm khi chạy trong thiết bị đầu cuối. Sau đó, bạn có thể sử dụng lệnh idf.py để thực hiện các thao tác. CMD ESP-IDF 4.3 đã mở được hiển thị trong Hình 4.13. 44 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
Hình 4.12. Môi trường phát triển được cài đặt
Hình 4.13. ESP-IDF 4.3 CMD
4.2.3 Thiết lập môi trường phát triển ESP-IDF trên máy Mac
Quá trình cài đặt môi trường phát triển ESP-IDF trên hệ thống Mac cũng giống như trên hệ thống Linux. Các lệnh tải xuống mã kho lưu trữ và cài đặt chuỗi công cụ hoàn toàn giống nhau. Chỉ có các lệnh cài đặt gói phụ thuộc là hơi khác một chút. 1. Cài đặt các gói phụ thuộc Mở một thiết bị đầu cuối và cài đặt pip, công cụ quản lý gói Python, bằng cách chạy lệnh sau:
% sudo cài đặt dễ dàng pip
Cài đặt Homebrew, một công cụ quản lý gói dành cho macOS, bằng cách chạy lệnh sau:
% /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
Cài đặt các gói phụ thuộc cần thiết bằng cách chạy lệnh sau:
% brew python3 cài đặt cmake ninja ccache dfu-util
2. Tải xuống mã kho lưu trữ ESP-IDF Thực hiện theo các hướng dẫn được cung cấp trong phần 4.2.1 để tải xuống mã kho lưu trữ ESP-IDF. Các bước tương tự như khi tải xuống trên hệ thống Linux.
Chương 4. Thiết lập môi trường phát triển 45
3. Cài đặt chuỗi công cụ phát triển ESP-IDF
Làm theo hướng dẫn được cung cấp trong phần 4.2.1 để cài đặt chuỗi công cụ phát triển ESP-IDF. Các bước tương tự như cài đặt trên hệ thống Linux.
4.2.4 Cài đặt mã VS
Theo mặc định, SDK ESP-IDF không bao gồm công cụ chỉnh sửa mã (mặc dù trình cài đặt ESP-IDF mới nhất cho Windows cung cấp tùy chọn cài đặt ESP-IDF Eclipse). Bạn có thể sử dụng bất kỳ công cụ chỉnh sửa văn bản nào bạn chọn để chỉnh sửa mã và sau đó biên dịch nó bằng các lệnh đầu cuối.
Một công cụ chỉnh sửa mã phổ biến là VS Code (Visual Studio Code), đây là trình chỉnh sửa mã miễn phí và giàu tính năng với giao diện thân thiện với người dùng. Nó cung cấp nhiều loại plugins cung cấp các chức năng như điều hướng mã, tô sáng cú pháp, kiểm soát phiên bản Git và tích hợp thiết bị đầu cuối. Ngoài ra, Espressif đã phát triển một plugin chuyên dụng có tên Espressif IDF cho VS Code, giúp đơn giản hóa việc cấu hình và gỡ lỗi dự án.
Bạn có thể sử dụng lệnh code trong terminal để mở nhanh thư mục hiện tại trong VS Code. Ngoài ra, bạn có thể sử dụng phím tắt Ctrl+ để mở bảng điều khiển đầu cuối mặc định của hệ thống trong Mã VS.
MẸO Bạn nên sử dụng Mã VS để phát triển mã ESP32-C3. Tải xuống và cài đặt phiên bản mới nhất của VS Code tại https://code.visualstudio.com/.
4.2.5 Giới thiệu về Môi trường phát triển của bên thứ ba
Ngoài môi trường phát triển ESP-IDF chính thức, chủ yếu sử dụng ngôn ngữ C, ESP32-C3 còn hỗ trợ các ngôn ngữ lập trình chính thống khác và nhiều môi trường phát triển của bên thứ ba. Một số tùy chọn đáng chú ý bao gồm:
Arduino: một nền tảng nguồn mở cho cả phần cứng và phần mềm, hỗ trợ nhiều bộ vi điều khiển khác nhau, bao gồm cả ESP32-C3.
Nó sử dụng ngôn ngữ C++ và cung cấp API đơn giản hóa và tiêu chuẩn hóa, thường được gọi là ngôn ngữ Arduino. Arduino được sử dụng rộng rãi trong phát triển nguyên mẫu và bối cảnh giáo dục. Nó cung cấp một gói phần mềm có thể mở rộng và một IDE cho phép biên dịch và flash dễ dàng.
MicroPython: trình thông dịch ngôn ngữ Python 3 được thiết kế để chạy trên nền tảng vi điều khiển nhúng.
Với ngôn ngữ tập lệnh đơn giản, nó có thể truy cập trực tiếp vào các tài nguyên ngoại vi của ESP32-C3 (như UART, SPI và I2C) và các chức năng giao tiếp (như Wi-Fi và Bluetooth LE).
46 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
Điều này đơn giản hóa sự tương tác phần cứng. MicroPython, kết hợp với thư viện phép toán mở rộng của Python, cho phép triển khai các thuật toán phức tạp trên ESP32-C3, tạo điều kiện phát triển các ứng dụng liên quan đến AI. Là ngôn ngữ script nên không cần phải biên dịch lặp đi lặp lại; sửa đổi có thể được thực hiện và các tập lệnh có thể được thực thi trực tiếp.
NodeMCU: trình thông dịch ngôn ngữ LUA được phát triển cho chip dòng ESP.
Nó hỗ trợ hầu hết các chức năng ngoại vi của chip ESP và nhẹ hơn MicroPython. Tương tự như MicroPython, NodeMCU sử dụng ngôn ngữ tập lệnh, loại bỏ nhu cầu biên dịch lặp đi lặp lại.
Hơn nữa, ESP32-C3 còn hỗ trợ hệ điều hành NuttX và Zephyr. NuttX là hệ điều hành thời gian thực cung cấp giao diện tương thích POSIX, nâng cao tính di động của ứng dụng. Zephyr là một hệ điều hành thời gian thực nhỏ được thiết kế dành riêng cho các ứng dụng IoT. Nó bao gồm nhiều thư viện phần mềm cần thiết trong quá trình phát triển IoT, dần dần phát triển thành một hệ sinh thái phần mềm toàn diện.
Cuốn sách này không cung cấp hướng dẫn cài đặt chi tiết cho các môi trường phát triển nói trên. Bạn có thể cài đặt môi trường phát triển dựa trên yêu cầu của mình bằng cách làm theo các tài liệu và hướng dẫn tương ứng.
4.3 Hệ thống biên dịch ESP-IDF
4.3.1 Các khái niệm cơ bản về hệ thống biên dịch
Dự án ESP-IDF là tập hợp một chương trình chính có chức năng đầu vào và nhiều thành phần chức năng độc lập. Dành cho người yêu cũample, một dự án điều khiển các công tắc LED chủ yếu bao gồm một chương trình chính và một thành phần trình điều khiển điều khiển GPIO. Nếu bạn muốn nhận ra điều khiển từ xa LED, bạn cũng cần thêm ngăn xếp giao thức Wi-Fi, TCP/IP, v.v.
Hệ thống biên dịch có thể biên dịch, liên kết và tạo ra các tệp thực thi files (.bin) cho mã thông qua một bộ quy tắc xây dựng. Hệ thống biên dịch của phiên bản ESP-IDF v4.0 trở lên dựa trên CMake theo mặc định và tập lệnh biên dịch CMakeLists.txt có thể được sử dụng để kiểm soát hành vi biên dịch của mã. Ngoài việc hỗ trợ cú pháp cơ bản của CMake, hệ thống biên dịch ESP-IDF còn xác định một bộ quy tắc biên dịch mặc định và các hàm CMake, đồng thời bạn có thể viết tập lệnh biên dịch bằng các câu lệnh đơn giản.
4.3.2 Dự án File Kết cấu
Dự án là một thư mục chứa chương trình chính, các thành phần do người dùng định nghĩa và filecần thiết để xây dựng các ứng dụng thực thi, chẳng hạn như tập lệnh biên dịch, cấu hình
Chương 4. Thiết lập môi trường phát triển 47
files, bảng phân vùng, v.v. Các dự án có thể được sao chép và chuyển tiếp, và cùng một tệp thực thi file có thể được biên dịch và tạo trong các máy có cùng phiên bản môi trường phát triển ESP-IDF. Một dự án ESP-IDF điển hình file cấu trúc được thể hiện trong hình 4.14.
Hình 4.14. Dự án ESP-IDF tiêu biểu file cấu trúc Vì ESP-IDF hỗ trợ nhiều chip IoT từ Espressif, bao gồm ESP32, dòng ESP32-S, dòng ESP32-C, dòng ESP32-H, v.v., nên cần phải xác định mục tiêu trước khi biên dịch mã. Mục tiêu vừa là thiết bị phần cứng chạy chương trình ứng dụng vừa là mục tiêu xây dựng của hệ thống biên dịch. Tùy thuộc vào nhu cầu của bạn, bạn có thể chỉ định một hoặc nhiều mục tiêu cho dự án của mình. Dành cho người yêu cũample, thông qua lệnh idf.py set-target Esp32c3, bạn có thể đặt mục tiêu biên dịch thành ESP32-C3, trong đó các tham số mặc định và đường dẫn chuỗi công cụ biên dịch cho ESP32C3 sẽ được tải. Sau khi biên dịch, một chương trình thực thi có thể được tạo cho ESP32C3. Bạn cũng có thể chạy lại lệnh set-target để đặt mục tiêu khác và hệ thống biên dịch sẽ tự động dọn dẹp và cấu hình lại. Các thành phần
Các thành phần trong ESP-IDF là các đơn vị mã mô-đun và độc lập được quản lý trong hệ thống biên dịch. Chúng được tổ chức thành các thư mục, với tên thư mục đại diện cho tên thành phần theo mặc định. Mỗi thành phần có tập lệnh biên dịch riêng 48 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
chỉ định các tham số biên dịch và phụ thuộc của nó. Trong quá trình biên dịch, các thành phần được biên dịch thành các thư viện tĩnh riêng biệt (.a files) và cuối cùng kết hợp với các thành phần khác để tạo thành chương trình ứng dụng.
ESP-IDF cung cấp các chức năng thiết yếu, chẳng hạn như hệ điều hành, trình điều khiển ngoại vi và ngăn xếp giao thức mạng, dưới dạng các thành phần. Các thành phần này được lưu trữ trong thư mục thành phần nằm trong thư mục gốc của ESP-IDF. Nhà phát triển không cần phải sao chép các thành phần này vào thư mục thành phần của myProject. Thay vào đó, họ chỉ cần xác định mối quan hệ phụ thuộc của các thành phần này trong CMakeLists.txt của dự án file sử dụng các chỉ thị REQUIRES hoặc PRIV_REQUIRES. Hệ thống biên dịch sẽ tự động định vị và biên dịch các thành phần cần thiết.
Vì vậy, thư mục thành phần trong myProject là không cần thiết. Nó chỉ được sử dụng để bao gồm một số thành phần tùy chỉnh của dự án, có thể là thư viện của bên thứ ba hoặc mã do người dùng xác định. Ngoài ra, các thành phần có thể được lấy nguồn từ bất kỳ thư mục nào ngoài ESP-IDF hoặc dự án hiện tại, chẳng hạn như từ một dự án nguồn mở được lưu trong thư mục khác. Trong trường hợp này, bạn chỉ cần thêm đường dẫn của thành phần bằng cách đặt biến EXTRA_COMPONENT_DIRS trong CMakeLists.txt trong thư mục gốc. Thư mục này sẽ ghi đè bất kỳ thành phần ESP-IDF nào có cùng tên, đảm bảo sử dụng đúng thành phần.
Nhập chương trình chính Thư mục chính trong dự án cũng tương tự như vậy file cấu trúc như các thành phần khác (ví dụ: thành phần 1). Tuy nhiên, nó có một ý nghĩa đặc biệt vì nó là thành phần bắt buộc phải có trong mọi dự án. Thư mục chính chứa mã nguồn của dự án và điểm vào của chương trình người dùng, thường có tên là app_main. Theo mặc định, việc thực thi chương trình người dùng bắt đầu từ điểm vào này. Thành phần chính cũng khác ở chỗ nó tự động phụ thuộc vào tất cả các thành phần trong đường dẫn tìm kiếm. Do đó, không cần chỉ định rõ ràng các phần phụ thuộc bằng cách sử dụng chỉ thị REQUIRES hoặc PRIV_REQUIRES trong CMakeLists.txt file.
Cấu hình file Thư mục gốc của dự án chứa cấu hình file được gọi là sdkconfig, chứa các tham số cấu hình cho tất cả các thành phần trong dự án. Cấu hình sdk file được hệ thống biên dịch tự động tạo ra và có thể được sửa đổi và tạo lại bằng lệnh idf.py menuconfig. Các tùy chọn menuconfig chủ yếu bắt nguồn từ Kconfig.projbuild của dự án và Kconfig của các thành phần. Các nhà phát triển thành phần thường thêm các mục cấu hình trong Kconfig để làm cho thành phần đó linh hoạt và có thể cấu hình được.
Thư mục bản dựng Theo mặc định, thư mục bản dựng trong dự án lưu trữ các thông tin trung gian files và fi-
Chương 4. Thiết lập môi trường phát triển 49
các chương trình thực thi cuối cùng được tạo bởi lệnh xây dựng idf.py. Nói chung, không cần thiết phải truy cập trực tiếp vào nội dung của thư mục bản dựng. ESP-IDF cung cấp các lệnh được xác định trước để tương tác với thư mục, chẳng hạn như sử dụng lệnh flash idf.py để tự động định vị tệp nhị phân đã biên dịch file và flash nó vào địa chỉ flash đã chỉ định hoặc sử dụng lệnh idf.py fullclean để xóa toàn bộ thư mục bản dựng.
Bảng phân vùng (partitions.csv) Mỗi dự án yêu cầu một bảng phân vùng để phân chia không gian flash và chỉ định kích thước cũng như địa chỉ bắt đầu của chương trình thực thi và không gian dữ liệu người dùng. Lệnh idf.py flash hoặc chương trình nâng cấp OTA sẽ flash firmware đến địa chỉ tương ứng theo bảng này. ESP-IDF cung cấp một số bảng phân vùng mặc định trong thành phần/phân vùng_table, chẳng hạn như phân vùng_singleapp.csv và phân vùng_two_ ota.csv, có thể được chọn trong menuconfig.
Nếu bảng phân vùng mặc định của hệ thống không thể đáp ứng các yêu cầu của dự án, một phân vùng tùy chỉnh.csv có thể được thêm vào thư mục dự án và được chọn trong menuconfig.
4.3.3 Quy tắc xây dựng mặc định của hệ thống biên dịch
Quy tắc ghi đè các thành phần có cùng tên Trong quá trình tìm kiếm thành phần, hệ thống biên dịch tuân theo một thứ tự cụ thể. Đầu tiên, nó tìm kiếm các thành phần bên trong của ESP-IDF, sau đó tìm kiếm các thành phần của dự án người dùng và cuối cùng tìm kiếm các thành phần trong EXTRA_COMPONENT_DIRS. Trong trường hợp nhiều thư mục chứa các thành phần có cùng tên, thành phần được tìm thấy trong thư mục cuối cùng sẽ ghi đè mọi thành phần trước đó có cùng tên. Quy tắc này cho phép tùy chỉnh các thành phần ESP-IDF trong dự án người dùng, trong khi vẫn giữ nguyên mã ESP-IDF gốc.
Quy tắc bao gồm các thành phần chung theo mặc định Như đã đề cập trong phần 4.3.2, các thành phần cần chỉ định rõ ràng sự phụ thuộc của chúng vào các thành phần khác trong CMakeLists.txt. Tuy nhiên, theo mặc định, các thành phần phổ biến như freertos được tự động đưa vào hệ thống xây dựng, ngay cả khi mối quan hệ phụ thuộc của chúng không được xác định rõ ràng trong tập lệnh biên dịch. Các thành phần phổ biến của ESP-IDF bao gồm freertos, Newlib, heap, log, soc, Esp_rom, Esp_common, xtensa/riscv và cxx. Việc sử dụng các thành phần phổ biến này sẽ tránh được công việc lặp đi lặp lại khi viết CMakeLists.txt và làm cho nó ngắn gọn hơn.
Quy tắc ghi đè các mục cấu hình Nhà phát triển có thể thêm tham số cấu hình mặc định bằng cách thêm cấu hình mặc định file được đặt tên là sdkconfig.defaults cho dự án. Dành cho người yêu cũamptập tin, thêm CONFIG_LOG_
50 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
DEFAULT_LEVEL_NONE = y có thể cấu hình giao diện UART để không in dữ liệu nhật ký theo mặc định. Hơn nữa, nếu cần thiết lập các tham số cụ thể cho một mục tiêu cụ thể, thì cấu hình file có thể thêm tên sdkconfig.defaults.TARGET_NAME, trong đó TARGET_NAME có thể là Esp32s2, Esp32c3, v.v. Những cấu hình này files được nhập vào sdkconfig trong quá trình biên dịch, với cấu hình mặc định chung file sdkconfig.defaults được nhập trước, sau đó là cấu hình dành riêng cho mục tiêu file, chẳng hạn như sdkconfig.defaults.esp32c3. Trong trường hợp có các mục cấu hình trùng tên thì cấu hình sau file sẽ ghi đè lên cái trước.
4.3.4 Giới thiệu về Tập lệnh biên dịch
Khi phát triển dự án bằng ESP-IDF, nhà phát triển không chỉ cần viết mã nguồn mà còn cần viết CMakeLists.txt cho dự án và các thành phần. CMakeLists.txt là một văn bản file, còn được gọi là tập lệnh biên dịch, xác định một loạt đối tượng biên dịch, mục cấu hình biên dịch và các lệnh để hướng dẫn quá trình biên dịch mã nguồn. Hệ thống biên dịch của ESP-IDF v4.3.2 dựa trên CMake. Ngoài việc hỗ trợ các hàm và lệnh CMake gốc, nó còn xác định một loạt các hàm tùy chỉnh, giúp việc viết các tập lệnh biên dịch trở nên dễ dàng hơn nhiều.
Các tập lệnh biên dịch trong ESP-IDF chủ yếu bao gồm tập lệnh biên dịch dự án và tập lệnh biên dịch thành phần. CMakeLists.txt trong thư mục gốc của dự án được gọi là tập lệnh biên dịch dự án, hướng dẫn quá trình biên dịch của toàn bộ dự án. Tập lệnh biên dịch dự án cơ bản thường bao gồm ba dòng sau:
1. cmake_minimum_required(PHIÊN BẢN 3.5) 2. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 3. dự án(myProject)
Trong số đó, cmake_minimum_required (PHIÊN BẢN 3.5) phải được đặt trên dòng đầu tiên, dòng này được sử dụng để biểu thị số phiên bản CMake tối thiểu mà dự án yêu cầu. Các phiên bản CMake mới hơn thường tương thích ngược với các phiên bản cũ hơn, vì vậy hãy điều chỉnh số phiên bản cho phù hợp khi sử dụng các lệnh CMake mới hơn để đảm bảo khả năng tương thích.
include($ENV {IDF_PATH}/tools/cmake/project.cmake) nhập các mục cấu hình và lệnh được xác định trước của hệ thống biên dịch ESP-IDF, bao gồm các quy tắc xây dựng mặc định của hệ thống biên dịch được mô tả trong Phần 4.3.3. project(myProject) tự tạo dự án và chỉ định tên của nó. Tên này sẽ được sử dụng làm nhị phân đầu ra cuối cùng file tên, tức là myProject.elf và myProject.bin.
Một dự án có thể có nhiều thành phần, trong đó có thành phần chính. Thư mục cấp cao nhất của mỗi thành phần chứa CMakeLists.txt file, được gọi là tập lệnh biên dịch thành phần. Các tập lệnh biên dịch thành phần chủ yếu được sử dụng để chỉ định các phụ thuộc thành phần, tham số cấu hình, mã nguồn files và tiêu đề được bao gồm files cho
Chương 4. Thiết lập môi trường phát triển 51
biên soạn. Với chức năng tùy chỉnh idf_comComponent_register của ESP-IDF, mã yêu cầu tối thiểu cho tập lệnh biên dịch thành phần như sau:
1. idf_comComponent_register(SRCS “src1.c”
2.
INCLUDE_DIRS “bao gồm”
3.
YÊU CẦU thành phần1)
Tham số SRCS cung cấp danh sách nguồn files trong thành phần, cách nhau bằng dấu cách nếu có nhiều fileS. Tham số INCLUDE_DIRS cung cấp danh sách tiêu đề công khai file các thư mục cho thành phần, sẽ được thêm vào đường dẫn tìm kiếm bao gồm các thành phần khác phụ thuộc vào thành phần hiện tại. Tham số REQUIRES xác định các phần phụ thuộc thành phần công khai cho thành phần hiện tại. Điều cần thiết là các thành phần phải nêu rõ chúng phụ thuộc vào thành phần nào, chẳng hạn như thành phần 2 tùy thuộc vào thành phần 1. Tuy nhiên, đối với thành phần chính, vốn phụ thuộc vào tất cả các thành phần theo mặc định, có thể bỏ qua tham số REQUIRES.
Ngoài ra, các lệnh CMake gốc cũng có thể được sử dụng trong tập lệnh biên dịch. Dành cho người yêu cũample, hãy sử dụng lệnh set để đặt các biến, chẳng hạn như set(VARIABLE “VALUE”).
4.3.5 Giới thiệu về các lệnh chung
ESP-IDF sử dụng CMake (công cụ cấu hình dự án), Ninja (công cụ xây dựng dự án) và Esptool (công cụ flash) trong quá trình biên dịch mã. Mỗi công cụ đóng một vai trò khác nhau trong quá trình biên dịch, xây dựng và flash, đồng thời hỗ trợ các lệnh vận hành khác nhau. Để tạo điều kiện thuận lợi cho người dùng thao tác, ESP-IDF bổ sung idf.py giao diện người dùng thống nhất cho phép gọi các lệnh trên một cách nhanh chóng.
Trước khi sử dụng idf.py, hãy đảm bảo rằng:
· Biến môi trường IDF_PATH của ESP-IDF đã được thêm vào thiết bị đầu cuối hiện tại. · Thư mục thực thi lệnh là thư mục gốc của dự án, bao gồm
tập lệnh biên dịch dự án CMakeLists.txt.
Các lệnh phổ biến của idf.py như sau:
· idf.py –help: hiển thị danh sách các lệnh và hướng dẫn sử dụng chúng. · idf.py set-target : thiết lập trình biên dịch taidf.py fullcleanrget, chẳng hạn
thay thế bằng Esp32c3. · idf.py menuconfig: khởi chạy menuconfig, cấu hình đồ họa đầu cuối
công cụ có thể chọn hoặc sửa đổi các tùy chọn cấu hình và kết quả cấu hình được lưu trong sdkconfig file. · Bản dựng idf.py: bắt đầu biên dịch mã. Trung gian files và chương trình thực thi cuối cùng do quá trình biên dịch tạo ra sẽ được lưu trong thư mục bản dựng của dự án theo mặc định. Quá trình biên dịch diễn ra tăng dần, có nghĩa là nếu chỉ có một nguồn file được sửa đổi, chỉ có sửa đổi file sẽ được tổng hợp vào lần tới.
52 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
· idf.py clean: dọn dẹp phần trung gian files được tạo ra bởi quá trình biên dịch dự án. Toàn bộ dự án sẽ buộc phải biên dịch trong lần biên dịch tiếp theo. Lưu ý rằng cấu hình CMake và các sửa đổi cấu hình do menuconfig thực hiện sẽ không bị xóa trong quá trình dọn dẹp.
· idf.py fullclean: xóa toàn bộ thư mục bản dựng, bao gồm tất cả đầu ra cấu hình CMake fileS. Khi xây dựng lại dự án, CMake sẽ cấu hình dự án từ đầu. Xin lưu ý rằng lệnh này sẽ xóa đệ quy tất cả files trong thư mục bản dựng, vì vậy hãy thận trọng khi sử dụng nó và cấu hình dự án file sẽ không bị xóa.
· idf.py flash: flash chương trình thực thi nhị phân file được tạo ra bằng cách xây dựng tới mục tiêu ESP32-C3. Các tùy chọn -p và -b được sử dụng để đặt tên thiết bị của cổng nối tiếp và tốc độ truyền tương ứng để nhấp nháy. Nếu hai tùy chọn này không được chỉ định, cổng nối tiếp sẽ tự động được phát hiện và tốc độ truyền mặc định sẽ được sử dụng.
· Màn hình idf.py: hiển thị đầu ra cổng nối tiếp của ESP32-C3 mục tiêu. Tùy chọn -p có thể được sử dụng để chỉ định tên thiết bị của cổng nối tiếp phía máy chủ. Trong quá trình in cổng nối tiếp, nhấn tổ hợp phím Ctrl+] để thoát khỏi màn hình.
Các lệnh trên cũng có thể được kết hợp khi cần thiết. Dành cho người yêu cũample, lệnh idf.py build flash Monitor sẽ thực hiện việc biên dịch mã, flash và mở trình giám sát cổng nối tiếp theo trình tự.
Bạn có thể truy cập https://bookc3.espressif.com/build-system để biết thêm về hệ thống biên dịch ESP-IDF.
4.4 Thực hành: Biên dịch Example Chương trình “Blink”
4.4.1 Ví dụamptập tin phân tích
Phần này sẽ lấy chương trình Blink làm ví dụample để phân tích file Cấu trúc và quy tắc mã hóa của một dự án thực tế một cách chi tiết. Chương trình Blink thực hiện hiệu ứng nhấp nháy đèn LED và dự án nằm trong thư mục examples/get-started/blink, chứa nguồn file, cấu hình files và một số tập lệnh biên dịch.
Dự án đèn thông minh được giới thiệu trong cuốn sách này dựa trênampchương trình. Các chức năng sẽ được bổ sung dần dần trong các chương sau để hoàn thiện nó.
Mã nguồn Để thể hiện toàn bộ quá trình phát triển, chương trình Blink đã được sao chép vào Esp32c3-iot-projects/device firmware/1 click.
Cấu trúc thư mục của dự án Blink files được thể hiện trong Hình 4.15.
Dự án Blink chỉ chứa một thư mục chính, là một thành phần đặc biệt
Chương 4. Thiết lập môi trường phát triển 53
Hình 4.15. File cấu trúc thư mục của dự án chớp mắt
phải được bao gồm như mô tả trong phần 4.3.2. Thư mục chính chủ yếu được sử dụng để lưu trữ việc triển khai hàm app_main(), đây là điểm vào của chương trình người dùng. Dự án Blink không bao gồm thư mục thành phần, bởi vì thư mục nàyample chỉ cần sử dụng các thành phần đi kèm với ESP-IDF và không yêu cầu các thành phần bổ sung. CMakeLists.txt có trong dự án chớp mắt được sử dụng để hướng dẫn quá trình biên dịch, trong khi Kconfig.projbuild được sử dụng để thêm các mục cấu hình cho ví dụ nàyampchương trình trong menuconfig. Không cần thiết khác files sẽ không ảnh hưởng đến việc biên dịch mã nên chúng sẽ không được thảo luận ở đây. Giới thiệu chi tiết về dự án chớp mắt files như sau.
1. /*blink.c bao gồm tiêu đề sau fileS*/
2. #include
// Tiêu đề thư viện C tiêu chuẩn file
3. #include “freertos/freeRTOS.h” // Tiêu đề chính FreeRTOS file
4. #include “freertos/task.h”
// Tiêu đề tác vụ FreeRTOS file
5. #include “sdkconfig.h”
// Tiêu đề cấu hình file được tạo bởi kconfig
6. #include “driver/gpio.h”
// Tiêu đề trình điều khiển GPIO file
Nguồn gốc file Blink.c chứa một loạt tiêu đề files tương ứng với khai báo hàm-
ý kiến. ESP-IDF thường tuân theo thứ tự bao gồm tiêu đề thư viện tiêu chuẩn files, FreeR-
Tiêu đề TOS files, tiêu đề trình điều khiển files, tiêu đề thành phần khác files và tiêu đề dự án files.
Thứ tự trong tiêu đề files được đưa vào có thể ảnh hưởng đến kết quả biên dịch cuối cùng, vì vậy hãy thử
tuân theo các quy tắc mặc định. Cần lưu ý rằng sdkconfig.h được tạo tự động
bởi kconfig và chỉ có thể được cấu hình thông qua lệnh idf.py menuconfig.
Sửa đổi trực tiếp tiêu đề này file sẽ bị ghi đè.
1. /*Bạn có thể chọn GPIO tương ứng với đèn LED trong idf.py menuconfig, và kết quả sửa đổi của menuconfig là giá trị CONFIG_BLINK
_GPIO sẽ được thay đổi. Bạn cũng có thể trực tiếp sửa đổi định nghĩa macro
tại đây và thay đổi CONFIG_BLINK_GPIO thành giá trị cố định.*/ 2. #define BLINK_GPIO CONFIG_BLINK_GPIO
3. void app_main(void)
4. {
5.
/*Định cấu hình IO làm chức năng mặc định GPIO, bật chế độ kéo lên và
6.
tắt chế độ đầu vào và đầu ra*/
7.
gpio_reset_pin(BLINK_GPIO);
54 Cuộc phiêu lưu không dây ESP32-C3: Hướng dẫn toàn diện về IoT
8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. }
/*Đặt GPIO về chế độ đầu ra*/ gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); trong khi(1) {
/*In nhật ký*/ printf(“Tắt đèn LEDn”); /*Tắt đèn LED (đầu ra ở mức thấp)*/ gpio_set_level(BLINK_GPIO, 0); /*Độ trễ (1000 ms)*/ vTaskDelay(1000 / portTICK_PERIOD_MS); printf(“Bật đèn LEDn”); /*Bật đèn LED (đầu ra ở mức cao)*/ gpio_set_level(BLINK_GPIO, 1); vTaskDelay(1000 / portTICK_PERIOD_MS); }
Hàm app_main() trong Blink cũampchương trình đóng vai trò là điểm vào cho các chương trình của người dùng. Đây là một hàm đơn giản không có tham số và không có giá trị trả về. Hàm này được gọi sau khi hệ thống hoàn tất quá trình khởi tạo, bao gồm các tác vụ như khởi tạo cổng nối tiếp nhật ký, định cấu hình lõi đơn/kép và định cấu hình cơ quan giám sát.
Hàm app_main() chạy trong ngữ cảnh của một tác vụ có tên main. Kích thước ngăn xếp và mức độ ưu tiên của tác vụ này có thể được điều chỉnh trong menuconfig Componentconfig Common ESP liên quan.
Đối với các tác vụ đơn giản như nhấp nháy đèn LED, tất cả mã cần thiết có thể được triển khai trực tiếp trong hàm app_main(). Điều này thường liên quan đến việc khởi tạo GPIO tương ứng với đèn LED và sử dụng vòng lặp while(1) để bật và tắt đèn LED. Ngoài ra, bạn có thể sử dụng API FreeRTOS để tạo tác vụ mới xử lý đèn LED nhấp nháy. Sau khi tác vụ mới được tạo thành công, bạn có thể thoát khỏi hàm app_main().
Nội dung của main/CMakeLists.txt file, hướng dẫn quá trình biên dịch cho thành phần chính như sau:
1. idf_comComponent_register(SRCS “nháy mắt.c” INCLUDE_DIRS “.” )
Trong số đó, main/CMakeLists.txt chỉ gọi một hàm hệ thống biên dịch, đó là idf_comComponent_register. Tương tự như CMakeLists.txt cho hầu hết các thành phần khác, Blink.c được thêm vào SRCS và nguồn files được thêm vào SRCS sẽ được biên dịch. Đồng thời, “.”, đại diện cho đường dẫn chứa CMakeLists.txt, nên được thêm vào INCLUDE_DIRS làm thư mục tìm kiếm cho tiêu đề fileS. Nội dung của CMakeLists.txt như sau:
1. #Chỉ định v3.5 là phiên bản CMake cũ nhất được dự án hiện tại hỗ trợ 2. #Các phiên bản thấp hơn v3.5 phải được nâng cấp trước khi tiếp tục biên dịch 3. cmake_minimum_required(VERSION 3.5) 4. #Include cấu hình CMake mặc định của ESP -Hệ thống biên dịch -IDF
Chương 4. Thiết lập môi trường phát triển 55
5. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 6. #Tạo một dự án có tên “blink” 7. project(myProject)
Trong số đó, CMakeLists.txt trong thư mục gốc chủ yếu bao gồm $ENV{IDF_ PATH}/tools/cmake/project.cmake, đây là cấu hình CMake chính file được cung cấp bởi ESP-IDF. Nó được sử dụng để lừa đảo
Tài liệu / Tài nguyên
![]() |
Cuộc phiêu lưu không dây của Espressif Systems ESP32-C3 [tập tin pdf] Hướng dẫn sử dụng Cuộc phiêu lưu không dây ESP32-C3, ESP32-C3, Cuộc phiêu lưu không dây, Cuộc phiêu lưu |