Агуулгын хүснэгт:

ESP8266 автомат шинэчлэлтийн серверийг тохируулах: 7 алхам
ESP8266 автомат шинэчлэлтийн серверийг тохируулах: 7 алхам

Видео: ESP8266 автомат шинэчлэлтийн серверийг тохируулах: 7 алхам

Видео: ESP8266 автомат шинэчлэлтийн серверийг тохируулах: 7 алхам
Видео: Apa itu? Stepper Motor - Blynk Nodemcu Etching Bucket (Subtittled) 2024, Долдугаар сарын
Anonim
ESP8266 автомат шинэчлэлтийн серверийг тохируулах
ESP8266 автомат шинэчлэлтийн серверийг тохируулах

Олон хүмүүс одоо 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: Танд хэрэгтэй зүйл

  1. Arduino IDE
  2. ESP8266 цөм
  3. 1M ба түүнээс дээш флаш RAM бүхий аливаа ESP8266 дэвтэр хавтан
  4. Вэб сервер (даруухан бөөрөлзгөнө Pi ч гэсэн хийх болно - энэ бол миний ашигладаг зүйл)
  5. Хэрэв та SPIFFS файлын системийн зургийг автоматаар шинэчлэхийг хүсч байвал mkspiffs хэрэгсэл болно

Алхам 2: Хоёртын програм хангамжийг хадгалах репозитор үүсгэх

Хоёртын програм хангамжийг хадгалах репозитор үүсгэх
Хоёртын програм хангамжийг хадгалах репозитор үүсгэх

Миний сервер дээр/home/pi/trucFirmware нэртэй хавтас байдаг бөгөөд энэ нь төхөөрөмжийн төрөл бүрийн програм хангамж, SPIFFS зургийг агуулдаг.

Би техник хангамжийн төрөл тус бүрт хоёртын файлыг тусад нь хадгалдаг (цөөн тооны #тодорхойлолттой ганц эх сурвалжаас), шинэ хувилбар бэлэн болсон үед би зорилтот төхөөрөмж бүрийн хувьд Arduino IDE "эмхэтгэсэн хоёртын" цэсийн командыг ашигладаг. 5 төрлийн тоног төхөөрөмж байдаг боловч бүх төхөөрөмжүүд 1M эсвэл 4M флэштэй байдаг тул SPIFFS хоёртын хоёр хувилбар байдаг: 1M ба 4M хувилбар - mkspiffs хэрэгслээр бүтээгдсэн.

Алхам 3: Хоёртын файл үүсгэх

Arduino IDE цэсийн ноорог/Экспортын эмхэтгэсэн хоёртын хувилбарыг ашиглан шинэчлэлтийн серверээс төхөөрөмжид байршуулах програмыг үүсгэнэ үү.

Хэрэв танд SPIFFS хоёртын файл хэрэгтэй бол mkspiffs хэрэгслийг суулгах хэрэгтэй болно.

Үүнийг авсны дараа SPIFFS хоёртын файлыг бий болгох нь энгийн зүйл юм. Надад хувилбарын дугаарыг параметр болгон авдаг 1M хувилбарт зориулсан нэг мөрийн багц файл байна (%1)

mkspiffs -c өгөгдөл/ spiffs_%1_1M.bin

4M хувилбарын хувьд өөр:

mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin

Дараа нь би бүх эмхэтгэсэн хоёртын файлууд болон SPIFFS.binary файлуудыг репозитор руу хуулж авдаг

Алхам 4: Серверийн урсгалыг бий болгох

Серверийн урсгалыг бий болгох
Серверийн урсгалыг бий болгох

Би NODE-RED-ийг ашиглаж байгаа боловч ямар ч серверийн технологи / хэл дээр энгийн логик ижил байх болно.

a) ESP8266httpUpdate хүсэлтийг сонсох url -ийг тодорхойлно уу. Миний raspberryPi serevr нь 192.168.1.4 дээр байгаа бөгөөд тоног төхөөрөмжийн төрлийг хавсаргасан шинэчлэлтийг 1880 порт дээр сонсдог. Хэрэв би 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: Серверийн логикийг нэмнэ үү

Урсгал дахь эхний зангилаа нь төхөөрөмжийн төрлийг хавсаргасан https://192.168.1.4:1880/update хаягийн http хүсэлтийг "сонсдог". Энэ нь дараах JavaScript кодтой "Хайлтын замыг бүтээх" функцын зангилаа руу дамжуулдаг.

msg.type = msg.req.params.type; var h = msg.req.headers; msg.version = h ["x-esp8266-хувилбар"];

msg.mode = h ["x-esp8266-горим"];

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 функцид зориулсан wildcard бүхий зохих замыг тохируулдаг

ls - r

Дараа нь гаралтыг "Хувилбарыг харьцуулах" функцын зангилаанд өгнө:

var f = msg.payload.split ("\ n") [0]; msg.filename = f;

хэрэв (msg.mode == "ноорог") {

f = f.replace ("/home/pi/trucFirmware/truc_", ""); f = f.replace (". ino."+msg.type+". bin", ""); } өөр {f = f.replace ("/home/pi/trucFirmware/spiffs_", ""); f = f. орлуулах (/_ / dM \.bin/, ""); }

if (msg.version <f) {

node.warn ("шинэчлэх шаардлагатай");

node.warn ("буцах болно"+msg. файлын нэр); msg буцах; } node.warn ("шинэчлэлт байхгүй"); msg.statusCode = 304; msg.payload = ;

msg буцах;

Шилжүүлэгч зангилаа нь 304 "шинэчлэлт шаардлагагүй" гэсэн мессежийг илгээх эсвэл жинхэнэ шинэ хоёртын файлыг буцааж төхөөрөмж рүү буцааж илгээдэг.

Алхам 6: Шинэчлэлт хүсэхийн тулд ноорог дээр код нэмнэ үү

Ноорог нь дараах кодыг агуулсан байх ёстой бөгөөд ингэснээр дараагийн удаа хувилбарын дугаарыг нэмэгдүүлэхэд автоматаар шинэчлэгдэх болно.

#оруулах

TRUC_VERSION "0_4_99" -ийг #тодорхойлох

#0 "5_0" SPIFFS_VERSION -ийг тодорхойлох

// THIS_DEVICE нь хөрвүүлэх хугацааны янз бүрийн тодорхойлолтоос хамааран эрт тохируулагдсан байдаг // энэ нь эцэстээ hw төрлийг тодорхойлдог. #Define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // энэ бол миний бөөрөлзгөнө Pi сервер, 1880 нь анхдагч NODE-RED порт // /шинэчлэлт бол миний сонгосон сервер бөгөөд "сонсох", дараа нь төхөөрөмжийн төрөл юм … bool actualUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; 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 төхөөрөмжийг гараар шинэчлэхээс хамаагүй хялбар юм!

Гэрийн автоматжуулалт, IOT болон ESP8266 програмчлалын талаар илүү хэрэгтэй мэдээллийг Миний блог дээрээс олж болно

Зөвлөмж болгож буй: