สารบัญ:
- ขั้นตอนที่ 1: สิ่งที่คุณต้องการ
- ขั้นตอนที่ 2: สร้างพื้นที่เก็บข้อมูลเพื่อเก็บเฟิร์มแวร์ไบนารี
- ขั้นตอนที่ 3: สร้างไบนารี
- ขั้นตอนที่ 4: สร้างกระแสเซิร์ฟเวอร์
- ขั้นตอนที่ 5: เพิ่มลอจิกเซิร์ฟเวอร์
- ขั้นตอนที่ 6: เพิ่มโค้ดใน Sketch เพื่อขออัปเดต
- ขั้นตอนที่ 7: สุดท้าย เริ่มการอัปเดต
วีดีโอ: ตั้งค่าเซิร์ฟเวอร์อัปเดตอัตโนมัติ ESP8266: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:08
หลายคนกำลังใช้ ESP8266 ในรูปแบบต่างๆ (ESP-01S, Wemos D1, NodeMCU, Sonoff เป็นต้น) สำหรับระบบอัตโนมัติภายในบ้าน หากคุณเขียนโค้ดของคุณเอง (อย่างที่ฉันทำ) การอัปเดตแต่ละรายการแยกกันแม้ผ่าน OTA (ผ่านทางอากาศ) จะกลายเป็นเรื่องน่าเบื่อเล็กน้อย
ตัวอย่างเช่น ระบบของฉันมี 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV และ NodeMCU ที่ใช้รหัสฐานร่วมกัน ดังนั้นอุปกรณ์ทั้งหมด 33 เครื่องที่จะอัปเดตเมื่อฉันสร้างรหัสอย่างง่าย เปลี่ยน.
แต่มีวิธีที่ง่ายกว่านั้นคือ "อัปเดตเซิร์ฟเวอร์" แกนหลักของ Arduino IDE + ESP8266 ที่ยอดเยี่ยมมีไลบรารีสำหรับทำงานส่วนใหญ่ (ESP8266httpUpdate) แต่คุณจำเป็นต้องรู้วิธีตั้งค่าเซิร์ฟเวอร์ของคุณเองเพื่อให้ทำงานได้
คำแนะนำนี้แสดงให้คุณเห็นถึงวิธีการใช้เซิร์ฟเวอร์ NODE-RED แต่ตรรกะเดียวกันกับเทคโนโลยีเซิร์ฟเวอร์ที่คุณเลือกเช่น Apache + PHP เป็นต้น
ขั้นตอนที่ 1: สิ่งที่คุณต้องการ
- Arduino IDE
- แกน ESP8266
- บอร์ดพัฒนา ESP8266 ใดๆ ที่มีแฟลชแรม 1M ขึ้นไป
- เว็บเซิร์ฟเวอร์ (แม้แต่ราสเบอร์รี่ Pi ที่อ่อนน้อมถ่อมตนก็ทำได้ - เป็นสิ่งที่ฉันใช้)
- (ทางเลือก) เครื่องมือ mkspiffs หากคุณต้องการอัปเดตอิมเมจระบบไฟล์ SPIFFS โดยอัตโนมัติ
ขั้นตอนที่ 2: สร้างพื้นที่เก็บข้อมูลเพื่อเก็บเฟิร์มแวร์ไบนารี
บนเซิร์ฟเวอร์ของฉัน ฉันมีโฟลเดอร์ชื่อ /home/pi/trucFirmware ซึ่งเก็บเฟิร์มแวร์ของอุปกรณ์ต่างๆ และอิมเมจ SPIFFS
ฉันรักษาไบนารีแยกต่างหากสำหรับฮาร์ดแวร์แต่ละประเภท (จากไฟล์ต้นฉบับไฟล์เดียวที่มี #defines สองสามตัว) และเมื่อรุ่นใหม่พร้อม ฉันใช้คำสั่งเมนู "sketch/Export compiled Binary" ของ Arduino IDE สำหรับอุปกรณ์เป้าหมายแต่ละเครื่อง แม้ว่าจะมีฮาร์ดแวร์ที่แตกต่างกัน 5 ประเภท แต่ก็มีไบนารี SPIFFS สองแบบเท่านั้น: เวอร์ชัน 1M และ 4M - สร้างด้วยเครื่องมือ mkspiffs เนื่องจากอุปกรณ์ทั้งหมดมีแฟลช 1M หรือ 4M
ขั้นตอนที่ 3: สร้างไบนารี
ใช้ตัวเลือกเมนู Arduino IDE แบบร่าง/ส่งออกไบนารีที่คอมไพล์แล้ว สร้างเฟิร์มแวร์ที่จะอัปโหลดไปยังอุปกรณ์เมื่อร้องขอจากเซิร์ฟเวอร์การอัพเดท
หากคุณต้องการไบนารี SPIFFS คุณจะต้องติดตั้งเครื่องมือ mkspiffs
เมื่อคุณมีแล้ว การสร้างไบนารี SPIFFS นั้นง่ายมาก ฉันมีแบตช์ไฟล์แบบบรรทัดเดียวสำหรับเวอร์ชัน 1M ซึ่งใช้หมายเลขเวอร์ชันเป็นพารามิเตอร์ (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
และอีกรุ่นสำหรับรุ่น 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin
จากนั้นฉันก็คัดลอกไบนารีที่คอมไพล์ทั้งหมดและไฟล์ SPIFFS.binary ไปยังที่เก็บ
ขั้นตอนที่ 4: สร้างกระแสเซิร์ฟเวอร์
ฉันใช้ NODE-RED แต่ตรรกะง่ายๆ จะเหมือนกันในทุกเทคโนโลยี/ภาษาของเซิร์ฟเวอร์
ก) กำหนด URL ที่จะรับฟังคำขอ ESP8266httpUpdate raspberryPi serevr ของฉันอยู่ที่ 192.168.1.4 และฟังบนพอร์ต 1880 สำหรับ /update โดยต่อท้ายประเภทฮาร์ดแวร์ ดังนั้นหากฉันจะขอไบนารีสำหรับ Wemos D1 Mini URL จะกลายเป็น:
192.168.1.4:1880/update/d1_mini
b) สร้างรหัสเพื่อจัดการกับตรรกะต่อไปนี้:
ESP8266: "สวัสดี ฉันกำลังใช้เฟิร์มแวร์เวอร์ชัน a.b.c คุณมีเวอร์ชันที่ใหม่กว่าหรือไม่" เซิร์ฟเวอร์: "ขอดูหน่อย…อ่า ใช่ ฉันมี a.b.d - มาแล้ว…"
หากมีเวอร์ชันที่ใหม่กว่าเซิร์ฟเวอร์เพียงแค่ส่งเป็นโหลดของข้อมูลไบนารีในการตอบกลับ http คลาส ESP8266httpUpdate ทำส่วนที่ยุ่งยากในการคัดลอกไบนารีลงในหน่วยความจำ โดยเปลี่ยนที่อยู่สำหรับบูตเฟิร์มแวร์เป็นโค้ดใหม่ (หากได้รับการร้องขอ) การรีบูตอุปกรณ์เพื่อเรียกใช้โค้ดใหม่
หากไม่มีเวอร์ชันที่สูงกว่า ระบบจะตอบกลับด้วยข้อผิดพลาด http 304 ซึ่งระบุว่า "ฉันไม่มีอะไรจะให้คุณ" และโค้ดของคุณยังคงทำงานตามปกติ
ขั้นตอนที่ 5: เพิ่มลอจิกเซิร์ฟเวอร์
โหนดแรกในโฟลว์ "ฟัง" สำหรับคำขอ http เพื่อ url https://192.168.1.4:1880/update โดยผนวกประเภทอุปกรณ์ต่อท้าย มันส่งผ่านไปยังโหนดฟังก์ชัน "สร้างเส้นทางการค้นหา" ซึ่งมีโค้ดจาวาสคริปต์ต่อไปนี้:
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"; } อื่น ๆ { var sz=h['x-esp8266-chip-size']; msg.payload="/home/pi/trucFirmware/spiffs_*_"+(sz/1048576)+"M.bin"; } ส่งคืน msg;
นี่เป็นเพียงการตั้งค่าพาธที่เหมาะสมด้วยไวด์การ์ดสำหรับฟังก์ชัน sys ที่ตามมา ซึ่งเพียงแค่รัน
ls - r
ผลลัพธ์จะถูกป้อนไปยังโหนดฟังก์ชัน "เปรียบเทียบเวอร์ชัน":
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", ""); } อื่น { f=f.replace("/home/pi/trucFirmware/spiffs_", ""); f=f.replace(/_\dM\.bin/, ""); }
if(msg.version < f){
node.warn("จำเป็นต้องอัพเกรด");
node.warn("จะส่งคืน "+msg.filename); กลับผงชูรส; } node.warn("ไม่มีการอัปเกรด"); msg.statusCode=304; msg.payload=;
กลับผงชูรส;
จากนั้นโหนดสวิตช์จะตรวจสอบให้แน่ใจว่าข้อความ "ไม่จำเป็นต้องอัปเดต" 304 ถูกส่งหรือไบนารีใหม่จริงจะถูกส่งคืนและส่งกลับไปยังอุปกรณ์
ขั้นตอนที่ 6: เพิ่มโค้ดใน Sketch เพื่อขออัปเดต
สเก็ตช์ต้องมีโค้ดต่อไปนี้เพื่อให้อัปเดตโดยอัตโนมัติในครั้งต่อไปที่คุณเพิ่มหมายเลขเวอร์ชัน:
#รวม
#กำหนด TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE ถูกตั้งค่าก่อนหน้านี้ขึ้นอยู่กับเวลาคอมไพล์ต่างๆ // ซึ่งสุดท้ายจะกำหนดประเภท hw เช่น #define THIS_DEVICE "d1_mini" const char * updateUrl="https://192.168.1.4:1880/update/"THIS_DEVICE; // นี่คือเซิร์ฟเวอร์ Raspberry Pi ของฉัน 1880 เป็นพอร์ต NODE-RED เริ่มต้น // /update คือ url ที่ฉันเลือกให้เซิร์ฟเวอร์ "ฟัง" ตามด้วยประเภทอุปกรณ์ … bool actualUpdate(bool sketch=false) { ข้อความข้อความสตริง; t_httpUpdate_return ย้อนกลับ; ESPhttpUpdate.rebootOnUpdate (เท็จ); ถ้า(ร่าง){ ret=ESPhttpUpdate.update(updateUrl, TRUC_VERSION); // **************** นี่คือบรรทัดที่ "ทำธุรกิจ" } อื่น ๆ { ret=ESPhttpUpdate.updateSpiffs(updateUrl, SPIFFS_VERSION); } if(ret!=HTTP_UPDATE_NO_UPDATES){ if(ret==HTTP_UPDATE_OK){
Serial.printf ("อัปเดตสำเร็จแล้ว");
คืนค่าจริง; } อื่นๆ { if(ret==HTTP_UPDATE_FAILED){
Serial.printf("การอัพเกรดล้มเหลว");
} } } คืนค่าเท็จ }
ขั้นตอนที่ 7: สุดท้าย เริ่มการอัปเดต
เมื่อบูตหรืออาจตอบสนองต่อข้อความ MQTT (เหมือนที่ฉันทำ) ให้เรียกใช้รหัสต่อไปนี้:
if(_actualUpdate(true)) ESP.restart();
// หรือสำหรับ SPIFFS…
if(_actualUpdate(false)) ESP.restart();
อุปกรณ์จะอัปเดตตัวเองและรีบูตโดยใช้รหัสล่าสุดจากเซิร์ฟเวอร์ สำหรับฉันมันง่ายกว่าการอัปเดตอุปกรณ์ 33 เครื่องด้วยตนเองมาก!
ข้อมูลที่เป็นประโยชน์อีกมากมายเกี่ยวกับ Home Automation, IOT และการเขียนโปรแกรม ESP8266 สามารถพบได้ใน My Blog
แนะนำ:
วิธีการแฟลชหรือโปรแกรม ESP8266 AT Firmware โดยใช้ ESP8266 Flasher และ Programmer, IOT Wifi Module: 6 ขั้นตอน
วิธีการแฟลชหรือโปรแกรม ESP8266 AT Firmware โดยใช้ ESP8266 Flasher และ Programmer, IOT Wifi Module: คำอธิบาย:โมดูลนี้เป็นอะแดปเตอร์ USB / โปรแกรมเมอร์สำหรับโมดูล ESP8266 ประเภท ESP-01 หรือ ESP-01S ติดตั้งสะดวกด้วยเฮดเดอร์ตัวเมีย 2.54 มม. ขนาด 2x4P เพื่อเสียบ ESP01 นอกจากนี้ยังแยกหมุดทั้งหมดของ ESP-01 ออกผ่านช่องต่อตัวผู้ขนาด 2.54 มม. 2x4P 2.54 มม.
ESP8266 - การชลประทานในสวนด้วยตัวจับเวลาและรีโมทคอนโทรลผ่านอินเทอร์เน็ต / ESP8266: 7 ขั้นตอน (พร้อมรูปภาพ)
ESP8266 - การชลประทานในสวนด้วยตัวจับเวลาและรีโมทคอนโทรลผ่านอินเทอร์เน็ต / ESP8266: ESP8266 - การชลประทานควบคุมด้วยรีโมทและกำหนดเวลาสำหรับสวนผัก สวนดอกไม้ และสนามหญ้า ใช้วงจร ESP-8266 และวาล์วไฮดรอลิก/ไฟฟ้าสำหรับการจ่ายน้ำ ข้อดี: เข้าถึงด่วนราคาประหยัด (~US$ 30,00) คำสั่ง ov
ESP8266 - เซ็นเซอร์ประตูและหน้าต่าง - ESP8266 การช่วยเหลือผู้สูงอายุ (ขี้ลืม): 5 ขั้นตอน
ESP8266 - เซ็นเซอร์ประตูและหน้าต่าง - ESP8266 ความช่วยเหลือผู้สูงอายุ (หลงลืม): ESP8266 - เซ็นเซอร์ประตู / หน้าต่างโดยใช้ GPIO 0 และ GPIO 2 (IOT) สามารถดูได้บนเว็บหรือบนเครือข่ายท้องถิ่นด้วยเบราว์เซอร์ มองเห็นได้ผ่านทาง "HelpIdoso Vxapp" แอปพลิเคชัน. ใช้แหล่งจ่ายไฟ 110/220 VAC สำหรับ 5Vdc, 1 รีเลย์ / แรงดันไฟฟ้า
หาเวลาจากอินเทอร์เน็ตโดยใช้ ESP8266 - โครงการนาฬิกา NTP ด้วย ESP8266 Nodemcu: 5 ขั้นตอน
หาเวลาจากอินเทอร์เน็ตโดยใช้ ESP8266 | โครงการนาฬิกา NTP ด้วย ESP8266 Nodemcu: ในบทช่วยสอนนี้ เราจะมาดูวิธีหาเวลาโดยใช้ ESP8266/nodemcu กับ Arduino IDE การหาเวลามีประโยชน์อย่างยิ่งในการบันทึกข้อมูลเพื่อประทับเวลาการอ่านของคุณ หากโปรเจ็กต์ ESP8266 ของคุณมีการเข้าถึงอินเทอร์เน็ต คุณสามารถใช้เวลาโดยใช้ Network T
ESP8266 NODEMCU BLYNK IOT บทช่วยสอน - Esp8266 IOT โดยใช้ Blunk และ Arduino IDE - การควบคุมไฟ LED ผ่านอินเทอร์เน็ต: 6 ขั้นตอน
ESP8266 NODEMCU BLYNK IOT บทช่วยสอน | Esp8266 IOT โดยใช้ Blunk และ Arduino IDE | การควบคุม LEDs ผ่านอินเทอร์เน็ต: สวัสดีทุกคนในคำแนะนำนี้ เราจะเรียนรู้วิธีใช้ IOT กับ ESP8266 หรือ Nodemcu ของเรา เราจะใช้แอป blynk สำหรับสิ่งนั้น ดังนั้นเราจะใช้ esp8266/nodemcu ของเราเพื่อควบคุมไฟ LED ผ่านอินเทอร์เน็ต ดังนั้นแอป Blynk จะเชื่อมต่อกับ esp8266 หรือ Nodemcu ของเรา