Mục lục:
- Bước 1: Những gì bạn cần
- Bước 2: Tạo một kho lưu trữ để chứa phần mềm cơ sở nhị phân
- Bước 3: Tạo Binaries
- Bước 4: Tạo luồng máy chủ
- Bước 5: Thêm Logic máy chủ
- Bước 6: Thêm mã vào Sketch để yêu cầu cập nhật
- Bước 7: Cuối cùng, bắt đầu cập nhật
Video: Thiết lập máy chủ cập nhật tự động ESP8266: 7 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:36
Nhiều người hiện đang sử dụng ESP8266 dưới nhiều hình thức của nó (ESP-01S, Wemos D1, NodeMCU, Sonoff, v.v.) cho các hệ thống tự động hóa gia đình. Nếu bạn viết mã của riêng mình (như tôi làm), việc cập nhật từng mã này riêng biệt ngay cả qua OTA (qua mạng) sẽ trở nên hơi tẻ nhạt.
Ví dụ: hệ thống của tôi có 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV và một NodeMCU chia sẻ cơ sở mã chung, vì vậy có tất cả 33 thiết bị cần cập nhật khi tôi tạo một mã đơn giản thay đổi.
Nhưng có một cách dễ dàng hơn: Một "máy chủ cập nhật". Lõi Arduino IDE + ESP8266 tuyệt vời có một thư viện để thực hiện hầu hết công việc (ESP8266httpUpdate), nhưng bạn cần biết cách thiết lập máy chủ của riêng mình để làm cho nó hoạt động.
Có thể hướng dẫn này chỉ cho bạn cách sử dụng máy chủ NODE-RED, nhưng logic tương tự áp dụng cho bất kỳ công nghệ máy chủ nào bạn chọn, ví dụ: Apache + PHP, v.v.
Bước 1: Những gì bạn cần
- Arduino IDE
- Lõi ESP8266
- Bất kỳ bảng nhà phát triển ESP8266 nào có RAM flash 1M trở lên
- Một Máy chủ Web (ngay cả một chiếc Raspberry Pi khiêm tốn cũng sẽ làm được - Đó là thứ tôi sử dụng)
- (tùy chọn) công cụ mkspiffs nếu bạn muốn tự động cập nhật hình ảnh hệ thống tệp SPIFFS
Bước 2: Tạo một kho lưu trữ để chứa phần mềm cơ sở nhị phân
Trên máy chủ của tôi, tôi có một thư mục có tên / home / pi / trucFirmware chứa các phần mềm thiết bị khác nhau và hình ảnh SPIFFS
Tôi duy trì một tệp nhị phân riêng biệt cho từng loại phần cứng (từ một tệp nguồn duy nhất với một vài #defines) và khi bản phát hành mới sẵn sàng, tôi sử dụng lệnh menu Arduino IDE "sketch / Export Binary" đã biên dịch cho từng thiết bị đích. mặc dù có 5 loại phần cứng khác nhau, chỉ có hai mã nhị phân SPIFFS: phiên bản 1M và phiên bản 4M - được xây dựng bằng công cụ mkspiffs - vì tất cả các thiết bị đều có flash 1M hoặc 4M.
Bước 3: Tạo Binaries
Sử dụng tùy chọn trình đơn Arduino IDE sketch / Export Compiled Binary, tạo phần sụn sẽ được tải lên thiết bị khi nó yêu cầu từ máy chủ cập nhật.
Nếu bạn cần tệp nhị phân SPIFFS, bạn sẽ cần cài đặt công cụ mkspiffs.
Khi bạn đã có nó, việc xây dựng hệ nhị phân SPIFFS rất đơn giản. Tôi có tệp lô một dòng cho phiên bản 1M lấy số phiên bản làm tham số (% 1)
mkspiffs -c data / spiffs_% 1_1M.bin
và một cái khác cho phiên bản 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c dữ liệu / spiffs_% 1_4M.bin
Sau đó, tôi sao chép tất cả các tệp nhị phân đã biên dịch và tệp.binary SPIFFS vào kho lưu trữ
Bước 4: Tạo luồng máy chủ
Tôi đang sử dụng NODE-RED, nhưng logic đơn giản sẽ giống nhau trên bất kỳ công nghệ / ngôn ngữ máy chủ nào.
a) Xác định một url sẽ lắng nghe yêu cầu ESP8266httpUpdate. Serevr raspberryPi của tôi ở trên 192.168.1.4 và nghe trên cổng 1880 cho / cập nhật với loại phần cứng được thêm vào. Vì vậy, nếu tôi định yêu cầu một tệp nhị phân cho Wemos D1 Mini, url kết thúc là:
192.168.1.4:1880/update/d1_mini
b) Tạo mã để xử lý logic sau:
ESP8266: "Xin chào, tôi đang chạy phiên bản phần sụn a.b.c, bạn có phiên bản mới hơn không?"
Nếu có phiên bản mới hơn, máy chủ chỉ gửi nó dưới dạng tải dữ liệu nhị phân trong phản hồi http. Lớp ESP8266httpUpdate thực hiện phần khó khăn là sao chép nhị phân vào bộ nhớ, thay đổi địa chỉ khởi động phần sụn thành mã mới hơn là (nếu được yêu cầu) khởi động lại thiết bị để chạy mã mới.
Mặt khác, nếu không có phiên bản cao hơn, nó sẽ trả lời bằng lỗi http 304 có nội dung hiệu quả là: "Tôi không có gì cho bạn" và mã của bạn tiếp tục chạy như bình thường.
Bước 5: Thêm Logic máy chủ
Nút đầu tiên trong luồng "lắng nghe" yêu cầu http tới url https://192.168.1.4:1880/update với loại thiết bị được thêm vào. Nó chuyển nó đến nút chức năng "Xây dựng đường dẫn tìm kiếm" có mã javascript sau:
msg.type = msg.req.params.type; var h = msg.req.headers; msg.version = h ["x-esp8266-version"];
msg.mode = h ["x-esp8266-mode"];
if (msg.mode == "sketch") {msg.payload = "/ home / pi / trucFirmware / *. ino." + msg.type + ". bin"; } else {var sz = h ['x-esp8266-chip-size']; msg.payload = "/ home / pi / trucFirmware / spiffs _ * _" + (sz / 1048576) + "M.bin"; } trả về tin nhắn;
Điều này chỉ thiết lập đường dẫn thích hợp với ký tự đại diện cho hàm sys theo sau, chỉ cần chạy
ls - r
Đầu ra sau đó được đưa đến nút chức năng "So sánh các phiên bản":
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
if (msg.mode == "sketch") {
f = f.replace ("/ home / pi / trucFirmware / truc_", ""); f = f.replace (". ino." + msg.type + ". bin", ""); } else {f = f.replace ("/ home / pi / trucFirmware / spiffs_", ""); f = f.replace (/ _ / dM \.bin /, ""); }
if (msg.version <f) {
node.warn ("yêu cầu nâng cấp");
node.warn ("sẽ trả về" + msg.filename); trả về tin nhắn; } node.warn ("không nâng cấp"); msg.statusCode = 304; msg.payload = ;
trả về tin nhắn;
Sau đó, nút chuyển đổi đảm bảo rằng thông báo 304 "không cần cập nhật" được gửi hoặc tệp nhị phân mới thực sự được trả lại và gửi trở lại thiết bị.
Bước 6: Thêm mã vào Sketch để yêu cầu cập nhật
Bản phác thảo cần có mã sau được bao gồm trong đó để nó sẽ tự động cập nhật vào lần tiếp theo bạn tăng số phiên bản:
#bao gồm
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// NÀY_DEVICE được đặt sớm hơn tùy thuộc vào các định nghĩa thời gian biên dịch khác nhau // mà cuối cùng xác định kiểu hw, ví dụ: #define NÀY_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" NÀY_DEVICE; // đây là máy chủ raspberry Pi của tôi, 1880 là cổng NODE-RED mặc định // / update là url tôi đã chọn để máy chủ "lắng nghe", theo sau là loại thiết bị… bool realUpdate (bool sketch = false) {Chuỗi thư; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (sai); if (sketch) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Đây là dòng "thực hiện công việc"} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {
Serial.printf ("CẬP NHẬT THÀNH CÔNG");
trả về true; } else {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("Nâng cấp Không thành công");
}}} trả về false; }
Bước 7: Cuối cùng, bắt đầu cập nhật
Tại thời điểm khởi động, hoặc có thể để phản hồi thông báo MQTT (như tôi làm), hãy chạy mã sau:
if (_actualUpdate (true)) ESP.restart ();
// hoặc cho SPIFFS…
if (_actualUpdate (false)) ESP.restart ();
Thiết bị sẽ tự cập nhật và khởi động lại chạy mã mới nhất từ máy chủ. Đối với tôi, nó đơn giản hơn rất nhiều so với việc cập nhật 33 thiết bị theo cách thủ công!
Bạn có thể tìm thấy nhiều thông tin hữu ích hơn về Tự động hóa gia đình, IOT và lập trình ESP8266 trên Blog của tôi
Đề xuất:
Thiết lập cho nhà cung cấp GPS Bluetooth bên ngoài cho thiết bị Android: 8 bước
Thiết lập cho nhà cung cấp GPS Bluetooth bên ngoài cho các thiết bị Android: Tài liệu hướng dẫn này sẽ giải thích cách tạo GPS hỗ trợ Bluetooth bên ngoài của riêng bạn cho điện thoại của bạn, bất cứ thứ gì chỉ khoảng 10 đô la. giao tiếp Blutooth Mô-đun năng lượng thấp
Thiết lập chữ ký trên ứng dụng Outlook dành cho thiết bị di động: 5 bước
Thiết lập chữ ký trên ứng dụng Outlook dành cho thiết bị di động: Nếu bạn làm việc trong giới kinh doanh, nhiều khả năng bạn đã rất quen thuộc với phiên bản Microsoft Outlook dành cho máy tính để bàn. Outlook là một công cụ tuyệt vời cho phép bạn gửi email, lưu trữ tệp, lên lịch cuộc họp và tùy chỉnh theo bất kỳ cách nào bạn khôn ngoan
Bộ cấp cây tự động WiFi có hồ chứa - Thiết lập trồng trọt trong nhà / ngoài trời - Tưới cây tự động với giám sát từ xa: 21 bước
Bộ nạp cây trồng tự động WiFi có hồ chứa - Thiết lập trồng trọt trong nhà / ngoài trời - Cây nước tự động với giám sát từ xa: Trong hướng dẫn này, chúng tôi sẽ trình bày cách thiết lập hệ thống nạp cây trồng trong nhà / ngoài trời tùy chỉnh tự động tưới cây và có thể được giám sát từ xa bằng nền tảng Adosia
Kết nối SSH / SCP an toàn từ Raspberry Pi đến Máy chủ đám mây để sao lưu và cập nhật: 3 bước
Kết nối SSH / SCP an toàn từ Raspberry Pi đến Máy chủ đám mây để sao lưu và cập nhật: Mục đích của tài liệu hướng dẫn này là chỉ cho bạn cách kết nối tự động và an toàn từ Raspberry Pi của bạn với máy chủ đám mây từ xa (và ngược lại) để thực hiện sao lưu và cập nhật, v.v. Để thực hiện việc này, bạn sử dụng các cặp khóa SSH khiến
Cách thực hiện: Thiết lập tường lửa máy ảo IPCop để bảo vệ máy chủ Windows của bạn (Miễn phí!): 5 bước
Cách thực hiện: Thiết lập Tường lửa Máy ảo IPCop để Bảo vệ Máy chủ Windows của bạn (Miễn phí!): Tóm tắt: Mục tiêu của dự án này là sử dụng IpCop (Bản phân phối Linux miễn phí) trong Máy ảo để bảo vệ hệ thống máy chủ Windows trên bất kỳ mạng nào. IpCop là một Tường lửa dựa trên Linux rất mạnh mẽ với các chức năng nâng cao như: VPN, NAT, Phát hiện xâm nhập