STM32 ETHERNET #6.1 HTTP WEBSERVER SSI

Started by tha, March 16, 2022, 10:47:26 AM

Previous topic - Next topic

tha

https://controllerstech.com/stm32-ethernet-6-1-http-webserver-ssi/

STM32 ETHERNET #6.1 HTTP WEBSERVER SSI

นี่เป็นบทช่วยสอนอีกบทหนึ่งใน the STM32 ETHERNET series, และวันนี้เราจะมาดูวิธีใช้ the SSI (Server Side Include) เพื่อส่ง the data จาก the controller ไปยัง the HTTP webserver. บทช่วยสอนนี้มีความต่อเนื่องมาจากบทที่แล้ว ดังนั้นโปรดตรวจสอบ the HTTP webserver Simple ก่อนดำเนินการต่อ เนื่องจากฉันจะทำการเปลี่ยนแปลงเพียงเล็กน้อยในโค้ดก่อนหน้าแทนที่จะสร้าง project ใหม่ที่นี่.

พิจารณาว่าคุณมีโปรเจ็กต์ก่อนหน้านี้ที่ทำงานได้แล้ว ฉันจะดำเนินการด้วย SSI ต่อไป

SSI (Server Side Include) สามารถถูกใช้เพื่อส่ง the data จาก the controller ไปยัง the webserver. ตัวอย่างเช่น, เราสามารถส่ง sensor's data ใดๆและรีเฟร็ช the page เป็นระยะเวลาที่เท่ากันเพื่อแสดง the updated data. นี่คือสิ่งที่เราจะเห็นใน tutorial ของวันนี้.

มาเริ่มกันด้วย the cube MX เปลี่ยนที่เราจำเป็นต้องทำ.

tha

                                                                      CubeMX configuration



ใน the setup ข้างบน, ผมแค่เปิดการใช้งาน(enable) the SSI ใน the HTTPD setup. ส่วนที่เหลือของ the configuration เป็นอย่างเดียวกับ the previous tutorial.

ตอนนี้เราต้องทำตามขั้นตอนเดียวกันกับที่กล่าวใน the previous tutorial, แค่มีการแก้ไขเล็กน้อย.

tha

                                                                 The additional Setup

หลังจากการสร้าง the project, ถ้าคุณ build มันเป็นครั้งแรก, คุณจะได้รับข้อผิดพลาด ดังนั้น ส่วนนี้จะครอบคลุมถึงการตั้งค่าเพิ่มเติมที่เราต้องทำเพื่อลบข้อผิดพลาดเหล่านั้น

ก่อนอื่นให้ไปที่ LWIP->Target->lwipopts.h และเปลี่ยน the #define HTTPD_USE_CUSTOM_FSDATA 0



tha

ตอนนี้ เราต้องรวม (include) ไฟล์ "FsData.c" พร้อมกับทรัพยากรที่เราจะใช้สำหรับเว็บเซิร์ฟเวอร์

เราได้กล่าวถึงครั้งสุดท้ายนี้แล้วและภายในโฟลเดอร์  the Project\Middlewares\Third_Party\LwIP\src\apps\http, คุณมี  the files ที่แสดงข้างล่างแล้ว.



___________________________________________________________________________________________________________________________________

ก่อนที่เราจะดำเนินการต่อและสร้างไฟล์ fsdata.c เราต้องสร้างหน้าเว็บสำหรับแสดงค่าต่างๆ ก่อน หน้าเว็บนี้ต้องอยู่ในรูปแบบ .shtml



ที่นี่ฉันได้สร้าง 3 คอลัมน์และค่าสำหรับแต่ละคอลัมน์จะได้รับการอัปเดตจาก the controller.

<!--#x-->เป็นแท็กที่ใช้ในที่นี้ และเราจะเขียนโปรแกรมเพื่ออัปเดตค่าตาม(ขึ้นตรงกับ)แท็กนี้ เช่นเดียวกับแท็กอีก 2 แท็ก (y และ z)

หลังจากเซฟไฟล์ในรูปแบบ .shtml เราจำเป็นต้องก๊อปปี้มันไปยังโฟลเดอร์ fs



ตอนนี้ได้เวลาสร้าง fsdata.c แล้ว และในการทำเช่นนั้น เราจะดับเบิลคลิกที่ makeFSdata เหมือนกับที่เราทำในบทช่วยสอนก่อนหน้านี้

นี่คือการตั้งค่า หากคุณ build โค้ดตอนนี้ ข้อผิดพลาดทั้งหมดจะหายไป

ตอนนี้เราจะเขียน the code สำหรับการเริ่มต้นของ the webserver.

tha

                                                                      Some Insight into the CODE

Initialization Function



     •  ที่นี่ผมเริ่มต้น the httpd ก่อน, และจากนั้นตั้งค่า the SSI handler.

     •  The TAGS (x, y, z) ถูกใช้ the webpage. 3 คือจำนวนของ tags.

tha

SSI Handler



SSI Handler รับ 3 parameters:

     •  iIndex จัดให้มีดัชนีของ the TAG ภายใน the array ที่ส่งผ่านไปยัง the http_set_ssi_handler

     •  pcInsert เป็นตัวชี้ไปยัง the data, ที่จะถูกส่งไปยัง the TAG

     •  iInsertLen บรรจุขนาดของ the buffer ที่ชี้ถึงโดย pcInsert

ทุกครั้งที่ the TAG ถูกพบใน the webpage, the ssi_handler function จะถูกเรียก. เราจะเพิ่มค่าของตัวแปร indx (ที่เราสร้างขึ้น) และส่งค่านี้ไปยัง the TAG.

คุณสามารถส่ง the data ของบาง sensor, หรือตัวอักษรใดๆแทนที่ค่านี้.

tha

The Main Function



ใน the main function, เราเพียงแค่เรียก the server init function, ซึ่งจะเริ่มต้นสิ่งที่เหลืออยู่.

The while loop เป็นดังปกติ.

tha

                                                                                                Result

The SSI Page จะมีลักษณะดังที่แสดงด้านล่าง.



ค่าแต่ละค่าห่างกัน 1 และหน้าจะรีเฟรชทุก 1 วินาที

คุณสามารถตรวจสอบการทำงานโดยละเอียดในวิดีโอ